llm.openrouter.js
1.17 KB
/**
* OpenRouter 子类 —— OpenAI 兼容,差异仅在默认 baseUrl 与 OpenRouter 转发 Gemini 的 reasoning 字段名。
*
* 继承 OpenAIProvider,零复制 chat/流解析/重试/trace。仅覆写 defaultBaseUrl 与 messageToValue 的
* reasoning 分支(OpenRouter 转发 Gemini 思维链用 `delta.reasoning`,非 `reasoning_content`)。
*
* 仅当帧/多模态形态有厂商差异时才需新增此类文件;纯 OpenAI 兼容接入只配置文本能力行,不新增文件。
*
* 文件名 `llm.openrouter.js` 即注册键 `openrouter`。
*/
import OpenAIProvider from './llm.openai.js'
export default class OpenRouterProvider extends OpenAIProvider {
/** @returns {string} */
defaultBaseUrl() {
return 'https://openrouter.ai/api/v1'
}
/**
* OpenRouter 专有 reasoning 帧优先处理,其余委回父类。
* @param {any} frame
* @returns {import('../base.js').ParsedValue | null}
*/
messageToValue(frame) {
const delta = frame?.choices?.[0]?.delta
if (typeof delta?.reasoning === 'string' && delta.reasoning.length > 0) {
return { type: 'reasoning', text: delta.reasoning }
}
return super.messageToValue(frame)
}
}