add status field for persistence result in chat doc
This commit is contained in:
@@ -23,6 +23,20 @@ pub enum EditorAgentAttachmentSource {
|
||||
LibraryAsset,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum EditorAgentToolCallStatus {
|
||||
#[serde(alias = "pending_confirmation", alias = "executing")]
|
||||
NotCompleted,
|
||||
Completed,
|
||||
Failed,
|
||||
Cancelled,
|
||||
}
|
||||
|
||||
fn default_editor_agent_tool_call_status() -> EditorAgentToolCallStatus {
|
||||
EditorAgentToolCallStatus::NotCompleted
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct EditorAgentAttachmentRef {
|
||||
@@ -140,13 +154,13 @@ pub struct EditorAgentToolCallImageRef {
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct EditorAgentToolCall {
|
||||
pub tool_name: String,
|
||||
#[serde(default = "default_editor_agent_tool_call_status")]
|
||||
pub status: EditorAgentToolCallStatus,
|
||||
pub args: serde_json::Value,
|
||||
pub display_args: EditorAgentToolCallDisplayArgs,
|
||||
#[serde(default)]
|
||||
pub external_job_id: Option<String>,
|
||||
#[serde(default)]
|
||||
pub cancelled_at: Option<String>,
|
||||
#[serde(default)]
|
||||
pub images: Vec<EditorAgentGeneratedImage>,
|
||||
#[serde(default)]
|
||||
pub videos: Vec<EditorAgentGeneratedVideo>,
|
||||
@@ -267,6 +281,7 @@ mod tests {
|
||||
|
||||
let tool_call = EditorAgentToolCall {
|
||||
tool_name: "generate-video".to_string(),
|
||||
status: EditorAgentToolCallStatus::Completed,
|
||||
args: json!({}),
|
||||
display_args: EditorAgentToolCallDisplayArgs {
|
||||
string_args: vec![EditorAgentToolCallStringArg {
|
||||
@@ -292,7 +307,6 @@ mod tests {
|
||||
},
|
||||
},
|
||||
external_job_id: Some("task-editor-agent-1".to_string()),
|
||||
cancelled_at: None,
|
||||
images: Vec::new(),
|
||||
videos: vec![EditorAgentGeneratedVideo {
|
||||
resource_id: Some("resource-video-1".to_string()),
|
||||
@@ -314,7 +328,7 @@ mod tests {
|
||||
let payload = serde_json::to_value(tool_call).expect("tool call should serialize");
|
||||
assert_eq!(payload["videos"][0]["videoSrc"], "/generated-video.mp4");
|
||||
assert_eq!(payload["externalJobId"], "task-editor-agent-1");
|
||||
assert!(payload.get("status").is_none());
|
||||
assert_eq!(payload["status"], "completed");
|
||||
assert_eq!(payload["audios"][0]["audioSrc"], "/generated-audio.mp3");
|
||||
assert_eq!(
|
||||
payload["displayArgs"]["stringArgs"][0]["value"],
|
||||
@@ -332,7 +346,7 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn legacy_tool_call_status_is_ignored_on_read() {
|
||||
fn legacy_tool_call_status_maps_to_not_completed_on_read() {
|
||||
let tool_call = serde_json::from_value::<EditorAgentToolCall>(json!({
|
||||
"toolName": "generate-image",
|
||||
"status": "executing",
|
||||
@@ -347,6 +361,6 @@ mod tests {
|
||||
.expect("legacy status should not break persisted OSS documents");
|
||||
|
||||
let payload = serde_json::to_value(tool_call).expect("tool call should serialize");
|
||||
assert!(payload.get("status").is_none());
|
||||
assert_eq!(payload["status"], "not_completed");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user