3030 JOB_ROLE_LABELS_KO ,
3131 PRIMARY_CATEGORY_LABELS_KO ,
3232 JobRole ,
33- PrimaryCategory ,
3433)
3534from app .schemas .tagging import TaggingRequest , TaggingResponse
3635from app .services ._clients .llm_client import LLMClient , WorkloadType
37- from app .services .tagging .data import ALL_TAGS , TAGS_BY_CATEGORY , tag_score
36+ from app .services .tagging .data import ALL_TAGS , tag_score
3837from app .services .tagging .exceptions import TaggingValidationError
3938from app .services .tagging .v1_baseline import _extract_text
4039
@@ -95,21 +94,13 @@ def _strip_code_fence(text: str) -> str:
9594 return text
9695
9796
98- def _allowed_tags_for (category : PrimaryCategory ) -> frozenset [str ]:
99- """선택된 ``primaryCategory`` 안에서 허용되는 태그 셋.
100-
101- 카테고리 외 태그를 후보 단계에서 걸러내 contract (선택 역량 내 태그만 출력)
102- 를 보장한다.
103- """
104- return TAGS_BY_CATEGORY [category ]
105-
106-
107- def _parse_and_validate (raw : str , allowed_tags : frozenset [str ] = ALL_TAGS ) -> list [str ]:
97+ def _parse_and_validate (raw : str ) -> list [str ]:
10898 """후보 검증 — 갯수 :data:`_CANDIDATE_MIN`~:data:`_CANDIDATE_MAX`, 풀 내, 중복 X.
10999
110100 실패 시 :class:`TaggingValidationError`. 후처리에서 ``_FINAL_TOP`` 으로 자르므로
111- 여기서는 후보 단계 갯수만 검증한다. ``allowed_tags`` 는 카테고리별 허용 셋을
112- 좁혀 넘길 수 있다 (기본 ``ALL_TAGS``).
101+ 여기서는 후보 단계 갯수만 검증한다. 화이트리스트는 :data:`ALL_TAGS` 전체 —
102+ 프롬프트 명세("카테고리 무관, 풀 전체 열려 있다") 와 일치하도록 카테고리
103+ 좁힘은 적용하지 않는다.
113104 """
114105 text = _strip_code_fence (raw )
115106 try :
@@ -137,7 +128,7 @@ def _parse_and_validate(raw: str, allowed_tags: frozenset[str] = ALL_TAGS) -> li
137128 if len (set (str_tags )) != len (str_tags ):
138129 raise TaggingValidationError ("detailTags 중복 포함" )
139130
140- out_of_pool = [t for t in str_tags if t not in allowed_tags ]
131+ out_of_pool = [t for t in str_tags if t not in ALL_TAGS ]
141132 if out_of_pool :
142133 raise TaggingValidationError (f"허용 태그 풀 외 태그 포함: { out_of_pool } " )
143134
@@ -169,7 +160,6 @@ def _build_corrective_user_message(reason: str) -> str:
169160async def run (req : TaggingRequest , llm : LLMClient , model : str ) -> TaggingResponse :
170161 """Tagging v2_postscore 실행."""
171162 system = _render_prompt (req )
172- allowed = _allowed_tags_for (req .selected_competency )
173163 log_ctx : dict [str , Any ] = {
174164 "job_role" : req .job_role .value ,
175165 "primary_category" : req .selected_competency .value ,
@@ -185,7 +175,7 @@ async def run(req: TaggingRequest, llm: LLMClient, model: str) -> TaggingRespons
185175 first_raw = _extract_text (first_msg .content )
186176
187177 try :
188- candidates = _parse_and_validate (first_raw , allowed )
178+ candidates = _parse_and_validate (first_raw )
189179 except TaggingValidationError as first_err :
190180 logger .warning (
191181 "tagging.validation_failed" ,
@@ -204,7 +194,7 @@ async def run(req: TaggingRequest, llm: LLMClient, model: str) -> TaggingRespons
204194 )
205195 retry_raw = _extract_text (retry_msg .content )
206196 try :
207- candidates = _parse_and_validate (retry_raw , allowed )
197+ candidates = _parse_and_validate (retry_raw )
208198 except TaggingValidationError as retry_err :
209199 logger .warning (
210200 "tagging.validation_failed" ,
0 commit comments