修正: モデルロード時のエラーハンドリング追加
Browse files- メモリ不足時に分かりやすいエラーメッセージを表示
- 大きなモデル選択時に小さいモデルを推奨
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- src/ui/gradio/app.py +37 -20
src/ui/gradio/app.py
CHANGED
|
@@ -48,33 +48,50 @@ def generate_debris(model_key: str) -> Tuple[str, str, str]:
|
|
| 48 |
model_key: モデルキー
|
| 49 |
|
| 50 |
Returns:
|
| 51 |
-
(
|
| 52 |
"""
|
| 53 |
-
|
| 54 |
-
model = _get_model(model_key)
|
| 55 |
-
generator = DebrisGenerator(model)
|
| 56 |
-
visualizer = SignalVisualizer()
|
| 57 |
|
| 58 |
-
|
| 59 |
-
|
|
|
|
|
|
|
|
|
|
| 60 |
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
result.noise, result.corrupted_logits
|
| 64 |
-
)
|
| 65 |
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
|
| 71 |
-
|
| 72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
|
| 74 |
-
|
| 75 |
-
|
| 76 |
|
| 77 |
-
|
| 78 |
|
| 79 |
|
| 80 |
def create_app() -> gr.Blocks:
|
|
|
|
| 48 |
model_key: モデルキー
|
| 49 |
|
| 50 |
Returns:
|
| 51 |
+
(signal_image, debris_text, seed_text)
|
| 52 |
"""
|
| 53 |
+
import PIL.Image
|
|
|
|
|
|
|
|
|
|
| 54 |
|
| 55 |
+
try:
|
| 56 |
+
# モデルとジェネレータの取得
|
| 57 |
+
model = _get_model(model_key)
|
| 58 |
+
generator = DebrisGenerator(model)
|
| 59 |
+
visualizer = SignalVisualizer()
|
| 60 |
|
| 61 |
+
# デブリ生成
|
| 62 |
+
result = generator.generate()
|
|
|
|
|
|
|
| 63 |
|
| 64 |
+
# シグナル画像を生成
|
| 65 |
+
signal_img_base64 = visualizer.generate_image(
|
| 66 |
+
result.noise, result.corrupted_logits
|
| 67 |
+
)
|
| 68 |
+
|
| 69 |
+
# Base64からPIL Imageに変換(Gradio用)
|
| 70 |
+
img_data = base64.b64decode(signal_img_base64)
|
| 71 |
+
img = PIL.Image.open(BytesIO(img_data))
|
| 72 |
+
|
| 73 |
+
# デブリテキスト
|
| 74 |
+
debris_text = " ".join(result.debris)
|
| 75 |
+
|
| 76 |
+
# シード情報
|
| 77 |
+
seed_text = str(result.seed)
|
| 78 |
+
|
| 79 |
+
return img, debris_text, seed_text
|
| 80 |
|
| 81 |
+
except Exception as e:
|
| 82 |
+
# エラー時はプレースホルダーを返す
|
| 83 |
+
error_msg = str(e)
|
| 84 |
+
if "out of memory" in error_msg.lower() or "cuda" in error_msg.lower():
|
| 85 |
+
error_text = f"メモリ不足: このモデルにはGPUが必要です。小さいモデル(GPT-2, Pythia-410M等)を選択してください。"
|
| 86 |
+
elif "does not exist" in error_msg.lower() or "404" in error_msg.lower():
|
| 87 |
+
error_text = f"モデルが見つかりません: {model_key}"
|
| 88 |
+
else:
|
| 89 |
+
error_text = f"エラー: {error_msg}"
|
| 90 |
|
| 91 |
+
# 空の画像を作成
|
| 92 |
+
img = PIL.Image.new('RGB', (400, 100), color='black')
|
| 93 |
|
| 94 |
+
return img, error_text, ""
|
| 95 |
|
| 96 |
|
| 97 |
def create_app() -> gr.Blocks:
|