use anyhow::Error;
use crate::models::message::{ChatMessage, TokenUsage};
pub struct ChatCompletion {
pub message: ChatMessage,
pub usage: Option<TokenUsage>,
pub model_name: String,
}
pub trait ChatModel: Send + Sync {
fn model_name(&self) -> Option<&str> {
None
}
fn base_url(&self) -> String {
"https://api.openai.com/v1".to_string()
}
fn invoke(&self, messages: Vec<ChatMessage>) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<ChatCompletion, Error>> + Send + '_>> {
let _messages = messages;
Box::pin(async move {
Err(Error::msg("The model does not implement the invoke method"))
})
}
}