use crate::error::LlmError;
use async_trait::async_trait;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct TokenUsage {
pub input: u32,
pub output: u32,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CompletionResult {
pub text: String,
pub usage: TokenUsage,
}
#[async_trait]
pub trait LlmClient: Send + Sync + std::fmt::Debug {
async fn complete(&self, prompt: &str, max_tokens: u32) -> Result<CompletionResult, LlmError>;
fn model_id(&self) -> &str;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn token_usage_default_is_zero() {
let u = TokenUsage::default();
assert_eq!(u.input, 0);
assert_eq!(u.output, 0);
}
}