UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

78 lines (72 loc) 2.67 kB
import { AgentRuntimeErrorType } from '../error'; import { ChatCompletionErrorPayload, ModelProvider } from '../types'; import { processMultiProviderModelList } from '../utils/modelParse'; import { createOpenAICompatibleRuntime } from '../utils/openaiCompatibleFactory'; export interface SiliconCloudModelCard { id: string; } export const LobeSiliconCloudAI = createOpenAICompatibleRuntime({ baseURL: 'https://api.siliconflow.cn/v1', chatCompletion: { handleError: (error: any): Omit<ChatCompletionErrorPayload, 'provider'> | undefined => { let errorResponse: Response | undefined; if (error instanceof Response) { errorResponse = error; } else if ('status' in (error as any)) { errorResponse = error as Response; } if (errorResponse) { if (errorResponse.status === 401) { return { error: errorResponse.status, errorType: AgentRuntimeErrorType.InvalidProviderAPIKey, }; } if (errorResponse.status === 403) { return { error: errorResponse.status, errorType: AgentRuntimeErrorType.ProviderBizError, message: '请检查 API Key 余额是否充足,或者是否在用未实名的 API Key 访问需要实名的模型。', }; } } return { error, }; }, handlePayload: (payload) => { const { max_tokens, model, thinking, ...rest } = payload; const thinkingBudget = thinking?.budget_tokens === 0 ? 1 : thinking?.budget_tokens || undefined; return { ...rest, ...(['qwen3'].some((keyword) => model.toLowerCase().includes(keyword)) ? { enable_thinking: thinking !== undefined ? thinking.type === 'enabled' : false, thinking_budget: thinkingBudget === undefined ? undefined : Math.min(Math.max(thinkingBudget, 1), 32_768), } : {}), max_tokens: max_tokens === undefined ? undefined : Math.min(Math.max(max_tokens, 1), 16_384), model, } as any; }, }, debug: { chatCompletion: () => process.env.DEBUG_SILICONCLOUD_CHAT_COMPLETION === '1', }, errorType: { bizError: AgentRuntimeErrorType.ProviderBizError, invalidAPIKey: AgentRuntimeErrorType.InvalidProviderAPIKey, }, models: async ({ client }) => { const modelsPage = (await client.models.list()) as any; const modelList: SiliconCloudModelCard[] = modelsPage.data; return processMultiProviderModelList(modelList); }, provider: ModelProvider.SiliconCloud, });