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 @@
+
\ 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"