You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Vertex Gemini 用计数器生成文本、推理和工具调用的 ID,上游用注入的 generateId;复制的那份模型和 Google 走样了。上游 Vertex 直接复用 Google 模型,aimux 也改成复用。服务端工具 metadata 不写空的 thoughtSignature 也在这里:fix: Vertex Gemini uses the Google model #291,已合并(6c5ff9f6)
Google Vertex(fix: Vertex image and Live transcription match the AI SDK #351,2 个提交):Gemini Live 转写(Google 和 Vertex)在音频结束前被服务端关闭时,应报上游的 … Live transcription WebSocket closed unexpectedly before finishing (code …, reason: …),现在透出的是 websocket closed by peer (…);Vertex 图片模型 gemini-2.5-flash-image、gemini-3-pro-image-preview、gemini-3.1-flash-image-preview 按 @ai-sdk/google-vertex 5.0.100 报 supports_file_inputs 为 true、supports_mask_inputs 为 false,原来都是未知。Vertex 的子功能缺口记在 test: port the upstream Google Vertex tests #352 的 layout.toml[vertex]。
Activity
cunninghamcard-bit commentedon Oct 19, 2026
补充:核对上游测试覆盖(#278)时发现以下 provider 功能上游有测试,aimux 没有实现,对齐文档和 rfc-0039-implementation 里也没登记。实现或登记为差异。
google-interactions-language-model.test.ts88 个用例;现在只在转写里用了 Interactions API)/v1/files、下载内容)和图片模型(aimux-providers/src/xai/mod.rs:437的image_model返回 no_such_model)aimux-core/src/files_model.rs只有upload_file)UploadFileCallOptions没有 headers)aimux-providers/src/vertex/mod.rs:138-142接受任意字符串):fix: Vertex location must be one DNS label #282 已合并(b91829af)generateId(aimux-providers/src/google/video.rs:26-34)Generated by Claude Code
cunninghamcard-bit commentedon Oct 19, 2026
补充:provider 行为偏差,按锁定版本(
fixtures/aisdk/VERSIONS.json)核实过,每处一个 PR。@ai-sdk/google-vertex5.0.100 才有,fix: Vertex location must be one DNS label #282 把锁从 5.0.98 移到 5.0.100。injectJsonInstruction(Core 运行时:与 AI SDK 的剩余差距(对齐文档 §9.1 已知差距) #276 评论里那条):fix: Mistral injects the JSON instruction like the AI SDK #283,已合并(c0622ea4)。这项从@ai-sdk/mistral4.0.55 才有,fix: Mistral injects the JSON instruction like the AI SDK #283 把锁移到 4.0.55。supports_structured_outputs;按ai@7.0.127时发布的版本,vercel 和 v0 不开,togetherai 只对一个模型开,moonshotai 只对kimi-k*和七个moonshot-v1-*模型开(RFC-0046 草稿扫描发现,原来没有 issue):fix: presets follow the AI SDK structured outputs setting #284,已合并(d03fe9ec)include_raw_chunks(Core 运行时:与 AI SDK 的剩余差距(对齐文档 §9.1 已知差距) #276 条目):fix: Open Responses and Codex send raw chunks #285,已合并(1affe41f)stream_text_as_openai)不用 provider 报的响应 id 和 model(对齐文档登记的回退):fix: OpenAI output stream keeps the response id and model #287,已合并(1d153d9d)replace('-', '_')猜 package 名(Core 运行时:与 AI SDK 的剩余差距(对齐文档 §9.1 已知差距) #276 条目):fix: catalogue resolves package names from the descriptor table #288,已合并(e115e723)generateId;复制的那份模型和 Google 走样了。上游 Vertex 直接复用 Google 模型,aimux 也改成复用。服务端工具 metadata 不写空的thoughtSignature也在这里:fix: Vertex Gemini uses the Google model #291,已合并(6c5ff9f6)CONTINUATION映射(4.0.95 起)都比锁定的@ai-sdk/google4.0.87 新,已登记到 Core 运行时:与 AI SDK 的剩余差距(对齐文档 §9.1 已知差距) #276(https://github.com/arcships/aimux/issues/276#issuecomment-6282475993)。迁移上游测试(RFC-0045)时发现的偏差,由测试迁移那边负责。按 li 的要求每家合成一个 fix PR、每处差异一个提交,都基于 master,被合并的 PR 已关闭并留了指向:
mcp_call/mcp_list_tools多带了dynamic: true;function_call输出项的 output 被丢掉,mcp_calloutput 为空时也发了 tool-result;流错误只认顶层error字段,漏了response.failed和消息放在事件本身的error事件,出错后结束原因停在other。usage.raw丢掉了值为 null 的字段。anthropic-aws.messages;supportedUrls补上image/*和application/pdf;缺AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY时给出上游的引导信息;凭证回调失败时包成AWS credential provider failed: …;不传 fetch 时每次请求取当时的默认 transport。max_num_results按整数发送;Responses 流里没有response.created时 finish 的responseId是 null 而不是"";推理 delta 带上providerMetadata.<key>.itemId。UnsupportedFunctionality;工具调用回放 item id;输出 part 带上 item 元数据(itemId、annotations、推理元数据);只有 summary 的推理 item 也产出 reasoning;流式输出推理 summary 的 delta;未完成的推理以它的 item id 结束;流式工具调用取完成时的参数;流错误变成 error part;没有 schema 的 JSON 输出用json_object;provider 定义的工具不支持(给 warning,省略 tool choice);读取 reasoning effort 选项;响应错误报状态码 400;缺少 output 时报 API 调用错误(状态码 500)。首个事件就是error的情况仍按已登记的 SSE 预读处理,不算偏差;extension registry、customToolId和自定义工具调用、getResponseErrorMetadata、strictResponseInput作为子功能另记在本 issue。… Live transcription WebSocket closed unexpectedly before finishing (code …, reason: …),现在透出的是websocket closed by peer (…);Vertex 图片模型gemini-2.5-flash-image、gemini-3-pro-image-preview、gemini-3.1-flash-image-preview按@ai-sdk/google-vertex5.0.100 报supports_file_inputs为 true、supports_mask_inputs为 false,原来都是未知。Vertex 的子功能缺口记在 test: port the upstream Google Vertex tests #352 的layout.toml[vertex]。JsonParse只带了 serde 的报错,上游是JSON parsing failed: Text: {data}.\nError message: …;改在create_event_source_response_handler,所有用它的厂商都跟着对齐,错误类型仍是JsonParse。@smithy/eventstream-codec的报错文字;不支持的文件 part 用 AI SDK 的功能名(file parts with provider references、File URL data,s3:先于 media type 检查,tool result file data of type "<kind>");usage.raw原样保留 usage 对象,包括显式 null 和未知键;do_generate遇到空的toolUseId时生成一个 id;被拒绝的采样参数按 temperature、topK、topP 的顺序给 warning;Nova 2 高推理的maxOutputTokenswarning 带上模型名;不传 fetch 时每次请求取当时的默认 transport(和 fix: Anthropic AWS resolves the default fetch per request #318 的 Anthropic AWS 一样)。@ai-sdk/anthropic4.0.71;第 13 个提交是和 fix: OpenAI-compatible unparsable stream chunks are AI SDK parse errors #354 相同的 SSE 解析报错改动):历史里找不到对应调用的 programmatic tool caller 被丢弃并给 warning;不支持的 provider 执行工具结果的 warning 带上输出类型;回放 MCP 工具结果时给 warning;服务端 fallback 块保留为anthropic.fallback自定义 part 并原样发回;没有 citations 的 web_fetch 结果不带 citations 键;safeguards 选项连同 dangerous-tool-use beta 一起发送;认识 Vertex 的claude-sonnet-4@…/claude-opus-4@…模型 id;anthropic-beta头按加入顺序拼接(公开类型由BTreeSet改为IndexSet);流式 code execution 工具的 input 保持流里收到的文本;message_stop之后继续读流;message_start里带的工具调用也流出来;首个 chunk 就报错时,错误 body 是错误数据本身,状态码默认 500。@ai-sdk/google4.0.87,测试 PR test: port the upstream Google tests #363 叠在上面):Gemini 图片模型gemini-2.5-flash-image、gemini-3-pro-image-preview、gemini-3.1-flash-image-preview报supports_file_inputs为 true、supports_mask_inputs为 false,原来所有 id 都是未知;第二个提交是 fix: Vertex image and Live transcription match the AI SDK #351 的 Live 转写关闭报错改动,fix: Vertex image and Live transcription match the AI SDK #351 合并后不产生差异。还没有 PR 的:
SigV4Fetch把凭证失败包成ApiCall(provider-utils 层,Bedrock、Polly 同样受影响;迁移@ai-sdk/anthropic-aws2.0.63 测试时发现)。NoSuchModel的文案是no such model: …,上游是No such {modelType}: …;属于 core,和 Core 运行时:与 AI SDK 的剩余差距(对齐文档 §9.1 已知差距) #276 评论 Core 运行时:与 AI SDK 的剩余差距(对齐文档 §9.1 已知差距) #276 (comment) 那条一起处理。createAmazonBedrockCachePoint构造器(子功能;上游amazon-bedrock-api-types.test.ts有 3 个用例,layout.toml记为 sub-feature、issue 275)。Bedrock 上 provider 级的anthropicTools归在本 issue 正文的“厂商内置工具工厂”那条,Bedrock Mantle 归在正文最后一条。layout.toml记在随后的 Anthropic 测试 PR 里、issue 275):Message Batches API(anthropic-batch.ts,上游 38 个用例);uploadFile的单次调用 headers 和 abortSignal;aimux-core 没有NoSuchProviderReference错误类型(自定义 skill 的 provider reference 要用)。Anthropic 的工具工厂(anthropic-tools.ts、tool/*.ts,bash sandbox 带 abort signal 执行、web_fetch / web_search 输出 schema,8 个用例)归在本 issue 正文的“厂商内置工具工厂”那条。layout.toml记在 test: port the upstream Google tests #363、issue 275):realtime 模型(realtime/*,上游 84 个用例);语音翻译模型(21 个);Google Batch API(27 个,含 provider 的 supported URL 与 batch 模型取交集);工具结果文件下载(downloadToolResultFiles)和supportedFunctionResponseUrls白名单;embedding 按批次转换 provider options;ImageResult没有isRetryable;TranscriptionResult和转写流的 Finish part 没有 usage;grounding metadata 存成无类型 JSON、不做 schema 校验。Interactions 语言模型(interactions/*合计 194 个用例)和uploadFile的单次调用 headers / abort signal 已记在本 issue 评论 Provider 构造与配置:迁移后遗留缺口 #275 (comment) ;Google 的工具工厂(google-tools.ts、tool/*.ts)归在正文的“厂商内置工具工厂”那条。@ai-sdk/google-vertex5.0.100 一致,不算偏差;eric 在 fix: Vertex location must be one DNS label #282 的批准里建议以后统一处理。核实后与上游一致、不算偏差的:xAI 拒绝工具时的默认文本、HuggingFace 忽略
toolChoice: none、Anthropic 显式outputFormat不看能力表、Vertex 上 Grok 的用量 total、Anthropic 工具参数名写错被丢弃(上游 zod 同样丢弃未知键)。Generated by Claude Code
cunninghamcard-bit commentedon Oct 20, 2026
补一项(迁移 DeepSeek 上游测试时发现,#299):
uploadFile):@ai-sdk/deepseek@3.0.56的src/files/deepseek-files.ts、deepseek-files-api.ts、deepseek-files-options.ts在 aimux 没有对应实现(aimux-providers/src/deepseek/里没有 files,provider 也没有files())。layout.toml里这三个文件记为missing、issue = 275;上游files/deepseek-files.test.ts的 20 个用例由实现它的 PR 一起带进来。Generated by Claude Code
cunninghamcard-bit commentedon Oct 20, 2026
Groq 测试迁移(#301)对照
@ai-sdk/groq@4.0.52时发现的缺口:groqTools.browserSearch()(src/groq-tools.ts、src/tool/browser-search.ts,createProviderExecutedToolFactory)prepare_tools认得groq.browser_search(aimux-providers/src/groq/prepare_tools.rs:33),但调用方要自己手写Tool::Provider { id: "groq.browser_search", .. }aimux-providers/layout.toml[groq],status = "missing"、issue = 275上游这两个文件没有自己的测试,补实现时不需要另外搬用例。
Generated by Claude Code
docs(rfc-0045): fix PRs go on the provider deviation list in #275
RFC-0045: 上游测试迁移策略 (#281)
cunninghamcard-bit commentedon Oct 20, 2026
xAI gaps found while porting the
@ai-sdk/xai@5.0.12tests (#312), recorded asmissing/sub-featurewith issue 275 inlayout.toml:xai-image-model.ts,xai-image-model-options.ts,xai-image-settings.tsProvider::image_modelanswersNoSuchModelxai-image-model.test.ts, 3imageModelcases inxai-provider.test.tsfiles/xai-files.ts(+ api, options)files/xai-files.test.tstool/*.ts(9 files)xai.tools.*factories; callers buildTool::Providerwith the id by handGenerated by Claude Code