Skip to main content

objectiveai_sdk/agent/completions/message/
assistant_message_log.rs

1//! `AssistantMessageLog` — on-disk shape of [`super::AssistantMessage`].
2//! `content` becomes `Option<RichContentLog>` (extracted-to-files when
3//! present); `refusal`, `reasoning`, and each `tool_call` are also
4//! extracted to their own files and referenced — only `name` stays
5//! inline. Mirrors the response-side
6//! [`crate::agent::completions::response::streaming::AssistantResponseChunkLog`].
7
8use schemars::JsonSchema;
9use serde::{Deserialize, Serialize};
10
11use super::RichContentLog;
12use crate::logs::LogReference;
13
14#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
15#[schemars(rename = "agent.completions.message.AssistantMessageLog")]
16pub struct AssistantMessageLog {
17    #[serde(skip_serializing_if = "Option::is_none")]
18    #[schemars(extend("omitempty" = true))]
19    pub content: Option<RichContentLog>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    #[schemars(extend("omitempty" = true))]
22    pub name: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    #[schemars(extend("omitempty" = true))]
25    pub refusal: Option<LogReference>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    #[schemars(extend("omitempty" = true))]
28    pub tool_calls: Option<Vec<LogReference>>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    #[schemars(extend("omitempty" = true))]
31    pub reasoning: Option<LogReference>,
32}