File size: 10,086 Bytes
0661b76
7cd8277
 
0661b76
7cd8277
 
 
0661b76
7cd8277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0661b76
7cd8277
 
0661b76
7cd8277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70766d2
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
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開発ツール"