Voice-AI-Agent-Clean / verify_boot.py
Toadoum's picture
Upload 12 files
15fbd84 verified
Raw
History Blame Contribute Delete
2.67 kB
"""
Verifies app.py imports cleanly under file-layout problems that have actually
broken this Space:
A integrations/ folder missing entirely (HF web uploader skips folders)
B integrations/ present but without __init__.py
C integrations/ complete
D app started from a different working directory
Uses the REAL gradio (a verified dependency) and stubs only model loading, so
nothing downloads. Never launches a server — that is test_app.py's job.
"""
import os
import shutil
import subprocess
import sys
import tempfile
SRC = os.path.dirname(os.path.abspath(__file__))
GREEN, RED, OFF = "\033[92m", "\033[91m", "\033[0m"
HARNESS = '''
import sys
sys.path.insert(0, sys.argv[2])
import pipeline as _pl
_pl.HausaVoiceAIPipeline._load_asr = lambda self: None
_pl.HausaVoiceAIPipeline._load_asr_fast = lambda self: None
_pl.HausaVoiceAIPipeline._load_nllb = lambda self: None
_pl.HausaVoiceAIPipeline._load_tts = lambda self: None
import runpy
runpy.run_path(sys.argv[1], run_name="__not_main__")
print("IMPORT_OK")
'''
def scenario(name, setup, cwd=None):
tmp = tempfile.mkdtemp()
for f in os.listdir(SRC):
if f.endswith(".py"):
shutil.copy(os.path.join(SRC, f), tmp)
setup(tmp)
harness = os.path.join(tmp, "_h.py")
with open(harness, "w") as fh:
fh.write(HARNESS)
r = subprocess.run(
[sys.executable, harness, os.path.join(tmp, "app.py"), tmp],
capture_output=True, text=True, cwd=cwd or tmp)
ok = "IMPORT_OK" in r.stdout
tag = f"{GREEN}BOOTS{OFF}" if ok else f"{RED}CRASH{OFF}"
print(f" [{tag}] {name}")
if not ok:
tail = (r.stderr or r.stdout).strip().splitlines()
print(" " + (tail[-1] if tail else "no output"))
shutil.rmtree(tmp, ignore_errors=True)
return ok
def none(tmp):
pass
def no_init(tmp):
d = os.path.join(tmp, "integrations")
os.makedirs(d, exist_ok=True)
for f in ("crm.py", "sip.py", "whatsapp.py"):
shutil.copy(os.path.join(SRC, "integrations", f), d)
def full(tmp):
d = os.path.join(tmp, "integrations")
os.makedirs(d, exist_ok=True)
for f in os.listdir(os.path.join(SRC, "integrations")):
if f.endswith(".py"):
shutil.copy(os.path.join(SRC, "integrations", f), d)
print("\n== Space startup scenarios ==")
res = [
scenario("A: integrations/ missing entirely", none),
scenario("B: integrations/ without __init__.py", no_init),
scenario("C: integrations/ complete", full),
scenario("D: different working directory", full, cwd="/"),
]
print(f"\n {sum(res)}/{len(res)} scenarios boot cleanly")
sys.exit(0 if all(res) else 1)