File size: 10,925 Bytes
55cbdc2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fabbc69
 
 
 
 
55cbdc2
 
fabbc69
 
 
 
 
 
 
55cbdc2
fabbc69
55cbdc2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
"""
ContBK 統合ダッシュボード
======================

ContBKフォルダーの全機能を統合した見やすいダッシュボード
サブフォルダーの機能を「Example」タブ内で整理して表示
"""

import gradio as gr
import importlib
import os
import sys
import traceback
from typing import List, Tuple, Any, Dict

def load_contbk_interfaces() -> Dict[str, List[Tuple[Any, str]]]:
    """
    ContBKフォルダーから機能をカテゴリ別に読み込み
    """
    print("📂 ContBK統合ダッシュボード: 機能を読み込み中...")
    
    # パスの設定
    contbk_path = "/workspaces/fastapi_django_main_live/contbk"
    main_path = "/workspaces/fastapi_django_main_live"
    
    if contbk_path not in sys.path:
        sys.path.insert(0, contbk_path)
    if main_path not in sys.path:
        sys.path.insert(0, main_path)
    
    # カテゴリ別の機能整理
    categories = {
        "🤖 AI・自動化": [
            ("gra_01_chat.Chat", "💬 AI チャット"),
            ("gra_02_openInterpreter.OpenInterpreter", "🤖 AI インタープリター"),
            ("gra_12_rpa.rpa_automation", "🤖 RPA自動化システム"),
        ],
        "📄 ドキュメント・開発": [
            ("gra_03_programfromdoc.programfromdoc", "📄 ドキュメント生成"),
            ("gra_03_programfromdocgas.programfromdocAI", "📄 プログラム生成AI"),
            ("gra_03_programfromdocs.lavelo", "💾 プロンプト管理"),
        ],
        "🎨 フロントエンド・UI": [
            ("gra_10_frontend.frontend_generator", "🎨 フロントエンド生成"),
            ("gra_11_multimodal.image_to_ui", "🖼️ 画像からUI生成"),
        ],
        "📊 データ・ファイル": [
            ("gra_04_database.rides", "🚗 データベース管理"),
            ("gra_05_files.files", "📁 ファイル管理"),
        ],
        "🌐 その他ツール": [
            ("gra_09_weather.weather", "🌤️ 天気予報"),
            ("gra_06_video.video", "🎥 動画処理"),
        ],
        "🐙 開発・Issue管理": [
            ("controllers.github_issue_creator", "🐙 GitHub Issue作成"),
        ],
    }
    
    loaded_categories = {}
    
    for category_name, modules in categories.items():
        loaded_interfaces = []
        
        for module_name, display_name in modules:
            try:
                print(f"🔍 Loading {module_name}...")
                module = importlib.import_module(module_name)
                
                if hasattr(module, 'gradio_interface'):
                    loaded_interfaces.append((module.gradio_interface, display_name))
                    print(f"✅ Successfully loaded: {display_name}")
                else:
                    print(f"⚠️ No gradio_interface found in {module_name}")
                    
            except Exception as e:
                print(f"❌ Failed to load {module_name}: {str(e)}")
                continue
        
        if loaded_interfaces:
            loaded_categories[category_name] = loaded_interfaces
    
    return loaded_categories

def create_category_tab(interfaces: List[Tuple[Any, str]], category_name: str) -> gr.Blocks:
    """
    カテゴリごとのタブを作成
    """
    with gr.Blocks(title=f"ContBK - {category_name}") as category_tab:
        gr.Markdown(f"# {category_name}")
        gr.Markdown(f"このカテゴリには {len(interfaces)} 個の機能があります。")
        
        if interfaces:
            # サブタブとして各機能を表示
            interface_list = [interface for interface, _ in interfaces]
            interface_names = [name for _, name in interfaces]
            
            if len(interfaces) == 1:
                # 1つの機能のみの場合、直接表示
                interface = interface_list[0]
                # Handle factory functions
                if callable(interface) and not hasattr(interface, 'queue'):
                    interface = interface()
                interface.render()
            else:
                # 複数の機能がある場合、サブタブで表示
                # Handle factory functions in the list
                processed_interfaces = []
                for interface in interface_list:
                    if callable(interface) and not hasattr(interface, 'queue'):
                        interface = interface()
                    processed_interfaces.append(interface)
                
                sub_tabs = gr.TabbedInterface(
                    processed_interfaces,
                    interface_names,
                    title=f"{category_name} 機能一覧"
                )
        else:
            gr.Markdown("⚠️ このカテゴリには利用可能な機能がありません。")
    
    return category_tab

def create_overview_tab() -> gr.Blocks:
    """
    概要・ヘルプタブを作成
    """
    with gr.Blocks() as overview_tab:
        gr.Markdown("""
        # 🎯 ContBK 統合ダッシュボード
        
        ## 📋 概要
        このダッシュボードは、ContBKフォルダーにある全ての機能を整理して表示します。
        
        ## 🗂️ カテゴリ構成
        
        ### 🤖 AI・自動化
        - **AI チャット**: 対話型AIインターフェース
        - **AI インタープリター**: コード実行・解析
        - **RPA自動化システム**: Webブラウザ自動化
        
        ### 📄 ドキュメント・開発
        - **ドキュメント生成**: 仕様書からコード生成
        - **プログラム生成AI**: AI支援開発
        - **プロンプト管理**: プロンプトライブラリ
        
        ### 🎨 フロントエンド・UI
        - **フロントエンド生成**: UI自動生成
        - **画像からUI生成**: 画像ベースUI作成
        
        ### 📊 データ・ファイル
        - **データベース管理**: CRUD操作
        - **ファイル管理**: ファイル操作・編集
        
        ### 🌐 その他ツール
        - **天気予報**: 気象情報取得
        - **動画処理**: 動画編集・変換
        
        ### 🐙 開発・Issue管理
        - **GitHub Issue作成**: 会話履歴からIssue自動生成
        
        ## 🚀 使用方法
        1. 上部のタブから興味のあるカテゴリを選択
        2. カテゴリ内の機能を探索
        3. 各機能の詳細な操作は個別のインターフェースで実行
        
        ## 💡 ヒント
        - 各カテゴリは関連する機能でグループ化されています
        - 機能に問題がある場合は、ログを確認してください
        - 新しい機能は随時追加されます
        """)
        
        # システム情報表示
        with gr.Row():
            with gr.Column():
                def get_system_info():
                    import datetime
                    contbk_path = "/workspaces/fastapi_django_main_live/contbk"
                    folder_count = len([d for d in os.listdir(contbk_path) 
                                      if os.path.isdir(os.path.join(contbk_path, d)) 
                                      and d.startswith('gra_')])
                    
                    return f"""
                    **現在時刻**: {datetime.datetime.now().strftime('%Y年%m月%d日 %H:%M:%S')}
                    **ContBK パス**: {contbk_path}
                    **利用可能フォルダー数**: {folder_count}
                    **Gradio バージョン**: {gr.__version__}
                    """
                
                system_info = gr.Textbox(
                    label="💻 システム情報",
                    value=get_system_info(),
                    lines=6,
                    interactive=False
                )
                
                refresh_btn = gr.Button("🔄 情報更新", variant="secondary")
                refresh_btn.click(fn=get_system_info, outputs=system_info)
    
    return overview_tab

def create_unified_dashboard() -> gr.TabbedInterface:
    """
    統合ダッシュボードを作成
    """
    print("🚀 ContBK統合ダッシュボードを作成中...")
    
    try:
        # ContBK機能をカテゴリ別に読み込み
        categories = load_contbk_interfaces()
        
        # タブリストを作成
        all_tabs = []
        all_names = []
        
        # 概要タブを最初に追加
        overview_tab = create_overview_tab()
        all_tabs.append(overview_tab)
        all_names.append("🏠 概要")
        
        # カテゴリ別タブを追加
        for category_name, interfaces in categories.items():
            category_tab = create_category_tab(interfaces, category_name)
            all_tabs.append(category_tab)
            all_names.append(category_name)
        
        # 統合タブ付きインターフェースを作成
        if len(all_tabs) > 1:
            dashboard = gr.TabbedInterface(
                all_tabs,
                all_names,
                title="🎯 ContBK 統合ダッシュボード"
            )
        else:
            # フォールバック:概要タブのみ
            dashboard = overview_tab
        
        print(f"✅ ダッシュボード作成完了: {len(all_tabs)} タブ")
        return dashboard
        
    except Exception as e:
        print(f"❌ ダッシュボード作成エラー: {str(e)}")
        traceback.print_exc()
        
        # エラー時のフォールバック
        with gr.Blocks() as error_tab:
            gr.Markdown(f"""
            # ❌ エラーが発生しました
            
            ContBK統合ダッシュボードの作成中にエラーが発生しました。
            
            **エラー詳細**: {str(e)}
            
            ## 🔧 対処方法
            1. アプリケーションを再起動してください
            2. ログを確認してください
            3. 個別の機能が正常に動作するかテストしてください
            """)
        
        return gr.TabbedInterface([error_tab], ["❌ エラー"])

# メインのgradio_interfaceを作成
print("🚀 Creating unified ContBK dashboard...")
gradio_interface = create_unified_dashboard()

# 自動検出システム用のメタデータ
interface_title = "🎯 ContBK統合ダッシュボード"
interface_description = "ContBKフォルダーの全機能を整理したダッシュボード"

# テスト実行用
if __name__ == "__main__":
    print("🚀 ContBK統合ダッシュボードを起動中...")
    gradio_interface.launch(
        server_name="0.0.0.0",
        server_port=7865,  # 専用ポート
        share=False,
        debug=True
    )