langsmith_rust/models/
messages.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct ToolCall {
6    pub id: String,
7    pub name: String,
8    pub args: Value,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct AIMessage {
13    pub content: String,
14    #[serde(rename = "tool_calls", skip_serializing_if = "Vec::is_empty")]
15    pub tool_calls: Vec<ToolCall>,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct ToolMessage {
20    #[serde(rename = "tool_call_id")]
21    pub tool_call_id: String,
22    pub content: String,
23    pub name: String,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct HumanMessage {
28    pub content: String,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct SystemMessage {
33    pub content: String,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37#[serde(tag = "role", rename_all = "lowercase")]
38pub enum Message {
39    #[serde(rename = "ai")]
40    AI(AIMessage),
41    #[serde(rename = "tool")]
42    Tool(ToolMessage),
43    #[serde(rename = "human")]
44    Human(HumanMessage),
45    #[serde(rename = "system")]
46    System(SystemMessage),
47}
48