Skip to content

chore(provider): 添加 Requesty 提供商 - #420

Open
Thibaultjaigu wants to merge 1 commit into
syrizelink:mainfrom
Thibaultjaigu:add-requesty-provider
Open

Thibaultjaigu wants to merge 1 commit into
syrizelink:mainfrom
Thibaultjaigu:add-requesty-provider

Conversation

@Thibaultjaigu

Copy link
Copy Markdown

变更说明

  • 问题: Requesty 目前只作为 models.dev 目录里的通用条目出现,模型发现走通用 OpenAI 兼容适配器,只支持 LLM,无效 Key 返回 403 时会被吞掉并显示为空列表。
  • 重要性: Requesty 是一个 OpenAI 兼容的 LLM 网关(https://router.requesty.ai/v1),一个 Key 可以调用各家模型,也提供 Embedding。
  • 变化: 参照 OpenRouter 的接入方式,新增 RequestyAdapter(backend/app/models/adapters/requesty.py),并在 registry.py、adapters/__init__.py、catalog/service.py 的 _PROVIDER_DEFINITIONS、ModelProvider.provider_type 描述中注册 requesty。
  • 模型发现: 先请求 /v1/models/managed(Requesty 维护的托管模型,如 gpt-5.4-mini),再合并 /v1/models 完整目录(vendor/model 格式,如 openai/gpt-4o-mini)。managed 失败时回退到完整目录;/v1/models 返回 403 时直接抛出,方便连接校验发现无效 Key。model_provider_service.py 中的 _get_model_discovery_provider_type 将 requesty 路由到该适配器。
  • 应用归因: 和 OpenRouter 一样,新增 helpers/requesty_attribution.py,在对话(_model_request_headers)、Embedding 和模型发现请求中附带 HTTP-Referer 与 X-Title,自定义请求头仍然优先。前端 provider-utils.ts 增加显示名称,并把 requesty 加入支持 Embedding 维度的列表。不支持 Rerank(Requesty 没有 rerank 接口),也没有加入任何默认或自动选择逻辑。

关联 Issue / PR

无

变更类型

  • 新功能 (feat)
  • 错误修复 (fix)
  • 文档更新 (docs)
  • 代码格式调整 (style)
  • 代码重构 (refactor)
  • 性能优化 (perf)
  • 测试相关 (test)
  • 杂项 (chore)

问题原因

无

自查清单

  • 已添加/更新必要的测试
  • 已运行 lint 和 typecheck,无报错
  • 已运行测试用例,全部通过
  • 变更范围合理,未包含无关修改
  • 未暴露敏感信息(API Key、密码等)
  • 提交信息符合规范

补充信息

测试方式: 在设置中选择 Requesty,填入 Key(https://app.requesty.ai/api-keys),拉取模型后选择 openai/gpt-4o-mini 或托管模型 gpt-5.4-mini。EU 用户可以把地址改为 https://router.eu.requesty.ai/v1。

本地验证: 新增 tests/models/test_requesty_adapter.py(managed 优先与去重、managed 失败回退、403 抛出、Embedding 过滤、对话与 Embedding 归因头),后端完整 pytest 通过 1823 个;test_create_chat_model_adds_opencode_headers_for_openai_compatible_endpoint 在未安装项目包时因版本号为 0.0.0 失败,upstream/main 上同样失败,与本次改动无关。新文件 ruff 与 ty 无报错。另外用真实 Key 通过仓库代码走了一遍:模型发现返回 921 个模型,openai/gpt-4o-mini 普通与流式对话正常,openai/text-embedding-3-small 在 dimensions=256 下返回 256 维。前端只改了两行字符串,未在本地跑完整的 oxlint 类型检查。

目前 Requesty 的公开 /v1/models 不列出 Embedding 模型,所以 Embedding 列表可能为空,需要手动填写模型 ID(例如 openai/text-embedding-3-small)。

Disclosure: I work at Requesty. Happy to adjust anything to match project conventions.

Register Requesty as a first class provider next to OpenRouter: adapter
with model discovery from /v1/models/managed merged with /v1/models,
registry and catalog entries, app attribution headers for chat and
embedding requests, and the frontend display name and embedding
dimensions support.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant