mozzic's picture
Upload app.py with huggingface_hub
2cb3489 verified
#!/usr/bin/env python3
"""Hugging Face Spaces - intelligent module loading"""
import os
import sys
import importlib.util
from pathlib import Path
from types import ModuleType
app_dir = Path("/app")
sys.path.insert(0, str(app_dir))
print("Loading application...\n")
# Create src package
src_package = ModuleType("src")
src_package.__path__ = [str(app_dir / "src")]
sys.modules["src"] = src_package
# Read all src files and fix their imports
src_files_content = {}
print("Reading src files:")
for item in sorted(app_dir.iterdir()):
name = item.name
if name.startswith("src\\") and name.endswith(".py") and name != "src\\__init__.py":
module_name = name.split("\\")[-1].replace(".py", "")
try:
with open(str(item), 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()
# Fix imports: convert backslash paths to forward slash
content = content.replace("from src\\", "from src.")
content = content.replace("import src\\", "import src.")
# Also handle cases where backslash is in string
src_files_content[module_name] = content
print(f" Read {module_name}")
except Exception as e:
print(f" {module_name}: {e}")
# Execute modules in order (simple modules first)
load_order = [
"models",
"parser",
"indexing",
"intent",
"retrieval",
"reasoning",
"dependencies",
"groq_integration",
"evaluation",
"notebook_downloader",
]
print("\nExecuting src modules:")
executed_modules = {}
for module_name in load_order:
if module_name not in src_files_content:
continue
try:
# Create module
full_name = f"src.{module_name}"
module = ModuleType(full_name)
module.__file__ = str(app_dir / f"src\\{module_name}.py")
module.__loader__ = None
# Create namespace with all previously loaded modules
namespace = {
"__name__": full_name,
"__file__": module.__file__,
"__package__": "src",
"src": src_package,
}
# Add all already-loaded src modules
for loaded_name, loaded_module in executed_modules.items():
namespace[loaded_name] = loaded_module
setattr(src_package, loaded_name, loaded_module)
# Execute the code
code = src_files_content[module_name]
exec(compile(code, module.__file__, "exec"), namespace)
# Update module with namespace
for key, value in namespace.items():
if not key.startswith("_"):
setattr(module, key, value)
# Register
sys.modules[full_name] = module
sys.modules[module_name] = module
setattr(src_package, module_name, module)
executed_modules[module_name] = module
print(f" Loaded {full_name}")
except Exception as e:
print(f" {module_name}: {str(e)[:60]}")
import traceback
traceback.print_exc()
# Load remaining modules not in load_order
print("\nLoading remaining modules:")
for module_name in src_files_content:
if module_name not in executed_modules:
try:
full_name = f"src.{module_name}"
module = ModuleType(full_name)
module.__file__ = str(app_dir / f"src\\{module_name}.py")
namespace = {
"__name__": full_name,
"__file__": module.__file__,
"__package__": "src",
"src": src_package,
}
for loaded_name, loaded_module in executed_modules.items():
namespace[loaded_name] = loaded_module
setattr(src_package, loaded_name, loaded_module)
code = src_files_content[module_name]
exec(compile(code, module.__file__, "exec"), namespace)
for key, value in namespace.items():
if not key.startswith("_"):
setattr(module, key, value)
sys.modules[full_name] = module
sys.modules[module_name] = module
setattr(src_package, module_name, module)
executed_modules[module_name] = module
print(f" Loaded {full_name}")
except Exception as e:
print(f" {module_name}: {str(e)[:60]}")
# Now load ui/app.py
print("\nLoading ui/app.py:")
ui_app_path = None
for item in app_dir.iterdir():
if item.name == "ui\\app.py":
ui_app_path = item
break
if ui_app_path and ui_app_path.exists():
try:
with open(str(ui_app_path), 'r', encoding='utf-8', errors='ignore') as f:
code = f.read()
exec_globals = {
"__name__": "__main__",
"__file__": str(ui_app_path),
"src": src_package,
}
# Add all src modules
for module_name, module in executed_modules.items():
exec_globals[module_name] = module
print(" Executing ui/app.py...")
exec(compile(code, str(ui_app_path), "exec"), exec_globals)
create_gradio_app = exec_globals.get("create_gradio_app")
if create_gradio_app and callable(create_gradio_app):
print(" Launching Gradio app...\n")
demo = create_gradio_app()
demo.launch(
server_name="0.0.0.0",
server_port=int(os.environ.get("PORT", 7860)),
show_error=True
)
else:
print(" create_gradio_app not found")
except Exception as e:
print(f" Error: {e}\n")
import traceback
traceback.print_exc()
else:
print(" ui\\app.py not found")