APP_TITLE=ZuZu Writer HOST=0.0.0.0 PORT=7860 SPACY_MODEL=en_core_web_sm MAX_CHARS=1000000 # Self-hosted LanguageTool (ZuZu Grammar — full sentence grammar) # Local LT sidecar: docker compose up languagetool -d # Then: LANGUAGE_TOOL_URL=http://127.0.0.1:8010 # HF Space / Docker image: embedded LT starts automatically (LANGUAGE_TOOL_EMBEDDED=true) LANGUAGE_TOOL_URL=http://127.0.0.1:8010 LANGUAGE_TOOL_LANGUAGE=en-US LANGUAGE_TOOL_ENABLED=true LANGUAGE_TOOL_TIMEOUT=90 LANGUAGE_TOOL_CHUNK_CHARS=1800 GRAMMAR_MAX_CHARS=50000 LANGUAGE_TOOL_EMBEDDED=true # LANGUAGETOOL_JAVA_OPTS=-Xms256m -Xmx1024m # Grammar cleanup runs after successful sentence reordering only. GRAMMAR_FIX_OUTPUT=true # Structural engine ENGINE_BATCH_PARAS=20 ENGINE_MIN_CONFIDENCE=0.55 ENGINE_SAFETY_MIN=0.80 # When false, phrase/lexical use classical collocation brakes (no MiniLM). ENGINE_USE_MINILM_SAFETY=false # When MiniLM is off: aggressive wording each pass (option 2). false = tight anti-drift. ENGINE_CLASSICAL_AGGRESSIVE=true # Rotate between equally-ranked structures so repeat requests differ. # false = deterministic output (same input always rewrites the same way). ENGINE_STRUCTURAL_VARIATION=true MINILM_MODEL=sentence-transformers/all-MiniLM-L6-v2 # Local CPU paraphraser — ON for generative pass divergence (needs torch + T5). ENGINE_PARAPHRASE=true ENGINE_PARAPHRASE_PRIMARY=true ENGINE_PARAPHRASE_MODEL=Vamsi/T5_Paraphrase_Paws ENGINE_PARAPHRASE_MIN_SIM=0.72 ENGINE_PARAPHRASE_NUM_RETURN=6 ENGINE_PARAPHRASE_MAX_NEW_TOKENS=72 ENGINE_PARAPHRASE_MAX_SURFACE=0.70 ENGINE_PARAPHRASE_MIN_DIVERGENCE=0.30 # Phrase-level rewrite (verb–object spans via WordNet hyponyms + optional T5) ENGINE_PHRASE_REWRITE=true # 0 = dynamic (1 normally, 2 with polish). Set 1–4 to hard-cap. ENGINE_PHRASE_MAX_CHANGES=0 ENGINE_PHRASE_MIN_SIM=0.74 # Keep T5 span paraphrase off by default (WordNet phrase path is safer). ENGINE_PHRASE_USE_T5=false # Keep rewrite length near the source; trim only when clearly bloated. ENGINE_PRESERVE_LENGTH=true # Split long sentences on clause joins during structural fallback. ENGINE_SPLIT_LONG=true ENGINE_SPLIT_MIN_WORDS=16 # Legacy fixed cleft fallback (off by default) ENGINE_FORCE_REWRITE=false # Require rewriteable sentences to change wording when a safe option exists ENGINE_REQUIRE_WORDING_CHANGE=true # Low-impact vocabulary refinement after structure/paraphrase ENGINE_LEXICAL_REFINEMENT=true # 0 = fully dynamic synonym budget from sentence length (recommended). # Set >0 only to hard-cap the dynamic budget (max 15). ENGINE_LEXICAL_MAX_CHANGES=0 ENGINE_LEXICAL_MIN_WSD=0.14 ENGINE_LEXICAL_MIN_ZIPF=4.0 ENGINE_LEXICAL_MAX_FREQUENCY_GAP=0.60 # Prefer everyday (higher-frequency) synonyms via wordfreq, not word lists. ENGINE_LEXICAL_PREFER_SIMPLER=true ENGINE_LEXICAL_MAX_SIMPLER_GAP=2.5 ENGINE_LEXICAL_MAX_HARDER_GAP=0.15 ENGINE_WORDNET_LEXICON=oewn:2025 # Existing UI authentication and quotas (leave blank for open local mode) GUEST_DAILY_REWRITES=1000 GUEST_MAX_WORDS=100 GUEST_DAILY_WORD_CAP=100 SESSION_IDLE_MINUTES=30 SUPABASE_URL=https://YOUR_PROJECT.supabase.co SUPABASE_ANON_KEY= SUPABASE_SERVICE_ROLE_KEY= SUPABASE_JWT_SECRET=