#![allow(dead_code)]
use std::pin::Pin;
use async_trait::async_trait;
use dyn_clone::DynClone;
use tokio_stream::Stream;
use super::{error::LanguageModelError, LanguageModelProvider};
#[async_trait]
pub trait LanguageModel: DynClone + Send + Sync {
async fn text_complete(
&self,
prompt: &str,
system_prompt: &str,
options: TextCompleteOptions,
) -> Result<TextCompleteResponse, LanguageModelError>;
async fn text_complete_stream(
&self,
prompt: &str,
system_prompt: &str,
options: TextCompleteStreamOptions,
) -> Result<TextCompleteStreamResponse, LanguageModelError>;
async fn generate_embedding(&self, prompt: &str) -> Result<Vec<f32>, LanguageModelError>;
fn provider(&self) -> LanguageModelProvider;
fn text_completion_model_name(&self) -> String;
fn embedding_model_name(&self) -> String;
}
#[derive(Debug, Clone, Default)]
pub struct TextCompleteOptions {
pub context: Option<Vec<i64>>,
}
#[derive(Debug, Clone, Default)]
pub struct TextCompleteStreamOptions {
pub context: Option<Vec<i64>>,
}
#[derive(Debug, Clone)]
pub struct TextCompleteResponse {
pub text: String,
pub context: Option<Vec<i64>>,
}
pub struct TextCompleteStreamResponse {
pub stream: Pin<Box<dyn Stream<Item = Result<String, LanguageModelError>> + Send>>,
}