agent_runtime_http_api/
claude.rs1use std::collections::BTreeMap;
4
5use runtime_types::{ConversationId, RuntimeInstanceId, WorkspaceId};
6use serde::{Deserialize, Serialize};
7use serde_json::Value;
8
9#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
10pub struct ClaudeMessageRequest {
11 pub model: String,
12 pub max_tokens: u32,
13 pub messages: Vec<ClaudeInputMessage>,
14 #[serde(default)]
15 pub system: Option<Value>,
16 #[serde(default)]
17 pub stream: bool,
18 #[serde(default)]
19 pub metadata: BTreeMap<String, Value>,
20 #[serde(default)]
21 pub stop_sequences: Vec<String>,
22 #[serde(default)]
23 pub tools: Vec<Value>,
24 #[serde(default)]
25 pub tool_choice: Option<Value>,
26 #[serde(default)]
27 pub temperature: Option<f64>,
28 #[serde(default)]
29 pub top_p: Option<f64>,
30 #[serde(default)]
31 pub top_k: Option<u32>,
32 #[serde(default)]
33 pub thinking: Option<Value>,
34 #[serde(default)]
35 pub output_config: Option<Value>,
36 #[serde(default)]
37 pub service_tier: Option<String>,
38 #[serde(default)]
39 pub agent: Option<ClaudeAgentOptions>,
40 #[serde(default, flatten)]
43 pub extra: BTreeMap<String, Value>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
47#[serde(deny_unknown_fields)]
48pub struct ClaudeInputMessage {
49 pub role: String,
50 pub content: Value,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
54#[serde(rename_all = "camelCase", deny_unknown_fields)]
55pub struct ClaudeAgentOptions {
56 #[serde(default)]
57 pub runtime_id: Option<RuntimeInstanceId>,
58 #[serde(default)]
59 pub workspace_id: Option<WorkspaceId>,
60 #[serde(default)]
61 pub conversation_id: Option<ConversationId>,
62 #[serde(default)]
63 pub downstream_model: Option<String>,
64 #[serde(default)]
65 pub deadline_seconds: Option<u64>,
66 #[serde(default)]
67 pub max_model_turns: Option<usize>,
68 #[serde(default)]
69 pub max_tool_calls: Option<usize>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
73pub struct ClaudeMessage {
74 pub id: String,
75 #[serde(rename = "type")]
76 pub message_type: String,
77 pub role: String,
78 pub content: Vec<ClaudeContentBlock>,
79 pub model: String,
80 pub stop_reason: Option<String>,
81 pub stop_sequence: Option<String>,
82 pub usage: ClaudeUsage,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
86#[serde(tag = "type", rename_all = "snake_case")]
87pub enum ClaudeContentBlock {
88 Text { text: String },
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
92pub struct ClaudeUsage {
93 pub input_tokens: u64,
94 pub output_tokens: u64,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
98pub struct ClaudeErrorEnvelope {
99 #[serde(rename = "type")]
100 pub envelope_type: String,
101 pub error: ClaudeError,
102 pub request_id: Option<String>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
106pub struct ClaudeError {
107 #[serde(rename = "type")]
108 pub error_type: String,
109 pub message: String,
110}