ó
    À‘´j	  ã                   ó   • S r g)uü  The answering playground: ask questions of an ingested document and see
each answer grounded on the page it came from.

`app` is the FastAPI server (`quber playground` starts it) and owns every
route. It serves the page from `static/`, lists documents and resolves cited
ids through `db`, and runs uploads as subprocess jobs â€” `quber fuse` and
`quber figure`, then `ingest_fusion`. When `gpu.configured()` is true, the
extracting stage instead runs `quber table` here, sends the docling parse to
the RunPod worker through `gpu.parse`, then runs `quber fuse --artifacts-dir`.
Ingest embeddings go to the worker through `gpu.embed` on such a host too.
The upload's track selects the model line for the whole job: the figure
scan's model and the ingest's chunking stream together.

`ingest_fusion` creates each document's rows in the `ade_playground` Postgres
schema that `schema.sql` defines. It is not the only writer. `app` stamps
upload metadata on the documents table, applies metadata edits, and deletes
or replaces documents. `backfill_boxes` rewrites grounding boxes. `jobs`
writes the job tables that `jobs.sql` defines in the same schema. Outside the
package, the rj-reit-sweep skill's scripts write the `sweep_answers` cache
table.

A question flows retrieval-first: `retrieval` fuses vector and keyword
ranking over the ingested chunks (`embedding` supplies the vectors), a
ranker chosen by settings orders them (`selection` reads a window of the
fused ranking with Haiku; `ranking` judges every page and chunk with Jev),
and `answers` turns the retrieved context
into one `Answer` whose payload says what shape the reply took. `agent`
builds the Claude model for every agent defined in this package
(`anthropic_model`, `answer_model`) and the context format the answering
agents share (`build_context`). The cover-page attributor that uploads run and
the footnote lookup that ingest runs are built in `quber.agents` and choose
their own credential there. Its prose `answer` agent is off the request path and is
the benchmark's baseline.

`benchmark` measures the answering path against FinanceBench and is not
imported by the server.

Where the local corpus lives (staged PDFs, parse artifacts, uploads) comes
from `get_settings().playground`, never from a path relative to this package.
N)Ú__doc__© ó    Ú7/home/mande/repo/quber/src/quber/playground/__init__.pyÚ<module>r      s
   ðò'r   