fix(classify): data_origin enum 검증 — knowledge 등 잘못된 값 cascade fail 방지
AI 응답에서 dataOrigin='knowledge' 같은 doc_purpose enum 값이 data_origin 컬럼에 잘못 매핑되면 asyncpg InvalidTextRepresentationError 발생. 같은 classify_worker session 의 후속 autoflush 호출이 PendingRollbackError 로 cascade 되어 batch 안 다른 문서까지 모두 실패. doc_purpose 처럼 enum 허용값(work/external) 검증 후 박도록 수정. 외 값은 skip (data_origin NULL 유지). 가스기사 토픽 결손 15건의 RAG 결손 root cause.
This commit is contained in:
@@ -370,8 +370,13 @@ async def process(document_id: int, session: AsyncSession) -> None:
|
||||
# source/origin
|
||||
if parsed.get("sourceChannel") and not doc.source_channel:
|
||||
doc.source_channel = parsed["sourceChannel"]
|
||||
# data_origin enum 검증 — AI 가 'knowledge' 같은 doc_purpose 값을 잘못 던지면
|
||||
# asyncpg InvalidTextRepresentationError → 같은 session 후속 호출 cascade fail.
|
||||
# 허용값(work/external) 외는 skip (NULL 유지).
|
||||
if parsed.get("dataOrigin") and not doc.data_origin:
|
||||
doc.data_origin = parsed["dataOrigin"]
|
||||
origin = parsed["dataOrigin"]
|
||||
if origin in ("work", "external"):
|
||||
doc.data_origin = origin
|
||||
|
||||
# 용도 (AI는 빈 값만 채움 — 수동/업로드 명시값 우선)
|
||||
if parsed.get("docPurpose") and not doc.doc_purpose:
|
||||
|
||||
Reference in New Issue
Block a user