Skip to main content

openrouter_rust/
types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct Message {
5    pub role: Role,
6    #[serde(default, skip_serializing_if = "Option::is_none")]
7    pub content: Option<String>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub name: Option<String>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub tool_calls: Option<Vec<ToolCall>>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct ToolCall {
16    pub id: String,
17    #[serde(rename = "type")]
18    pub call_type: String,
19    pub function: FunctionCall,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct FunctionCall {
24    pub name: String,
25    pub arguments: String,
26}
27
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
29#[serde(rename_all = "lowercase")]
30pub enum Role {
31    System,
32    User,
33    Assistant,
34    Tool,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct Function {
39    pub name: String,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub description: Option<String>,
42    pub parameters: serde_json::Value,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct Tool {
47    #[serde(rename = "type")]
48    pub tool_type: String,
49    pub function: Function,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(untagged)]
54pub enum ToolChoice {
55    String(String),
56    Object {
57        tool_type: String,
58        function: ToolChoiceFunction,
59    },
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct ToolChoiceFunction {
64    pub name: String,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct ResponseFormat {
69    #[serde(rename = "type")]
70    pub response_type: String,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub json_schema: Option<serde_json::Value>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct Usage {
77    pub prompt_tokens: u32,
78    pub completion_tokens: u32,
79    pub total_tokens: u32,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub prompt_tokens_details: Option<PromptTokensDetails>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub completion_tokens_details: Option<CompletionTokensDetails>,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub cost: Option<f64>,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct PromptTokensDetails {
90    pub cached_tokens: u32,
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub audio_tokens: Option<u32>,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct CompletionTokensDetails {
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub reasoning_tokens: Option<u32>,
99    #[serde(skip_serializing_if = "Option::is_none")]
100    pub audio_tokens: Option<u32>,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize)]
104pub struct ProviderPreferences {
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub allow_fallbacks: Option<bool>,
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub require_parameters: Option<bool>,
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub data_collection: Option<String>,
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub order: Option<Vec<String>>,
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub ignore: Option<Vec<String>>,
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub quantizations: Option<Vec<String>>,
117    #[serde(skip_serializing_if = "Option::is_none")]
118    pub sort: Option<String>,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
122pub struct Plugin {
123    pub id: String,
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub enabled: Option<bool>,
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub max_results: Option<u32>,
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub search_prompt: Option<String>,
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub engine: Option<String>,
132}