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 = "https://api.deepseek.com/v1";
pub struct DeepSeekProvider {
inner: OpenAICompatClient,
}
impl DeepSeekProvider {
pub fn new(api_key: impl Into<String>) -> Self {
Self { inner: OpenAICompatClient::with_key(api_key, DEFAULT_BASE_URL) }
}
pub fn with_base_url(mut self, base_url: impl Into<String>) -> Self {
self.inner.base_url = base_url.into();
self
}
}
#[async_trait]
impl Provider for DeepSeekProvider {
fn name(&self) -> &str {
"deepseek"
}
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
}
}