Files
VRCT/src-python/docs/details/translation_openrouter.md

3.9 KiB
Raw Blame History

translation_openrouter.py - OpenRouter 翻訳クライアント

概要

OpenRouter API を用いた統合 LLM 翻訳クライアントラッパー。OpenAI 互換エンドポイント (https://openrouter.ai/api/v1) を利用し、複数の LLM プロバイダーへの統一アクセスを提供する。

最近の更新 (2025-12-29)

  • OpenRouter API 認証チェック方法を変更
    • 以前: client.models.list() を呼び出して認証確認
    • 現在: https://openrouter.ai/api/v1/auth/key エンドポイントに GET リクエスト送信して確認
    • 理由: より信頼性の高い専用認証エンドポイントを使用し、高速かつ確実に API キー有効性を検証
  • 認証失敗時の sensitive data 処理
    • API キー検証失敗時はレスポンス data フィールドに None を設定API キーを露出させない)
    • エラーメッセージのみを返却し、具体的なキー情報は隠蔽

影響

項目 内容
柔軟性 複数 LLM プロバイダーを単一インターフェースで利用
互換性 OpenAI 互換 API で既存実装との一貫性維持
拡張性 新規モデル追加時も API キー再設定不要

責務

  • OpenRouter API Key (20文字以上) を用いた認証確認
    • https://openrouter.ai/api/v1/auth/key エンドポイントへの HTTP GET リクエストで検証タイムアウト10秒
    • ステータスコード 200 で有効と判定
  • 利用可能モデルのフィルタリングとソート
  • 選択モデルの検証と内部保持
  • LangChain ChatOpenAI インスタンス生成base_url に OpenRouter エンドポイント指定)
  • システムプロンプトによる翻訳実行

公開API (メソッド)

class OpenRouterClient:
    def __init__(root_path: str = None)
    def getModelList() -> list[str]
    def getAuthKey() -> str | None
    def setAuthKey(api_key: str) -> bool
    def getModel() -> str | None
    def setModel(model: str) -> bool
    def updateClient() -> None
    def translate(text: str, input_lang: str, output_lang: str) -> str

メソッド詳細

  • setAuthKey: _authentication_check に成功した場合のみ内部保存
  • getModelList: モデル列挙後フィルタリング適用しソート
  • setModel: 取得済みリスト内のモデルのみ受理
  • updateClient: ChatOpenAI を選択モデル・OpenRouter base_url で再生成
  • translate: システム + ユーザメッセージ構築→LLM呼び出し→レスポンス正規化

使用例

client = OpenRouterClient()
if client.setAuthKey("sk_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"):
    models = client.getModelList()
    # OpenRouter は多数のモデルを提供
    client.setModel("anthropic/claude-3-sonnet")
    client.updateClient()
    result = client.translate("こんにちは世界", "Japanese", "English")
    print(result)

依存関係

  • openai.OpenAI: モデル列挙 / 推論OpenRouter エンドポイント経由)
  • langchain_openai.ChatOpenAI: LangChain ラッパー
  • translation_languages.translation_lang: 対応言語集合
  • translation_utils.loadPromptConfig: プロンプト YAML ロード

注意事項

  • base_url は固定で https://openrouter.ai/api/v1
  • ストリーミング無効 (streaming=False) 固定
  • API Key 無設定時 getModelList() は空
  • API Key は20文字以上であることを検証

制限事項

  • エラーメッセージ詳細は包括的に扱わない (上位層でロギング)
  • 翻訳結果の構造が複雑 (list/dict) 場合を単純文字列へ normalize するのみ
  • OpenRouter の料金体系はモデル毎に異なる(利用前に確認が必要)

関連ドキュメント

  • details/translation_translator.md
  • details/translation_languages.md
  • details/translation_openai.md (類似実装)
  • details/translation_groq.md (類似実装)