File size: 5,847 Bytes
05892df
2cb3489
05892df
 
68861e8
05892df
21b1198
05892df
68861e8
55fa0a8
05892df
2cb3489
e9b8ae5
8e8ad2d
21b1198
 
 
 
2cb3489
 
 
21b1198
e9b8ae5
2cb3489
e9b8ae5
 
2cb3489
 
 
 
 
 
 
 
e9b8ae5
2cb3489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8e8ad2d
 
2cb3489
 
 
 
 
 
8e8ad2d
2cb3489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8e8ad2d
2cb3489
 
 
b22bb2a
2cb3489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21b1198
b22bb2a
55fa0a8
b22bb2a
 
e9b8ae5
55fa0a8
b22bb2a
55fa0a8
2cb3489
 
 
 
 
 
 
 
 
 
 
 
 
21b1198
 
e9b8ae5
21b1198
 
8e8ad2d
e9b8ae5
 
 
 
 
 
 
21b1198
55fa0a8
8e8ad2d
55fa0a8
 
68861e8
21b1198
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
#!/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")