systemprompt_api/services/gateway/
models.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct AnthropicGatewayRequest {
5 pub model: String,
6 pub messages: Vec<AnthropicGatewayMessage>,
7 pub max_tokens: u32,
8 #[serde(skip_serializing_if = "Option::is_none")]
9 pub system: Option<serde_json::Value>,
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub temperature: Option<f32>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub top_p: Option<f32>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub top_k: Option<i32>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub stop_sequences: Option<Vec<String>>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub tools: Option<Vec<serde_json::Value>>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub tool_choice: Option<serde_json::Value>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub stream: Option<bool>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub thinking: Option<serde_json::Value>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub metadata: Option<serde_json::Value>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct AnthropicGatewayMessage {
32 pub role: String,
33 pub content: serde_json::Value,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct OpenAiGatewayRequest {
38 pub model: String,
39 pub messages: Vec<OpenAiGatewayMessage>,
40 pub max_tokens: u32,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub temperature: Option<f32>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub top_p: Option<f32>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub stop: Option<Vec<String>>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub stream: Option<bool>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub tools: Option<Vec<serde_json::Value>>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub tool_choice: Option<serde_json::Value>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct OpenAiGatewayMessage {
57 pub role: String,
58 pub content: serde_json::Value,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct AnthropicGatewayResponse {
63 pub id: String,
64 pub r#type: String,
65 pub role: String,
66 pub content: Vec<serde_json::Value>,
67 pub model: String,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub stop_reason: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub stop_sequence: Option<String>,
72 pub usage: AnthropicGatewayUsage,
73}
74
75#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
76pub struct AnthropicGatewayUsage {
77 pub input_tokens: u32,
78 pub output_tokens: u32,
79}
80
81#[derive(Debug, Clone, Deserialize)]
82pub struct OpenAiGatewayResponse {
83 pub id: String,
84 pub choices: Vec<OpenAiChoice>,
85 pub usage: Option<OpenAiUsage>,
86 pub model: String,
87}
88
89#[derive(Debug, Clone, Deserialize)]
90pub struct OpenAiChoice {
91 pub message: OpenAiChoiceMessage,
92 pub finish_reason: Option<String>,
93}
94
95#[derive(Debug, Clone, Deserialize)]
96pub struct OpenAiChoiceMessage {
97 pub role: String,
98 pub content: Option<String>,
99 #[serde(default)]
100 pub tool_calls: Vec<OpenAiToolCall>,
101}
102
103#[derive(Debug, Clone, Deserialize)]
104pub struct OpenAiToolCall {
105 pub id: String,
106 pub function: OpenAiToolCallFunction,
107}
108
109#[derive(Debug, Clone, Deserialize)]
110pub struct OpenAiToolCallFunction {
111 pub name: String,
112 pub arguments: String,
113}
114
115#[derive(Debug, Clone, Copy, Deserialize)]
116pub struct OpenAiUsage {
117 pub prompt_tokens: u32,
118 pub completion_tokens: u32,
119}