MyPal / app /api /DESIGN.md
KhaledSalehKL1's picture
Deploy 9XAIPal: Gradio+FastAPI app, backend, React build
1086e43 verified
|
Raw
History Blame Contribute Delete
1.74 kB
# API Design
## Purpose
The `api` directory owns the HTTP boundary of the backend. Routers should stay thin and delegate business logic to `services`, `chat`, `extraction`, and `database`.
## Files
### `deps.py`
Provides FastAPI dependencies for configuration, database access, request-scoped services, and shared validation helpers.
### `errors.py`
Maps domain exceptions to HTTP responses. Expected error families include missing documents, missing chunks, invalid cursors, failed extraction, unavailable models, and unavailable search.
### `v1/router.py`
Combines all versioned endpoint routers under `/api/v1`.
### `v1/endpoints/health.py`
Owns health endpoints for the API, database, local models, and optional external services.
### `v1/endpoints/documents.py`
Owns document upload, document listing, document detail, and deletion routes. Delegates lifecycle work to `services.documents` and ingestion startup to `services.ingestion`.
### `v1/endpoints/chunks.py`
Owns sequential reading endpoints. It should expose current, next, previous, and windowed chunk retrieval without performing raw SQL itself.
### `v1/endpoints/ask.py`
Owns the `/ask` HTTP endpoint. It validates request data and delegates routing, retrieval, model calls, and citation formatting to `chat.orchestrator`.
### `v1/endpoints/search.py`
Optional debugging and developer-facing endpoint group for local vector search, sequential lookup, and external SearXNG search.
## Data Dependencies
`api` imports `schemas` for request and response models, `services` for document and retrieval workflows, `chat` for `/ask`, and `core` for app settings.
`api` must not directly call MinerU, Ollama, SearXNG, raw PostgreSQL SQL, or pgvector queries.