1use crate::{role::Role, LanguageModelId};
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
5pub struct LanguageModelRequestMessage {
6 pub role: Role,
7 pub content: String,
8}
9
10impl LanguageModelRequestMessage {
11 pub fn to_proto(&self) -> proto::LanguageModelRequestMessage {
12 proto::LanguageModelRequestMessage {
13 role: self.role.to_proto() as i32,
14 content: self.content.clone(),
15 tool_calls: Vec::new(),
16 tool_call_id: None,
17 }
18 }
19}
20
21#[derive(Debug, Default, Serialize, Deserialize)]
22pub struct LanguageModelRequest {
23 pub messages: Vec<LanguageModelRequestMessage>,
24 pub stop: Vec<String>,
25 pub temperature: f32,
26}
27
28impl LanguageModelRequest {
29 pub fn to_proto(&self, model_id: LanguageModelId) -> proto::CompleteWithLanguageModel {
30 proto::CompleteWithLanguageModel {
31 model: model_id.0.to_string(),
32 messages: self.messages.iter().map(|m| m.to_proto()).collect(),
33 stop: self.stop.clone(),
34 temperature: self.temperature,
35 tool_choice: None,
36 tools: Vec::new(),
37 }
38 }
39}
40
41#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
42pub struct LanguageModelResponseMessage {
43 pub role: Option<Role>,
44 pub content: Option<String>,
45}