3.7 KiB
3.7 KiB
translation_ollama.py - Ollama ローカル LLM 翻訳クライアント
概要
Ollama サーバー上で稼働するローカル LLM を翻訳エンジンとして扱うためのクライアントラッパー。モデル一覧取得・モデル選択・翻訳実行を統一パターンで提供する。
最近の更新 (2025-12-30)
- 接続失敗時のエラーハンドリング改善
/api/pingへの疎通確認失敗時にモデルリストをクリア (SELECTABLE_OLLAMA_MODEL_LIST = [])- 選択モデルをクリア (
SELECTED_OLLAMA_MODEL = None) SELECTABLE_TRANSLATION_ENGINE_STATUS["Ollama"]を False に設定- フロントエンドに通知して UI を同期
最近の更新 (2025-10-20)
- 新規追加: Ollama を翻訳エンジン群へ統合
/api/pingを用いた疎通確認による簡易認証/api/tagsから利用可能モデル一覧抽出・ソート- YAML (
prompt/translation_ollama.yml) からシステムプロンプト (system_prompt) と対応言語をロード
影響
| 項目 | 内容 |
|---|---|
| 拡張性 | LAN 内ローカル推論を利用可能 |
| 可搬性 | GPU/CPU 任意構成の Ollama 環境に適応 |
| 一貫性 | 他翻訳クライアント (OpenAI/Gemini/Plamo/LMStudio) と統一 API |
責務
- Ollama インスタンスへの接続確認
- モデル一覧取得 (タグ列挙) とソート
- 選択モデルの検証と内部保持
- LangChain
ChatOllamaインスタンス生成 - システムプロンプトとユーザ入力を組み立てて翻訳実行
公開API (メソッド)
class OllamaClient:
def __init__(root_path: str = None)
def authenticationCheck() -> bool
def getModelList() -> list[str]
def getModel() -> str | None
def setModel(model: str) -> bool
def updateClient() -> None
def translate(text: str, input_lang: str, output_lang: str) -> str
メソッド詳細
authenticationCheck:/api/pingが 200 を返すかで利用可否判定getModelList: 認証成功時のみ/api/tags結果から name 抽出setModel: 取得済みモデル一覧内に存在する場合のみ設定updateClient:ChatOllamaを最新モデルで再生成translate: system / user メッセージを LLM へ送信し結合結果を正規化
使用例
client = OllamaClient()
if client.authenticationCheck():
models = client.getModelList()
if models:
client.setModel(models[0])
client.updateClient()
translated = client.translate("こんにちは世界", "Japanese", "English")
print(translated)
依存関係
requests: Ping/タグ API 呼び出しlangchain_ollama.ChatOllama: LangChain LLM ラッパーtranslation_languages.translation_lang: 対応言語集合translation_utils.loadPromptConfig: プロンプト YAML ロード
注意事項
- サーバー既定 URL:
http://localhost:11434 - モデル一覧取得は起動しているローカルサーバー状態に依存
updateClient()呼び出し前はtranslate()を利用不可- 接続失敗時の自動処理:
/api/pingへの疎通確認が失敗すると、自動的にモデルリストと選択モデルがクリアされるSELECTABLE_TRANSLATION_ENGINE_STATUS["Ollama"]が False に設定され、エンジンが使用不可状態になる- Controller が自動的にフロントエンドに状態変化を通知
制限事項
- ストリーミング未対応 (streaming=False)
- エラー詳細は包括的に扱わない (上位層でフォールバック)
関連ドキュメント
details/translation_translator.mddetails/translation_languages.md