Dify OpenAI-API互換プラグインの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 です。これは設定では解決できない根本的な互換性問題です。

過去のマージ履歴を確認: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 モデルを追加できないことが確認されました。