RAGForge / docs /ARCHITECTURE_API.md
ArchitSharma's picture
Upgrade RAGForge to v1.7 evaluation correctness and adaptive efficiency
03bed0b
|
Raw
History Blame Contribute Delete
6.55 kB
# Architecture and API - v1.7
## Runtime architecture
RAGForge uses one FastAPI application with a mounted Gradio UI. Each browser/API session maps to an isolated in-process `Workspace` containing document units, chunk/source indexes, DuckDB tables, history and corpus version.
### LangGraph path
```text
request
-> guard
-> semantic route
-> workspace preflight
-> plan
-> semantic/global/hierarchical/analytical/table/web retrieval
-> adaptive reranker policy (skip or cross-encoder)
-> evidence grade
-> optional correction + retry
-> conditional web augmentation
-> grounded generation
-> verification / bounded revision
-> cited response or abstention
```
The Architecture + API tab exposes the responsibilities of each graph node in a live DataFrame.
The adaptive reranker decision is recorded in the retrieval trace as `reranker_used` and `reranker_reason`. Standard/Deep evaluation still runs an explicit on/off ablation so the runtime decision remains measurable.
## Live workspace snapshot
`Refresh runtime view` reports:
- app version,
- workspace status/version,
- source count,
- chunk count,
- source-profile count,
- table count,
- saved evaluation depths,
- configured generation/embedding/reranker/search models.
It also generates curl examples using the current browser workspace ID and reports saved evaluation inventory through workspace stats.
## REST surface
| Method | Path | Purpose |
|---|---|---|
| GET | `/api/health` | health check |
| GET | `/api/v1/info` | service/model/features metadata |
| POST | `/api/v1/session` | create session |
| GET | `/api/v1/session/{session_id}` | inspect workspace status |
| POST | `/api/v1/ingest` | multipart document ingestion |
| POST | `/api/v1/query` | execute RAG query |
| POST | `/api/v1/evaluate/demo` | Quick/Standard/Deep benchmark |
| GET | `/api/v1/evaluation/benchmark` | benchmark metadata/counts |
| GET | `/api/v1/evaluation/saved/{session_id}` | list saved Quick/Standard/Deep runs |
| GET | `/api/v1/evaluation/saved/{session_id}/{level}` | retrieve one saved evaluation report |
| GET | `/api/v1/evaluation/history/{session_id}` | list timestamped evaluation history and deltas |
| GET | `/docs` | Swagger UI |
| GET | `/openapi.json` | OpenAPI schema |
| GET | `/metrics` | Prometheus metrics |
When `APP_API_TOKEN` is set, protected endpoints require a Bearer token.
## Query example
```bash
curl -X POST http://localhost:7860/api/v1/query \
-H "Content-Type: application/json" \
-d '{
"session_id": "SESSION_ID",
"query": "What is the collection about?",
"config": {
"mode": "Auto",
"profile": "Balanced",
"model": "gemini-3.5-flash-lite"
}
}'
```
## Evaluation example
```bash
curl -X POST http://localhost:7860/api/v1/evaluate/demo \
-H "Content-Type: application/json" \
-d '{
"session_id": "SESSION_ID",
"level": "Standard",
"model": "gemini-3.5-flash-lite",
"target_rpm": 12,
"reuse_saved": true,
"include_profile_benchmark": false
}'
```
When `reuse_saved=true`, a compatible saved report can be returned with zero Gemini requests. For Deep, a compatible saved Standard report can be reused as the deterministic baseline so only the sampled judge layer is added.
Saved evaluations can be inspected without rerunning:
```bash
curl http://localhost:7860/api/v1/evaluation/saved/SESSION_ID
curl http://localhost:7860/api/v1/evaluation/saved/SESSION_ID/Standard
```
## Storage lifecycle
Standard Hugging Face Space disk is ephemeral for this deployment design. Browser state stores only the opaque workspace ID. A normal refresh can reconnect while the process lives; a container restart removes in-memory indexes and custom uploads must be re-indexed. Bundled demo data can be lazily rebuilt.
Evaluation reports are stored inside the same ephemeral workspace. They survive a normal browser refresh while the workspace/container lives, but are not durable production storage. Reports include model/benchmark/corpus-version metadata so stale runs are visible rather than silently reused after corpus changes.
## Evaluation quota controls
`POST /api/v1/evaluate/demo` accepts `target_rpm`. The UI defaults to 12 RPM for quota-safe portfolio/free-tier runs. The benchmark uses one shared rolling request budget across planner, generation, Text2SQL and Deep-judge calls, and the raw report exposes request/pacing telemetry.
## Evaluation report portability in v1.5.1
Saved Quick, Standard and Deep reports are converted to plain JSON before persistence and API
return. This keeps `GET /api/v1/evaluation/saved/{session_id}/{level}` structurally identical to a
fresh evaluation response and avoids UI-framework wrapper representations.
The Gradio Evaluation tab also exposes a table export panel. This is a UI convenience rather than a
new network API: it materializes CSV/TSV/Markdown files inside the current ephemeral workspace.
## v1.6 analytical evidence path
`insight_synthesis` requests use the `analytical` strategy. Source-balanced original document chunks remain `[D#]` evidence. DuckDB contributes deterministic schema, bounded rows and descriptive signals as `[T#]` evidence. One grounded generation call synthesizes patterns, quantitative signals, contrasts and caveats. The table context is not an LLM-generated summary, so no additional API request is spent preparing it.
## v1.6 evaluation observability
The UI exposes Hard Mode, optional profile comparison, node-latency summaries and timestamped evaluation history. `GET /api/v1/evaluation/history/{session_id}` exposes the same archived-run metadata to API clients. The normal latest-run endpoints remain unchanged.
## v1.7 runtime provenance and calibrated absence
Evaluation cache metadata includes a short run ID and server-boot ID. These fields make it possible to distinguish a fresh benchmark from a saved report in the UI/API without relying on ambiguous status text. `GET /api/v1/evaluation/saved/{session_id}` includes this provenance in its inventory.
The verify path now recognizes a grounded absence answer: an evidence-cited statement that the requested fact is not present in the selected sources. This state skips the normal low-confidence revise branch, preventing a second generation call whose only purpose would be to restate the same absence.
For corpus overviews, structured tables are surfaced as deterministic `[T#]` evidence alongside the source-balanced document set. Analytical synthesis continues to use the same table evidence path.