Dify OpenAI-API-compatible 插件的 nvidia 的input_type 参数问题

问题:OpenAI-API-compatible 添加 nvidia/nv-embedqa-e5-v5 报错400,模型名称改为 nv-embedqa-e5-v5报错404

kimi 回复核心问题确认:Dify 的 OpenAI-API-compatible 插件硬编码追加了 /retrieval 路径,而 NVIDIA NIM Embedding 的正确端点是 /embeddings。这是无法通过配置解决的底层兼容性问题。

查看历史 merge : fix: nvidia special embedding model payload close #11193 by yihong0618 · Pull Request #11239 · langgenius/dify · GitHub

发现 input_type 没有传参的问题。然后用 claude code 追溯了一下源码得到答案:

问题分析

架构层次:

Dify 主代码库 (api/)↓ 传递 input_type
dify-plugin-sdks (OAICompatEmbeddingModel) ← 问题在这里!
↓ input_type 未传递到 payload
OpenAI-API-compatible 插件

NVIDIA NIM API (需要 input_type 参数)

根本原因: dify-plugin-sdks 中的 OAICompatEmbeddingModel._invoke() 方法虽然接收了 input_type 参数,但在构建 HTTP payload 时没有将其包含进去。

解决方案

你需要修改 dify-plugin-sdks 仓库(不是 dify 主仓库,也不是 dify-official-plugins)。

修改文件:python/dify_plugin/interfaces/model/openai_compatible/text_embedding.py

需要将 payload 构建逻辑从:

  payload = {
      "input": inputs[i : i + max_chunks],
      "model": credentials.get("endpoint_model_name", model),
      **extra_model_kwargs,
  }

改为类似:

  payload = {
      "input": inputs[i : i + max_chunks],
      "model": credentials.get("endpoint_model_name", model),
      **extra_model_kwargs,
  }

  # 对于需要 input_type 的模型(如 NVIDIA NIM)
  if input_type:
      # 转换为 API 期望的格式
      payload["input_type"] = "query" if input_type == EmbeddingInputType.QUERY else "passage"

最后:已经确定了是插件参数传递问题导致无法添加 nvidia 的 embeddings 的模型。