问题:OpenAI-API-compatible 添加 nvidia/nv-embedqa-e5-v5 报错400,模型名称改为 nv-embedqa-e5-v5报错404
kimi 回复核心问题确认:Dify 的 OpenAI-API-compatible 插件硬编码追加了 /retrieval 路径,而 NVIDIA NIM Embedding 的正确端点是 /embeddings。这是无法通过配置解决的底层兼容性问题。
发现 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 的模型。