1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use uuid::Uuid;
6
7use crate::task::{Task, TaskStatus};
8use crate::types::{Artifact, Message};
9
10#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
12pub struct TaskStatusUpdateEvent {
13 #[serde(rename = "taskId")]
15 pub task_id: String,
16 #[serde(rename = "contextId")]
18 pub context_id: String,
19 pub status: TaskStatus,
21 #[serde(rename = "traceId", skip_serializing_if = "Option::is_none")]
24 pub trace_id: Option<Uuid>,
25 #[serde(skip_serializing_if = "Option::is_none")]
28 pub sequence: Option<u64>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub metadata: Option<HashMap<String, serde_json::Value>>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
36pub struct TaskArtifactUpdateEvent {
37 #[serde(rename = "taskId")]
39 pub task_id: String,
40 #[serde(rename = "contextId")]
42 pub context_id: String,
43 pub artifact: Artifact,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub index: Option<u32>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub append: Option<bool>,
51 #[serde(rename = "lastChunk", skip_serializing_if = "Option::is_none")]
53 pub last_chunk: Option<bool>,
54 #[serde(rename = "traceId", skip_serializing_if = "Option::is_none")]
56 pub trace_id: Option<Uuid>,
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub sequence: Option<u64>,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub metadata: Option<HashMap<String, serde_json::Value>>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
67pub struct StreamResponse {
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub task: Option<Task>,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub message: Option<Message>,
74 #[serde(skip_serializing_if = "Option::is_none", rename = "statusUpdate")]
76 pub status_update: Option<TaskStatusUpdateEvent>,
77 #[serde(skip_serializing_if = "Option::is_none", rename = "artifactUpdate")]
79 pub artifact_update: Option<TaskArtifactUpdateEvent>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
84pub struct SendMessageResponse {
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub task: Option<Task>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub message: Option<Message>,
91}