fastapi_django_main_live / controllers /example_gradio_interface.py
GitHub Action
🚀 Auto-deploy from GitHub Actions
70766d2
raw
history blame
7.31 kB
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"
# 必要なパスをsys.pathに追加
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)
# contbkフォルダー内の各サブディレクトリをチェック
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:
# Pythonファイルを探索
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)
# gradio_interfaceが存在するかチェック
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 # 1つのフォルダーから1つのインターフェースのみ
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**: ファイル管理
- **🎥 Video**: 動画処理
- **🌤️ Weather**: 天気予報
- **🎨 Frontend**: フロントエンド生成
- **🖼️ Multimodal**: マルチモーダル機能
## 🚀 使い方:
1. 上部のタブから使いたい機能を選択
2. 各タブの指示に従って操作
3. 必要に応じて設定やパラメータを調整
## 📞 サポート:
- 各機能の詳細は対応するタブで確認できます
- 問題が発生した場合は、エラーメッセージを確認してください
""")
# システム情報を表示
with gr.Accordion("🔧 システム情報", open=False):
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_tab:
gr.Markdown(f"""
# ❌ エラーが発生しました
```
{error_message}
```
## 🔧 トラブルシューティング:
1. contbkフォルダーが存在することを確認
2. 各モジュールが正しくインストールされていることを確認
3. Pythonパスが正しく設定されていることを確認
""")
return error_tab
def create_tabbed_interface() -> gr.TabbedInterface:
"""
contbkフォルダーのインターフェースを統合したタブ表示を作成
"""
try:
# contbkからインターフェースを読み込み
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 ダッシュボード (エラー)"
)
# メインのgradio_interfaceを作成
gradio_interface = create_tabbed_interface()
# スタンドアロン実行用(テスト用)
if __name__ == "__main__":
print("🚀 ContBK ダッシュボードを起動中...")
gradio_interface.launch(
server_name="0.0.0.0",
server_port=7861, # メインアプリと被らないポート
share=False,
debug=True
)