refactor(search): /ask 핸들러 오케스트레이션을 _run_ask 로 분리 (라우터=deps 해소만)
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) <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user