Files
VRCT/src-python/docs/details/translation_openai.md
misyaguziya bcfbf51696 LMStudio 認証呼び出しで base_url を明示渡しへ修正 + ドキュメント整備(ローカルLLM/言語マッピング/フォント等)
- controller: model.authenticationTranslatorLMStudio 呼び出しに base_url=config.LMSTUDIO_URL を明示的に渡すよう修正(LMStudio 接続判定で設定 URL を利用)
- docs: 新規ドキュメントを追加・更新
  - 追加: translation_gemini.md, translation_lmstudio.md, translation_ollama.md, translation_openai.md, translation_plamo.md
  - 更新: config.md, controller.md, mainloop.md, model.md, overlay.md, translation_languages.md, translation_translator.md, 仕様書.md(翻訳/モデル管理・エンドポイント・YAML 言語定義・フォント探索・VRAM フォールバック等の記載追加)
- ドキュメントに記載した主な変更点
  - LMStudio / Ollama のローカルLLM統合(モデルリスト/選択用プロパティ追加、接続確認エンドポイント)
  - CTranslate2 の言語定義を weight_type ネスト構造へ変更対応
  - 外部 YAML による言語マッピング導入(loadTranslationLanguages)
  - フォント探索を PyInstaller バンドル(_internal/fonts/) を考慮して強化
  - 認証後のモデルリスト自動更新・SELECTED_* プロパティ名統一、VRAM エラー検知時の自動フォールバック等の動作説明追加

(コードの振る舞いは既存処理に合わせた引数指定の修正とドキュメント反映が主体)
2025-10-20 01:19:49 +09:00

3.0 KiB

translation_openai.py - OpenAI 翻訳クライアント

概要

OpenAI API (公式または互換エンドポイント) を用いた汎用 LLM 翻訳クライアントラッパー。モデル一覧取得・認証・モデル選択・翻訳実行を提供する。

最近の更新 (2025-10-20)

  • 除外キーワード (whisper, embedding, image, tts, audio, search, transcribe, diarize, vision) を用いて翻訳非適合モデルをフィルタ
  • Fine-tune モデル (ft:) は root が gpt- で始まる場合採用
  • YAML (prompt/translation_openai.yml) からシステムプロンプト (system_prompt) をロードする構成へ統合

影響

項目 内容
正確性 不適合モデル除外で翻訳品質安定
保守性 フィルタリングロジック明示化で再利用容易
一貫性 他翻訳クライアントと API 形状統一

責務

  • OpenAI API Key を用いた認証確認
  • 利用可能モデルのフィルタリングとソート
  • 選択モデルの検証と内部保持
  • LangChain ChatOpenAI インスタンス生成
  • システムプロンプトによる翻訳実行

公開API (メソッド)

class OpenAIClient:
    def __init__(base_url: str | None = None, 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 を選択モデルで再生成
  • translate: システム + ユーザメッセージ構築→LLM呼び出し→レスポンス正規化

使用例

client = OpenAIClient()
if client.setAuthKey("OPENAI_API_KEY"):
    models = client.getModelList()
    client.setModel(models[0])
    client.updateClient()
    result = client.translate("こんにちは世界", "Japanese", "English")
    print(result)

依存関係

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

注意事項

  • base_url が None の場合公式エンドポイント
  • ストリーミング無効 (streaming=False) 固定
  • API Key 無設定時 getModelList() は空

制限事項

  • エラーメッセージ詳細は包括的に扱わない (上位層でロギング)
  • 翻訳結果の構造が複雑 (list/dict) 場合を単純文字列へ normalize するのみ

関連ドキュメント

  • details/translation_translator.md
  • details/translation_languages.md