Spaces:
Runtime error
Runtime error
File size: 7,968 Bytes
dc1b199 7d37f11 dc1b199 732b14f 3f6fdc5 732b14f 5f70643 c893230 732b14f c893230 732b14f c893230 732b14f c893230 732b14f dc1b199 e561e67 2e3ecc8 e561e67 dc1b199 3f6fdc5 dc1b199 3f6fdc5 dc1b199 7d37f11 dc1b199 7d37f11 dc1b199 b76f199 dc1b199 c893230 dc1b199 b76f199 879e4e0 3c31a2a b76f199 dc1b199 3f6fdc5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | # ββ LLM ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Optional: leave blank to use the free local sentence-transformers embedder.
# Required only for OpenAI embeddings and GPT-4o-mini generation.
OPENAI_API_KEY=sk-replace-me
# ββ Vector store (FAISS default; optional Qdrant for async pipeline) βββββββββ
# Defaults to ~/.report_genius/faiss_index (cross-platform)
# FAISS_INDEX_PATH=~/.report_genius/faiss_index
# VECTORSTORE_BACKEND=faiss
# QDRANT_URL=http://localhost:6333
# QDRANT_API_KEY=
# QDRANT_COLLECTION=rics_chunks
# QDRANT_CACHE_COLLECTION=rics_semantic_cache
# ENABLE_HYBRID_RETRIEVAL=true
# SEMANTIC_CACHE_ENABLED=true
# SEMANTIC_CACHE_TTL_HOURS=24
# SEMANTIC_CACHE_SIMILARITY_THRESHOLD=0.92
# ββ Report generation pipeline (default: standard RAG + LLM) βββββββββββββββ
# PRIMARY_GENERATE_PIPELINE=standard
# AGENTIC_INSPECTOR_WHEN_NOTES_ONLY=false
# NOTES_ONLY_GENERATION=true
# ββ Async pipeline (latency / scale) ββββββββββββββββββββββββββββββββββββββββ
# ENABLE_ASYNC_PIPELINE=false
# ENABLE_PARALLEL_SECTION_GENERATION=true
# MAX_PARALLEL_SECTIONS=6
# MAX_CONCURRENT_LLM_CALLS=10
# NOTES_COVERAGE_MAX_RETRIES=1
# NOTES_EXPANSION_SKIP_LLM_MAX_BULLETS=4
# SKIP_LLM_GROUNDING_WHEN_NOTES_ONLY=true
# SKIP_COMPLIANCE_RETRIES_WHEN_NOTES_ONLY=true
# ββ Phase 2 (requires ENABLE_ASYNC_PIPELINE=true for speculation + prompt cache) β
# ENABLE_SPECULATIVE_EXECUTOR=false
# ENABLE_PROMPT_CACHING=false
# PROMPT_CACHE_MIN_SYSTEM_TOKENS=1024
# SPECULATIVE_CONTEXT_WINDOW=3
# SPECULATIVE_PROBABILITY_THRESHOLD=0.75
# SPECULATIVE_LEARN_MIN_OBSERVATIONS=5
# ALLOW_SQLITE_PARALLEL_SECTIONS=true
# AGENTIC_INSPECTOR_WHEN_NOTES_ONLY=false
# NOTES_ONLY_GENERATION=true
# ββ Phase 3: Redis rate limits + job queue βββββββββββββββββββββββββββββββββββββ
# REDIS_URL=redis://localhost:6379/0
# ENABLE_JOB_QUEUE=false
# JOB_QUEUE_KEY=rics:jobs:generation
# JOB_QUEUE_BLOCK_SECONDS=5
# JOB_QUEUE_MAX_CONCURRENT=2
# With ENABLE_JOB_QUEUE=true, run: python jobs_worker.py
# Docker: docker compose --profile redis --profile jobs up -d
# ββ Temporal durable workflows (optional; docker compose --profile temporal) βββ
# ENABLE_TEMPORAL_WORKFLOW=false
# TEMPORAL_HOST=localhost:7233
# TEMPORAL_NAMESPACE=default
# TEMPORAL_TASK_QUEUE=reports
# GENERATION_TIMEOUT_SECONDS=3600
# GENERATION_STALE_SWEEP_SECONDS=120
# ββ RAG upload sanitisation (strip PII before vector indexing; on-disk files unchanged) β
# ENABLE_RAG_UPLOAD_SANITISATION=true
# On Hugging Face Spaces this defaults to false (one OpenAI call per PDF page β ~5+ min/doc).
# style_corpus uploads still force sanitisation when enabled in code.
# RAG_SANITISATION_SKIP_KB_TENANT=true
# RAG_SANITISATION_CHUNK_CHARS=12000
# RAG_SANITISATION_MAX_OUTPUT_TOKENS=4096
# RAG_SANITISATION_FAIL_CLOSED=true
# ββ Database ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DATABASE_URL=sqlite+aiosqlite:///./dev.db
# ββ File storage (defaults are cross-platform, override if needed) ββββββββββββ
# UPLOAD_DIR=~/.report_genius/uploads
# ββ Cache βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# CACHE_DIR=/tmp/section_cache
# ββ LLM generation limits βββββββββββββββββββββββββββββββββββββββββββββββββββββ
MAX_CONTEXT_TOKENS=400
MAX_OUTPUT_TOKENS=300
# OpenAI embedding model (only used when OPENAI_API_KEY is set)
EMBEDDING_MODEL=text-embedding-3-small
# Local sentence-transformers model (used when no OPENAI_API_KEY is set)
# Options: all-MiniLM-L6-v2 (384-dim, fast), all-mpnet-base-v2 (768-dim, better quality)
LOCAL_EMBEDDING_MODEL=all-MiniLM-L6-v2
CHAT_MODEL=gpt-4o-mini
# Optional: extra LLM compliance validator (PASS/FAIL + reasons) after generation.
# Runs only when OPENAI_API_KEY is set; regenerates once with feedback on FAIL.
# LLM_SECTION_VALIDATOR_ENABLED=false
# LLM_SECTION_VALIDATOR_MAX_RETRIES=1
# Autonomous RICS inspector (agentic): OpenAI tool-calling so the model chooses RAG/KB/duplicate tools.
# Requires OPENAI_API_KEY. Set false to force the legacy fixed pipeline.
# INSPECTOR_TOOL_AGENT=true
# INSPECTOR_MAX_TOOL_ROUNDS=12
# Retrieval
RETRIEVAL_TOP_K=10
RERANK_TOP_N=3
CHUNK_SIZE=500
# Max inspector note lines per section (default 800); raise for huge field-note dumps
# MAX_BULLETS_PER_SECTION=800
# Token budget for RAW NOTES in the generate prompt (separate from RAG snippet budget)
# NOTES_PROMPT_TOKEN_BUDGET=3500
CHUNK_OVERLAP=75
# Hierarchical RAG (document β section β paragraph). Re-ingest PDFs after enabling if the index predates hierarchy.
# HIERARCHICAL_RAG_ENABLED=true
# HIERARCHICAL_K_DOCUMENT=4
# HIERARCHICAL_K_SECTION=8
# HIERARCHICAL_K_PARAGRAPH_POOL=36
# Comma-separated upload UUIDs for template/exemplar RICS PDFs (always in routing universe), e.g. Behrang RICS reference:
# RICS_EXEMPLAR_DOCUMENT_IDS=
# Standard paragraphs: .docx/.docm read directly; legacy .doc converted (pandoc | LibreOffice | Word+pywin32).
# Default file: Behrang RICS Documents/HB-BS STANDARD PARAS v6 Sept 2015.doc β or place any supported format at repo root with same basename.
# RICS_STANDARD_PARAGRAPHS_DOCX=Behrang RICS Documents/HB-BS STANDARD PARAS v6 Sept 2015.doc
# Leave empty to fall back to glob discovery under KNOWLEDGE_BASE_DIRS instead:
# RICS_STANDARD_PARAGRAPHS_DOCX=
# STANDARD_PARAGRAPHS_DOCX_GLOBS=*standard*paragraph*.docx,*Standard*Paragraph*.docx
# ββ Bulk upload & batch processing ββββββββββββββββββββββββββββββββββββββββββββ
# Max logical documents per single POST /upload/batch request (after ZIP expansion)
# MAX_UPLOAD_BATCH_FILES=2000
# Max compressed bytes for a .zip in a batch upload
# MAX_ARCHIVE_UPLOAD_BYTES=524288000 # 500 MB
# Max entries (files) inside one ZIP archive
# MAX_ZIP_MEMBERS=50000
# Max declared uncompressed total bytes in one ZIP (zip-bomb guard)
# MAX_ZIP_UNCOMPRESSED_BYTES=5368709120 # 5 GB
# Parallel ingestion pipelines β each uses embedding + vector-store threads
# MAX_CONCURRENT_INGESTS=16
# Max document IDs per POST /documents/batch-status request
# MAX_BATCH_STATUS_DOCUMENT_IDS=10000
# Max rows returned by GET /documents
# DOCUMENTS_LIST_MAX_LIMIT=500
# ββ Section photo policy (tenant RAG uploads only; no letter heuristics) βββ
# Scans completed PDF/DOCX in the tenant library for images under each RICS section heading.
# Optional JSON overrides per section: REQUIRES_IMAGE | OPTIONAL_IMAGE | NO_IMAGE_NEEDED
# SECTION_PHOTO_POLICY_OVERRIDES_JSON=
# SECTION_PHOTO_POLICY_DATA_DRIVEN=true
# SECTION_PHOTO_POLICY_MIN_EXAMPLES=3
# Fraction of uploads (where the section appears) that must contain a section image (1.0 = all)
# SECTION_PHOTO_POLICY_TENANT_CONSENSUS_RATIO=1.0
# ββ Security βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TENANT_SECRET_KEY=change-me-in-production
DEV_MODE=true
# CORS: comma-separated list of allowed origins. Default ["*"] (open).
# In production set to your frontend URL, e.g.: ALLOWED_ORIGINS=["https://app.example.com"]
# ALLOWED_ORIGINS=["*"]
|