diff --git a/package.json b/package.json index a207b9d8aa..fccb139449 100644 --- a/package.json +++ b/package.json @@ -107,6 +107,8 @@ "@agentic/searxng": "^7.3.3", "@agentic/tavily": "^7.3.3", "@ai-sdk/amazon-bedrock": "^3.0.53", + "@ai-sdk/cerebras": "^1.0.31", + "@ai-sdk/gateway": "^2.0.9", "@ai-sdk/google-vertex": "^3.0.62", "@ai-sdk/huggingface": "patch:@ai-sdk/huggingface@npm%3A0.0.8#~/.yarn/patches/@ai-sdk-huggingface-npm-0.0.8-d4d0aaac93.patch", "@ai-sdk/mistral": "^2.0.23", diff --git a/src/renderer/src/aiCore/index_new.ts b/src/renderer/src/aiCore/index_new.ts index 800d2ff302..434b2322cd 100644 --- a/src/renderer/src/aiCore/index_new.ts +++ b/src/renderer/src/aiCore/index_new.ts @@ -7,16 +7,17 @@ * 2. 暂时保持接口兼容性 */ +import type { GatewayLanguageModelEntry } from '@ai-sdk/gateway' import { createExecutor } from '@cherrystudio/ai-core' import { loggerService } from '@logger' import { getEnableDeveloperMode } from '@renderer/hooks/useSettings' import { addSpan, endSpan } from '@renderer/services/SpanManagerService' import type { StartSpanParams } from '@renderer/trace/types/ModelSpanEntity' -import type { Assistant, GenerateImageParams, Model, Provider } from '@renderer/types' +import { type Assistant, type GenerateImageParams, type Model, type Provider, SystemProviderIds } from '@renderer/types' import type { AiSdkModel, StreamTextParams } from '@renderer/types/aiCoreTypes' import { SUPPORTED_IMAGE_ENDPOINT_LIST } from '@renderer/utils' import { buildClaudeCodeSystemModelMessage } from '@shared/anthropic' -import { type ImageModel, type LanguageModel, type Provider as AiSdkProvider, wrapLanguageModel } from 'ai' +import { gateway, type ImageModel, type LanguageModel, type Provider as AiSdkProvider, wrapLanguageModel } from 'ai' import AiSdkToChunkAdapter from './chunk/AiSdkToChunkAdapter' import LegacyAiProvider from './legacy/index' @@ -439,6 +440,18 @@ export default class ModernAiProvider { // 代理其他方法到原有实现 public async models() { + if (this.actualProvider.id === SystemProviderIds['ai-gateway']) { + const formatModel = function (models: GatewayLanguageModelEntry[]): Model[] { + return models.map((m) => ({ + id: m.id, + name: m.name, + provider: 'gateway', + group: m.id.split('/')[0], + description: m.description ?? undefined + })) + } + return formatModel((await gateway.getAvailableModels()).models) + } return this.legacyProvider.models() } diff --git a/src/renderer/src/aiCore/provider/providerInitialization.ts b/src/renderer/src/aiCore/provider/providerInitialization.ts index 665f2bd05c..baf400508a 100644 --- a/src/renderer/src/aiCore/provider/providerInitialization.ts +++ b/src/renderer/src/aiCore/provider/providerInitialization.ts @@ -71,6 +71,21 @@ export const NEW_PROVIDER_CONFIGS: ProviderConfig[] = [ creatorFunctionName: 'createHuggingFace', supportsImageGeneration: true, aliases: ['hf', 'hugging-face'] + }, + { + id: 'ai-gateway', + name: 'AI Gateway', + import: () => import('@ai-sdk/gateway'), + creatorFunctionName: 'createGateway', + supportsImageGeneration: true, + aliases: ['gateway'] + }, + { + id: 'cerebras', + name: 'Cerebras', + import: () => import('@ai-sdk/cerebras'), + creatorFunctionName: 'createCerebras', + supportsImageGeneration: false } ] as const diff --git a/src/renderer/src/aiCore/utils/options.ts b/src/renderer/src/aiCore/utils/options.ts index 9e296597c2..88f556438b 100644 --- a/src/renderer/src/aiCore/utils/options.ts +++ b/src/renderer/src/aiCore/utils/options.ts @@ -151,11 +151,12 @@ export function buildProviderOptions( ...providerSpecificOptions, ...getCustomParameters(assistant) } - // vertex需要映射到google或anthropic + const rawProviderKey = { 'google-vertex': 'google', - 'google-vertex-anthropic': 'anthropic' + 'google-vertex-anthropic': 'anthropic', + 'ai-gateway': 'gateway' }[rawProviderId] || rawProviderId // 返回 AI Core SDK 要求的格式:{ 'providerId': providerOptions } diff --git a/src/renderer/src/aiCore/utils/reasoning.ts b/src/renderer/src/aiCore/utils/reasoning.ts index 1d7123a47b..d0b6f1df25 100644 --- a/src/renderer/src/aiCore/utils/reasoning.ts +++ b/src/renderer/src/aiCore/utils/reasoning.ts @@ -109,6 +109,11 @@ export function getReasoningEffort(assistant: Assistant, model: Model): Reasonin // use thinking, doubao, zhipu, etc. if (isSupportedThinkingTokenDoubaoModel(model) || isSupportedThinkingTokenZhipuModel(model)) { + if (provider.id === SystemProviderIds.cerebras) { + return { + disable_reasoning: true + } + } return { thinking: { type: 'disabled' } } } @@ -306,6 +311,9 @@ export function getReasoningEffort(assistant: Assistant, model: Model): Reasonin return {} } if (isSupportedThinkingTokenZhipuModel(model)) { + if (provider.id === SystemProviderIds.cerebras) { + return {} + } return { thinking: { type: 'enabled' } } } diff --git a/src/renderer/src/assets/images/providers/cerebras.webp b/src/renderer/src/assets/images/providers/cerebras.webp new file mode 100644 index 0000000000..1c21b6ff26 Binary files /dev/null and b/src/renderer/src/assets/images/providers/cerebras.webp differ diff --git a/src/renderer/src/assets/images/providers/vercel.svg b/src/renderer/src/assets/images/providers/vercel.svg new file mode 100644 index 0000000000..486cb95787 --- /dev/null +++ b/src/renderer/src/assets/images/providers/vercel.svg @@ -0,0 +1 @@ +Vercel \ No newline at end of file diff --git a/src/renderer/src/config/models/default.ts b/src/renderer/src/config/models/default.ts index a56ea7f6cb..ea149d3799 100644 --- a/src/renderer/src/config/models/default.ts +++ b/src/renderer/src/config/models/default.ts @@ -1840,5 +1840,26 @@ export const SYSTEM_MODELS: Record = group: 'LongCat' } ], - huggingface: [] + huggingface: [], + 'ai-gateway': [], + cerebras: [ + { + id: 'gpt-oss-120b', + name: 'GPT oss 120B', + provider: 'cerebras', + group: 'openai' + }, + { + id: 'zai-glm-4.6', + name: 'GLM 4.6', + provider: 'cerebras', + group: 'zai' + }, + { + id: 'qwen-3-235b-a22b-instruct-2507', + name: 'Qwen 3 235B A22B Instruct', + provider: 'cerebras', + group: 'qwen' + } + ] } diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index 50b0dbaece..04ef107d14 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -12,6 +12,7 @@ import BaiduCloudProviderLogo from '@renderer/assets/images/providers/baidu-clou import BailianProviderLogo from '@renderer/assets/images/providers/bailian.png' import BurnCloudProviderLogo from '@renderer/assets/images/providers/burncloud.png' import CephalonProviderLogo from '@renderer/assets/images/providers/cephalon.jpeg' +import CerebrasProviderLogo from '@renderer/assets/images/providers/cerebras.webp' import CherryInProviderLogo from '@renderer/assets/images/providers/cherryin.png' import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png' import DmxapiProviderLogo from '@renderer/assets/images/providers/DMXAPI.png' @@ -51,6 +52,7 @@ import StepProviderLogo from '@renderer/assets/images/providers/step.png' import TencentCloudProviderLogo from '@renderer/assets/images/providers/tencent-cloud-ti.png' import TogetherProviderLogo from '@renderer/assets/images/providers/together.png' import TokenFluxProviderLogo from '@renderer/assets/images/providers/tokenflux.png' +import AIGatewayProviderLogo from '@renderer/assets/images/providers/vercel.svg' import VertexAIProviderLogo from '@renderer/assets/images/providers/vertexai.svg' import BytedanceProviderLogo from '@renderer/assets/images/providers/volcengine.png' import VoyageAIProviderLogo from '@renderer/assets/images/providers/voyageai.png' @@ -470,7 +472,7 @@ export const SYSTEM_PROVIDERS_CONFIG: Record = name: 'MiniMax', type: 'openai', apiKey: '', - apiHost: 'https://api.minimax.chat/v1/', + apiHost: 'https://api.minimax.com/v1/', models: SYSTEM_MODELS.minimax, isSystem: true, enabled: false @@ -675,6 +677,26 @@ export const SYSTEM_PROVIDERS_CONFIG: Record = models: [], isSystem: true, enabled: false + }, + 'ai-gateway': { + id: 'ai-gateway', + name: 'AI Gateway', + type: 'ai-gateway', + apiKey: '', + apiHost: 'https://ai-gateway.vercel.sh/v1', + models: [], + isSystem: true, + enabled: false + }, + cerebras: { + id: 'cerebras', + name: 'Cerebras AI', + type: 'openai', + apiKey: '', + apiHost: 'https://api.cerebras.ai/v1', + models: SYSTEM_MODELS.cerebras, + isSystem: true, + enabled: false } } as const @@ -741,7 +763,9 @@ export const PROVIDER_LOGO_MAP: AtLeast = { aionly: AiOnlyProviderLogo, longcat: LongCatProviderLogo, huggingface: HuggingfaceProviderLogo, - sophnet: SophnetProviderLogo + sophnet: SophnetProviderLogo, + 'ai-gateway': AIGatewayProviderLogo, + cerebras: CerebrasProviderLogo } as const export function getProviderLogo(providerId: string) { @@ -1048,7 +1072,7 @@ export const PROVIDER_URLS: Record = { }, minimax: { api: { - url: 'https://api.minimax.chat/v1/' + url: 'https://api.minimax.com/v1/' }, websites: { official: 'https://platform.minimaxi.com/', @@ -1390,6 +1414,28 @@ export const PROVIDER_URLS: Record = { docs: 'https://huggingface.co/docs', models: 'https://huggingface.co/models' } + }, + 'ai-gateway': { + api: { + url: 'https://ai-gateway.vercel.sh/v1/ai' + }, + websites: { + official: 'https://vercel.com/ai-gateway', + apiKey: 'https://vercel.com/', + docs: 'https://vercel.com/docs/ai-gateway', + models: 'https://vercel.com/ai-gateway/models' + } + }, + cerebras: { + api: { + url: 'https://api.cerebras.ai/v1' + }, + websites: { + official: 'https://www.cerebras.ai', + apiKey: 'https://cloud.cerebras.ai', + docs: 'https://inference-docs.cerebras.ai/introduction', + models: 'https://inference-docs.cerebras.ai/models/overview' + } } } @@ -1452,7 +1498,7 @@ export const isSupportEnableThinkingProvider = (provider: Provider) => { ) } -const NOT_SUPPORT_SERVICE_TIER_PROVIDERS = ['github', 'copilot'] as const satisfies SystemProviderId[] +const NOT_SUPPORT_SERVICE_TIER_PROVIDERS = ['github', 'copilot', 'cerebras'] as const satisfies SystemProviderId[] /** * 判断提供商是否支持 service_tier 设置。 Only for OpenAI API. @@ -1519,6 +1565,10 @@ export function isGeminiProvider(provider: Provider): boolean { return provider.type === 'gemini' } +export function isAIGatewayProvider(provider: Provider): boolean { + return provider.type === 'ai-gateway' +} + const NOT_SUPPORT_API_VERSION_PROVIDERS = ['github', 'copilot', 'perplexity'] as const satisfies SystemProviderId[] export const isSupportAPIVersionProvider = (provider: Provider) => { diff --git a/src/renderer/src/i18n/label.ts b/src/renderer/src/i18n/label.ts index f8806359d4..f657fd0e08 100644 --- a/src/renderer/src/i18n/label.ts +++ b/src/renderer/src/i18n/label.ts @@ -86,7 +86,9 @@ const providerKeyMap = { aionly: 'provider.aionly', longcat: 'provider.longcat', huggingface: 'provider.huggingface', - sophnet: 'provider.sophnet' + sophnet: 'provider.sophnet', + 'ai-gateway': 'provider.ai-gateway', + cerebras: 'provider.cerebras' } as const /** diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 277598c9ef..1d41d6964e 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "AI Gateway", "aihubmix": "AiHubMix", "aionly": "AiOnly", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "Baidu Cloud", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copilot", "dashscope": "Alibaba Cloud", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 7c5c9b8e3a..f12efbaba5 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "AI Gateway", "aihubmix": "AiHubMix", "aionly": "唯一AI (AiOnly)", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "百度云千帆", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copilot", "dashscope": "阿里云百炼", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 364ccf573e..c3420c4b38 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "AI 閘道器", "aihubmix": "AiHubMix", "aionly": "唯一AI (AiOnly)", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "百度雲千帆", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copilot", "dashscope": "阿里雲百鍊", diff --git a/src/renderer/src/i18n/translate/de-de.json b/src/renderer/src/i18n/translate/de-de.json index 9b51fd3a6a..fbf7f04956 100644 --- a/src/renderer/src/i18n/translate/de-de.json +++ b/src/renderer/src/i18n/translate/de-de.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "KI-Gateway", "aihubmix": "AiHubMix", "aionly": "Einzige KI (AiOnly)", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "Baidu Cloud Qianfan", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copilot", "dashscope": "Alibaba Cloud Bailian", diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index 00ec9dd9aa..1ea17fc20c 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "Πύλη Τεχνητής Νοημοσύνης", "aihubmix": "AiHubMix", "aionly": "AiOnly", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "Baidu Cloud Qianfan", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copilot", "dashscope": "AliCloud Bailian", diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index d17b42cbd6..4cd8f8ad1b 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "Puerta de enlace de IA", "aihubmix": "AiHubMix", "aionly": "AiOnly", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "Baidu Nube Qiánfān", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copiloto", "dashscope": "Álibaba Nube BaiLiàn", diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index f08e127db9..b0a0f0ef49 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "Passerelle IA", "aihubmix": "AiHubMix", "aionly": "AiOnly", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "Baidu Cloud Qianfan", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copilote", "dashscope": "AliCloud BaiLian", diff --git a/src/renderer/src/i18n/translate/ja-jp.json b/src/renderer/src/i18n/translate/ja-jp.json index 3fa82cbd57..57c87ffde2 100644 --- a/src/renderer/src/i18n/translate/ja-jp.json +++ b/src/renderer/src/i18n/translate/ja-jp.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "AIゲートウェイ", "aihubmix": "AiHubMix", "aionly": "AiOnly", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "Baidu Cloud", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copilot", "dashscope": "Alibaba Cloud", diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index c3431cac53..b8934b3f06 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "Gateway de IA", "aihubmix": "AiHubMix", "aionly": "AiOnly", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "Nuvem Baidu", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copiloto", "dashscope": "Área de Atuação AliCloud", diff --git a/src/renderer/src/i18n/translate/ru-ru.json b/src/renderer/src/i18n/translate/ru-ru.json index e14352886d..5b66ef559a 100644 --- a/src/renderer/src/i18n/translate/ru-ru.json +++ b/src/renderer/src/i18n/translate/ru-ru.json @@ -2484,6 +2484,7 @@ }, "provider": { "302ai": "302.AI", + "ai-gateway": "AI-шлюз", "aihubmix": "AiHubMix", "aionly": "AiOnly", "alayanew": "Alaya NeW", @@ -2494,6 +2495,7 @@ "baidu-cloud": "Baidu Cloud", "burncloud": "BurnCloud", "cephalon": "Cephalon", + "cerebras": "Cerebras AI", "cherryin": "CherryIN", "copilot": "GitHub Copilot", "dashscope": "Alibaba Cloud", diff --git a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx index 3f8743b66e..f135d83e40 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx @@ -5,6 +5,7 @@ import { ApiKeyListPopup } from '@renderer/components/Popups/ApiKeyListPopup' import Selector from '@renderer/components/Selector' import { isEmbeddingModel, isRerankModel } from '@renderer/config/models' import { + isAIGatewayProvider, isAnthropicProvider, isAzureOpenAIProvider, isGeminiProvider, @@ -305,6 +306,9 @@ const ProviderSetting: FC = ({ providerId }) => { if (isVertexProvider(provider)) { return formatVertexApiHost(provider) + '/publishers/google' } + if (isAIGatewayProvider(provider)) { + return formatApiHost(apiHost) + '/language-model' + } return formatApiHost(apiHost) } @@ -520,24 +524,17 @@ const ProviderSetting: FC = ({ providerId }) => { {t('settings.provider.vertex_ai.api_host_help')} )} - {(isOpenAICompatibleProvider(provider) || - isAzureOpenAIProvider(provider) || - isAnthropicProvider(provider) || - isGeminiProvider(provider) || - isVertexProvider(provider) || - isOpenAIProvider(provider)) && ( - - - {t('settings.provider.api_host_preview', { url: hostPreview() })} - - - )} + + + {t('settings.provider.api_host_preview', { url: hostPreview() })} + + )} diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index d718ba1fc1..4baeeddfde 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -67,7 +67,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 173, + version: 174, blacklist: ['runtime', 'messages', 'messageBlocks', 'tabs', 'toolPermissions'], migrate }, diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 4659f1ce7c..10073de1f3 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -2802,6 +2802,23 @@ const migrateConfig = { logger.error('migrate 173 error', error as Error) return state } + }, + '174': (state: RootState) => { + try { + addProvider(state, SystemProviderIds.longcat) + + addProvider(state, SystemProviderIds['ai-gateway']) + addProvider(state, 'cerebras') + state.llm.providers.forEach((provider) => { + if (provider.id === SystemProviderIds.minimax) { + provider.anthropicApiHost = 'https://api.minimaxi.com/anthropic' + } + }) + return state + } catch (error) { + logger.error('migrate 174 error', error as Error) + return state + } } } diff --git a/src/renderer/src/types/provider.ts b/src/renderer/src/types/provider.ts index b7d669e1f2..5bd605007e 100644 --- a/src/renderer/src/types/provider.ts +++ b/src/renderer/src/types/provider.ts @@ -11,7 +11,8 @@ export const ProviderTypeSchema = z.enum([ 'mistral', 'aws-bedrock', 'vertex-anthropic', - 'new-api' + 'new-api', + 'ai-gateway' ]) export type ProviderType = z.infer @@ -176,7 +177,9 @@ export const SystemProviderIds = { poe: 'poe', aionly: 'aionly', longcat: 'longcat', - huggingface: 'huggingface' + huggingface: 'huggingface', + 'ai-gateway': 'ai-gateway', + cerebras: 'cerebras' } as const export type SystemProviderId = keyof typeof SystemProviderIds diff --git a/src/renderer/src/types/sdk.ts b/src/renderer/src/types/sdk.ts index 90a0101563..66e6b3627a 100644 --- a/src/renderer/src/types/sdk.ts +++ b/src/renderer/src/types/sdk.ts @@ -97,6 +97,7 @@ export type ReasoningEffortOptionalParams = { } } } + disable_reasoning?: boolean // Add any other potential reasoning-related keys here if they exist } diff --git a/yarn.lock b/yarn.lock index 93aa3cbbfb..d06f134acd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -127,6 +127,19 @@ __metadata: languageName: node linkType: hard +"@ai-sdk/cerebras@npm:^1.0.31": + version: 1.0.31 + resolution: "@ai-sdk/cerebras@npm:1.0.31" + dependencies: + "@ai-sdk/openai-compatible": "npm:1.0.27" + "@ai-sdk/provider": "npm:2.0.0" + "@ai-sdk/provider-utils": "npm:3.0.17" + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + checksum: 10c0/0723f0041b767acfb7a9d903d51d5c95af83c31c89b83f242cb5c02a076d8b98f6567334eb32dcdbc8565b55ded2aa5195ca68612bbe7b13e68253cf4ef412d6 + languageName: node + linkType: hard + "@ai-sdk/deepseek@npm:^1.0.27": version: 1.0.27 resolution: "@ai-sdk/deepseek@npm:1.0.27" @@ -153,6 +166,19 @@ __metadata: languageName: node linkType: hard +"@ai-sdk/gateway@npm:^2.0.9": + version: 2.0.9 + resolution: "@ai-sdk/gateway@npm:2.0.9" + dependencies: + "@ai-sdk/provider": "npm:2.0.0" + "@ai-sdk/provider-utils": "npm:3.0.17" + "@vercel/oidc": "npm:3.0.3" + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + checksum: 10c0/840f94795b96c0fa6e73897ea8dba95fc78af1f8482f3b7d8439b6233b4f4de6979a8b67206f4bbf32649baf2acfb1153a46792dfa20259ca9f5fd214fb25fa5 + languageName: node + linkType: hard + "@ai-sdk/google-vertex@npm:^3.0.62": version: 3.0.62 resolution: "@ai-sdk/google-vertex@npm:3.0.62" @@ -242,6 +268,18 @@ __metadata: languageName: node linkType: hard +"@ai-sdk/openai-compatible@npm:1.0.27": + version: 1.0.27 + resolution: "@ai-sdk/openai-compatible@npm:1.0.27" + dependencies: + "@ai-sdk/provider": "npm:2.0.0" + "@ai-sdk/provider-utils": "npm:3.0.17" + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + checksum: 10c0/9f656e4f2ea4d714dc05be588baafd962b2e0360e9195fef373e745efeb20172698ea87e1033c0c5e1f1aa6e0db76a32629427bc8433eb42bd1a0ee00e04af0c + languageName: node + linkType: hard + "@ai-sdk/openai-compatible@npm:^1.0.19": version: 1.0.19 resolution: "@ai-sdk/openai-compatible@npm:1.0.19" @@ -316,7 +354,7 @@ __metadata: languageName: node linkType: hard -"@ai-sdk/provider-utils@npm:3.0.17, @ai-sdk/provider-utils@npm:^3.0.10, @ai-sdk/provider-utils@npm:^3.0.12": +"@ai-sdk/provider-utils@npm:3.0.17, @ai-sdk/provider-utils@npm:^3.0.10": version: 3.0.17 resolution: "@ai-sdk/provider-utils@npm:3.0.17" dependencies: @@ -329,6 +367,19 @@ __metadata: languageName: node linkType: hard +"@ai-sdk/provider-utils@npm:^3.0.12": + version: 3.0.12 + resolution: "@ai-sdk/provider-utils@npm:3.0.12" + dependencies: + "@ai-sdk/provider": "npm:2.0.0" + "@standard-schema/spec": "npm:^1.0.0" + eventsource-parser: "npm:^3.0.5" + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + checksum: 10c0/83886bf188cad0cc655b680b710a10413989eaba9ec59dd24a58b985c02a8a1d50ad0f96dd5259385c07592ec3c37a7769fdf4a1ef569a73c9edbdb2cd585915 + languageName: node + linkType: hard + "@ai-sdk/provider@npm:2.0.0, @ai-sdk/provider@npm:^2.0.0": version: 2.0.0 resolution: "@ai-sdk/provider@npm:2.0.0" @@ -9879,6 +9930,8 @@ __metadata: "@agentic/searxng": "npm:^7.3.3" "@agentic/tavily": "npm:^7.3.3" "@ai-sdk/amazon-bedrock": "npm:^3.0.53" + "@ai-sdk/cerebras": "npm:^1.0.31" + "@ai-sdk/gateway": "npm:^2.0.9" "@ai-sdk/google-vertex": "npm:^3.0.62" "@ai-sdk/huggingface": "patch:@ai-sdk/huggingface@npm%3A0.0.8#~/.yarn/patches/@ai-sdk-huggingface-npm-0.0.8-d4d0aaac93.patch" "@ai-sdk/mistral": "npm:^2.0.23"