systemprompt_models/agui/
payloads.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use systemprompt_identifiers::{AiToolCallId, ContextId, MessageId, TaskId};
4
5use super::JsonPatchOperation;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
8#[serde(rename_all = "lowercase")]
9pub enum MessageRole {
10 User,
11 Assistant,
12 System,
13 Tool,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct RunStartedPayload {
19 pub thread_id: ContextId,
20 pub run_id: TaskId,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub input: Option<Value>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct RunFinishedPayload {
28 pub thread_id: ContextId,
29 pub run_id: TaskId,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub result: Option<Value>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35#[serde(rename_all = "camelCase")]
36pub struct RunErrorPayload {
37 pub message: String,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub code: Option<String>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(rename_all = "camelCase")]
44pub struct StepStartedPayload {
45 pub step_name: String,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(rename_all = "camelCase")]
50pub struct StepFinishedPayload {
51 pub step_name: String,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
55#[serde(rename_all = "camelCase")]
56pub struct TextMessageStartPayload {
57 pub message_id: MessageId,
58 pub role: MessageRole,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
62#[serde(rename_all = "camelCase")]
63pub struct TextMessageContentPayload {
64 pub message_id: MessageId,
65 pub delta: String,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
69#[serde(rename_all = "camelCase")]
70pub struct TextMessageEndPayload {
71 pub message_id: MessageId,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
75#[serde(rename_all = "camelCase")]
76pub struct ToolCallStartPayload {
77 pub tool_call_id: AiToolCallId,
78 pub tool_call_name: String,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub parent_message_id: Option<MessageId>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84#[serde(rename_all = "camelCase")]
85pub struct ToolCallArgsPayload {
86 pub tool_call_id: AiToolCallId,
87 pub delta: String,
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize)]
91#[serde(rename_all = "camelCase")]
92pub struct ToolCallEndPayload {
93 pub tool_call_id: AiToolCallId,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
97#[serde(rename_all = "camelCase")]
98pub struct ToolCallResultPayload {
99 pub message_id: MessageId,
100 pub tool_call_id: AiToolCallId,
101 pub content: Value,
102 pub role: MessageRole,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
106#[serde(rename_all = "camelCase")]
107pub struct StateSnapshotPayload {
108 pub snapshot: Value,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112#[serde(rename_all = "camelCase")]
113pub struct StateDeltaPayload {
114 pub delta: Vec<JsonPatchOperation>,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
118#[serde(rename_all = "camelCase")]
119pub struct MessagesSnapshotPayload {
120 pub messages: Vec<Value>,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
124#[serde(rename_all = "camelCase")]
125pub struct ArtifactCustomPayload {
126 pub artifact: crate::a2a::Artifact,
127 pub task_id: TaskId,
128 pub context_id: ContextId,
129}
130
131#[derive(Debug, Clone, Serialize, Deserialize)]
132#[serde(rename_all = "camelCase")]
133pub struct ExecutionStepCustomPayload {
134 pub step: crate::execution::ExecutionStep,
135 pub context_id: ContextId,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
139#[serde(rename_all = "camelCase")]
140pub struct SkillLoadedCustomPayload {
141 pub skill_id: systemprompt_identifiers::SkillId,
142 pub skill_name: String,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub description: Option<String>,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub task_id: Option<TaskId>,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize)]
150#[serde(rename_all = "camelCase")]
151pub struct GenericCustomPayload {
152 pub name: String,
153 pub value: Value,
154}
155
156#[derive(Debug, Clone, Serialize, Deserialize)]
157#[serde(tag = "name", content = "value", rename_all = "snake_case")]
158pub enum CustomPayload {
159 Artifact(Box<ArtifactCustomPayload>),
160 ExecutionStep(Box<ExecutionStepCustomPayload>),
161 SkillLoaded(SkillLoadedCustomPayload),
162 #[serde(untagged)]
163 Generic(GenericCustomPayload),
164}