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.

95 lines (86 loc) 3.32 kB
import { ModelProvider } from 'model-bank'; import { OpenAICompatibleFactoryOptions, createOpenAICompatibleRuntime, } from '../../core/openaiCompatibleFactory'; import { ChatCompletionErrorPayload } from '../../types'; import { AgentRuntimeErrorType } from '../../types/error'; import { processMultiProviderModelList } from '../../utils/modelParse'; import { createSiliconCloudImage } from './createImage'; export interface SiliconCloudModelCard { id: string; } export const params = { 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; const result: any = { ...rest, max_tokens: max_tokens === undefined ? undefined : Math.min(Math.max(max_tokens, 1), 16_384), model, }; if (thinking) { // 只有部分模型支持指定 enable_thinking,其余一些慢思考模型只支持调节 thinking budget const hybridThinkingModels = [ /GLM-4\.5(?!.*Air$)/, // GLM-4.5 和 GLM-4.5V(不包含 GLM-4.5 Air) /Qwen3-(?:\d+B|\d+B-A\d+B)$/, // Qwen3-8B、Qwen3-14B、Qwen3-32B、Qwen3-30B-A3B、Qwen3-235B-A22B /DeepSeek-V3\.1/, /Hunyuan-A13B-Instruct/, ]; if (hybridThinkingModels.some((regexp) => regexp.test(model))) { result.enable_thinking = thinking.type === 'enabled'; } if (typeof thinkingBudget !== 'undefined') { result.thinking_budget = Math.min(Math.max(thinkingBudget, 1), 32_768); } } return result; }, }, createImage: createSiliconCloudImage, 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, 'siliconcloud'); }, provider: ModelProvider.SiliconCloud, } satisfies OpenAICompatibleFactoryOptions; export const LobeSiliconCloudAI = createOpenAICompatibleRuntime(params);