model_gateway_rs/model/
llm.rs1use serde::{Deserialize, Serialize};
2
3use crate::model::role::Role;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct ChatMessage {
8 pub role: Role,
9 pub content: String,
10}
11
12impl ChatMessage {
13 pub fn user(content: &str) -> Self {
14 Self {
15 role: Role::User,
16 content: content.to_string(),
17 }
18 }
19 pub fn assistant(content: &str) -> Self {
20 Self {
21 role: Role::Assistant,
22 content: content.to_string(),
23 }
24 }
25 pub fn system(content: &str) -> Self {
26 Self {
27 role: Role::System,
28 content: content.to_string(),
29 }
30 }
31}
32
33pub struct ChatMessages(pub Vec<ChatMessage>);
34
35impl From<String> for ChatMessages {
36 fn from(content: String) -> Self {
37 ChatMessages(vec![ChatMessage::user(content.as_str())])
38 }
39}
40
41impl From<Vec<ChatMessage>> for ChatMessages {
42 fn from(messages: Vec<ChatMessage>) -> Self {
43 ChatMessages(messages)
44 }
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct LlmInput {
49 pub messages: Vec<ChatMessage>,
50 pub max_tokens: Option<u32>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct LlmOutput {
55 pub message: Option<ChatMessage>,
56 pub usage: Option<u32>, }
58
59impl LlmOutput {
60 pub fn get_message(&self) -> Option<&ChatMessage> {
61 self.message.as_ref()
62 }
63
64 pub fn get_content(&self) -> &str {
65 match &self.message {
66 Some(msg) => &msg.content,
67 None => "",
68 }
69 }
70
71 pub fn get_usage(&self) -> Option<u32> {
72 self.usage
73 }
74}