anthropic_types/
messages.rs1use crate::models::ModelInfo;
2use crate::tool_choice::ToolChoice;
3use mcp_protocol::tool::{Tool, ToolContent};
4use serde::{Deserialize, Serialize};
5
6#[derive(Serialize, Deserialize, Debug, Clone)]
8#[serde(tag = "type")]
9pub enum MessageContent {
10 #[serde(rename = "text")]
11 Text { text: String },
12
13 #[serde(rename = "tool_use")]
14 ToolUse {
15 id: String,
16 name: String,
17 input: serde_json::Value,
18 },
19
20 #[serde(rename = "tool_result")]
21 ToolResult {
22 tool_use_id: String,
23 content: Vec<ToolContent>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 is_error: Option<bool>,
26 },
27}
28
29#[derive(Serialize, Deserialize, Debug, Clone)]
31pub struct Message {
32 pub role: String,
34
35 pub content: Vec<MessageContent>,
37}
38
39impl Message {
40 pub fn new_structured(role: impl Into<String>, content: Vec<MessageContent>) -> Self {
42 Self {
43 role: role.into(),
44 content,
45 }
46 }
47}
48
49#[derive(Serialize, Deserialize, Debug, Clone)]
51pub struct CompletionRequest {
52 pub model: String,
54
55 pub messages: Vec<Message>,
57
58 pub max_tokens: u32,
60
61 #[serde(skip_serializing_if = "Option::is_none")]
63 pub temperature: Option<f32>,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub system: Option<String>,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub tools: Option<Vec<Tool>>,
72
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub tool_choice: Option<ToolChoice>,
76
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub disable_parallel_tool_use: Option<bool>,
80}
81
82#[derive(Serialize, Deserialize, Debug, Clone)]
84pub struct Usage {
85 pub input_tokens: u32,
86
87 pub output_tokens: u32,
88
89 pub cache_read_input_tokens: Option<u32>,
90
91 pub cache_creation_input_tokens: Option<u32>,
92}
93
94#[derive(Serialize, Deserialize, Debug, Clone)]
96pub struct CompletionResponse {
97 pub content: Vec<MessageContent>,
99
100 pub id: String,
102
103 pub model: String,
105
106 pub role: String,
108
109 pub stop_reason: StopReason,
112
113 pub stop_sequence: Option<String>,
115
116 #[serde(rename = "type")]
118 pub message_type: String,
119
120 pub usage: Usage,
122}
123
124#[derive(Serialize, Deserialize, Debug, Clone)]
126pub enum StopReason {
127 #[serde(rename = "end_turn")]
129 EndTurn,
130
131 #[serde(rename = "max_tokens")]
133 MaxTokens,
134
135 #[serde(rename = "stop_sequence")]
137 StopSequence,
138
139 #[serde(rename = "tool_use")]
141 ToolUse,
142}
143
144#[derive(Serialize, Deserialize, Debug, Clone)]
146pub enum AnthropicRequest {
147 ListModels,
148
149 GenerateCompletion { request: CompletionRequest },
150}
151
152#[derive(Serialize, Deserialize, Debug, Clone)]
154pub enum ResponseStatus {
155 #[serde(rename = "Success")]
157 Success,
158
159 #[serde(rename = "Error")]
161 Error,
162}
163
164#[derive(Serialize, Deserialize, Debug, Clone)]
166pub enum AnthropicResponse {
167 ListModels { models: Vec<ModelInfo> },
169
170 Completion { completion: CompletionResponse },
172
173 Error { error: String },
175}