Teddy Xinyuan Chen
commited on
Commit
·
9c29307
1
Parent(s):
07bbfbd
2024-10-08T19-27-28Z
Browse files- 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
|
|
|
|
|
41 |
|
42 |
def is_correct(self, user_answer) -> bool:
|
43 |
-
return user_answer == self
|
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:
|