Teddy Xinyuan Chen commited on
Commit
9c29307
·
1 Parent(s): 07bbfbd

2024-10-08T19-27-28Z

Browse files
Files changed (1) hide show
  1. src/quizzes/models.py +10 -6
src/quizzes/models.py CHANGED
@@ -28,22 +28,21 @@ class Question(models.Model):
28
 
29
  class Answer(models.Model):
30
  question = models.OneToOneField(Question, on_delete=models.CASCADE)
31
- correct_answer = models.CharField(max_length=200, default="")
32
- rubrics = models.TextField(
33
- blank=True, null=True, verbose_name="Grading Rubrics - For LLM-graded questions only. You can leave this empty."
34
- )
35
 
36
  class Meta:
37
  abstract = True
38
 
39
  def __str__(self) -> str:
40
- return self.correct_answer or self.rubrics or "No answer or rubrics provided"
 
 
41
 
42
  def is_correct(self, user_answer) -> bool:
43
- return user_answer == self.correct_answer
44
 
45
 
46
  class FreeTextAnswer(Answer):
 
47
  case_sensitive = models.BooleanField(default=False)
48
 
49
  def is_correct(self, user_answer) -> bool:
@@ -53,6 +52,10 @@ class FreeTextAnswer(Answer):
53
 
54
 
55
  class LLMGradedAnswer(Answer):
 
 
 
 
56
  def grade(self, user_answer, rubrics) -> dict:
57
  import requests
58
 
@@ -83,6 +86,7 @@ class LLMGradedAnswer(Answer):
83
 
84
 
85
  class MultipleChoiceAnswer(Answer):
 
86
  choices = fields.ArrayField(models.CharField(max_length=200, blank=True))
87
 
88
  def __str__(self) -> str:
 
28
 
29
  class Answer(models.Model):
30
  question = models.OneToOneField(Question, on_delete=models.CASCADE)
 
 
 
 
31
 
32
  class Meta:
33
  abstract = True
34
 
35
  def __str__(self) -> str:
36
+ return (
37
+ getattr(self, "correct_answer", None) or getattr(self, "rubrics", None) or "No answer or rubrics provided"
38
+ )
39
 
40
  def is_correct(self, user_answer) -> bool:
41
+ return user_answer == getattr(self, "correct_answer", None)
42
 
43
 
44
  class FreeTextAnswer(Answer):
45
+ correct_answer = models.CharField(max_length=200, default="")
46
  case_sensitive = models.BooleanField(default=False)
47
 
48
  def is_correct(self, user_answer) -> bool:
 
52
 
53
 
54
  class LLMGradedAnswer(Answer):
55
+ rubrics = models.TextField(
56
+ blank=True, null=True, verbose_name="Grading Rubrics - For LLM-graded questions only. You can leave this empty."
57
+ )
58
+
59
  def grade(self, user_answer, rubrics) -> dict:
60
  import requests
61
 
 
86
 
87
 
88
  class MultipleChoiceAnswer(Answer):
89
+ correct_answer = models.CharField(max_length=200, default="")
90
  choices = fields.ArrayField(models.CharField(max_length=200, blank=True))
91
 
92
  def __str__(self) -> str: