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:
MyPrototypeWhat 2025-08-25 16:04:47 +08:00
parent 65c15c6d87
commit 417f90df3b
9 changed files with 71 additions and 31 deletions

View File

@ -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",

View File

@ -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) {

View File

@ -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') {

View File

@ -98,6 +98,7 @@ export type {
ToolResultPart,
ToolSet,
TypedToolCall,
TypedToolError,
TypedToolResult,
UserModelMessage
} from 'ai'

View File

@ -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

View File

@ -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
}
// 记录活跃的工具调用

View File

@ -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,

View File

@ -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'

View File

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