"""Kimi / Moonshot 适配器 -- OpenAI 兼容格式""" from __future__ import annotations import json from typing import Any, AsyncGenerator import httpx from app.providers.base import BaseProvider, Capability class KimiProvider(BaseProvider): name = "kimi" display_name = "Kimi (Moonshot)" capabilities = [Capability.CHAT] async def chat( self, messages: list[dict], model: str, plan: dict, stream: bool = True, **kwargs, ) -> AsyncGenerator[str, None]: """Moonshot API 兼容 OpenAI 格式""" url = f"{self._base_url(plan)}/chat/completions" body: dict[str, Any] = { "model": model, "messages": messages, "stream": stream, **kwargs, } headers = self._build_headers(plan) async with httpx.AsyncClient(timeout=120) as client: if stream: async with client.stream("POST", url, json=body, headers=headers) as resp: resp.raise_for_status() async for line in resp.aiter_lines(): if line.startswith("data: "): yield line + "\n\n" else: resp = await client.post(url, json=body, headers=headers) resp.raise_for_status() yield json.dumps(resp.json())