Spaces:
Sleeping
Sleeping
| from typing import List, Dict, Any | |
| from openai import OpenAI | |
| from models import BaseLearningObjective, LearningObjective | |
| from .base_generation import generate_base_learning_objectives | |
| from .enhancement import generate_incorrect_answer_options | |
| from .grouping_and_ranking import group_base_learning_objectives, get_best_in_group_objectives | |
| from .suggestion_improvement import regenerate_incorrect_answers | |
| class LearningObjectiveGenerator: | |
| """Simple orchestrator for learning objective generation.""" | |
| def __init__(self, api_key: str, model: str = "gpt-5", temperature: float = 1.0): | |
| self.client = OpenAI(api_key=api_key) | |
| self.model = model | |
| self.temperature = temperature | |
| def generate_base_learning_objectives(self, file_contents: List[str], num_objectives: int) -> List[BaseLearningObjective]: | |
| """Generate base learning objectives without incorrect answer suggestions.""" | |
| return generate_base_learning_objectives( | |
| self.client, self.model, self.temperature, file_contents, num_objectives | |
| ) | |
| def group_base_learning_objectives(self, base_objectives: List[BaseLearningObjective], file_contents: List[str]) -> Dict[str, List]: | |
| """Group base learning objectives and identify the best in each group.""" | |
| return group_base_learning_objectives( | |
| self.client, self.model, self.temperature, base_objectives, file_contents | |
| ) | |
| def generate_incorrect_answer_options(self, file_contents: List[str], base_objectives: List[BaseLearningObjective], model_override: str = None) -> List[LearningObjective]: | |
| """Generate incorrect answer options for the given base learning objectives.""" | |
| return generate_incorrect_answer_options( | |
| self.client, self.model, self.temperature, file_contents, base_objectives, model_override | |
| ) | |
| def generate_and_group_learning_objectives(self, file_contents: List[str], num_objectives: int, model_override: str = None) -> Dict[str, List]: | |
| """Complete workflow: generate base objectives, group them, and generate incorrect answers only for best in group.""" | |
| # Step 1: Generate base learning objectives | |
| base_objectives = self.generate_base_learning_objectives(file_contents, num_objectives) | |
| # Step 2: Group base learning objectives and get best in group | |
| grouped_result = self.group_base_learning_objectives(base_objectives, file_contents) | |
| best_in_group_base = grouped_result["best_in_group"] | |
| # Step 3: Generate incorrect answer suggestions only for best in group objectives | |
| enhanced_best_objectives = self.generate_incorrect_answer_options(file_contents, best_in_group_base, model_override) | |
| # Return both the full grouped list (without enhancements) and the enhanced best-in-group list | |
| return { | |
| "all_grouped": grouped_result["all_grouped"], | |
| "best_in_group": enhanced_best_objectives | |
| } | |
| def regenerate_incorrect_answers(self, learning_objectives: List[LearningObjective], file_contents: List[str]) -> List[LearningObjective]: | |
| """Regenerate incorrect answer suggestions for learning objectives that need improvement.""" | |
| return regenerate_incorrect_answers( | |
| self.client, self.model, self.temperature, learning_objectives, file_contents | |
| ) |