llmrust/providers/
moonshot.rs1use async_trait::async_trait;
6use futures::stream::BoxStream;
7
8use crate::providers::{compat::OpenAiCompatibleProvider, Provider, ProviderConfig, Result};
9use crate::types::{ChatRequest, ChatResponse, EmbeddingRequest, EmbeddingResponse, StreamChunk};
10
11const DEFAULT_BASE_URL: &str = "https://api.moonshot.cn/v1";
12
13pub struct MoonshotProvider(OpenAiCompatibleProvider);
15
16impl MoonshotProvider {
17 pub fn new(config: ProviderConfig) -> Self {
19 let config = ProviderConfig {
20 base_url: Some(
21 config
22 .base_url
23 .unwrap_or_else(|| DEFAULT_BASE_URL.to_string()),
24 ),
25 ..config
26 };
27 Self(OpenAiCompatibleProvider::new(config, []))
28 }
29}
30
31#[async_trait]
32impl Provider for MoonshotProvider {
33 async fn chat(&self, req: &ChatRequest) -> Result<ChatResponse> {
34 self.0.chat(req).await
35 }
36
37 async fn stream(&self, req: &ChatRequest) -> Result<BoxStream<'static, Result<StreamChunk>>> {
38 self.0.stream(req).await
39 }
40
41 async fn embed(&self, req: &EmbeddingRequest) -> Result<EmbeddingResponse> {
42 self.0.embed(req).await
43 }
44}