問題: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 モデルを追加できないことが確認されました。