|
import gradio as gr |
|
import sys |
|
import os |
|
|
|
|
|
llamafactory_path = '/workspaces/fastapi_django_main_live/LLaMA-Factory' |
|
sys.path.append(llamafactory_path) |
|
|
|
def create_llamafactory_interface(): |
|
"""LlamaFactory Gradio インターフェースを作成する""" |
|
try: |
|
|
|
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()}") |
|
|
|
|
|
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}") |
|
|
|
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 |
|
|
|
|
|
with gr.Blocks(title="🤖 AI Development Platform", theme=gr.themes.Soft()) as gradio_interface: |
|
|
|
gr.Markdown(""" |
|
# 🤖 AI開発プラットフォーム |
|
|
|
このプラットフォームでは、LlamaFactoryを使用してLLMのファインチューニングを行うことができます。 |
|
""") |
|
|
|
with gr.Tabs() as tabs: |
|
|
|
with gr.TabItem("🦙 LlamaFactory WebUI"): |
|
gr.Markdown(""" |
|
## 🦙 LlamaFactory WebUI |
|
|
|
LLM(Large Language Models)のファインチューニングを行うためのWebインターフェースです。 |
|
|
|
### 主な機能: |
|
- 🎯 **モデル訓練**: カスタムデータセットでLLMを訓練 |
|
- 📊 **データセット管理**: 訓練用データの管理・前処理 |
|
- ⚙️ **ハイパーパラメータ調整**: 学習パラメータの最適化 |
|
- 📈 **訓練監視**: リアルタイムでの訓練進捗確認 |
|
""") |
|
|
|
|
|
try: |
|
llamafactory_ui = create_llamafactory_interface() |
|
if 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) |
|
|
|
|
|
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' |
|
|
|
|
|
if os.path.exists(llamafactory_path): |
|
result.append("✅ LlamaFactoryディレクトリが存在します") |
|
else: |
|
result.append("❌ LlamaFactoryディレクトリが見つかりません") |
|
return "\n".join(result), gr.update(visible=True) |
|
|
|
|
|
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が見つかりません") |
|
|
|
|
|
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}/ ディレクトリが見つかりません") |
|
|
|
|
|
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開発ツール" |
|
|