Spaces:
Build error
Build error
| import json | |
| from typing import Dict, List, Tuple | |
| def load_config(config_path: str) -> Dict: | |
| """ | |
| JSON ์ค์ ํ์ผ์ ์ฝ์ด์ ๋์ ๋๋ฆฌ๋ก ๋ฐํํฉ๋๋ค. | |
| Args: | |
| config_path (str): JSON ์ค์ ํ์ผ์ ๊ฒฝ๋ก | |
| Returns: | |
| Dict: ์ค์ ์ ๋ณด๊ฐ ๋ด๊ธด ๋์ ๋๋ฆฌ | |
| """ | |
| with open(config_path, 'r', encoding='utf-8') as f: | |
| return json.load(f) | |
| class PromptManager: | |
| def __init__(self, config_path: str): | |
| self.config = load_config(config_path) | |
| self.sentences, self.index_mapping = self._extract_all_sentences_with_index() | |
| self.reverse_mapping = self._create_reverse_mapping() | |
| def _extract_all_sentences_with_index(self) -> Tuple[List[str], Dict]: | |
| """๋ชจ๋ sentence์ ์ธ๋ฑ์ค ๋งคํ ์ถ์ถ""" | |
| sentences = [] | |
| index_mapping = {} | |
| for event_idx, event_config in enumerate(self.config.get('PROMPT_CFG', [])): | |
| prompts = event_config.get('prompts', {}) | |
| for status in ['normal', 'abnormal']: | |
| for prompt_idx, prompt in enumerate(prompts.get(status, [])): | |
| sentence = prompt.get('sentence', '') | |
| sentences.append(sentence) | |
| index_mapping[(event_idx, status, prompt_idx)] = sentence | |
| return sentences, index_mapping | |
| def _create_reverse_mapping(self) -> Dict: | |
| """sentence -> indices ์ญ๋ฐฉํฅ ๋งคํ ์์ฑ""" | |
| reverse_map = {} | |
| for indices, sent in self.index_mapping.items(): | |
| if sent not in reverse_map: | |
| reverse_map[sent] = [] | |
| reverse_map[sent].append(indices) | |
| return reverse_map | |
| def get_sentence_indices(self, sentence: str) -> List[Tuple[int, str, int]]: | |
| """ํน์ sentence์ ๋ชจ๋ ์ธ๋ฑ์ค ์์น ๋ฐํ""" | |
| return self.reverse_mapping.get(sentence, []) | |
| def get_details_by_sentence(self, sentence: str) -> List[Dict]: | |
| """sentence๋ก ๋ชจ๋ ๊ด๋ จ ์์ธ ์ ๋ณด ์ฐพ์ ๋ฐํ""" | |
| indices = self.get_sentence_indices(sentence) | |
| return [self.get_details_by_index(*idx) for idx in indices] | |
| def get_details_by_index(self, event_idx: int, status: str, prompt_idx: int) -> Dict: | |
| """์ธ๋ฑ์ค๋ก ์์ธ ์ ๋ณด ์ฐพ์ ๋ฐํ""" | |
| event_config = self.config['PROMPT_CFG'][event_idx] | |
| prompt = event_config['prompts'][status][prompt_idx] | |
| return { | |
| 'event': event_config['event'], | |
| 'status': status, | |
| 'sentence': prompt['sentence'], | |
| 'top_candidates': event_config['top_candidates'], | |
| 'alert_threshold': event_config['alert_threshold'], | |
| 'event_idx': event_idx, | |
| 'prompt_idx': prompt_idx | |
| } | |
| def get_all_sentences(self) -> List[str]: | |
| """๋ชจ๋ sentence ๋ฆฌ์คํธ ๋ฐํ""" | |
| return self.sentences |