o2o-plagiarism-ai/app
hbyang 28c9ad1ee7 fix: 평가환경(python 3.9)에서 임포트 실패 해결
계획서 p.24 가 No.3/4/7 의 평가환경을 python 3.9 로 못박았는데, 실제로는
성능지표 평가 스크립트 3종이 전부 3.9 에서 임포트조차 되지 않았다.
python:3.9-slim 컨테이너에서 재현·수정·재검증했다.

원인: config.py 와 schemas.py 가 `from __future__ import annotations` 없이
`str | None` (PEP 604) 을 썼다. 3.10 부터의 문법이라 클래스 본문이 실행되는
순간 인터프리터가 평가하며 TypeError 로 죽는다. 이 두 파일을 타고 detector /
extractor / clustering / taxonomy / jobs.store / routes / main 이 연쇄로 깨졌다.

  No.7 eval_rouge.py       → summarizer → core.config
  No.3 eval_metadata_f1.py → extractor  → api.schemas
  No.4 evaluate_pairs.py   → detector   → api.schemas

개발환경이 3.14 라 로컬에서는 전혀 드러나지 않았다. 정답셋을 받아 측정하는
시점에 발견했다면 일정이 밀렸을 문제다.

수정은 두 가지가 모두 필요하다. future 임포트만 넣으면 pydantic 이 문자열
'str | None' 을 해석하지 못하고("Unable to evaluate type annotation"),
eval_type_backport 만 넣으면 인터프리터가 먼저 죽는다.

검증: 3.9 에서 eval_rouge.py / eval_metadata_f1.py 가 정상 실행되고 수치가
3.14 와 동일하다(ROUGE-1 recall 0.5778). evaluate_pairs.py 와 app.main 임포트도
통과. 3.14 회귀 없음.

재발 방지로 tests/test_py39_compat.py 를 추가했다. Pydantic 모델을 정의하는
모듈에 future 임포트가 있는지 AST 로 검사하므로 3.14 에서도 회귀를 잡는다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 14:02:29 +09:00
..
api fix: 평가환경(python 3.9)에서 임포트 실패 해결 2026-08-19 14:02:29 +09:00
core fix: 평가환경(python 3.9)에서 임포트 실패 해결 2026-08-19 14:02:29 +09:00
engine fix: 요약 ROUGE를 계획서 수식에 맞춤 (F1 → recall, 다중 참조) 2026-08-19 13:54:22 +09:00
jobs Initial commit: O2O 저작권 침해 여부 탐지 API 2026-05-13 11:20:17 +09:00
static fix: 판례 근거 중심으로 판단 문구 개선 2026-08-18 11:41:10 +09:00
__init__.py Initial commit: O2O 저작권 침해 여부 탐지 API 2026-05-13 11:20:17 +09:00
main.py Claude 리뷰 기반 운영 안정성 보강 2026-08-10 16:42:17 +09:00