use std::collections::HashMap;
use async_trait::async_trait;
use serde_json::Value;
use crate::error::Result;
use crate::messages::Message;
use crate::outputs::{ChatResult, LLMResult};
#[async_trait]
pub trait BaseLanguageModel: Send + Sync {
async fn generate(&self, prompts: &[String]) -> Result<LLMResult>;
async fn generate_chat(&self, messages: &[Vec<Message>]) -> Result<ChatResult>;
async fn predict(&self, text: &str) -> Result<String> {
let result = self.generate(&[text.to_string()]).await?;
Ok(result
.generations
.first()
.and_then(|gens| gens.first())
.map(|g| g.text.clone())
.unwrap_or_default())
}
fn get_num_tokens(&self, text: &str) -> usize {
text.len() / 4
}
fn identifying_params(&self) -> HashMap<String, Value> {
HashMap::new()
}
fn model_type(&self) -> &str;
}