- 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 エラー検知時の自動フォールバック等の動作説明追加 (コードの振る舞いは既存処理に合わせた引数指定の修正とドキュメント反映が主体)
3.0 KiB
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.mddetails/translation_languages.md