b73a5cc601
- AIModelConfig.protocol 판별자 신설(기본 tei = 무회귀), llamacpp = /v1/rerank 요청·응답 스키마 정규화(ai/rerank_protocol.py 순수함수 + 단위테스트 4) - OCR_ENABLED/STT_ENABLED 명시 게이트 — GPU CUDA 서비스(Surya/faster-whisper) 폐기 대응, silent 아님(경고 로그 + extract_meta 터미널 기록) - DS Caddyfile request_body 100MB — 413 정책을 edge(home-caddy)에서 내부로 재홈 (DSM 리버스 프록시 전환 대비, upload.max_bytes 정합) - SSE X-Accel-Buffering는 기점검 결과 기구현(eid_chat)이라 무변경 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
25 lines
1.1 KiB
Python
25 lines
1.1 KiB
Python
"""rerank 백엔드 응답 정규화 — 2노드 이관 (2026-07-02, main-server-retirement-1 P1-4).
|
|
|
|
TEI(/rerank)와 llama.cpp(/v1/rerank)는 요청/응답 스키마가 다르다.
|
|
소비자(rerank_service)는 TEI 형태 [{"index": int, "score": float}]를 기대하므로
|
|
llama.cpp 응답을 여기서 정규화한다. 순수 함수(stdlib only) — 단위 테스트 대상.
|
|
"""
|
|
|
|
|
|
def normalize_llamacpp_rerank(payload: dict) -> list[dict]:
|
|
"""llama.cpp /v1/rerank 응답을 TEI 형태로 정규화.
|
|
|
|
입력: {"results": [{"index": int, "relevance_score": float}, ...], ...}
|
|
반환: [{"index": int, "score": float}, ...] (score 내림차순 — TEI '정렬됨' 계약 유지)
|
|
|
|
index/relevance_score 가 없는 항목은 버린다 (소비자 측 idx/sc None 가드와 동일 방어).
|
|
"""
|
|
results = payload.get("results") or []
|
|
normalized = [
|
|
{"index": r["index"], "score": float(r["relevance_score"])}
|
|
for r in results
|
|
if r.get("index") is not None and r.get("relevance_score") is not None
|
|
]
|
|
normalized.sort(key=lambda r: -r["score"])
|
|
return normalized
|