"""Hugging Face Space entry point for the RustGen demo (ZeroGPU). Runs the real Qwen2.5-Coder-1.5B backend with the compile-guided cascade and TF-IDF retrieval; rustc (installed via packages.txt) powers the verification panel. The rustgen package and data/rust_corpus_qwen.jsonl sit next to this file (see prepare.sh), so no install step is needed. ZeroGPU: the model generation runs inside `translate()`, which we wrap with `@spaces.GPU` at startup. That both allocates a GPU slice for the duration of a request and lets the ZeroGPU runtime detect a GPU function at boot. The wrap is a no-op if `spaces` is unavailable (a plain CPU Space, or running locally). """ import os os.environ.setdefault("RUSTGEN_BACKEND", "hf") os.environ.setdefault("RUSTGEN_RAG_BACKEND", "tfidf") from rustgen.app import demo as demo_module try: import spaces # Wrap the module-level generation handler so it executes on an allocated # GPU. build_demo() looks up `translate` by name at wiring time, so replacing # it here (before build_demo runs) is enough — no change to rustgen itself. demo_module.translate = spaces.GPU(duration=120)(demo_module.translate) print("ZeroGPU: translate() wrapped with @spaces.GPU (duration=120s)") except Exception as exc: # not a ZeroGPU Space / spaces not installed print(f"ZeroGPU wrapper not applied ({type(exc).__name__}: {exc}) — CPU path") demo = demo_module.build_demo() if __name__ == "__main__": demo.launch()