|
import gradio as gr |
|
import importlib |
|
import os |
|
import sys |
|
import traceback |
|
from typing import List, Tuple, Dict, Any |
|
|
|
def load_contbk_interfaces() -> Tuple[List[Any], List[str]]: |
|
""" |
|
contbkフォルダーから全てのgradio_interfaceを動的に読み込み |
|
Returns: |
|
Tuple[List[gradio.Interface], List[str]]: インターフェースとその名前のリスト |
|
""" |
|
interfaces = [] |
|
names = [] |
|
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) |
|
|
|
|
|
for item in os.listdir(contbk_path): |
|
item_path = os.path.join(contbk_path, item) |
|
|
|
|
|
if os.path.isdir(item_path) and item.startswith('gra_'): |
|
try: |
|
|
|
for file in os.listdir(item_path): |
|
if file.endswith('.py') and file != '__init__.py': |
|
module_name = f"{item}.{file[:-3]}" |
|
|
|
try: |
|
print(f"🔍 Loading {module_name}...") |
|
|
|
|
|
module = importlib.import_module(module_name) |
|
|
|
|
|
if hasattr(module, 'gradio_interface'): |
|
interface = module.gradio_interface |
|
interface_name = f"{item.replace('gra_', '').replace('_', ' ').title()}" |
|
|
|
interfaces.append(interface) |
|
names.append(interface_name) |
|
print(f"✅ Successfully loaded: {interface_name}") |
|
break |
|
|
|
except Exception as e: |
|
print(f"⚠️ Failed to load {module_name}: {str(e)}") |
|
continue |
|
|
|
except Exception as e: |
|
print(f"❌ Error processing {item}: {str(e)}") |
|
continue |
|
|
|
print(f"📊 Total interfaces loaded: {len(interfaces)}") |
|
return interfaces, names |
|
|
|
def create_welcome_tab() -> gr.Blocks: |
|
"""ウェルカムタブを作成""" |
|
with gr.Blocks() as welcome: |
|
gr.Markdown(""" |
|
# 🎯 ContBK インターフェース ダッシュボード |
|
|
|
このダッシュボードでは、`contbk`フォルダーにある全ての Gradio インターフェースにアクセスできます。 |
|
|
|
## 📋 利用可能な機能: |
|
|
|
各タブには以下のような機能が含まれています: |
|
|
|
- **💬 Chat**: チャット機能 |
|
- **🤖 Open Interpreter**: オープンインタープリター |
|
- **📄 Program From Doc**: ドキュメントからプログラム生成 |
|
- **🗄️ Database**: データベース操作 |
|
- **📁 Files**: ファイル管理 |
|
- **🌐 Html**: HTML表示 |
|
- **🌤️ Weather**: 天気予報機能 |
|
- **🎨 Frontend**: フロントエンド生成 |
|
- **🖼️ Multimodal**: マルチモーダル機能 |
|
|
|
## 🚀 使用方法: |
|
|
|
1. 上部のタブから使用したい機能を選択 |
|
2. 各インターフェースの指示に従って操作 |
|
3. 必要に応じてファイルのアップロードや設定を行う |
|
|
|
## 📞 サポート: |
|
|
|
問題が発生した場合は、各インターフェースのドキュメントを参照するか、 |
|
開発チームにお問い合わせください。 |
|
""") |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
gr.Markdown("### 📊 システム情報") |
|
|
|
def get_system_status(): |
|
return f""" |
|
**Python バージョン**: {sys.version} |
|
**ContBK パス**: /workspaces/fastapi_django_main_live/contbk |
|
**利用可能なインターフェース数**: {len(load_contbk_interfaces()[0])} |
|
""" |
|
|
|
gr.Markdown(get_system_status()) |
|
|
|
return welcome |
|
|
|
def create_error_tab(error_message: str) -> gr.Blocks: |
|
"""エラータブを作成""" |
|
with gr.Blocks() as error: |
|
gr.Markdown(f""" |
|
# ❌ エラーが発生しました |
|
|
|
``` |
|
{error_message} |
|
``` |
|
|
|
## 📝 解決方法: |
|
|
|
1. **依存関係の確認**: 必要なパッケージがインストールされているか確認 |
|
2. **ファイルパス**: contbkフォルダーのパスが正しいか確認 |
|
3. **権限**: ファイルアクセス権限を確認 |
|
4. **再起動**: アプリケーションを再起動してみる |
|
|
|
## 📞 サポート: |
|
|
|
問題が解決しない場合は、開発チームにお問い合わせください。 |
|
""") |
|
return error |
|
|
|
def create_tabbed_interface() -> gr.TabbedInterface: |
|
""" |
|
contbkフォルダーのインターフェースを統合したタブ表示を作成 |
|
""" |
|
try: |
|
|
|
interfaces, names = load_contbk_interfaces() |
|
|
|
|
|
welcome_tab = create_welcome_tab() |
|
all_interfaces = [welcome_tab] + interfaces |
|
all_names = ["🏠 Welcome"] + names |
|
|
|
if len(interfaces) == 0: |
|
|
|
error_tab = create_error_tab("contbkフォルダーからインターフェースが見つかりませんでした。") |
|
all_interfaces = [welcome_tab, error_tab] |
|
all_names = ["🏠 Welcome", "❌ Error"] |
|
|
|
|
|
tabs = gr.TabbedInterface( |
|
all_interfaces, |
|
all_names, |
|
title="🎯 ContBK ダッシュボード" |
|
) |
|
|
|
return tabs |
|
|
|
except Exception as e: |
|
print(f"❌ Failed to create tabbed interface: {str(e)}") |
|
traceback.print_exc() |
|
|
|
|
|
error_tab = create_error_tab(str(e)) |
|
welcome_tab = create_welcome_tab() |
|
|
|
return gr.TabbedInterface( |
|
[welcome_tab, error_tab], |
|
["🏠 Welcome", "❌ Error"], |
|
title="🎯 ContBK ダッシュボード (エラー)" |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
print("🚀 ContBK ダッシュボードを起動中...") |
|
gradio_interface = create_tabbed_interface() |
|
gradio_interface.launch( |
|
server_name="0.0.0.0", |
|
server_port=7861, |
|
share=False, |
|
debug=True |
|
) |
|
|