7.8 KiB
NSCT — API-Referenz
Hinweis: Diese API-Referenz beschreibt den aktuellen Stand (Stage 22).
Server-Adresse
http://localhost:8080
Nach docker compose up.
System-Endpunkte
GET /health
Beschreibung: Basic health check — gibt den Status und die Version zurück. Wird von Docker Healthchecks und Load Balancern verwendet.
Request:
GET /health
Response (200 OK):
{
"status": "ok",
"version": "0.1.0"
}
GET /ready
Beschreibung: Readiness check — prüft die Erreichbarkeit von Downstream-Services (LLM-Provider, ggf. Datenbank).
Request:
GET /ready
Response (200 OK):
Wenn bereit:
{
"status": "ready",
"llm": "ok",
"database": "unknown",
"llm_model": "Qwen3.6-35B"
}
Wenn nicht bereit:
{
"status": "not_ready",
"llm": "error:Connection refused",
"database": "unknown"
}
Mögliche status-Werte:
ready— Alle geprüften Services sind erreichbarnot_ready— Mindestens ein Service ist nicht erreichbar
GET /providers
Beschreibung: Listet die konfigurierten Provider ohne Secrets.
Request:
GET /providers
Response (200 OK):
{
"llm": {
"available": true,
"model": "Qwen3.6-35B",
"max_concurrency": 3
},
"vision": {
"available": true,
"model": "Qwen2.5-VL-3B"
},
"audio": {
"available": true,
"model": "default"
}
}
Falls kein Provider konfiguriert:
{
"llm": { "available": false },
"vision": { "available": false },
"audio": { "available": false }
}
Wichtig: Dieser Endpoint gibt keinerlei Secrets, API-Keys oder sensible Konfigurationswerte zurück.
Research API (Stage 14+)
Alle Research-Endpoints haben das Präfix /v1/research.
POST /v1/research
Beschreibung: Startet eine neue Recherche asynchron (Background-Pipeline).
Die Antwort kommt sofort — das eigentliche Ergebnis ist über
GET /v1/research/{id}/report abrufbar.
Request:
{
"query": "Welche wesentlichen Fortschritte gab es im letzten Jahr bei Kernfusion?",
"language": "de",
"depth": "normal",
"extra_queries": ["Fusion breakthroughs 2025", "commercial fusion progress"]
}
Parameter:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
query |
string | yes | — | Forschungsfrage (1–2000 Zeichen) |
language |
string | no | "de" |
Sprachcode (z.B. "de", "en") |
depth |
string | no | "normal" |
Suchtiefe: "quick", "normal", "deep" |
extra_queries |
string[] | no | null |
Optionale zusätzliche Suchanfragen |
Depth-Konfiguration:
| Tiefe | max_search_queries | max_sources | max_llm_requests | max_duration | max_context |
|---|---|---|---|---|---|
quick |
10 | 15 | 15 | 300s | 16k |
normal |
20 | 30 | 30 | 300s | 24k |
deep |
40 | 60 | 60 | 600s | 32k |
Response (200 OK):
{
"research_id": "uuid-...",
"status": "pending",
"query": "Welche Fortschritte bei Kernfusion?",
"depth": "normal",
"state": "created"
}
Error (400):
{
"detail": "Ungültige Tiefe 'ultra'. Gültig: 'quick', 'normal', 'deep'."
}
GET /v1/research
Beschreibung: Liste aller Research-Runs (paginiert).
Query-Parameter:
| Parameter | Type | Default | Description |
|---|---|---|---|
limit |
int | 10 | Max Anzahl Ergebnisse |
offset |
int | 0 | Offset für Pagination |
Response (200 OK):
{
"total": 5,
"limit": 10,
"offset": 0,
"items": [
{
"research_id": "uuid-...",
"query": "Kernfusion",
"depth": "normal",
"state": "completed",
"created_at": "2025-01-01T00:00:00+00:00",
"source_count": 5,
"claim_count": 12
}
]
}
GET /v1/research/{id}
Beschreibung: Metadaten eines Research-Runs.
Path-Parameter:
| Parameter | Type | Description |
|---|---|---|
id |
string | UUID des Research-Runs |
Response (200 OK):
{
"research_id": "uuid-...",
"query": "Kernfusion 2025",
"depth": "normal",
"state": "completed",
"created_at": "2025-01-01T00:00:00+00:00",
"updated_at": "2025-01-01T00:05:00+00:00",
"search_count": 20,
"source_count": 5,
"claim_count": 12,
"is_completed": true,
"is_running": false
}
GET /v1/research/{id}/status
Beschreibung: State-Machine Status eines Research-Runs.
Identisch zu GET /v1/research/{id} — gleicher Response.
GET /v1/research/{id}/sources
Beschreibung: Quellen für einen Research-Run.
Response (200 OK):
{
"research_id": "uuid-...",
"sources": [
{
"id": "s1",
"url": "https://example.com/1",
"title": "Beispiel Quelle",
"domain": "example.com",
"source_type": "primary",
"retrieved_at": "2025-01-01T00:01:00+00:00"
}
],
"total": 1
}
GET /v1/research/{id}/claims
Beschreibung: Claims (Behauptungen) für einen Research-Run.
Response (200 OK):
{
"research_id": "uuid-...",
"claims": [
{
"id": "c1",
"research_run_id": "uuid-...",
"source_id": "s1",
"claim_text": "Behauptung A",
"evidence_span": "Quelle 1, Abschnitt 2",
"claim_type": "factual",
"confidence": 0.85
}
],
"total": 1
}
GET /v1/research/{id}/evidence
Beschreibung: Evidence-Scores (6-dimensional) für einen Research-Run.
Response (200 OK):
{
"research_id": "uuid-...",
"evidence": [
{
"claim_id": "c1",
"research_run_id": "uuid-...",
"evidence_type": "primary_report",
"source_independence_score": 0.9,
"primary_source_proximity": 0.95,
"cross_source_support": 0.7,
"contradiction_level": 0.2,
"evidence_directness": 0.88,
"date_relevance_score": 0.95
}
],
"total": 1
}
GET /v1/research/{id}/report
Beschreibung: Synthese-Bericht (finaler Research Report).
Response (200 OK):
{
"research_id": "uuid-...",
"query": "Kernfusion 2025",
"summary": "Zusammenfassung der Recherche...",
"findings": [
{
"text": "Fundamentale Erkenntnis A",
"confidence": 0.85,
"source_ids": ["s1", "s2"]
}
],
"disagreements": [
{
"claim": "Behauptung X",
"positions": [
{"source": "Quelle 1", "view": "Für X"},
{"source": "Quelle 2", "view": "Gegen X"}
]
}
],
"uncertainties": ["Nicht ausreichend belegte Behauptung Y"],
"source_statistics": {
"total_sources": 5,
"primary_sources": 2,
"secondary_sources": 3
},
"methodology": "NSCT Evidence Pipeline — Search, Extract, Claim, Compare, Synthesize",
"generated_at": "2025-01-01T00:00:00+00:00"
}
DELETE /v1/research/{id}
Beschreibung: Löscht einen Research-Run (nur wenn nicht completed).
Response (200 OK):
{
"status": "deleted",
"research_id": "uuid-..."
}
Error (400): Completed runs sind immutable.
Prometheus Metrics
GET /metrics
Response: Prometheus Text Format mit allen Metriken:
search_queries_totalsources_discovered_totalsources_fetched_totalsources_rejected_totalclaims_extracted_totalduplicate_sources_totalcontradictions_detected_totalllm_requests_totalllm_tokens_input_totalllm_tokens_output_totalresearch_duration_secondsresearch_completed_totalresearch_failed_totalactive_research_runs
Error Response Format
Alle Fehler folgen einem konsistenten Format:
{
"detail": "Fehlerbeschreibung"
}
Authentifizierung
Stage 22: Keine Authentifizierung. Dies kann in späteren Stages hinzugefügt werden (API-Key, OAuth, etc.).