| 55 | |
| 56 | |
| 57 | class TeachingVideoAgent: |
| 58 | def __init__( |
| 59 | self, |
| 60 | idx, |
| 61 | knowledge_point, |
| 62 | folder="CASES", |
| 63 | cfg: Optional[RunConfig] = None, |
| 64 | ): |
| 65 | """1. Global parameter""" |
| 66 | self.learning_topic = knowledge_point |
| 67 | self.idx = idx |
| 68 | self.cfg = cfg |
| 69 | |
| 70 | self.use_feedback = cfg.use_feedback |
| 71 | self.use_assets = cfg.use_assets |
| 72 | self.API = cfg.api |
| 73 | self.feedback_rounds = cfg.feedback_rounds |
| 74 | self.iconfinder_api_key = cfg.iconfinder_api_key |
| 75 | self.max_code_token_length = cfg.max_code_token_length |
| 76 | self.max_fix_bug_tries = cfg.max_fix_bug_tries |
| 77 | self.max_regenerate_tries = cfg.max_regenerate_tries |
| 78 | self.max_feedback_gen_code_tries = cfg.max_feedback_gen_code_tries |
| 79 | self.max_mllm_fix_bugs_tries = cfg.max_mllm_fix_bugs_tries |
| 80 | |
| 81 | """2. Path for output""" |
| 82 | self.folder = folder |
| 83 | self.output_dir = get_output_dir(idx=idx, knowledge_point=self.learning_topic, base_dir=folder) |
| 84 | self.output_dir.mkdir(parents=True, exist_ok=True) |
| 85 | |
| 86 | self.assets_dir = Path(*self.output_dir.parts[: self.output_dir.parts.index("CASES")]) / "assets" / "icon" |
| 87 | self.assets_dir.mkdir(exist_ok=True) |
| 88 | |
| 89 | """3. ScopeRefine & Anchor Visual""" |
| 90 | self.scope_refine_fixer = ScopeRefineFixer(api, self.max_code_token_length) |
| 91 | self.extractor = GridPositionExtractor() |
| 92 | |
| 93 | """4. External Database""" |
| 94 | knowledge_ref_mapping_path = ( |
| 95 | Path(*self.output_dir.parts[: self.output_dir.parts.index("CASES")]) / "json_files" / "long_video_ref_mapping.json" |
| 96 | ) |
| 97 | with open(knowledge_ref_mapping_path) as f: |
| 98 | self.KNOWLEDGE2PATH = json.load(f) |
| 99 | self.knowledge_ref_img_folder = ( |
| 100 | Path(*self.output_dir.parts[: self.output_dir.parts.index("CASES")]) / "assets" / "reference" |
| 101 | ) |
| 102 | self.GRID_IMG_PATH = self.knowledge_ref_img_folder / "GRID.png" |
| 103 | |
| 104 | """5. Data structure""" |
| 105 | self.outline = None |
| 106 | self.enhanced_storyboard = None |
| 107 | self.sections = [] |
| 108 | self.section_codes = {} |
| 109 | self.section_videos = {} |
| 110 | self.video_feedbacks = {} |
| 111 | |
| 112 | """6. For Efficiency""" |
| 113 | self.token_usage = {"prompt_tokens": 0, "completion_tokens": 0, "total_tokens": 0} |
| 114 |
no outgoing calls
no test coverage detected