fix: typecheck again

This commit is contained in:
suyao 2026-01-29 20:49:17 +08:00
parent 5e0fd67b44
commit b8235f5c75
No known key found for this signature in database
8 changed files with 74 additions and 31 deletions

View File

@ -94,17 +94,21 @@
"@agentic/tavily": "^7.3.3",
"@ai-sdk/amazon-bedrock": "^4.0.37",
"@ai-sdk/anthropic": "^3.0.29",
"@ai-sdk/azure": "^3.0.22",
"@ai-sdk/cerebras": "^2.0.24",
"@ai-sdk/gateway": "^3.0.27",
"@ai-sdk/google": "3.0.0",
"@ai-sdk/google-vertex": "^4.0.35",
"@ai-sdk/huggingface": "^1.0.23",
"@ai-sdk/mistral": "^3.0.13",
"@ai-sdk/openai": "3.0.0",
"@ai-sdk/openai": "^3.0.0",
"@ai-sdk/perplexity": "^3.0.12",
"@ai-sdk/provider": "^3.0.5",
"@ai-sdk/provider-utils": "^4.0.10",
"@ai-sdk/test-server": "^1.0.3",
"@ai-sdk/xai": "^3.0.0",
"@ant-design/cssinjs": "1.23.0",
"@ant-design/icons": "5.6.1",
"@ant-design/v5-patch-for-react-19": "^1.0.3",
"@anthropic-ai/sdk": "^0.41.0",
"@anthropic-ai/vertex-sdk": "0.11.4",
@ -201,6 +205,7 @@
"@tiptap/y-tiptap": "^3.0.0",
"@truto/turndown-plugin-gfm": "^1.0.2",
"@tryfabric/martian": "^1.2.4",
"@types/adm-zip": "^0.5.7",
"@types/cli-progress": "^3",
"@types/content-type": "^1.1.9",
"@types/cors": "^2.8.19",
@ -244,6 +249,7 @@
"@viz-js/lang-dot": "^1.0.5",
"@viz-js/viz": "^3.14.0",
"@xyflow/react": "^12.4.4",
"adm-zip": "0.4.16",
"ai": "^6.0.59",
"antd": "5.27.0",
"archiver": "^7.0.1",

View File

@ -36,14 +36,14 @@
},
"peerDependencies": {
"@ai-sdk/anthropic": "^3.0.0",
"@ai-sdk/google": "^3.0.0",
"@ai-sdk/google": "3.0.0",
"@ai-sdk/openai": "^3.0.0",
"ai": "^6.0.26"
},
"dependencies": {
"@ai-sdk/openai-compatible": "2.0.0",
"@ai-sdk/provider": "^3.0.0",
"@ai-sdk/provider-utils": "^4.0.0"
"@ai-sdk/provider": "^3.0.5",
"@ai-sdk/provider-utils": "^4.0.10"
},
"devDependencies": {
"tsdown": "^0.13.3",

View File

@ -302,7 +302,7 @@ export const createPromptToolUsePlugin = (
const promptTools: ToolSet = {}
for (const [toolName, tool] of Object.entries(params.tools as ToolSet)) {
if (tool.type === 'provider-defined') {
if (tool.type === 'provider') {
// provider 类型的工具保留在 tools 参数中
providerDefinedTools[toolName] = tool
} else {

49
pnpm-lock.yaml generated
View File

@ -164,6 +164,9 @@ importers:
'@ai-sdk/anthropic':
specifier: ^3.0.29
version: 3.0.29(zod@4.3.4)
'@ai-sdk/azure':
specifier: ^3.0.22
version: 3.0.22(zod@4.3.4)
'@ai-sdk/cerebras':
specifier: ^2.0.24
version: 2.0.24(zod@4.3.4)
@ -183,8 +186,8 @@ importers:
specifier: ^3.0.13
version: 3.0.13(zod@4.3.4)
'@ai-sdk/openai':
specifier: 3.0.0
version: 3.0.0(patch_hash=0de8145a8df9e7d3d2166789cf1a033e7560d2383142dd7dda4a461b36db2d72)(zod@4.3.4)
specifier: ^3.0.0
version: 3.0.21(zod@4.3.4)
'@ai-sdk/perplexity':
specifier: ^3.0.12
version: 3.0.12(zod@4.3.4)
@ -197,6 +200,15 @@ importers:
'@ai-sdk/test-server':
specifier: ^1.0.3
version: 1.0.3(@types/node@22.17.2)(typescript@5.8.3)
'@ai-sdk/xai':
specifier: ^3.0.0
version: 3.0.41(zod@4.3.4)
'@ant-design/cssinjs':
specifier: 1.23.0
version: 1.23.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
'@ant-design/icons':
specifier: 5.6.1
version: 5.6.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
'@ant-design/v5-patch-for-react-19':
specifier: ^1.0.3
version: 1.0.3(antd@5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@ -485,6 +497,9 @@ importers:
'@tryfabric/martian':
specifier: ^1.2.4
version: 1.2.4(encoding@0.1.13)
'@types/adm-zip':
specifier: ^0.5.7
version: 0.5.7
'@types/cli-progress':
specifier: ^3
version: 3.11.6
@ -614,6 +629,9 @@ importers:
'@xyflow/react':
specifier: ^12.4.4
version: 12.10.0(@types/react@19.2.7)(immer@11.1.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
adm-zip:
specifier: 0.4.16
version: 0.4.16
ai:
specifier: ^6.0.59
version: 6.0.59(zod@4.3.4)
@ -1201,7 +1219,7 @@ importers:
specifier: ^3.0.0
version: 3.0.29(zod@4.3.6)
'@ai-sdk/google':
specifier: ^3.0.0
specifier: 3.0.0
version: 3.0.0(patch_hash=540e635fb8eaa926cb5541afd0842705ed1530ce94ec9627d9e9694ccea58115)(zod@4.3.6)
'@ai-sdk/openai':
specifier: ^3.0.0
@ -1210,10 +1228,10 @@ importers:
specifier: 2.0.0
version: 2.0.0(patch_hash=8485d66a36f6f8fc2640cd0a3da860a01fb7b7b94f9ef7847f7e14fa333f8ea8)(zod@4.3.6)
'@ai-sdk/provider':
specifier: ^3.0.0
specifier: ^3.0.5
version: 3.0.5
'@ai-sdk/provider-utils':
specifier: ^4.0.0
specifier: ^4.0.10
version: 4.0.10(zod@4.3.6)
ai:
specifier: ^6.0.26
@ -5061,6 +5079,9 @@ packages:
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
'@types/adm-zip@0.5.7':
resolution: {integrity: sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==}
'@types/aria-query@5.0.4':
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
@ -16693,6 +16714,10 @@ snapshots:
tslib: 2.8.1
optional: true
'@types/adm-zip@0.5.7':
dependencies:
'@types/node': 22.17.2
'@types/aria-query@5.0.4': {}
'@types/body-parser@1.19.6':
@ -17702,11 +17727,11 @@ snapshots:
- utf-8-validate
- vite
'@vitest/browser@3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(playwright@1.57.0)(rolldown-vite@7.3.0(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4)':
'@vitest/browser@3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(playwright@1.57.0)(rolldown-vite@7.3.0(@types/node@22.17.2)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4)':
dependencies:
'@testing-library/dom': 10.4.1
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
'@vitest/mocker': 3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(rolldown-vite@7.3.0(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/mocker': 3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(rolldown-vite@7.3.0(@types/node@22.17.2)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/utils': 3.2.4
magic-string: 0.30.21
sirv: 3.0.2
@ -17760,14 +17785,14 @@ snapshots:
msw: 2.12.7(@types/node@22.17.2)(typescript@5.8.3)
vite: rolldown-vite@7.3.0(@types/node@22.17.2)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)
'@vitest/mocker@3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(rolldown-vite@7.3.0(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))':
'@vitest/mocker@3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(rolldown-vite@7.3.0(@types/node@22.17.2)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
msw: 2.12.7(@types/node@24.10.4)(typescript@5.8.3)
vite: rolldown-vite@7.3.0(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)
vite: rolldown-vite@7.3.0(@types/node@22.17.2)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)
'@vitest/pretty-format@3.2.4':
dependencies:
@ -17798,7 +17823,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(esbuild@0.25.12)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(tsx@4.21.0)(yaml@2.8.2)
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(esbuild@0.25.12)(jiti@2.6.1)(jsdom@26.1.0)(msw@2.12.7(@types/node@22.17.2)(typescript@5.8.3))(tsx@4.21.0)(yaml@2.8.2)
'@vitest/utils@3.2.4':
dependencies:
@ -25175,7 +25200,7 @@ snapshots:
dependencies:
'@types/chai': 5.2.3
'@vitest/expect': 3.2.4
'@vitest/mocker': 3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(rolldown-vite@7.3.0(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/mocker': 3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(rolldown-vite@7.3.0(@types/node@22.17.2)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@ -25199,7 +25224,7 @@ snapshots:
optionalDependencies:
'@types/debug': 4.1.12
'@types/node': 24.10.4
'@vitest/browser': 3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(playwright@1.57.0)(rolldown-vite@7.3.0(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4)
'@vitest/browser': 3.2.4(msw@2.12.7(@types/node@24.10.4)(typescript@5.8.3))(playwright@1.57.0)(rolldown-vite@7.3.0(@types/node@22.17.2)(esbuild@0.25.12)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.2.4)
'@vitest/ui': 3.2.4(vitest@3.2.4)
jsdom: 26.1.0
transitivePeerDependencies:

View File

@ -11,6 +11,7 @@ import { getAiSdkProviderId } from '../provider/factory'
import type { AiSdkMiddlewareConfig } from '../types/middlewareConfig'
import { isOpenRouterGeminiGenerateImageModel } from '../utils/image'
import { getReasoningTagName } from '../utils/reasoning'
import { createAnthropicCachePlugin } from './anthropicCachePlugin'
import { createNoThinkPlugin } from './noThinkPlugin'
import { createOpenrouterGenerateImagePlugin } from './openrouterGenerateImagePlugin'
import { createOpenrouterReasoningPlugin } from './openrouterReasoningPlugin'
@ -26,7 +27,7 @@ const logger = loggerService.withContext('PluginBuilder')
*
*/
export function buildPlugins(
middlewareConfig: AiSdkMiddlewareConfig & { assistant: Assistant; topicId?: string; mcpMode?: string }
middlewareConfig: AiSdkMiddlewareConfig & { assistant: Assistant; topicId?: string }
): AiPlugin[] {
const plugins: AiPlugin<any, any>[] = []
@ -55,6 +56,10 @@ export function buildPlugins(
const tagName = getReasoningTagName(middlewareConfig.model?.id.toLowerCase())
plugins.push(createReasoningExtractionPlugin({ tagName }))
}
if (providerType === 'anthropic' && middlewareConfig.provider.anthropicCacheControl?.tokenThreshold) {
plugins.push(createAnthropicCachePlugin())
}
}
// 0.3 OpenRouter reasoning redaction

View File

@ -3,6 +3,7 @@
* @see https://ai-sdk.dev/providers/ai-sdk-providers/anthropic#cache-control
*/
import type { LanguageModelV3Message } from '@ai-sdk/provider'
import { definePlugin } from '@cherrystudio/ai-core/core/plugins'
import { estimateTextTokens } from '@renderer/services/TokenService'
import type { Provider } from '@renderer/types'
import type { LanguageModelMiddleware } from 'ai'
@ -24,9 +25,9 @@ function estimateContentTokens(content: LanguageModelV3Message['content']): numb
return 0
}
export function anthropicCacheMiddleware(provider: Provider): LanguageModelMiddleware {
function anthropicCacheMiddleware(provider: Provider): LanguageModelMiddleware {
return {
middlewareVersion: 'v3',
specificationVersion: 'v3',
transformParams: async ({ params }) => {
const settings = provider.anthropicCacheControl
if (!settings?.tokenThreshold || !Array.isArray(params.prompt) || params.prompt.length === 0) {
@ -83,3 +84,13 @@ export function anthropicCacheMiddleware(provider: Provider): LanguageModelMiddl
}
}
}
export const createAnthropicCachePlugin = () =>
definePlugin({
name: 'anthropicCache',
enforce: 'pre',
configureContext: (context) => {
context.middlewares = context.middlewares || []
context.middlewares.push(anthropicCacheMiddleware(context.provider))
}
})

View File

@ -195,17 +195,12 @@ export async function buildStreamTextParams(
case 'anthropic':
case 'azure-anthropic':
case 'google-vertex-anthropic':
tools.web_fetch = (
['anthropic', 'azure-anthropic'].includes(aiSdkProviderId)
? anthropic.tools.webFetch_20250910({
maxUses: webSearchConfig.maxResults,
blockedDomains: blockedDomains.length > 0 ? blockedDomains : undefined
})
: vertexAnthropic.tools.webFetch_20250910({
maxUses: webSearchConfig.maxResults,
blockedDomains: blockedDomains.length > 0 ? blockedDomains : undefined
})
) as ProviderDefinedTool
if (['anthropic', 'azure-anthropic'].includes(aiSdkProviderId)) {
tools.web_fetch = anthropic.tools.webFetch_20250910({
maxUses: webSearchConfig.maxResults,
blockedDomains: blockedDomains.length > 0 ? blockedDomains : undefined
}) as ProviderDefinedTool
}
break
}
}

View File

@ -23,4 +23,5 @@ export interface AiSdkMiddlewareConfig {
uiMessages?: Message[]
webSearchPluginConfig?: WebSearchPluginConfig
knowledgeRecognition?: 'off' | 'on'
mcpMode?: string
}