use async_trait::async_trait;
use crate::error::BaochuanError;
use crate::provider::{ChunkStream, Provider};
use crate::providers::openai_compat::OpenAICompatClient;
use crate::types::{ChatRequest, ChatResponse, ModelInfo};
const DEFAULT_BASE_URL: &str = "http://localhost:8080/v1";
pub struct LlamaCppProvider {
inner: OpenAICompatClient,
}
impl LlamaCppProvider {
pub fn new() -> Self {
Self { inner: OpenAICompatClient::no_key(DEFAULT_BASE_URL) }
}
pub fn with_base_url(mut self, base_url: impl Into<String>) -> Self {
let b = base_url.into();
self.inner.base_url = format!("{}/v1", b.trim_end_matches('/'));
self
}
}
impl Default for LlamaCppProvider {
fn default() -> Self {
Self::new()
}
}
#[async_trait]
impl Provider for LlamaCppProvider {
fn name(&self) -> &str {
"llamacpp"
}
async fn models(&self) -> Result<Vec<ModelInfo>, BaochuanError> {
self.inner.models().await
}
async fn chat(&self, request: &ChatRequest) -> Result<ChatResponse, BaochuanError> {
self.inner.chat(request, self.name()).await
}
async fn stream_chat(&self, request: &ChatRequest) -> Result<ChunkStream, BaochuanError> {
self.inner.stream_chat(request, self.name()).await
}
}