[Fix] Error Handling: Update setter methods to allow None values for type checks and enhance sensitive data handling in authentication failures.

This commit is contained in:
misyaguziya
2025-12-30 06:44:15 +09:00
parent 6014c2d362
commit 588b95eebe
5 changed files with 53 additions and 10 deletions

View File

@@ -279,11 +279,21 @@ def SELECTED_TAB_NO(self, value):
``` ```
各setterは以下のパターンを実装: 各setterは以下のパターンを実装:
1. 型チェック (`isinstance`) 1. 型チェック (`isinstance`)**`None` 値は常に許可される** (値をクリアしたい場合への対応)
2. 値の範囲・有効性チェック 2. 値の範囲・有効性チェック
3. 内部変数への代入 3. 内部変数への代入
4. `saveConfig` 呼び出し(永続化対象の場合) 4. `saveConfig` 呼び出し(永続化対象の場合)
#### 型チェックの詳細v3.3.0+
```python
# 型チェック実装Noneは常に許可
if self.type_ is not None and value is not None and not isinstance(value, self.type_):
return # 無視する
```
この変更により、設定値をクリアNone に設定)する用途に対応。例えば認証失敗時に API キーを `None` に設定する場合に有効。
### メッセージフォーマット構造 ### メッセージフォーマット構造
```python ```python

View File

@@ -722,12 +722,14 @@ OSC Query 機能が無効になったことを通知。無効化された機能
- 未選択の場合は先頭モデルを自動選択 - 未選択の場合は先頭モデルを自動選択
- `model.updateTranslatorGroqClient()` でクライアント更新 - `model.updateTranslatorGroqClient()` でクライアント更新
- `updateTranslationEngineAndEngineList()` を呼び出し - `updateTranslationEngineAndEngineList()` を呼び出し
4. 認証失敗時: status 400 を返却 4. 認証失敗時 (status 400):
- レスポンス `data` フィールドを **None に設定** sensitive data を隠す)
- `delGroqAuthKey()` を呼び出してクリーンアップ
**API キー検証失敗時の処理:** **API キー検証失敗時の処理:**
- モデルリストをクリア (`config.SELECTABLE_GROQ_MODEL_LIST = []`) - モデルリストをクリア (`config.SELECTABLE_GROQ_MODEL_LIST = []`)
- 選択モデルをクリア (`config.SELECTED_GROQ_MODEL = None`) - 選択モデルをクリア (`config.SELECTED_GROQ_MODEL = None`)
- フロントエンドに通知 - フロントエンドに通知(レスポンス `data` は None
#### `delGroqAuthKey(*args, **kwargs) -> dict` #### `delGroqAuthKey(*args, **kwargs) -> dict`
@@ -776,12 +778,14 @@ OSC Query 機能が無効になったことを通知。無効化された機能
- 未選択の場合は先頭モデルを自動選択 - 未選択の場合は先頭モデルを自動選択
- `model.updateTranslatorOpenRouterClient()` でクライアント更新 - `model.updateTranslatorOpenRouterClient()` でクライアント更新
- `updateTranslationEngineAndEngineList()` を呼び出し - `updateTranslationEngineAndEngineList()` を呼び出し
4. 認証失敗時: status 400 を返却 4. 認証失敗時 (status 400):
- レスポンス `data` フィールドを **None に設定** sensitive data を隠す)
- `delOpenRouterAuthKey()` を呼び出してクリーンアップ
**API キー検証失敗時の処理:** **API キー検証失敗時の処理:**
- モデルリストをクリア (`config.SELECTABLE_OPENROUTER_MODEL_LIST = []`) - モデルリストをクリア (`config.SELECTABLE_OPENROUTER_MODEL_LIST = []`)
- 選択モデルをクリア (`config.SELECTED_OPENROUTER_MODEL = None`) - 選択モデルをクリア (`config.SELECTED_OPENROUTER_MODEL = None`)
- フロントエンドに通知 - フロントエンドに通知(レスポンス `data` は None
#### `delOpenRouterAuthKey(*args, **kwargs) -> dict` #### `delOpenRouterAuthKey(*args, **kwargs) -> dict`

View File

@@ -4,6 +4,14 @@
LMStudio 互換 OpenAI API を利用したローカル LLM 翻訳クライアントラッパー。モデル一覧取得・モデル選択・翻訳処理を統一インターフェースで提供する。 LMStudio 互換 OpenAI API を利用したローカル LLM 翻訳クライアントラッパー。モデル一覧取得・モデル選択・翻訳処理を統一インターフェースで提供する。
## 最近の更新 (2025-12-30)
- 接続失敗時のエラーハンドリング改善
- URL への疎通確認失敗時にモデルリストをクリア (`SELECTABLE_LMSTUDIO_MODEL_LIST = []`)
- 選択モデルをクリア (`SELECTED_LMSTUDIO_MODEL = None`)
- `SELECTABLE_TRANSLATION_ENGINE_STATUS["LMStudio"]` を False に設定
- フロントエンドに通知して UI を同期
## 最近の更新 (2025-10-20) ## 最近の更新 (2025-10-20)
- 新規追加: ローカル LLM (LMStudio) を翻訳エンジン群へ統合 - 新規追加: ローカル LLM (LMStudio) を翻訳エンジン群へ統合
@@ -73,6 +81,10 @@ if models:
- `api_key` は固定文字列 "lmstudio" (LMStudio 側で不要のため) を利用 - `api_key` は固定文字列 "lmstudio" (LMStudio 側で不要のため) を利用
- モデル一覧取得はエンドポイントの互換性に依存 (古いバージョン非対応の可能性) - モデル一覧取得はエンドポイントの互換性に依存 (古いバージョン非対応の可能性)
- `updateClient()` 呼び出し前は `translate()` を利用できない - `updateClient()` 呼び出し前は `translate()` を利用できない
- **接続失敗時の自動処理:**
- URL への疎通確認(接続テスト)が失敗すると、自動的にモデルリストと選択モデルがクリアされる
- `SELECTABLE_TRANSLATION_ENGINE_STATUS["LMStudio"]` が False に設定され、エンジンが使用不可状態になる
- Controller が自動的にフロントエンドに状態変化を通知
## 制限事項 ## 制限事項

View File

@@ -4,6 +4,14 @@
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) ## 最近の更新 (2025-10-20)
- 新規追加: Ollama を翻訳エンジン群へ統合 - 新規追加: Ollama を翻訳エンジン群へ統合
@@ -73,6 +81,10 @@ if client.authenticationCheck():
- サーバー既定 URL: `http://localhost:11434` - サーバー既定 URL: `http://localhost:11434`
- モデル一覧取得は起動しているローカルサーバー状態に依存 - モデル一覧取得は起動しているローカルサーバー状態に依存
- `updateClient()` 呼び出し前は `translate()` を利用不可 - `updateClient()` 呼び出し前は `translate()` を利用不可
- **接続失敗時の自動処理:**
- `/api/ping` への疎通確認が失敗すると、自動的にモデルリストと選択モデルがクリアされる
- `SELECTABLE_TRANSLATION_ENGINE_STATUS["Ollama"]` が False に設定され、エンジンが使用不可状態になる
- Controller が自動的にフロントエンドに状態変化を通知
## 制限事項 ## 制限事項

View File

@@ -4,12 +4,15 @@
OpenRouter API を用いた統合 LLM 翻訳クライアントラッパー。OpenAI 互換エンドポイント (`https://openrouter.ai/api/v1`) を利用し、複数の LLM プロバイダーへの統一アクセスを提供する。 OpenRouter API を用いた統合 LLM 翻訳クライアントラッパー。OpenAI 互換エンドポイント (`https://openrouter.ai/api/v1`) を利用し、複数の LLM プロバイダーへの統一アクセスを提供する。
## 最近の更新 (2025-12-10) ## 最近の更新 (2025-12-29)
- OpenRouter API サポートを新規追加 - OpenRouter API 認証チェック方法を変更
- 単一 API キーで複数 LLM プロバイダーへアクセス可能 - **以前:** `client.models.list()` を呼び出して認証確認
- 除外キーワード (`whisper`, `embedding`, `image`, `tts`, `audio`, `search`, `transcribe`, `diarize`, `vision`) によるテキスト処理モデルのフィルタリング - **現在:** `https://openrouter.ai/api/v1/auth/key` エンドポイントに GET リクエスト送信して確認
- YAML (`prompt/translation_openrouter.yml`) からシステムプロンプトをロード - **理由:** より信頼性の高い専用認証エンドポイントを使用し、高速かつ確実に API キー有効性を検証
- 認証失敗時の sensitive data 処理
- API キー検証失敗時はレスポンス `data` フィールドに `None` を設定API キーを露出させない)
- エラーメッセージのみを返却し、具体的なキー情報は隠蔽
### 影響 ### 影響
@@ -22,6 +25,8 @@ OpenRouter API を用いた統合 LLM 翻訳クライアントラッパー。Ope
## 責務 ## 責務
- OpenRouter API Key (20文字以上) を用いた認証確認 - OpenRouter API Key (20文字以上) を用いた認証確認
- `https://openrouter.ai/api/v1/auth/key` エンドポイントへの HTTP GET リクエストで検証タイムアウト10秒
- ステータスコード 200 で有効と判定
- 利用可能モデルのフィルタリングとソート - 利用可能モデルのフィルタリングとソート
- 選択モデルの検証と内部保持 - 選択モデルの検証と内部保持
- LangChain `ChatOpenAI` インスタンス生成base_url に OpenRouter エンドポイント指定) - LangChain `ChatOpenAI` インスタンス生成base_url に OpenRouter エンドポイント指定)