RandomZ / docs /AI_FEATURES_PHASES.md
StormShadow308's picture
Ship personalised RAG, 10m SLA, parallel generate, and AI phase docs for HF pilot.
be9fd4a
|
Raw
History Blame Contribute Delete
6.54 kB
# AI feature phases (strict — no backend infra)
Backend scale (Redis job queue, distributed rate limits, Temporal, stale-job sweepers) is **not** an AI phase. See `OPTIMIZATION_SUMMARY.md`**Backend infrastructure**.
| Old doc label | Correct bucket |
|---------------|----------------|
| Phase 3 (Redis) | **Backend** — not AI |
| Phase 2 (Temporal) | **Backend** — not AI |
| `SCALE_OPTIMIZATION_PROFILE` | **Backend + mixed** — also toggles AI Phase 3 flags |
`GET /health` exposes `ai_phases` (this document) separately from `infrastructure` (Redis, job queue).
---
## Phase 1 — Core RAG generation
**Purpose:** Turn surveyor notes + tenant library into RICS section prose via retrieval-augmented generation.
| Capability | Module / API | Requires `OPENAI_API_KEY` |
|------------|--------------|---------------------------|
| Section **generate** / **proofread** / **enhance** | `app/services/generation.py`, `POST …/generate` | Yes |
| Notes expansion | `app/generator/notes_expander.py` | Yes |
| Writing style analysis | `app/generator/style_analyzer.py` | Yes |
| Main LLM adapt + verify pass | `app/generator/adapter.py`, `postprocess.py` | Yes |
| Embeddings + vector index | `app/embeddings/`, `app/vectorstore/`, `app/ingest/` | No (HF local default) |
| Retrieval + rerank + hierarchical RAG | `app/retrieval/` | No |
| Personalised tenant style RAG | `app/services/personalised_rag.py` | No (index); Yes (generate) |
| Upload sanitisation before index | `app/services/document_sanitiser.py` | Optional LLM; regex default |
| Interference levels (`minimum` / `medium` / `maximum`) | `app/generator/prompts.py` | Yes |
| Standard paragraphs injection | `app/services/standard_paragraphs.py` | No |
| Optional LLM section validator | `LLM_SECTION_VALIDATOR_ENABLED` | Yes |
**Default product path:** `NOTES_ONLY_GENERATION=true` → standard pipeline on `POST /generate` (bullets are facts; uploads reference-only).
**Key env (Phase 1):**
```env
OPENAI_API_KEY=…
CHAT_MODEL=gpt-4o-mini
PERSONALISED_STYLE_RAG_ENABLED=true
ENABLE_RAG_UPLOAD_SANITISATION=true
RAG_SANITISATION_USE_LLM=false
NOTES_ONLY_GENERATION=true
```
---
## Phase 2 — Agentic inspector & multimodal
**Purpose:** OpenAI tool-calling inspector, full agentic report orchestration, and section photo vision.
| Capability | Module / API | Gate |
|------------|--------------|------|
| Inspector tool loop | `app/agentic/inspector_loop.py`, `HeadAgent` | `INSPECTOR_TOOL_AGENT=true` + API key |
| Multi-agent report (`generate_full_report`) | `app/agentic/agents.py` | Same |
| Agentic HTTP API | `POST /reports/{id}/agentic/generate` | Same |
| Inspector on main generate | `POST /reports/{id}/generate` | `AGENTIC_INSPECTOR_WHEN_NOTES_ONLY=true` or `NOTES_ONLY_GENERATION=false` |
| Section photo vision | `app/services/photo_vision.py` | `SECTION_PHOTO_VISION_ENABLED=true` + API key |
| Vision on upload (cache) | `SECTION_PHOTO_ANALYZE_ON_UPLOAD` | Same |
| LLM RAG sanitisation at ingest | `RAG_SANITISATION_USE_LLM` | Dev/staging; off on HF `production_ai_profile` |
**HF / production AI (recommended):**
```env
INSPECTOR_TOOL_AGENT=true
INSPECTOR_BODY_MODEL=gpt-4o-mini
AGENTIC_INSPECTOR_WHEN_NOTES_ONLY=true
SECTION_PHOTO_VISION_ENABLED=true
SECTION_PHOTO_VISION_MODEL=gpt-4o
PRIMARY_GENERATE_PIPELINE=agentic
PRODUCTION_AI_PROFILE=true
```
---
## Phase 3 — AI latency & retrieval quality
**Purpose:** Same AI outputs, faster or cheaper — **not** separate workers or queues.
| Capability | Env | Notes |
|------------|-----|--------|
| Async OpenAI + parallel sections | `ENABLE_ASYNC_PIPELINE=true` | `app/llm/async_llm_adapter.py`, `generation_facade.py` |
| Speculative inspector tool prefetch | `ENABLE_SPECULATIVE_EXECUTOR=true` | Requires async + Phase 2 inspector path |
| OpenAI prompt cache keys | `ENABLE_PROMPT_CACHING=true` | Requires async |
| Global LLM concurrency cap | `MAX_CONCURRENT_LLM_CALLS` | Throttle / 429 retry |
| Hybrid BM25 + vector (RRF) | `ENABLE_HYBRID_RETRIEVAL` + `VECTORSTORE_BACKEND=qdrant` | Better retrieval |
| Semantic retrieval cache | `SEMANTIC_CACHE_ENABLED` + Qdrant | Caches embedding-neighbour hits |
| Qdrant vector backend | `VECTORSTORE_BACKEND=qdrant` | Re-ingest after switch |
**Not Phase 3 (backend):** `REDIS_URL`, `ENABLE_JOB_QUEUE`, `ENABLE_TEMPORAL_WORKFLOW`, `GENERATION_STALE_SWEEP_SECONDS`, `SCALE_OPTIMIZATION_PROFILE` (mixed).
**Example (local AI perf only):**
```env
ENABLE_ASYNC_PIPELINE=true
ENABLE_SPECULATIVE_EXECUTOR=true
ENABLE_PROMPT_CACHING=true
AGENTIC_INSPECTOR_WHEN_NOTES_ONLY=true
# Optional stronger retrieval:
# VECTORSTORE_BACKEND=qdrant
# QDRANT_URL=http://localhost:6333
```
---
## Full-report time target (10 minutes)
| Setting | Default | Role |
|---------|---------|------|
| `GENERATION_SLA_SECONDS` | `600` | Product target for batch / full-report jobs |
| `GENERATION_TIMEOUT_SECONDS` | `720` | Sweeper fails stuck jobs (SLA + 2 min grace) |
**Requirements to hit SLA** (typical 15–25 sections):
1. **AI Phase 3 on:** `ENABLE_ASYNC_PIPELINE=true` and parallel multi-section (auto with `PRODUCTION_AI_PROFILE` or HF `SPACE_ID`).
2. **Phase 2 on main path:** `AGENTIC_INSPECTOR_WHEN_NOTES_ONLY=true` only if you need the inspector; standard pipeline is faster for bulk.
3. **Interference:** prefer `medium` or `minimum` for batch — `maximum` adds tokens and retries.
4. **Bullets:** empty sections stay blank; fill bullets per section before batch generate.
5. **UI:** batch poll waits at least 10 minutes before showing “still generating”.
Sequential generation (async off) often exceeds 10 minutes — not supported for full-report SLA.
---
## Ship checklist by environment
| Environment | Phase 1 | Phase 2 | Phase 3 |
|-------------|---------|---------|---------|
| **HF Space pilot** | API key + personalised RAG | Inspector + vision + `AGENTIC_INSPECTOR_WHEN_NOTES_ONLY` | Usually **off** (single process; async optional) |
| **Docker single node** | Same | Same | Optional async + speculation |
| **Multi-replica AWS** | Same | Same | Phase 3 AI + **backend** Redis queue (see `PRODUCTION_REPORT.md`) |
---
## Code map
| Phase | Health JSON | Python |
|-------|-------------|--------|
| 1–3 | `GET /health``ai_phases` | `app/optimization/ai_phases.py` |
| Warnings | `ai_phase_warnings` | `collect_ai_phase_warnings()` |
| User-facing summary | `ai_features` | `app/optimization/ai_readiness.py` |
| Backend only | `infrastructure` | `app/optimization/scale_status.py`, Redis, jobs, Temporal |