diff --git a/.gitignore b/.gitignore index fcaa2be16..f4cc92ce3 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,8 @@ local .qwen/* .trae/* .claude-code-router/* +.codebuddy/* +.zed/* CLAUDE.local.md # vitest diff --git a/src/renderer/src/aiCore/middleware/AiSdkMiddlewareBuilder.ts b/src/renderer/src/aiCore/middleware/AiSdkMiddlewareBuilder.ts index eabdf1815..1f18e49ba 100644 --- a/src/renderer/src/aiCore/middleware/AiSdkMiddlewareBuilder.ts +++ b/src/renderer/src/aiCore/middleware/AiSdkMiddlewareBuilder.ts @@ -140,7 +140,17 @@ export function buildAiSdkMiddlewares(config: AiSdkMiddlewareConfig): LanguageMo return builder.build() } -const tagNameArray = ['think', 'thought', 'reasoning'] +const tagName = { + reasoning: 'reasoning', + think: 'think', + thought: 'thought' +} + +function getReasoningTagName(modelId: string | undefined): string { + if (modelId?.includes('gpt-oss')) return tagName.reasoning + if (modelId?.includes('gemini')) return tagName.thought + return tagName.think +} /** * 添加provider特定的中间件 @@ -156,7 +166,7 @@ function addProviderSpecificMiddlewares(builder: AiSdkMiddlewareBuilder, config: case 'openai': case 'azure-openai': { if (config.enableReasoning) { - const tagName = config.model?.id.includes('gemini') ? tagNameArray[1] : tagNameArray[0] + const tagName = getReasoningTagName(config.model?.id.toLowerCase()) builder.add({ name: 'thinking-tag-extraction', middleware: extractReasoningMiddleware({ tagName }) @@ -168,13 +178,6 @@ function addProviderSpecificMiddlewares(builder: AiSdkMiddlewareBuilder, config: // Gemini特定中间件 break case 'aws-bedrock': { - if (config.model?.id.includes('gpt-oss')) { - const tagName = tagNameArray[2] - builder.add({ - name: 'thinking-tag-extraction', - middleware: extractReasoningMiddleware({ tagName }) - }) - } break } default: diff --git a/src/renderer/src/utils/__tests__/api.test.ts b/src/renderer/src/utils/__tests__/api.test.ts index ee91e2ad2..f25ac2e68 100644 --- a/src/renderer/src/utils/__tests__/api.test.ts +++ b/src/renderer/src/utils/__tests__/api.test.ts @@ -25,7 +25,7 @@ describe('api', () => { }) it('should handle empty string gracefully', () => { - expect(formatApiHost('')).toBe('/v1/') + expect(formatApiHost('')).toBe('') }) }) diff --git a/src/renderer/src/utils/api.ts b/src/renderer/src/utils/api.ts index 5e9b8f91a..62d0db562 100644 --- a/src/renderer/src/utils/api.ts +++ b/src/renderer/src/utils/api.ts @@ -20,6 +20,10 @@ export function formatApiKeys(value: string): string { * @returns {string} 格式化后的 API 主机地址。 */ export function formatApiHost(host: string, apiVersion: string = 'v1'): string { + if (!host) { + return '' + } + const forceUseOriginalHost = () => { if (host.endsWith('/')) { return true