|
import shutil |
|
import gradio as gr |
|
|
|
|
|
|
|
import importlib |
|
import os |
|
import pkgutil |
|
|
|
|
|
|
|
import importlib |
|
import os |
|
import pkgutil |
|
|
|
import importlib |
|
import os |
|
import pkgutil |
|
import traceback |
|
|
|
def include_gradio_interfaces(): |
|
gradio_interfaces = {} |
|
|
|
|
|
search_dirs = [ |
|
("controllers", "controllers"), |
|
] |
|
|
|
package_paths = [] |
|
|
|
|
|
for package_dir, module_prefix in search_dirs: |
|
if os.path.exists(package_dir): |
|
print(f"📂 Scanning directory: {package_dir}") |
|
for root, dirs, files in os.walk(package_dir): |
|
if "__pycache__" in root: |
|
continue |
|
package_paths.append((root, module_prefix)) |
|
|
|
for package_path, module_prefix in package_paths: |
|
|
|
rel_path = os.path.relpath(package_path, module_prefix.split('.')[0] if '.' in module_prefix else module_prefix) |
|
|
|
if rel_path == ".": |
|
package_name = module_prefix |
|
else: |
|
package_name = module_prefix + "." + rel_path.replace(os.sep, ".") |
|
|
|
for module_info in pkgutil.iter_modules([package_path]): |
|
sub_module_name = f"{package_name}.{module_info.name}" |
|
print(f"Trying to import {sub_module_name}") |
|
|
|
try: |
|
module = importlib.import_module(sub_module_name) |
|
print(f"Successfully imported {sub_module_name}") |
|
|
|
|
|
if hasattr(module, "gradio_interface"): |
|
print(f"Found gradio_interface in {sub_module_name}") |
|
|
|
|
|
base_name = module_info.name |
|
|
|
|
|
title_mapping = { |
|
'conversation_history': '💬 会話履歴管理', |
|
'conversation_logger': '📝 会話ログ', |
|
'conversation_demo': '🎯 会話履歴統合デモ', |
|
'contbk_unified_dashboard': '🎯 ContBK統合ダッシュボード', |
|
|
|
|
|
|
|
'hasura': '🗄️ Hasura API', |
|
'Chat': '💬 チャット', |
|
'OpenInterpreter': '🤖 AI インタープリター', |
|
'programfromdoc': '📄 ドキュメント生成', |
|
'gradio_interface': '🚀 AI開発プラットフォーム', |
|
'lavelo': '💾 プロンプト管理システム', |
|
'rides': '🚗 データベース管理', |
|
'files': '📁 ファイル管理', |
|
'gradio': '🌐 HTML表示', |
|
'rpa_automation': '🤖 RPA自動化システム', |
|
} |
|
|
|
|
|
if hasattr(module, 'interface_title'): |
|
display_name = module.interface_title |
|
elif base_name in title_mapping: |
|
display_name = title_mapping[base_name] |
|
else: |
|
|
|
formatted_name = base_name.replace('_', ' ').title() |
|
display_name = f"✨ {formatted_name}" |
|
|
|
|
|
unique_name = display_name |
|
count = 1 |
|
|
|
|
|
while unique_name in gradio_interfaces: |
|
unique_name = f"{display_name} ({count})" |
|
count += 1 |
|
|
|
gradio_interfaces[unique_name] = module.gradio_interface |
|
except ModuleNotFoundError as e: |
|
print(f"ModuleNotFoundError: {sub_module_name} - {e}") |
|
except AttributeError as e: |
|
print(f"AttributeError in {sub_module_name}: {e}") |
|
except Exception as e: |
|
print(f"Failed to import {sub_module_name}: {e}") |
|
print(traceback.format_exc()) |
|
|
|
|
|
print(f"Collected Gradio Interfaces: {list(gradio_interfaces.keys())}") |
|
return list(gradio_interfaces.values()), list(gradio_interfaces.keys()) |
|
|
|
|
|
def setup_gradio_interfaces(): |
|
|
|
|
|
|
|
default_interfaces = [] |
|
default_names = ["CreateTASK","Chat","OpenInterpreter","DataBase","CreateFromDOC","HTML","FILES"] |
|
|
|
gradio_interfaces, gradio_names = include_gradio_interfaces() |
|
|
|
all_interfaces = gradio_interfaces |
|
all_names = gradio_names |
|
|
|
tabs = gr.TabbedInterface(all_interfaces, all_names) |
|
tabs.queue() |
|
return tabs |
|
if __name__ == "__main__": |
|
interfaces, names = include_gradio_interfaces() |