vibecheck-api / README.md
itsLu's picture
chore(api): add checkmyvibe.me to default CORS allowlist
5df45c4
---
title: VibeCheck MentalBERT API
emoji: 🧠
colorFrom: indigo
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
license: mit
---
# VibeCheck MentalBERT API
FastAPI proxy serving two fine-tuned MentalBERT models for mental health text classification: a fast flat 8-class head ("Quick Vibe") and a 5-stage hierarchical cascade ("Deep Dive") with optional sensitive-mode calibration.
## Endpoint
**POST** `/classify`
Request body:
```json
{ "text": "i have been feeling really overwhelmed lately", "model": "mentalbert", "sensitive_mode": false }
```
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `text` | string | yes | — | Input text. Max 4096 chars (configurable via `MAX_INPUT_CHARS`). |
| `model` | `"mentalbert" \| "longformer"` | no | `"mentalbert"` | `mentalbert` = Quick Vibe (single forward pass). `longformer` = Deep Dive (5-stage cascade). |
| `sensitive_mode` | bool | no | `false` | Only honored when `model="longformer"`. Lowers the cascade's Stage 0 / Stage 1A thresholds for higher crisis recall. |
Response:
```json
{ "classification": "stress", "confidence": 0.8731 }
```
## Classes (8)
`anxiety` · `bipolar` · `depression` · `normal` · `personality_disorder` · `stress` · `suicidal` · `unhinged`
(`unhinged` is the display key for the model label "Directed Aggression" — threats toward others.)
## Pre-filter
A small regex pre-filter short-circuits the model for unambiguous explicit threats (modal verb + violent verb + 2nd/3rd-person target). It only fires forward (never reroutes self-directed language to aggression) and returns `unhinged` at confidence `0.99`.
## Health check
**GET** `/``{ "status": "ok", "loaded": [...], "pid": ... }`
## Environment variables (Space secrets)
| Name | Default | Purpose |
|---|---|---|
| `HF_TOKEN` | — | **Required.** HuggingFace Read token, used by `snapshot_download` to pull the model repos. |
| `QUICK_VIBE_MODEL` | `itsLu/mentalbert-v6-flat` | Override the Quick Vibe model repo. |
| `DEEP_DIVE_MODEL` | `itsLu/mentalbert-v6-hierarchical` | Override the Deep Dive model repo. |
| `ALLOWED_ORIGINS` | `localhost:3000,localhost:3001,https://vibecheck-eosin.vercel.app,https://checkmyvibe.me,https://www.checkmyvibe.me` | Comma-separated CORS allowlist. |
| `MAX_INPUT_CHARS` | `4096` | Reject requests longer than this with HTTP 413. |
| `DEBUG_ENDPOINTS` | `false` | When `"true"`, registers `/diag` and `/debug_classify` for inspection. Off in prod. |
## Deployment
```bash
git push origin main
```
The Space rebuilds the Docker image and starts the container. Models are pulled lazily on first classify request (~30–60 s download per model, cached for the container's lifetime).