File size: 1,651 Bytes
f6ec0cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import pandas as pd
import logging
from typing import Optional, Tuple
from dataclasses import dataclass

logger = logging.getLogger(__name__)

@dataclass
class GeneratedQuestion:
    question: str
    choices: dict
    correct_answer: str
    explanation: str

class SimilarQuestionGenerator:
    def __init__(self, misconception_csv_path: str):
        self._load_data(misconception_csv_path)

    def _load_data(self, misconception_csv_path: str):
        self.misconception_df = pd.read_csv(misconception_csv_path)

    def get_misconception_text(self, misconception_id: float) -> Optional[str]:
        if pd.isna(misconception_id):
            return "No misconception provided."
        row = self.misconception_df[self.misconception_df['MisconceptionId'] == int(misconception_id)]
        return row.iloc[0]['MisconceptionName'] if not row.empty else "Misconception not found."

    def generate_similar_question_with_text(self, construct_name, subject_name, question_text, correct_answer_text, wrong_answer_text, misconception_id) -> Tuple[Optional[GeneratedQuestion], Optional[str]]:
        prompt = f"Generate a similar question for: {question_text}"
        # Mock API call for demonstration
        return GeneratedQuestion(question="Sample Question", choices={"A": "Option A", "B": "Option B"}, correct_answer="A", explanation="Sample Explanation"), None

def generate_similar_question(wrong_q, misconception_id, generator):
    if not isinstance(wrong_q, dict):
        return None
    misconception_text = generator.get_misconception_text(misconception_id)
    return {"question": f"Generated Question targeting {misconception_text}"}