Skip to main content

roder_ext_kimi_code/
extension.rs

1use std::sync::Arc;
2
3use roder_api::capabilities::CapabilityRequest;
4use roder_api::catalog::PROVIDER_KIMI_CODE;
5use roder_api::extension::{
6    ExtensionManifest, ExtensionRegistryBuilder, ProvidedService, RoderExtension,
7};
8use semver::Version;
9
10use crate::provider::{KimiCodeConfig, KimiCodeInferenceEngine, KimiCodeProviderSpec};
11
12pub struct KimiCodeExtension {
13    config: KimiCodeConfig,
14}
15
16impl KimiCodeExtension {
17    pub fn new(config: KimiCodeConfig) -> Self {
18        Self { config }
19    }
20}
21
22impl RoderExtension for KimiCodeExtension {
23    fn manifest(&self) -> ExtensionManifest {
24        ExtensionManifest {
25            id: "roder-ext-kimi-code-provider".to_string(),
26            name: "Kimi Code Provider".to_string(),
27            version: Version::new(0, 1, 0),
28            api_version: "0.1.0".to_string(),
29            description: Some("Kimi Code (Moonshot AI) direct subscription inference provider".to_string()),
30            provides: vec![
31                ProvidedService::InferenceEngine(PROVIDER_KIMI_CODE.to_string()),
32            ],
33            required_capabilities: vec![CapabilityRequest::new("network.kimi.com")],
34        }
35    }
36
37    fn install(&self, registry: &mut ExtensionRegistryBuilder) -> anyhow::Result<()> {
38        registry.inference_engine(Arc::new(KimiCodeInferenceEngine::new(
39            self.config.clone(),
40            KimiCodeProviderSpec::default(),
41        )));
42        Ok(())
43    }
44}