title: DriftCall
emoji: 🌀
colorFrom: indigo
colorTo: pink
sdk: docker
pinned: true
license: apache-2.0
short_description: OpenEnv env + site · canonical /reset · one Space
tags:
- openenv
- rl
- voice
- indic
- schema-drift
- grpo
- gemma-3n
DriftCall — Unified Space
One HF Space serving the OpenEnv-compliant DriftCall env and the
project site, both under the same hostname. OpenEnv routes are at the
canonical bare paths (no /api prefix), so the registry and the gym
client see this Space exactly as it sees the dedicated env Space.
URL surface
| Path | Method | What it does |
|---|---|---|
/ |
GET |
static project site (Vite-built React + pretext) |
/assets/* |
GET |
site bundle (CSS, JS, fonts) |
/healthz |
GET |
OpenEnv health probe (text/plain "ok") |
/reset |
POST |
OpenEnv reset (bearer auth + X-Session-Id) |
/step |
POST |
OpenEnv step |
/state |
GET |
OpenEnv read-only state |
/close |
POST |
OpenEnv close session |
/openenv.yaml |
GET |
the manifest (served from disk) |
/demo |
GET |
302 → dedicated Gradio demo Space |
The OpenEnv routes do not collide with the static frontend because
they are HTTP verb-specific (POST /reset, POST /step, POST /close,
plus GET /healthz and GET /state) — Vite-emitted assets live under
/assets/* and never overlap.
Why both, not separate?
The dedicated env Space (DGXAI/driftcall-env) and project site
(DGXAI/driftcall-site) still exist as canonical, isolated artefacts.
This Space is an additive convenience for hackathon judging:
land at one URL and you see the project, can hit the reward function
endpoint, and get redirected to the demo. The Gradio demo stays
separate because it's GPU-heavy and benefits from its own scaling.
What's bundled
Self-contained — the build dir for this Space contains everything it needs to run, with no references to anything outside it:
unified_space/build/
├── app.py ← canonical OpenEnv FastAPI (verbatim copy)
├── unified_app.py ← extends app.py + adds static mount + /demo redirect
├── openenv.yaml ← OpenEnv v1.0 manifest
├── requirements.txt ← runtime deps (no training stack)
├── Dockerfile ← multi-stage CPU image, Kokoro + faster-whisper baked
├── cells/ ← DriftCallEnv + 5 reward components + drift + audio
├── data/ ← briefs, drift patterns, API schemas
└── site/ ← Vite-built React dist (frontend)
Build + push with bash deploy/unified_space/build.sh --push from the
repo root.
OpenEnv compliance
- Manifest: served at
/openenv.yaml - Endpoints: bare-path canonical (
/reset,/step,/state,/close,/healthz) - Auth: bearer (
DRIFTCALL_ENV_TOKEN) +X-Session-Idheader on mutating calls - Action / Observation refs:
cells.step_04_models:DriftCallAction/cells.step_04_models:DriftCallObservation - Reward: 5 components (R1..R5) with weights, calibration via Brier +
uncertain floor — see
cells/step_08_rewards.pyand the openenv.yaml reward block.