lighthouse-scoring / README.md
AaravArora's picture
gradio owns the server; graft /health and /score onto it
14a0030 verified
|
Raw
History Blame Contribute Delete
2.34 kB

A newer version of the Gradio SDK is available: 6.24.0

Upgrade
metadata
title: Lighthouse Scoring Service
emoji: 🪔
colorFrom: indigo
colorTo: blue
sdk: gradio
app_file: app.py
python_version: '3.12'
suggested_hardware: zero-a10g
pinned: false

Lighthouse scoring service

The classifier half of Lighthouse, behind one HTTP call. A fine-tuned turn classifier, a logistic conversation head with isotonic calibration, and a deterministic safety gate, returning a finished escalation card.

Every conversation this service was trained and demonstrated on is synthetic. No real student ever spoke to it.

This is a listening and routing tool. It does not diagnose, treat, or offer therapy.

Endpoints

The Gradio page at / is a courtesy. The API is the product.

Route Purpose
GET /health Liveness, plus whether the checkpoint is present and loaded
POST /score One conversation in, one escalation card out
curl -X POST https://AaravArora-lighthouse-scoring.hf.space/score \
  -H 'Content-Type: application/json' \
  -d '{"caseId":"demo","handle":"anon","startedAt":"2026-01-01T00:00:00Z",
       "turns":[{"role":"student","text":"i have not slept in days and nothing helps"}]}'

What this service cannot do

It cannot decide whether a student sees crisis resources. That already happened, in the browser, before this service was contacted, from a safety gate that runs in about 123µs with no network. Nothing returned here can revoke it.

A failure here is not an outage. The caller applies a four-second timeout and keeps its gate-only card if this does not answer, which is a designed state with its own screen copy.

Note on the first request

The checkpoint loads lazily, on first /score, so /health answers while it is still loading rather than being killed during a slow start. That first scoring request takes about ten seconds; every one after it is about 30ms. Free Spaces also sleep, so warm this before demoing.

Scoring runs on CPU. ZeroGPU allocates a GPU per decorated call, which is the wrong shape for a model held across requests, and a DistilBERT does not need one. The self-test button on /ui proves the GPU allocation is real; nothing on the scoring path uses it.

Built from the ml/ half of the Lighthouse repository by ml/space/make_space.sh. This Space is a generated build output, not the source of truth.