mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-28 05:11:24 +08:00
feat(dependencies): update @ai-sdk/openai and @ai-sdk/provider-utils versions
- Upgraded `@ai-sdk/openai` to version 2.0.19 in `yarn.lock` and `package.json` for improved functionality and compatibility. - Updated `@ai-sdk/provider-utils` to version 3.0.5, enhancing dependency management. - Added `TypedToolError` type export in `index.ts` for better error handling. - Removed unnecessary console logs in `webSearchPlugin` for cleaner code. - Refactored type handling in `createProvider` to ensure proper type assertions. - Enforced `topicId` as a required field in the `ModernAiProvider` configuration for stricter validation.
This commit is contained in:
parent
65c15c6d87
commit
417f90df3b
@ -37,7 +37,7 @@
|
||||
"@ai-sdk/azure": "^2.0.16",
|
||||
"@ai-sdk/deepseek": "^1.0.9",
|
||||
"@ai-sdk/google": "^2.0.7",
|
||||
"@ai-sdk/openai": "^2.0.16",
|
||||
"@ai-sdk/openai": "^2.0.19",
|
||||
"@ai-sdk/openai-compatible": "^1.0.9",
|
||||
"@ai-sdk/provider": "^2.0.0",
|
||||
"@ai-sdk/provider-utils": "^3.0.4",
|
||||
|
||||
@ -23,7 +23,6 @@ export const webSearchPlugin = (config: WebSearchPluginConfig = DEFAULT_WEB_SEAR
|
||||
|
||||
transformParams: async (params: any, context: AiRequestContext) => {
|
||||
const { providerId } = context
|
||||
console.log('providerId', providerId)
|
||||
switch (providerId) {
|
||||
case 'openai': {
|
||||
if (config.openai) {
|
||||
|
||||
@ -40,7 +40,7 @@ export async function createProvider(config: ProviderConfig, options: any): Prom
|
||||
|
||||
// 方式二:动态导入 + 函数名
|
||||
if (config.import && config.creatorFunctionName) {
|
||||
const module = await config.import()
|
||||
const module = (await config.import()) as Record<string, unknown>
|
||||
const creatorFunction = module[config.creatorFunctionName]
|
||||
|
||||
if (typeof creatorFunction !== 'function') {
|
||||
|
||||
@ -98,6 +98,7 @@ export type {
|
||||
ToolResultPart,
|
||||
ToolSet,
|
||||
TypedToolCall,
|
||||
TypedToolError,
|
||||
TypedToolResult,
|
||||
UserModelMessage
|
||||
} from 'ai'
|
||||
|
||||
@ -185,19 +185,34 @@ export class AiSdkToChunkAdapter {
|
||||
source: WebSearchSource.GEMINI
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const providerName = Object.keys(providerMetadata || {})[0]
|
||||
// console.log('providerName', providerName)
|
||||
switch (providerName) {
|
||||
case WebSearchSource.OPENAI:
|
||||
this.onChunk({
|
||||
type: ChunkType.LLM_WEB_SEARCH_COMPLETE,
|
||||
llm_web_search: {
|
||||
results: final.webSearchResults,
|
||||
source: WebSearchSource.OPENAI_RESPONSE
|
||||
}
|
||||
})
|
||||
break
|
||||
default:
|
||||
this.onChunk({
|
||||
type: ChunkType.LLM_WEB_SEARCH_COMPLETE,
|
||||
llm_web_search: {
|
||||
results: final.webSearchResults,
|
||||
source: WebSearchSource.AISDK
|
||||
}
|
||||
})
|
||||
break
|
||||
}
|
||||
}
|
||||
if (finishReason === 'tool-calls') {
|
||||
this.onChunk({ type: ChunkType.LLM_RESPONSE_CREATED })
|
||||
}
|
||||
// else {
|
||||
// this.onChunk({
|
||||
// type: ChunkType.LLM_WEB_SEARCH_COMPLETE,
|
||||
// llm_web_search: {
|
||||
// results: final.webSearchResults,
|
||||
// source: WebSearchSource.AISDK
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
|
||||
final.webSearchResults = []
|
||||
// final.reasoningId = ''
|
||||
break
|
||||
|
||||
@ -155,7 +155,8 @@ export class ToolCallChunkHandler {
|
||||
return
|
||||
}
|
||||
|
||||
let tool: BaseTool | MCPTool
|
||||
let tool: BaseTool
|
||||
let mcpTool: MCPTool | undefined
|
||||
|
||||
// 根据 providerExecuted 标志区分处理逻辑
|
||||
if (providerExecuted) {
|
||||
@ -176,15 +177,22 @@ export class ToolCallChunkHandler {
|
||||
description: toolName,
|
||||
type: 'builtin'
|
||||
} as BaseTool
|
||||
} else {
|
||||
} else if ((mcpTool = this.mcpTools.find((t) => t.name === toolName) as MCPTool)) {
|
||||
// 如果是客户端执行的 MCP 工具,沿用现有逻辑
|
||||
logger.info(`[ToolCallChunkHandler] Handling client-side MCP tool: ${toolName}`)
|
||||
const mcpTool = this.mcpTools.find((t) => t.name === toolName)
|
||||
if (!mcpTool) {
|
||||
logger.warn(`[ToolCallChunkHandler] MCP tool not found: ${toolName}`)
|
||||
return
|
||||
// mcpTool = this.mcpTools.find((t) => t.name === toolName) as MCPTool
|
||||
// if (!mcpTool) {
|
||||
// logger.warn(`[ToolCallChunkHandler] MCP tool not found: ${toolName}`)
|
||||
// return
|
||||
// }
|
||||
tool = mcpTool
|
||||
} else {
|
||||
tool = {
|
||||
id: toolCallId,
|
||||
name: toolName,
|
||||
description: toolName,
|
||||
type: 'provider'
|
||||
}
|
||||
tool = mcpTool as MCPTool
|
||||
}
|
||||
|
||||
// 记录活跃的工具调用
|
||||
|
||||
@ -69,15 +69,10 @@ export default class ModernAiProvider {
|
||||
config: AiSdkMiddlewareConfig & {
|
||||
assistant: Assistant
|
||||
// topicId for tracing
|
||||
topicId?: string
|
||||
topicId: string
|
||||
callType: string
|
||||
}
|
||||
): Promise<CompletionsResult> {
|
||||
if (!config.topicId) {
|
||||
logger.warn('No topicId provided, falling back to regular completions')
|
||||
return await this.completions(modelId, params, config)
|
||||
}
|
||||
|
||||
const traceName = `${this.actualProvider.name}.${modelId}.${config.callType}`
|
||||
const traceParams: StartSpanParams = {
|
||||
name: traceName,
|
||||
|
||||
@ -38,13 +38,9 @@ export function providerToAiSdkConfig(actualProvider: Provider): {
|
||||
providerId: ProviderId | 'openai-compatible'
|
||||
options: ProviderSettingsMap[keyof ProviderSettingsMap]
|
||||
} {
|
||||
// console.log('actualProvider', actualProvider)
|
||||
const aiSdkProviderId = getAiSdkProviderId(actualProvider)
|
||||
// console.log('aiSdkProviderId', aiSdkProviderId)
|
||||
// 如果provider是openai,则使用strict模式并且默认responses api
|
||||
const actualProviderType = actualProvider.type
|
||||
const openaiResponseOptions =
|
||||
// 对于实际是openai的需要走responses,aiCore内部会判断model是否可用responses
|
||||
actualProviderType === 'openai-response'
|
||||
? {
|
||||
mode: 'responses'
|
||||
|
||||
30
yarn.lock
30
yarn.lock
@ -215,7 +215,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@ai-sdk/openai@npm:2.0.16, @ai-sdk/openai@npm:^2.0.16":
|
||||
"@ai-sdk/openai@npm:2.0.16":
|
||||
version: 2.0.16
|
||||
resolution: "@ai-sdk/openai@npm:2.0.16"
|
||||
dependencies:
|
||||
@ -227,6 +227,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@ai-sdk/openai@npm:^2.0.19":
|
||||
version: 2.0.19
|
||||
resolution: "@ai-sdk/openai@npm:2.0.19"
|
||||
dependencies:
|
||||
"@ai-sdk/provider": "npm:2.0.0"
|
||||
"@ai-sdk/provider-utils": "npm:3.0.5"
|
||||
peerDependencies:
|
||||
zod: ^3.25.76 || ^4
|
||||
checksum: 10c0/04db695669d783a810b80283e0cd48f6e7654667fd76ca2d35c7cffae6fdd68fb0473118e4e097ef1352f4432dd7c15c07f873d712b940c72495e5839b0ede98
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@ai-sdk/provider-utils@npm:3.0.3":
|
||||
version: 3.0.3
|
||||
resolution: "@ai-sdk/provider-utils@npm:3.0.3"
|
||||
@ -255,6 +267,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@ai-sdk/provider-utils@npm:3.0.5":
|
||||
version: 3.0.5
|
||||
resolution: "@ai-sdk/provider-utils@npm:3.0.5"
|
||||
dependencies:
|
||||
"@ai-sdk/provider": "npm:2.0.0"
|
||||
"@standard-schema/spec": "npm:^1.0.0"
|
||||
eventsource-parser: "npm:^3.0.3"
|
||||
zod-to-json-schema: "npm:^3.24.1"
|
||||
peerDependencies:
|
||||
zod: ^3.25.76 || ^4
|
||||
checksum: 10c0/4057810b320bda149a178dc1bfc9cdd592ca88b736c3c22bd0c1f8111c75ef69beec4a523f363e5d0d120348b876942fd66c0bb4965864da4c12c5cfddee15a3
|
||||
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"
|
||||
@ -2197,7 +2223,7 @@ __metadata:
|
||||
"@ai-sdk/azure": "npm:^2.0.16"
|
||||
"@ai-sdk/deepseek": "npm:^1.0.9"
|
||||
"@ai-sdk/google": "npm:^2.0.7"
|
||||
"@ai-sdk/openai": "npm:^2.0.16"
|
||||
"@ai-sdk/openai": "npm:^2.0.19"
|
||||
"@ai-sdk/openai-compatible": "npm:^1.0.9"
|
||||
"@ai-sdk/provider": "npm:^2.0.0"
|
||||
"@ai-sdk/provider-utils": "npm:^3.0.4"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user