Save does nothing when adding credentials from predefined model load balancing

在 Dify 的预定义模型( fetch_from: predefined-model )负载均衡配置中新增凭据时,点击 Save 无任何反应,通常不是网络或权限问题,而是前端 ModelModal 保存处理器缺少 model context 提前 return 所致,优先排查前端组件间的字段传递。

快速结论:在 Dify 的预定义模型(fetch_from: predefined-model)负载均衡配置中新增凭据时,点击 Save 无任何反应,通常不是网络或权限问题,而是前端 ModelModal 保存处理器缺少 model context 提前 return 所致,优先排查前端组件间的字段传递。

适用环境:Dify 自托管源码部署(Self Hosted / Source);前端包版本 1.17.1;main 分支源码检出;回归可复现于 commit 4c2f022bb2;原始 UI 复现涉及 Tongyi / 阿里云凭据对话框。Issue 未提供操作系统、Python、CUDA、显卡等信息。

最快修复方案:暂无确认的一步修复方案。Issue 作者定位到修复方向是让 ModelLoadBalancingConfigs 与 AddCredentialInLoadBalancing 转发已有的固定模型字段,并已计划提交含回归测试的 PR;在补丁合入前没有可直接执行的单步修复。

注意事项:该问题只影响预定义模型的凭据新增流程,可自定义模型(customizable model)的凭据流程正常。Issue 中验证是在源码前端配合 mock 网络响应下完成的,未做完整端到端线上验证;转发字段后凭据仍走 provider credential endpoint,API 选择由 isModelCredential 控制。

问题场景

在 Dify 中为预定义模型(fetch_from: predefined-model)配置负载均衡时,用户进入 Settings → Model Providers,打开该模型的负载均衡配置,点击 Add credential(若已有凭据则从菜单选 Add API Key),填写必填的 API Key 后点击 Save。此时对话框停留在原地,既没有提交,也没有任何校验提示或错误反馈。该问题在“新增第一个凭据”和“通过菜单再加一个凭据”两种情况下都会发生,使用时账号需具备创建凭据的权限,且该 provider 允许自定义凭据。

报错原文

Save does nothing when adding credentials from predefined model load balancing

Issue 未提供传统意义上的异常堆栈,实际表现是点击 Save 后无提交、无报错、无表单校验反馈。

原因分析

根据 Issue 作者的定位,根因是前端组件间字段传递断裂,导致保存处理器在到达表单校验和 API 调用前就提前 return。链路如下:

  • 负载均衡入口以 configModelCredential 模式打开 ModelModal,其保存处理器需要 model context。
  • ModelLoadBalancingModal 本已在 currentCustomConfigurationModelFixedFields 中提供了所选模型的 name 和 type。
  • ModelLoadBalancingConfigs 丢弃了这些字段,没有继续向下传递。
  • AddCredentialInLoadBalancing 只为 customizable model 重建这些字段,预定义模型拿到的因此是 undefined。
  • 预定义模型的新增操作也没有显式提供 model。
  • 最终 ModelModal.handleSave 执行到 if (!modelContext) return,在校验表单或发起请求之前就返回。

因此这是纯粹的前端字段转发问题,与后端 provider 凭据接口本身无关。

环境排查

  • 确认 Dify 部署方式:应为 Self Hosted(Source),Cloud 版未在 Issue 中验证。
  • 确认前端包版本:Issue 中为 1.17.1。
  • 确认代码来源:main 分支源码检出,回归可复现于 commit 4c2f022bb2。
  • 确认触发模型类型:fetch_from: predefined-model 的预定义模型;可自定义模型不受影响。
  • 确认账号权限:需具备创建凭据的权限,且 provider 允许自定义凭据。
  • 确认浏览器控制台与网络面板:点击 Save 后不应出现对 provider credential endpoint 的 POST 请求,这是区分本问题的关键现象。
  • Issue 未提供 Python、CUDA、PyTorch、显卡等信息,无需也无法核对。

解决步骤

  1. 先复现并确认现象:在预定义模型负载均衡凭据对话框填入必填 API Key,点击 Save,观察对话框是否保持打开且无校验提示。
  2. 打开浏览器开发者工具的 Network 面板,在 Save 后确认没有向 provider 凭据接口发出 POST 请求。Issue 的回归测试也确认预定义模型两种场景下 POST 调用数为 0。
  3. 定位保存提前返回的位置:检查 ModelModal.handleSave,确认是否命中 if (!modelContext) return。
  4. 沿调用链检查字段传递:ModelLoadBalancingModal → ModelLoadBalancingConfigs → AddCredentialInLoadBalancing,确认 currentCustomConfigurationModelFixedFields 中的模型 name 与 type 是否被逐层转发。
  5. 按 Issue 作者的修复方向:让 ModelLoadBalancingConfigs 转发已有固定模型字段,并让 AddCredentialInLoadBalancing 对预定义模型也保留这些字段(该改动由作者以 PR 形式提交,Issue 中未给出合入 commit)。
  6. 若尚未合入补丁,可优先尝试在本地临时转发这两个字段后重新构建前端,验证 Save 是否能正常提交;此为可优先尝试的验证手段,不等同于官方已发布修复。

验证方法

修复后重新打开预定义模型的负载均衡凭据对话框,填写必填 API Key 并点击 Save:表单应正常校验,向 provider credential endpoint 发出 POST 请求,成功后对话框关闭,负载均衡凭据列表刷新出新增项;缺少必填字段时应出现校验反馈。同时回归可自定义模型的凭据新增流程,确认其仍能正常通过。Issue 中的回归测试以“预定义模型两种场景下 POST 调用数不再为 0、可自定义模型场景继续通过”作为通过标准。

参考来源

langgenius/dify #42909

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25557

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注