mathly / .env.example
3v324v23's picture
Add keystore for managing API keys securely and update tests
35394c4
Raw History Blame Contribute Delete
3.71 kB
# Copy to .env and fill in. .env is git-ignored and is not copied into the Docker image.
# On Hugging Face, set these as Space *secrets* instead (Settings -> Variables and secrets).
# Sawtak Arabi TTS key for the model-answer playback (https://sawtakarabi.ai/dashboard).
# Without it the page falls back to the device's Arabic voice.
SAWTAK_API_KEY=
# Optional: the edge-tts voice of the spoken Hebrew prompts. Empty = he-IL-HilaNeural.
HEBREW_VOICE=
# Optional: where the generated speech (Arabic answers, Hebrew prompts) is cached. Empty = ~/.cache/ihki-tts.
TTS_CACHE_DIR=
# Optional: the Hugging Face CTC phoneme model the scorer runs. Unset = facebook/wav2vec2-xlsr-53-espeak-cv-ft.
# Leave the line commented out rather than empty: an empty value is used as is and fails to load.
# scripts/bench.py and scripts/rescore.py read it too, so a benchmark runs on the same model as the server.
# MODEL_ID=facebook/wav2vec2-xlsr-53-espeak-cv-ft
# Optional: how a vowel's GOP pools its frames (docs/gop-pooling.md): max | mean | topk | lse | energy | gated.
# Empty = gated. "max" is the scoring before pooling. The lab's results show it beside the version, to compare runs.
GOP_RATIO_POOL=
# Optional: which frames a vowel's competitors are read from. Empty = wide (from the sound before to the one after,
# as consonants). "narrow" = its aligned frames +- 1, or a number for another margin. Narrow drops spikes in the
# transitions, but also misses a substitution held just outside it; see scripts/gop_window_bench.py.
GOP_VOWEL_WINDOW=
# Google sign-in through Supabase (Project Settings -> API Keys). Both values are public: the page gets them too.
# Empty = no sign-in, the service is open. On Hugging Face these can be plain Space *variables*.
SUPABASE_URL=
SUPABASE_PUBLISHABLE_KEY=
# Optional: the teacher's account (or several, separated by commas or spaces). After sign-in a teacher chooses
# between "תרגול" (the same as a student) and "ניהול" (the management panel: every student's progress, and the
# classes). Who may sign in is set by the classes the teacher opens there (see the README), not here.
TEACHER_EMAILS=
# Bootstrap accounts with full access, including the Lab. Admins do not get Lab access. Keep at least one address here
# so database permission mistakes cannot lock every developer out.
DEVELOPER_EMAILS=
# Needed by the management panel and the classes: the project's secret key (Project Settings -> API Keys -> secret, or the
# legacy service_role key). It reads every student's rows, so it is NOT public: on Hugging Face set it as a *secret*.
# scripts/bench.py needs it (with the two values above) to read the lab's recordings.
SUPABASE_SECRET_KEY=
# Optional: accounts (separated by commas or spaces) that, like the teachers, get a flag under each score, for a recording they said
# right and the system scored wrong. A flag is kept in the Supabase table `flags` with its recording (see the README),
# so it needs SUPABASE_SECRET_KEY. These accounts may sign in without being in a class.
TUTORS_EMAIL=
# Optional deployment metadata shown to teachers at the bottom of the management panel.
# Without these, the app uses a content hash, the newest source-file time, and the local git commit when available.
APP_VERSION=
BUILD_DATE=
GIT_COMMIT=
GIT_COMMIT_MESSAGE=
# Lets a developer replace SAWTAK_API_KEY / ANTHROPIC_API_KEY from the management panel (kept encrypted in Supabase,
# table app_secrets; see the README). Make one with:
# python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# Keep it only here / as a Space secret. Losing it loses the keys set in the panel (the ones above still work).
SECRETS_MASTER_KEY=