fix: show only generated outputs in workspace
This commit is contained in:
@@ -856,6 +856,7 @@ async fn archive_output(
|
||||
model: Some("comfy-native".to_string()),
|
||||
remote_url: None,
|
||||
metadata: json!({
|
||||
"workspaceAsset": { "role": "output" },
|
||||
"digitalHuman": {
|
||||
"promptId": prompt_id,
|
||||
"filename": filename,
|
||||
@@ -1254,7 +1255,10 @@ async fn upload_asset(
|
||||
prompt: None,
|
||||
model: None,
|
||||
remote_url: None,
|
||||
metadata: json!({ "digitalHumanUpload": { "purpose": purpose, "fileName": file_name } }),
|
||||
metadata: json!({
|
||||
"workspaceAsset": { "role": "input" },
|
||||
"digitalHumanUpload": { "purpose": purpose, "fileName": file_name },
|
||||
}),
|
||||
};
|
||||
let asset = workspace::record_bytes_asset(&state, input, &bytes, &mime_type).await?;
|
||||
let file_url = format!(
|
||||
|
||||
@@ -1153,7 +1153,10 @@ async fn archive_comfy_output(
|
||||
prompt: Some(prompt.chars().take(1000).collect()),
|
||||
model: Some("comfy-api".to_string()),
|
||||
remote_url: None,
|
||||
metadata: json!({ "moneyPrinter": { "backend": "comfy", "promptId": prompt_id, "raw": item } }),
|
||||
metadata: json!({
|
||||
"workspaceAsset": { "role": "output" },
|
||||
"moneyPrinter": { "backend": "comfy", "promptId": prompt_id, "raw": item },
|
||||
}),
|
||||
};
|
||||
match workspace::record_bytes_asset(state, input, &bytes, &content_type).await {
|
||||
Ok(asset) => Some(json!({
|
||||
@@ -1306,8 +1309,16 @@ async fn archive_video(
|
||||
prompt: &str,
|
||||
model: &str,
|
||||
video_url: &str,
|
||||
metadata: Value,
|
||||
mut metadata: Value,
|
||||
) -> Option<Value> {
|
||||
if let Some(object) = metadata.as_object_mut() {
|
||||
object.insert("workspaceAsset".to_string(), json!({ "role": "output" }));
|
||||
} else {
|
||||
metadata = json!({
|
||||
"workspaceAsset": { "role": "output" },
|
||||
"metadata": metadata,
|
||||
});
|
||||
}
|
||||
let input = WorkspaceAssetInput {
|
||||
user_id: auth.user_id,
|
||||
source: "money-printer".to_string(),
|
||||
|
||||
@@ -4078,6 +4078,7 @@ async fn archive_native_workflow_asset(
|
||||
model: None,
|
||||
remote_url: None,
|
||||
metadata: json!({
|
||||
"workspaceAsset": { "role": "output" },
|
||||
"workflowUi": {
|
||||
"filename": filename,
|
||||
"type": file_type,
|
||||
|
||||
+24
-14
@@ -173,6 +173,20 @@ fn row_to_json(row: sqlx::sqlite::SqliteRow) -> Value {
|
||||
})
|
||||
}
|
||||
|
||||
const WORKSPACE_OUTPUT_FILTER_SQL: &str = r#"
|
||||
AND status = 'completed'
|
||||
AND (
|
||||
json_extract(metadata, '$.workspaceAsset.role') = 'output'
|
||||
OR json_extract(metadata, '$.workflowUi.type') = 'output'
|
||||
OR (
|
||||
source IN ('picture-agent', 'workflow-studio')
|
||||
AND json_type(metadata, '$.responseItem') IS NOT NULL
|
||||
)
|
||||
OR json_type(metadata, '$.moneyPrinter') IS NOT NULL
|
||||
OR json_type(metadata, '$.digitalHuman') IS NOT NULL
|
||||
)
|
||||
"#;
|
||||
|
||||
async fn list_assets(
|
||||
state: AppState,
|
||||
caller: WorkspaceCaller,
|
||||
@@ -185,15 +199,12 @@ async fn list_assets(
|
||||
};
|
||||
let is_admin = matches!(caller, WorkspaceCaller::Admin);
|
||||
|
||||
let items = sqlx::query(
|
||||
let list_sql = format!(
|
||||
"SELECT *
|
||||
FROM workspace_assets
|
||||
WHERE deleted_at IS NULL
|
||||
AND ((? = 1 AND (? IS NULL OR user_id = ?)) OR (? = 0 AND user_id = ?))
|
||||
AND (
|
||||
source != 'workflow-ui'
|
||||
OR json_extract(metadata, '$.workflowUi.type') = 'output'
|
||||
)
|
||||
{WORKSPACE_OUTPUT_FILTER_SQL}
|
||||
AND (? IS NULL OR source = ?)
|
||||
AND (? IS NULL OR kind = ?)
|
||||
AND (
|
||||
@@ -204,8 +215,9 @@ async fn list_assets(
|
||||
OR source LIKE ?
|
||||
)
|
||||
ORDER BY datetime(created_at) DESC, id DESC
|
||||
LIMIT ? OFFSET ?",
|
||||
)
|
||||
LIMIT ? OFFSET ?"
|
||||
);
|
||||
let items = sqlx::query(&list_sql)
|
||||
.bind(is_admin)
|
||||
.bind(scoped_user_id)
|
||||
.bind(scoped_user_id)
|
||||
@@ -226,15 +238,12 @@ async fn list_assets(
|
||||
.fetch_all(&*state.db)
|
||||
.await?;
|
||||
|
||||
let total: i64 = sqlx::query_scalar(
|
||||
let count_sql = format!(
|
||||
"SELECT COUNT(*)
|
||||
FROM workspace_assets
|
||||
WHERE deleted_at IS NULL
|
||||
AND ((? = 1 AND (? IS NULL OR user_id = ?)) OR (? = 0 AND user_id = ?))
|
||||
AND (
|
||||
source != 'workflow-ui'
|
||||
OR json_extract(metadata, '$.workflowUi.type') = 'output'
|
||||
)
|
||||
{WORKSPACE_OUTPUT_FILTER_SQL}
|
||||
AND (? IS NULL OR source = ?)
|
||||
AND (? IS NULL OR kind = ?)
|
||||
AND (
|
||||
@@ -243,8 +252,9 @@ async fn list_assets(
|
||||
OR prompt LIKE ?
|
||||
OR model LIKE ?
|
||||
OR source LIKE ?
|
||||
)",
|
||||
)
|
||||
)"
|
||||
);
|
||||
let total: i64 = sqlx::query_scalar(&count_sql)
|
||||
.bind(is_admin)
|
||||
.bind(scoped_user_id)
|
||||
.bind(scoped_user_id)
|
||||
|
||||
@@ -338,7 +338,10 @@ pub async fn record_image_assets_from_response(
|
||||
prompt: prompt.clone(),
|
||||
model: model.clone(),
|
||||
remote_url: Some(url.trim().to_string()),
|
||||
metadata: json!({ "responseItem": item }),
|
||||
metadata: json!({
|
||||
"workspaceAsset": { "role": "output" },
|
||||
"responseItem": item,
|
||||
}),
|
||||
};
|
||||
match record_remote_asset(state, input).await {
|
||||
Ok(asset) => stored_assets.push(asset),
|
||||
@@ -357,7 +360,10 @@ pub async fn record_image_assets_from_response(
|
||||
prompt: prompt.clone(),
|
||||
model: model.clone(),
|
||||
remote_url: None,
|
||||
metadata: json!({ "responseItem": item }),
|
||||
metadata: json!({
|
||||
"workspaceAsset": { "role": "output" },
|
||||
"responseItem": item,
|
||||
}),
|
||||
};
|
||||
match record_base64_asset(state, input, b64).await {
|
||||
Ok(asset) => stored_assets.push(asset),
|
||||
|
||||
Reference in New Issue
Block a user