import os from dotenv import load_dotenv load_dotenv() # Custom portrait icons from Assets/ — False uses emojis instead. # Env override: USE_CUSTOM_PORTRAITS=true python app.py USE_CUSTOM_PORTRAITS = os.getenv("USE_CUSTOM_PORTRAITS", "false").lower() in ("1", "true", "yes") # Gold CSS tint on emoji portraits (judges + debaters). False = natural emoji colours. # Only applies when USE_CUSTOM_PORTRAITS is False. # Env override: GOLD_EMOJI_PORTRAITS=false python app.py GOLD_EMOJI_PORTRAITS = os.getenv("GOLD_EMOJI_PORTRAITS", "false").lower() in ("1", "true", "yes") ABILITIES_ENABLED = True # master toggle — game works fully with False DIFFICULTY = "normal" # "easy" | "normal" | "hard" ROUNDS = 3 WORDS_PER_ROUND = 3 # Pool: 3 power + 2 spice + 7 standard (sampled) + 1 LLM flavor swap = 12 # With 3 rounds × 3 words = 9 words used, 3 spare for strategic choice POOL_SIZE = 12 ABILITY_HAND_SIZE = 3 SKIP_BONUS = 5 # points when skipping a round while a usable card remains WILDCARD_SYNERGY_BONUS = 5 # hidden: Wildcard debater + Wildcard card + injected word used ARGUMENT_WORD_LIMIT = 60 SENTENCE_WORD_LIMIT = 15 # max words per argument sentence # Substitute for ability words flagged by content moderation (LLM + heuristics). FLAGGED_WORD_REPLACEMENT = "INAPPROPRIATE" LLM_PROVIDER = os.getenv("LLM_PROVIDER", "anthropic") ANTHROPIC_MODEL = "claude-sonnet-4-5-20250929" HF_MODEL = "google/gemma-4-31B-it" HF_INFERENCE_PROVIDER = os.getenv("HF_INFERENCE_PROVIDER", "featherless-ai") # Modal / vLLM backend — set LLM_PROVIDER=modal to use. # MODAL_ENDPOINT_URL is the URL printed by `python -m modal deploy modal_serve.py`. MODAL_ENDPOINT_URL = os.getenv("MODAL_ENDPOINT_URL", "") MODAL_MODEL = os.getenv("MODAL_MODEL", "google/gemma-4-31B-it") # Per-game session logs (JSONL + readable summary in logs/) GAME_LOGGING_ENABLED = os.getenv("GAME_LOGGING_ENABLED", "true").lower() in ("1", "true", "yes") LOG_DIR = os.getenv("LOG_DIR", "logs")