openrouter_sdk/
models.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize)]
4pub struct ChatRequest {
5    pub model: String,
6    pub messages: Vec<Message>,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub temperature: Option<f32>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub max_tokens: Option<u32>,
11}
12
13#[derive(Debug, Serialize, Deserialize)]
14pub struct Message {
15    pub role: String,
16    pub content: Content,
17}
18
19#[derive(Debug, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum Content {
22    Text(String),
23    Multi(Vec<ContentPart>),
24}
25
26#[derive(Debug, Serialize, Deserialize)]
27pub struct ContentPart {
28    #[serde(rename = "type")]
29    pub type_: String,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub text: Option<String>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub image_url: Option<ImageUrl>,
34}
35
36#[derive(Debug, Serialize, Deserialize)]
37pub struct ImageUrl {
38    pub url: String,
39}
40
41#[derive(Debug, Deserialize)]
42pub struct ChatResponse {
43    pub choices: Vec<Choice>,
44    pub created: u64,
45    pub model: String,
46}
47
48#[derive(Debug, Deserialize)]
49pub struct Choice {
50    pub message: Message,
51    pub finish_reason: String,
52    pub index: u32,
53}