open_routerer/models/
chat.rs

1use serde::{Deserialize, Serialize};
2
3/// Defines the role of a chat message (user, assistant, or system).
4#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(rename_all = "lowercase")]
6pub enum ChatRole {
7    User,
8    Assistant,
9    System,
10}
11
12/// Represents a chat message with a role and content.
13/// This is the model-side representation.
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct ChatMessage {
16    pub role: ChatRole,
17    pub content: String,
18}
19
20/// Conversion from the model’s ChatMessage to the types::chat::Message used in API requests.
21impl From<ChatMessage> for crate::types::chat::Message {
22    fn from(chat_msg: ChatMessage) -> Self {
23        // Convert the role enum to the expected lowercase string.
24        let role_str = match chat_msg.role {
25            ChatRole::User => "user".to_string(),
26            ChatRole::Assistant => "assistant".to_string(),
27            ChatRole::System => "system".to_string(),
28        };
29        Self {
30            role: role_str,
31            content: chat_msg.content,
32            name: None,
33        }
34    }
35}