fastapi_django_main_live / controllers /gradio_interface.py
GitHub Action
🚀 Auto-deploy from GitHub Actions
70766d2
import gradio as gr
import sys
import os
# LlamaFactoryのパスを追加
llamafactory_path = '/workspaces/fastapi_django_main_live/LLaMA-Factory'
sys.path.append(llamafactory_path)
def create_llamafactory_interface():
"""LlamaFactory Gradio インターフェースを作成する"""
try:
# 作業ディレクトリをLlamaFactoryに変更
original_cwd = os.getcwd()
llamafactory_path = '/workspaces/fastapi_django_main_live/LLaMA-Factory'
os.chdir(llamafactory_path)
# 環境変数を設定
os.environ['LLAMAFACTORY_HOME'] = llamafactory_path
os.environ['PYTHONPATH'] = f"{llamafactory_path}:{os.environ.get('PYTHONPATH', '')}"
# 必要なファイルの存在確認
dataset_info_path = os.path.join(llamafactory_path, 'data', 'dataset_info.json')
if not os.path.exists(dataset_info_path):
print(f"⚠️ Dataset info file not found: {dataset_info_path}")
os.chdir(original_cwd)
with gr.Blocks() as missing_file_ui:
gr.Markdown("## ⚠️ Configuration Missing")
gr.Markdown(f"データセット情報ファイルが見つかりません: `{dataset_info_path}`")
gr.Markdown("LlamaFactoryの初期設定が必要です。")
return missing_file_ui
print(f"✅ Found dataset info: {dataset_info_path}")
print(f"✅ Working directory: {os.getcwd()}")
# LlamaFactoryのUIを作成
from llamafactory.webui.interface import create_ui
ui = create_ui()
# 作業ディレクトリを元に戻す
os.chdir(original_cwd)
return ui
except ImportError as e:
if 'original_cwd' in locals():
os.chdir(original_cwd)
print(f"LlamaFactory import error: {e}")
# フォールバック UI を作成
with gr.Blocks() as fallback_ui:
gr.Markdown("## ⚠️ LlamaFactory Unavailable")
gr.Markdown("LlamaFactoryモジュールが見つかりません。")
gr.Markdown("### 解決方法:")
gr.Markdown("1. LlamaFactoryの依存関係をインストール")
gr.Markdown("2. パスの設定を確認")
gr.Code("pip install -e /workspaces/fastapi_django_main_live/LLaMA-Factory", language="bash")
return fallback_ui
except Exception as e:
if 'original_cwd' in locals():
os.chdir(original_cwd)
print(f"LlamaFactory UI creation error: {e}")
with gr.Blocks() as error_ui:
gr.Markdown("## ❌ LlamaFactory Error")
gr.Markdown(f"エラー: {str(e)}")
gr.Markdown("### トラブルシューティング:")
gr.Markdown("1. LlamaFactoryのファイル構成を確認")
gr.Markdown("2. 必要な依存関係をインストール")
gr.Markdown("3. 権限設定を確認")
with gr.Code():
gr.Textbox(value=f"エラー詳細: {str(e)}", interactive=False)
return error_ui
# メインGradio インターフェースを作成
with gr.Blocks(title="🤖 AI Development Platform", theme=gr.themes.Soft()) as gradio_interface:
# ヘッダー
gr.Markdown("""
# 🤖 AI開発プラットフォーム
このプラットフォームでは、LlamaFactoryを使用してLLMのファインチューニングを行うことができます。
""")
with gr.Tabs() as tabs:
# LlamaFactory タブ
with gr.TabItem("🦙 LlamaFactory WebUI"):
gr.Markdown("""
## 🦙 LlamaFactory WebUI
LLM(Large Language Models)のファインチューニングを行うためのWebインターフェースです。
### 主な機能:
- 🎯 **モデル訓練**: カスタムデータセットでLLMを訓練
- 📊 **データセット管理**: 訓練用データの管理・前処理
- ⚙️ **ハイパーパラメータ調整**: 学習パラメータの最適化
- 📈 **訓練監視**: リアルタイムでの訓練進捗確認
""")
# LlamaFactory UIを統合
try:
llamafactory_ui = create_llamafactory_interface()
if llamafactory_ui:
# LlamaFactory UIを現在のタブに埋め込み
with gr.Group():
gr.Markdown("### 🔧 LlamaFactory コントロールパネル")
llamafactory_ui.render()
except Exception as e:
gr.Markdown(f"### ❌ LlamaFactory 読み込みエラー\n\n```\n{str(e)}\n```")
# 情報タブ
with gr.TabItem("ℹ️ システム情報"):
gr.Markdown("""
## 📋 システム情報
### 🔧 利用可能な機能:
- **LlamaFactory**: LLMファインチューニング
- **OpenInterpreter**: コード実行・解釈
- **AutoPrompt**: プロンプト自動最適化
- **BabyAGI**: 自律AIエージェント
### 🚀 クイックスタート:
1. 左側の「LlamaFactory WebUI」タブを選択
2. データセットを準備・アップロード
3. モデルとパラメータを設定
4. 訓練を開始
### 📞 サポート:
- 📖 ドキュメント: `/docs/` フォルダ
- 🐛 問題報告: GitHub Issues
""")
# システム状態表示
with gr.Row():
with gr.Column():
gr.Markdown("#### 🔍 システム状態")
# 動的にシステム情報を取得
def get_system_info():
llamafactory_path = '/workspaces/fastapi_django_main_live/LLaMA-Factory'
dataset_info_path = os.path.join(llamafactory_path, 'data', 'dataset_info.json')
return f"""
- **Python Version**: {sys.version.split()[0]}
- **Current Directory**: {os.getcwd()}
- **LlamaFactory Path**: {llamafactory_path}
- **Dataset Info Exists**: {"✅ Yes" if os.path.exists(dataset_info_path) else "❌ No"}
- **LlamaFactory Accessible**: {"✅ Yes" if os.path.exists(llamafactory_path) else "❌ No"}
"""
system_status = get_system_info()
gr.Markdown(system_status)
# LlamaFactory セットアップボタン
with gr.Row():
setup_btn = gr.Button("🔧 LlamaFactory セットアップ確認", variant="secondary")
setup_output = gr.Textbox(
label="セットアップ結果",
lines=10,
interactive=False,
visible=False
)
def check_llamafactory_setup():
"""LlamaFactoryのセットアップ状況をチェック"""
result = []
llamafactory_path = '/workspaces/fastapi_django_main_live/LLaMA-Factory'
# 1. ディレクトリ存在確認
if os.path.exists(llamafactory_path):
result.append("✅ LlamaFactoryディレクトリが存在します")
else:
result.append("❌ LlamaFactoryディレクトリが見つかりません")
return "\n".join(result), gr.update(visible=True)
# 2. dataset_info.json確認
dataset_info_path = os.path.join(llamafactory_path, 'data', 'dataset_info.json')
if os.path.exists(dataset_info_path):
result.append("✅ dataset_info.jsonが存在します")
else:
result.append("❌ dataset_info.jsonが見つかりません")
# 3. 必要なディレクトリ確認
required_dirs = ['src', 'data', 'examples']
for dir_name in required_dirs:
dir_path = os.path.join(llamafactory_path, dir_name)
if os.path.exists(dir_path):
result.append(f"✅ {dir_name}/ ディレクトリが存在します")
else:
result.append(f"❌ {dir_name}/ ディレクトリが見つかりません")
# 4. モジュールインポート確認
try:
sys.path.append(llamafactory_path)
import llamafactory
result.append("✅ LlamaFactoryモジュールのインポートが可能です")
except ImportError as e:
result.append(f"❌ LlamaFactoryモジュールのインポートに失敗: {e}")
return "\n".join(result), gr.update(visible=True)
setup_btn.click(
fn=check_llamafactory_setup,
outputs=[setup_output, setup_output]
)
# 自動検出システム用のメタデータ
interface_title = "🚀 AI開発プラットフォーム"
interface_description = "LlamaFactory WebUIとAI開発ツール"