Spaces:
Sleeping
Sleeping
File size: 8,935 Bytes
dc1b199 7d37f11 dc1b199 be9fd4a 7fa723a be9fd4a 7fa723a 732b14f 3f6fdc5 732b14f be9fd4a 732b14f be9fd4a 732b14f 7fa723a 732b14f be9fd4a 732b14f be9fd4a 732b14f dc1b199 7fa723a be9fd4a 7fa723a e561e67 7fa723a e561e67 dc1b199 3f6fdc5 dc1b199 3f6fdc5 dc1b199 7d37f11 dc1b199 7d37f11 dc1b199 b76f199 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 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | # ββ 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
# ββ Personalised style RAG (private tenant library; not OpenAI fine-tuning) βββ
# PERSONALISED_STYLE_RAG_ENABLED=true
# ENABLE_RAG_UPLOAD_SANITISATION=true
# RAG_SANITISATION_USE_LLM=false
# ββ Production / HF Space β AI features (prioritise these) βββββββββββββββββββ
# User-facing AI: inspector tool loop, section generation, photo vision, proofread/enhance.
# On Hugging Face Spaces (SPACE_ID set), ingest LLM sanitisation is auto-disabled.
# PRODUCTION_AI_PROFILE=true
# CHAT_MODEL=gpt-4o-mini
# INSPECTOR_TOOL_AGENT=true
# INSPECTOR_BODY_MODEL=gpt-4o-mini
# AGENTIC_INSPECTOR_WHEN_NOTES_ONLY=true
# SECTION_PHOTO_VISION_ENABLED=true
# SECTION_PHOTO_ANALYZE_ON_UPLOAD=true
# SECTION_PHOTO_VISION_MODEL=gpt-4o
# PRIMARY_GENERATE_PIPELINE=agentic
# Dev-only infra (leave off on HF unless you run workers locally):
# ENABLE_JOB_QUEUE=false
# ENABLE_TEMPORAL_WORKFLOW=false
# REDIS_URL=
# ENABLE_RAG_UPLOAD_SANITISATION=true
# RAG_SANITISATION_USE_LLM=false
# HF_TOKEN= # optional: faster embedding model download on Space boot
# ββ 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
# ββ AI phases (see docs/AI_FEATURES_PHASES.md) βββββββββββββββββββββββββββββββ
# Phase 1: core RAG generate (OPENAI_API_KEY, personalised RAG, sanitisation)
# Phase 2: inspector + vision (INSPECTOR_TOOL_AGENT, AGENTIC_INSPECTOR_WHEN_NOTES_ONLY)
# Phase 3: async LLM, speculation, prompt cache, optional Qdrant hybrid/cache
#
# ββ Backend scale (NOT an AI phase; not for HF Spaces) βββββββββββββββββββββββββ
# SCALE_OPTIMIZATION_PROFILE turns on AI Phase 3 flags + job queue when REDIS_URL set.
# SCALE_OPTIMIZATION_PROFILE=false
# SCALE_OPTIMIZATION_PROFILE=true
# REDIS_URL=redis://localhost:6379/0
# docker compose --profile redis --profile jobs up -d
# ββ Async pipeline (latency / scale; default off β backward compatible) βββββ
# ENABLE_ASYNC_PIPELINE=false
# MAX_CONCURRENT_LLM_CALLS=10
# ββ AI Phase 3 flags (requires ENABLE_ASYNC_PIPELINE 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=false
# AGENTIC_INSPECTOR_WHEN_NOTES_ONLY=true
# NOTES_ONLY_GENERATION=true
# ββ Backend: Redis rate limits + job queue (not an AI phase) βββββββββββββββββ
# 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_SLA_SECONDS=600
# GENERATION_TIMEOUT_SECONDS=720
# GENERATION_STALE_SWEEP_SECONDS=120
# ββ RAG upload sanitisation (dev/staging only β competes with generation OpenAI quota) β
# ENABLE_RAG_UPLOAD_SANITISATION=true
# RAG_SANITISATION_USE_LLM=false
# RAG_SANITISATION_SKIP_KB_TENANT=true
# RAG_SANITISATION_CHUNK_CHARS=20000
# 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
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=["*"]
|