Skip to content

Provider 构造与配置:迁移后遗留缺口 #275

Open

Description

@cunninghamcard-bit

核对基线:master 5743a40a,#268 头 b1b33b69。对齐文档 §9.1 有几项写着"随绑定迁移那一层做",#265 和 #268 都没有做;另有几项是迁移中丢掉或部分完成后 issue 已关闭的。

清单

  • providers_from_config 与结构化 {env} 引用(对齐文档 §3.3、§9.1)。[14/14] feat!: ops layer, C ABI and bindings #265 删除了全局 overlay 和 aimux_register_providers,目前没有从配置批量注册外部 provider 的入口,相对 0.5 是能力退化(RFC-0020)。
  • ProviderRegistration 与厂商扩展,注册表里的具名方法可达(对齐文档 §3.4、D13、D29、§9.1)。
  • provider 描述符补全:manifest 只有包名,provider.invoke 只接受 listModels,文本 op 不解析字符串模型 ID(RFC-0039 G-f)。
  • Codex 订阅模式(RFC-0018 Path B)在绑定里构造不出来:create_provider 对 codex 拒绝显式 api_key(aimux-providers/src/default_providers.rs:344-350),凭证解析返回 unsupported。
  • 厂商内置工具工厂:只有 OpenAI、Azure 在 provider 上有 tools(aimux-providers/src/openai/tools.rs:666)。Anthropic、Anthropic on AWS、Bedrock、Google、Vertex、Groq、xAI 没有工厂,用户只能手写工具 ID 和参数;参数名写错会被静默丢弃(anthropic/prepare_tools.rs:95),漏设 supportsDeferredResults 时延迟结果会报 "Tool call … not found"(aimux-core/src/generate.rs:1365-1378)。这是 V4 alignment: provider factory, HTTP and auth #230 C23 的剩余部分([6/8] fix: vendors follow the upstream packages #254 写明属于新功能),V4 alignment: provider factory, HTTP and auth #230 关闭时未转出。
  • 工具工厂经 ops 对绑定开放:目前绑定对所有厂商都只能手写 provider 工具 DTO。
  • Swift 类型化值保键序(对齐文档 §9.1,V4 alignment: core types, stream parts, results and call pipeline vs ai 7.x #229 NP2-1)。
  • Bedrock Mantle 改为完整 provider(对齐文档 §9.1)。

Activity

  1. cunninghamcard-bit commented on Oct 19, 2026

    @cunninghamcard-bit
    ContributorAuthor

    补充:核对上游测试覆盖(#278)时发现以下 provider 功能上游有测试,aimux 没有实现,对齐文档和 rfc-0039-implementation 里也没登记。实现或登记为差异。

    • Google Interactions 语言模型(google-interactions-language-model.test.ts 88 个用例;现在只在转写里用了 Interactions API)
    • xAI 的 files(上传 /v1/files、下载内容)和图片模型(aimux-providers/src/xai/mod.rs:437 的 image_model 返回 no_such_model)
    • OpenAI files 下载(aimux-core/src/files_model.rs 只有 upload_file)
    • Google Files 上传的逐次请求头(UploadFileCallOptions 没有 headers)
    • Vertex location 校验(aimux-providers/src/vertex/mod.rs:138-142 接受任意字符串):fix: Vertex location must be one DNS label #282 已合并(b91829af)
    • Google 视频模型自定义 generateId(aimux-providers/src/google/video.rs:26-34)

    Generated by Claude Code

  2. cunninghamcard-bit commented on Oct 19, 2026

    @cunninghamcard-bit
    ContributorAuthor

    补充:provider 行为偏差,按锁定版本(fixtures/aisdk/VERSIONS.json)核实过,每处一个 PR。

    迁移上游测试(RFC-0045)时发现的偏差,由测试迁移那边负责。按 li 的要求每家合成一个 fix PR、每处差异一个提交,都基于 master,被合并的 PR 已关闭并留了指向:

    还没有 PR 的:

    • SigV4Fetch 把凭证失败包成 ApiCall(provider-utils 层,Bedrock、Polly 同样受影响;迁移 @ai-sdk/anthropic-aws 2.0.63 测试时发现)。
    • NoSuchModel 的文案是 no such model: …,上游是 No such {modelType}: …;属于 core,和 Core 运行时:与 AI SDK 的剩余差距(对齐文档 §9.1 已知差距) #276 评论 Core 运行时:与 AI SDK 的剩余差距(对齐文档 §9.1 已知差距) #276 (comment) 那条一起处理。
    • Bedrock 缺 createAmazonBedrockCachePoint 构造器(子功能;上游 amazon-bedrock-api-types.test.ts 有 3 个用例,layout.toml 记为 sub-feature、issue 275)。Bedrock 上 provider 级的 anthropicTools 归在本 issue 正文的“厂商内置工具工厂”那条,Bedrock Mantle 归在正文最后一条。
    • Anthropic 缺的子功能(迁移 Anthropic 测试时发现,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 正文的“厂商内置工具工厂”那条。
    • Google 缺的子功能(迁移 Google 测试时发现,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)归在正文的“厂商内置工具工厂”那条。
    • Vertex 上 xAI 模型的 location 直接拼进路径、不做校验。这和锁定的 @ai-sdk/google-vertex 5.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

  3. cunninghamcard-bit commented on Oct 20, 2026

    @cunninghamcard-bit
    ContributorAuthor

    补一项(迁移 DeepSeek 上游测试时发现,#299):

    • DeepSeek Files(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

  4. cunninghamcard-bit commented on Oct 20, 2026

    @cunninghamcard-bit
    ContributorAuthor

    Groq 测试迁移(#301)对照 @ai-sdk/groq@4.0.52 时发现的缺口:

    上游 aimux 现状 记在
    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

  5. cunninghamcard-bit commented on Oct 20, 2026

    @cunninghamcard-bit
    ContributorAuthor

    xAI gaps found while porting the @ai-sdk/xai@5.0.12 tests (#312), recorded as missing / sub-feature with issue 275 in layout.toml:

    upstream what aimux lacks upstream cases not ported
    xai-image-model.ts, xai-image-model-options.ts, xai-image-settings.ts an xAI image model; Provider::image_model answers NoSuchModel 23 in xai-image-model.test.ts, 3 imageModel cases in xai-provider.test.ts
    files/xai-files.ts (+ api, options) the xAI Files API (upload, metadata, download, delete) 25 in files/xai-files.test.ts
    tool/*.ts (9 files) the xai.tools.* factories; callers build Tool::Provider with the id by hand none (no upstream test file)

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:providersProvider implementations (aimux-providers)enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions