autoagents_llm/completion/
mod.rs1use async_trait::async_trait;
2
3use crate::{chat::ChatResponse, error::LLMError, ToolCall};
4
5#[derive(Debug, Clone)]
7pub struct CompletionRequest {
8 pub prompt: String,
10 pub max_tokens: Option<u32>,
12 pub temperature: Option<f32>,
14}
15
16#[derive(Debug, Clone)]
18pub struct CompletionResponse {
19 pub text: String,
21}
22
23impl ChatResponse for CompletionResponse {
24 fn text(&self) -> Option<String> {
25 Some(self.text.clone())
26 }
27
28 fn tool_calls(&self) -> Option<Vec<ToolCall>> {
29 None
30 }
31}
32
33impl CompletionRequest {
34 pub fn new(prompt: impl Into<String>) -> Self {
40 Self {
41 prompt: prompt.into(),
42 max_tokens: None,
43 temperature: None,
44 }
45 }
46
47 pub fn builder(prompt: impl Into<String>) -> CompletionRequestBuilder {
53 CompletionRequestBuilder {
54 prompt: prompt.into(),
55 max_tokens: None,
56 temperature: None,
57 }
58 }
59}
60
61#[derive(Debug, Clone)]
63pub struct CompletionRequestBuilder {
64 pub prompt: String,
66 pub max_tokens: Option<u32>,
68 pub temperature: Option<f32>,
70}
71
72impl CompletionRequestBuilder {
73 pub fn max_tokens(mut self, val: u32) -> Self {
75 self.max_tokens = Some(val);
76 self
77 }
78
79 pub fn temperature(mut self, val: f32) -> Self {
81 self.temperature = Some(val);
82 self
83 }
84
85 pub fn build(self) -> CompletionRequest {
87 CompletionRequest {
88 prompt: self.prompt,
89 max_tokens: self.max_tokens,
90 temperature: self.temperature,
91 }
92 }
93}
94
95#[async_trait]
97pub trait CompletionProvider {
98 async fn complete(&self, req: &CompletionRequest) -> Result<CompletionResponse, LLMError>;
108}
109
110impl std::fmt::Display for CompletionResponse {
111 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
112 write!(f, "{}", self.text)
113 }
114}