u-space / space.py
loose-bits's picture
Deploy b7d646e
d71b220 verified
Raw History Blame Contribute Delete
1.99 kB
"""Entry point for the Hugging Face Space. The Hub runs this file; nothing else imports it.
The package is imported from `src/` rather than installed. The Hub mounts `requirements.txt`
alone, at /tmp, and runs pip from a directory that is not the repo, so a `.[app]` line in it
has no pyproject.toml to find; the dependencies are listed out in requirements.txt instead and
this file puts `src` on the path.
Everything the page needs at startup other than the model ships in `space/cache/`: the cone at
every lens block, the bases at 20 and 23, and the transported vocabulary's row norms. Without
them the first visitor would wait on a 388 MB lens checkpoint and a basis build before the
page could paint. The 8.8 GB model is still fetched on a cold start — a Space's disk is not
persistent — and only the decode panel reaches for the lens, lazily, when clicked.
Why the defaults differ from the local demo: on ZeroGPU a run is charged to the *visitor's*
daily quota, which is 2 minutes unauthenticated and 5 on a free account, and a thinking run
asks for `60 + max_new_tokens // 5` seconds of it. So the page starts with thinking off, where
the model answers in seconds, and the budget's ceiling is 512 rather than 2048. Both are plain
environment variables, so the Space's settings can raise them without a code change.
"""
import os
import sys
from pathlib import Path
HERE = Path(__file__).resolve().parent
sys.path.insert(0, str(HERE / "src"))
os.environ.setdefault("ULENS_CACHE", str(HERE / "space" / "cache"))
os.environ.setdefault("ULENS_APP_THINK", "off")
os.environ.setdefault("ULENS_APP_MAX_TOKENS", "512")
os.environ.setdefault("GRADIO_ANALYTICS_ENABLED", "False")
from ulens import simplex # noqa: E402
from ulens.app import CSS, JS, build, favicon_head, theme # noqa: E402
demo = build()
demo.queue().launch(css=CSS, js=JS, theme=theme(), head=favicon_head(),
favicon_path=str(simplex.MARK_PATH))