open_routerer/types/
chat.rs

1use super::model::Model;
2use serde::Deserialize;
3use serde::Serialize;
4
5#[derive(Debug, Serialize, Deserialize, Default)]
6pub struct ChatCompletionRequest {
7    pub model: Model,
8    pub messages: Vec<Message>,
9    /// Whether the response should be streamed.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub stream: Option<bool>,
12    /// (Optional) Stub for response_format.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub response_format: Option<String>,
15    /// (Optional) Stub for provider preferences.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub provider: Option<String>,
18    /// (Optional) Fallback models.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub models: Option<Vec<String>>,
21    /// (Optional) Message transforms.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub transforms: Option<Vec<String>>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub max_tokens: Option<u32>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct Message {
30    pub role: String,
31    pub content: String,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub name: Option<String>,
34}
35
36/// A choice returned by the chat API.
37#[derive(Debug, Deserialize)]
38pub struct Choice {
39    pub message: Message,
40    pub finish_reason: Option<String>,
41    #[serde(rename = "native_finish_reason")]
42    pub native_finish_reason: Option<String>,
43}
44
45/// Usage data returned from the API.
46#[derive(Debug, Deserialize)]
47pub struct Usage {
48    pub prompt_tokens: u32,
49    pub completion_tokens: u32,
50    pub total_tokens: u32,
51}
52
53/// Chat completion response.
54#[derive(Debug, Deserialize)]
55pub struct ChatCompletionResponse {
56    pub id: String,
57    pub choices: Vec<Choice>,
58    pub created: i64,
59    pub model: String,
60    pub usage: Option<Usage>,
61}
62
63/// A streaming chunk for chat completions (stub).
64#[derive(Debug, Deserialize)]
65pub struct ChatCompletionChunk {
66    pub id: String,
67    pub choices: Vec<Choice>,
68}