SYMBOL INDEX (42 symbols across 2 files) FILE: config.py class ModelPlatform (line 14) | class ModelPlatform: method get_platform_config (line 57) | def get_platform_config(cls, platform: str) -> dict: method list_platforms (line 65) | def list_platforms(cls) -> dict: class Config (line 69) | class Config: method get_current_platform_config (line 95) | def get_current_platform_config(cls) -> dict: method set_platform (line 133) | def set_platform(cls, platform: str): method validate_config (line 197) | def validate_config(cls) -> List[str]: method get_system_prompt_template (line 215) | def get_system_prompt_template(cls) -> str: method get_typescript_template (line 231) | def get_typescript_template(cls) -> str: FILE: dialogue_extractor.py class DialogueItem (line 41) | class DialogueItem: method to_dict (line 46) | def to_dict(self) -> Dict[str, str]: method __hash__ (line 49) | def __hash__(self) -> int: class ChunkDialogueItem (line 54) | class ChunkDialogueItem: method to_dict (line 62) | def to_dict(self, include_chunk_text: bool = False) -> Dict[str, Any]: method to_dialogue_item (line 74) | def to_dialogue_item(self) -> DialogueItem: method __hash__ (line 78) | def __hash__(self) -> int: method __eq__ (line 82) | def __eq__(self, other) -> bool: class WorkItem (line 91) | class WorkItem: class ThreadSafeDialogueExtractor (line 98) | class ThreadSafeDialogueExtractor: method __init__ (line 101) | def __init__(self, extractor: 'DialogueExtractor', include_chunk_id: b... method process_chunk (line 110) | def process_chunk(self, work_item: WorkItem) -> List[ChunkDialogueItem]: class DialogueExtractor (line 152) | class DialogueExtractor: method __init__ (line 155) | def __init__(self, schema: Optional[Dict] = None, platform: Optional[s... method _generate_system_prompt (line 205) | def _generate_system_prompt(self) -> str: method _read_text_file (line 231) | def _read_text_file(self, file_path: str) -> str: method _chunk_text (line 240) | def _chunk_text(self, text: str) -> List[str]: method _split_long_line (line 310) | def _split_long_line(self, long_line: str) -> List[str]: method _call_api_with_retry (line 339) | def _call_api_with_retry(self, system_prompt: str, user_prompt: str) -... method _parse_and_validate_response (line 362) | def _parse_and_validate_response(self, response: str) -> List[Dialogue... method _remove_duplicates (line 396) | def _remove_duplicates(self, dialogues: List[DialogueItem]) -> List[Di... method _save_progress (line 410) | def _save_progress(self, file_path: str, processed_chunks: int, total_... method _load_progress (line 426) | def _load_progress(self, file_path: str) -> Optional[int]: method extract_dialogues (line 441) | def extract_dialogues(self, file_path: str, output_file: Optional[str]... method extract_dialogues_concurrent (line 541) | def extract_dialogues_concurrent(self, file_path: str, output_file: Op... method _write_ordered_results (line 644) | def _write_ordered_results(self, results_buffer: Dict[int, List], comp... method _flush_remaining_results (line 662) | def _flush_remaining_results(self, results_buffer: Dict[int, List], ou... method get_statistics (line 682) | def get_statistics(self, output_file: str) -> Dict[str, Any]: method sort_dialogues (line 709) | def sort_dialogues(self, output_file: str, sorted_output_file: Optiona... method filter_by_chunk (line 747) | def filter_by_chunk(self, output_file: str, chunk_ids: List[int], filt... method get_chunk_statistics (line 776) | def get_chunk_statistics(self, output_file: str) -> Dict[str, Any]: method convert_to_legacy_format (line 816) | def convert_to_legacy_format(self, output_file: str, legacy_output_fil... function main (line 845) | def main():