1use crate::error::LlmError;
4use async_trait::async_trait;
5
6#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
8pub struct TokenUsage {
9 pub input: u32,
11 pub output: u32,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq)]
17pub struct CompletionResult {
18 pub text: String,
20 pub usage: TokenUsage,
22}
23
24#[async_trait]
26pub trait LlmClient: Send + Sync + std::fmt::Debug {
27 async fn complete(&self, prompt: &str, max_tokens: u32) -> Result<CompletionResult, LlmError>;
29
30 fn model_id(&self) -> &str;
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn token_usage_default_is_zero() {
40 let u = TokenUsage::default();
41 assert_eq!(u.input, 0);
42 assert_eq!(u.output, 0);
43 }
44}