From c0979b69e29fe482ff3a6afde77d57a879f7656d Mon Sep 17 00:00:00 2001 From: Lars Date: Tue, 7 Oct 2025 11:31:26 +0200 Subject: [PATCH] =?UTF-8?q?app/routers/query.py=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/routers/query.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 app/routers/query.py diff --git a/app/routers/query.py b/app/routers/query.py new file mode 100644 index 0000000..ca3e90e --- /dev/null +++ b/app/routers/query.py @@ -0,0 +1,38 @@ +""" +app/routers/query.py — Query-Endpunkte (WP-04) + +Zweck: + Stellt POST /query bereit und ruft den passenden Retriever-Modus auf. +Kompatibilität: + Python 3.12+, FastAPI 0.110+ +Version: + 0.1.0 (Erstanlage) +Stand: + 2025-10-07 +Bezug: + - app/core/retriever.py + - app/models/dto.py +Nutzung: + app.include_router(query.router, prefix="/query", tags=["query"]) +Änderungsverlauf: + 0.1.0 (2025-10-07) – Erstanlage. +""" + +from __future__ import annotations +from fastapi import APIRouter, HTTPException +from app.models.dto import QueryRequest, QueryResponse +from app.core.retriever import hybrid_retrieve, semantic_retrieve + +router = APIRouter() + +@router.post("", response_model=QueryResponse) +def post_query(req: QueryRequest) -> QueryResponse: + try: + if req.mode == "semantic": + return semantic_retrieve(req) + # default: hybrid + return hybrid_retrieve(req) + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + raise HTTPException(status_code=500, detail=f"query failed: {e}")