From 842ad14930233f216e12c68f0303363f1543c471 Mon Sep 17 00:00:00 2001 From: hyungi Date: Sat, 27 Jun 2026 07:25:58 +0900 Subject: [PATCH] =?UTF-8?q?refactor(search):=20/ask=20=ED=95=B8=EB=93=A4?= =?UTF-8?q?=EB=9F=AC=20=EC=98=A4=EC=BC=80=EC=8A=A4=ED=8A=B8=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=85=98=EC=9D=84=20=5Frun=5Fask=20=EB=A1=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=20(=EB=9D=BC=EC=9A=B0=ED=84=B0=3Ddeps=20?= =?UTF-8?q?=ED=95=B4=EC=86=8C=EB=A7=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit api 리뷰: ask() 529줄에 검색→evidence/classifier→refusal→synthesis→grounding/verifier→7-tier 재게이트→telemetry 가 인라인. body 를 _run_ask(plain params)로 분리, ask 는 FastAPI deps 해소 후 return await _run_ask(...). body verbatim(동작 무변경), 12 params 전부 전달, 다중 return/background_tasks 보존. py_compile + pyflakes undefined-name 0 으로 충실이동 검증. Co-Authored-By: Claude Opus 4.8 (1M context) --- app/api/search.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app/api/search.py b/app/api/search.py index b781986..023ffc9 100644 --- a/app/api/search.py +++ b/app/api/search.py @@ -647,6 +647,39 @@ async def ask( - 일반 client 의 X-Source=eval 시도는 무시되고 source='document_server' 로 강제. - source != 'eval' 이면 eval_case_id 항상 None. """ + # 오케스트레이션은 _run_ask 로 분리(라우터=입력+deps 해소만). 동작 무변경 (refactor: ask-orchestrator). + return await _run_ask( + q=q, + user=user, + session=session, + background_tasks=background_tasks, + limit=limit, + debug=debug, + backend=backend, + corpus_variant=corpus_variant, + exact_knn=exact_knn, + x_source=x_source, + x_eval_case_id=x_eval_case_id, + x_eval_token=x_eval_token, + ) + + +async def _run_ask( + q: str, + user: User, + session: AsyncSession, + background_tasks: BackgroundTasks, + limit: int, + debug: bool, + backend: str | None, + corpus_variant: str | None, + exact_knn: bool, + x_source: str | None, + x_eval_case_id: str | None, + x_eval_token: str | None, +) -> "AskResponse | JSONResponse": + """/ask 오케스트레이션 — 검색→evidence/classifier→refusal→synthesis→grounding/verifier→ + 7-tier 재게이트→telemetry. ask() 가 FastAPI deps 해소 후 호출. 동작은 기존 핸들러와 동일.""" t_total = time.perf_counter() defense_log: dict = {} # per-layer flag snapshot source, eval_case_id = _resolve_eval_identity(x_source, x_eval_case_id, x_eval_token)