@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
text/typescript
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,
});