| 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") | |