use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnthropicGatewayRequest {
pub model: String,
pub messages: Vec<AnthropicGatewayMessage>,
pub max_tokens: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub system: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_p: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_k: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_sequences: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<Vec<serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_choice: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thinking: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnthropicGatewayMessage {
pub role: String,
pub content: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OpenAiGatewayRequest {
pub model: String,
pub messages: Vec<OpenAiGatewayMessage>,
pub max_tokens: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_p: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stream: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<Vec<serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_choice: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OpenAiGatewayMessage {
pub role: String,
pub content: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnthropicGatewayResponse {
pub id: String,
pub r#type: String,
pub role: String,
pub content: Vec<serde_json::Value>,
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_sequence: Option<String>,
pub usage: AnthropicGatewayUsage,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub struct AnthropicGatewayUsage {
pub input_tokens: u32,
pub output_tokens: u32,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAiGatewayResponse {
pub id: String,
pub choices: Vec<OpenAiChoice>,
pub usage: Option<OpenAiUsage>,
pub model: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAiChoice {
pub message: OpenAiChoiceMessage,
pub finish_reason: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAiChoiceMessage {
pub role: String,
pub content: Option<String>,
#[serde(default)]
pub tool_calls: Vec<OpenAiToolCall>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAiToolCall {
pub id: String,
pub function: OpenAiToolCallFunction,
}
#[derive(Debug, Clone, Deserialize)]
pub struct OpenAiToolCallFunction {
pub name: String,
pub arguments: String,
}
#[derive(Debug, Clone, Copy, Deserialize)]
pub struct OpenAiUsage {
pub prompt_tokens: u32,
pub completion_tokens: u32,
}