Skip to content

提供商配置增强:内置预设供应商库(数据源 models.dev)+ 自定义面板(DIY)脚本参数联动 #18

Description

@X-SCI-TECH

使用场景 / 要解决的问题

  • 新建 AI 提供商基本靠手动:填名称、选类型、填 Base URL,再逐个加模型;models.dev/api.json 已收录 213 家供应商(含 Base URL、协议类型线索、模型与定价),却没有「选预设自动填充」的入口;内置快照 api.official.json 只覆盖 12 家官方 provider。
  • 自定义面板脚本参数无配置入口:「自定义面板(DIY)」脚本(如 demo_balance.py)只能消费系统固定注入的 AICODE_* 环境变量,脚本自身的业务参数(额度查询地址、账号 ID、阈值等)只能写死进脚本,换场景就得复制改脚本。

期望的解决方案

一、预设供应商库(数据源 https://models.dev/api.json)

  1. 内置预设供应商数据库:扩展现有 scripts/update-models-dev-assets.py 生成种子数据,首次启动导入 Room 数据库,离线开箱即用;每家预设含名称、协议类型(由 npm 字段映射,如 @ai-sdk/anthropic → Anthropic、@ai-sdk/openai-compatible → OpenAI 兼容)、Base URL(api 字段)、关联模型与定价。
  2. 新建供应商入口「从预设库添加」:可搜索供应商名/模型名,选中后自动填充类型、Base URL,并列出其模型供勾选导入;「中转站/自建」场景可基于 openai-compatible 预设克隆后改 Base URL。
  3. 版本化 + 增量更新:APK 携带基准版本,运行时复用 ModelMetadataService 缓存逻辑做版本对比刷新(delta),不覆盖用户自建/已保存数据;保留现有 api.official.json 兼容路径。

二、自定义面板(DIY)脚本参数联动

  1. 提供商编辑页「自定义面板 (DIY)」新增**「脚本参数」配置**(Key-Value 列表或 JSON),随提供商配置一起持久化。
  2. 联动传入:执行脚本时按配置传入,两种方式可选——注入为额外环境变量(如 AICODE_SCRIPT_PARAM_<KEY>),或按配置顺序作为命令行参数追加(python3 demo_balance.py KEY=VALUE ...)。
  3. 占位符联动:参数值支持引用提供商配置,如 {{PROVIDER_API_KEY}}{{BASE_URL}},避免敏感信息重复填写。
  4. 「运行测试」同步生效:测试与自动刷新(进会话/LLM 返回/手动刷新)均使用当前参数联动执行;参数随提供商配置一并备份/还原。

备选方案

  • 仅运行时全量拉取 models.dev 数据:缓存 api.json 但不落库、不可检索、离线无保障。
  • 面板脚本参数只支持环境变量或命令行参数其中一种形式。
  • 维持现状:供应商手动填写 + 面板脚本参数写死。

本提案同时替代已关闭的 #7「常用提供商预设」:由 13 家写死静态列表升级为数据库驱动 + models.dev 全量数据源。

补充信息

  • 数据源:https://models.dev/api.json(MIT;213 家供应商,含 name/api/npm 字段与各模型 context/cost 字段,项目已在用)
  • 现状实现:scripts/update-models-dev-assets.pyapp/src/main/assets/api.official.jsonModelMetadataService.ktProviderEditorScreen.kt(「自定义面板 (DIY)」区块)
  • 既有规范:docs-site/docs/advanced/dashboard-cards.mdAICODE_* 环境变量注入体系与刷新触发机制)
  • 示例脚本:demo_balance.py

验收期望

  • 新建供应商点「从预设库添加」可搜索到 213 家内的目标,一键完成类型 + Base URL + 模型配置;断网首次使用即可浏览/搜索预设(离线保障)。
  • 面板脚本可配置多条参数,「运行测试」与自动刷新联动生效,无需修改脚本文件。
  • 内置库原地更新与脚本参数修改,均不影响用户已保存/自建的供应商与模型。

Activity

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions