# 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=