# Copy to backend/.env and fill in. .env is gitignored; never commit a real key. # # The environment holds only the API keys, the two chat model names, and the secrets the brain # needs before anyone can call it. Everything else comes through the API, chosen in the app (which # model answers, the user's name, the AI's name; see docs/SETTINGS_API.md), or is a constant in # code (the timezone, Asia/Kolkata). # --- Gemini: five key slots. At least ONE key is required; the others are optional spares. # A spare takes over when the key before it runs out of quota (quota errors only). GEMINI_KEY_1= GEMINI_KEY_2= GEMINI_KEY_3= GEMINI_KEY_4= GEMINI_KEY_5= # Optional. The default is in brain/config.py (gemini-3.5-flash-lite). Run # `python -m brain.cli.models` with a key to list what the API offers today. # GEMINI_MODEL= # --- Groq (GPT-OSS): the same five slots, all optional. With no key the app shows GPT-OSS as # unavailable and Gemini answers. The same keys also switch on Groq speech (Whisper, Orpheus). GROQ_KEY_1= GROQ_KEY_2= GROQ_KEY_3= GROQ_KEY_4= GROQ_KEY_5= # Optional. The default is in brain/config.py (openai/gpt-oss-120b). # GROQ_MODEL= # --- Database. Supabase is only the database: login is the brain's own (docs/AUTH_API.md). # Project Settings → API. The secret key bypasses RLS: Space secrets only. SUPABASE_URL= # Secret key (sb_secret_...). The older name SUPABASE_SERVICE_ROLE_KEY is still read. SUPABASE_SECRET_KEY= # --- Login (brain/auth.py, docs/AUTH_API.md) # Signs the access and refresh tokens: 32+ random characters. Never paste it in chat. Make one with: # python -c "import secrets; print(secrets.token_urlsafe(48))" AUTH_SECRET= # The Google OAuth "Web application" client id whose ID tokens are accepted (comma-separated if a # second front end gets its own client). GOOGLE_CLIENT_IDS= # The Google account allowed in (master prompt 8). A comma-separated list is allowed. ALLOWED_EMAIL= # For testing with Postman only: accept a Google token that carries no nonce. Leave it off. # AUTH_ALLOW_NO_NONCE=1 # Local development with no keys at all: in-memory store, canned replies, fixed dev user. # Refuses to start if SUPABASE_URL is also set. # PROVA_DEV=1