Why: - Need documentation for team onboarding and reference - Need technical details for strategy implementations - Need API reference for developers Changes: - README.md: Documentation index and quick start guide - api-reference.md: All 10 endpoints with examples - architecture.md: System structure and design decisions - configuration.md: All environment variables and parameters - data-flow.md: How data moves through the system - evaluation-metrics.md: How scoring works with weights - strategy-technical-details.md: Deep dive into each strategy's implementation
4.8 KiB
API Reference
Complete documentation of all REST API endpoints.
Base URL
http://localhost:8000
Endpoints
Documents
GET /documents
List all uploaded documents.
Response:
{
"items": [
{
"id": "doc-abc123",
"filename": "insurance.docx",
"paragraph_count": 245,
"chunk_counts": {
"recursive": 218,
"fixed_size": 117
},
"created_at": "2026-07-25T10:00:00"
}
],
"total": 1,
"offset": 0,
"limit": 50
}
POST /documents
Upload a document (.docx or .doc).
Request:
- Content-Type:
multipart/form-data - Body:
file(binary)
Response (201):
{
"id": "doc-abc123",
"filename": "insurance.docx",
"paragraph_count": 245,
"chunk_counts": {},
"created_at": "2026-07-25T10:00:00"
}
DELETE /documents/{doc_id}
Delete a document and its vectors.
Response:
{
"deleted": true,
"document_id": "doc-abc123"
}
POST /documents/{doc_id}/process
Run chunking strategies on a document.
Request:
{
"strategies": [
"recursive",
"fixed_size",
"semantic",
"contextual_retrieval",
"semantic_parent_child"
]
}
Response:
{
"document_id": "doc-abc123",
"strategies_completed": [
{
"strategy": "recursive",
"status": "completed",
"chunks_produced": 218
}
],
"strategies_failed": []
}
Strategies
GET /strategies
List all available chunking strategies.
Response:
{
"strategies": [
{
"name": "recursive",
"description": "Cascade splitting: headers > double newline > ..."
},
{
"name": "fixed_size",
"description": "Fixed-size token splitting with overlap"
}
]
}
Queries
POST /queries
Ask a question against a document using a specific strategy.
Request:
{
"document_id": "doc-abc123",
"strategy": "recursive",
"question": "What are the main topics?",
"top_k": 5
}
Response (201):
{
"query_id": "q-xyz789",
"document_id": "doc-abc123",
"strategy": "recursive",
"question": "What are the main topics?",
"answer": "The document covers insurance regulations...",
"retrieved_chunks": [
{
"chunk_id": "recursive_doc_000045",
"score": 0.892,
"text": " chunk content...",
"parent_id": null
}
],
"latency_breakdown": {
"embed_seconds": 0.15,
"search_seconds": 0.02,
"answer_seconds": 1.23,
"total_seconds": 1.40
},
"token_usage": {
"prompt_tokens": 1250,
"completion_tokens": 150,
"total_tokens": 1400
},
"created_at": "2026-07-25T12:00:00"
}
GET /queries/{query_id}
Retrieve a past query.
Response: Same as POST /queries response.
Benchmarks
POST /benchmarks
Run a benchmark comparing multiple strategies.
Request:
{
"document_id": "doc-abc123",
"strategies": ["recursive", "fixed_size", "semantic"],
"questions_file": "files/questions.json",
"top_k": 5,
"dry_run": false
}
Response (201):
{
"experiment_id": "exp-abc123",
"document_id": "doc-abc123",
"strategies_used": ["recursive", "fixed_size", "semantic"],
"questions_count": 21,
"aggregate_metrics": {
"recursive": {
"avg_context_relevance": 8.5,
"avg_answer_similarity": 7.8,
"avg_faithfulness": 9.2,
"hallucination_rate": 0.05,
"total_questions": 21,
"failed_questions": 0
}
},
"best_strategy": "recursive",
"total_latency_seconds": 120.5,
"estimated_cost_usd": 0.22,
"created_at": "2026-07-25T12:00:00"
}
GET /benchmarks/{experiment_id}
Retrieve experiment results.
Response: Same as POST /benchmarks response.
GET /benchmarks/{experiment_id}/report
Generate HTML report.
Query Parameters:
view:managerial(default) ortechnical
Response: HTML page
GET /experiments
List all experiments.
Response:
{
"items": [
{
"id": "exp-abc123",
"document_id": "doc-abc123",
"strategies_used": ["recursive", "fixed_size"],
"created_at": "2026-07-25T12:00:00"
}
],
"total": 1,
"offset": 0,
"limit": 50
}
Error Responses
All errors return:
{
"detail": "Error message",
"type": "ErrorClassName"
}
| Status Code | Error Type | Description |
|---|---|---|
| 400 | ChunkingError | Invalid request |
| 400 | QueryError | Query failed |
| 400 | BenchmarkError | Benchmark failed |
| 404 | QueryError | Resource not found |
| 422 | ValidationError | Invalid request body |
Rate Limits
None configured. For production, consider adding rate limiting.
Authentication
None configured. For production, add API key or OAuth2 authentication.