Skip to main content

systemprompt_models/agui/
payloads.rs

1use 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}