Skip to main content

llmrust/providers/
moonshot.rs

1//! Moonshot / Kimi API provider (OpenAI-compatible).
2//!
3//! Delegates to [`crate::providers::compat::OpenAiCompatibleProvider`].
4
5use 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
13/// Moonshot / Kimi provider.
14pub struct MoonshotProvider(OpenAiCompatibleProvider);
15
16impl MoonshotProvider {
17    /// Create a new Moonshot provider.
18    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}