swiftide_core/chat_completion/
chat_completion_request.rs

1use std::collections::HashSet;
2
3use derive_builder::Builder;
4
5use super::{chat_message::ChatMessage, tools::ToolSpec};
6
7/// A chat completion request represents a series of chat messages and tool interactions that can
8/// be send to any LLM.
9#[derive(Builder, Clone, PartialEq, Debug)]
10#[builder(setter(into, strip_option))]
11pub struct ChatCompletionRequest {
12    pub messages: Vec<ChatMessage>,
13    #[builder(default)]
14    pub tools_spec: HashSet<ToolSpec>,
15}
16
17impl ChatCompletionRequest {
18    pub fn builder() -> ChatCompletionRequestBuilder {
19        ChatCompletionRequestBuilder::default()
20    }
21
22    pub fn messages(&self) -> &[ChatMessage] {
23        self.messages.as_slice()
24    }
25
26    pub fn tools_spec(&self) -> &HashSet<ToolSpec> {
27        &self.tools_spec
28    }
29}
30
31impl From<Vec<ChatMessage>> for ChatCompletionRequest {
32    fn from(messages: Vec<ChatMessage>) -> Self {
33        ChatCompletionRequest {
34            messages,
35            tools_spec: HashSet::new(),
36        }
37    }
38}