Skip to main content

systemprompt_api/services/gateway/
models.rs

1use 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}