Skip to content

Commit 55c81c4

Browse files
committed
Expanded _extract_muEd_submission to handle missing content_key gracefully, added fallback logic for value key, and updated test cases for evaluate workflow.
1 parent c80bedc commit 55c81c4

2 files changed

Lines changed: 48 additions & 2 deletions

File tree

tests/mued_handling_test.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def tearDown(self) -> None:
2828
def test_evaluate_returns_feedback_list(self):
2929
event = {
3030
"path": "/evaluate",
31-
"body": {"submission": {"type": "TEXT", "content": {}}},
31+
"body": {"submission": {"type": "TEXT", "content": {"text": ""}}},
3232
}
3333

3434
response = handler(event)
@@ -205,6 +205,29 @@ def test_other_submission_extracts_value(self):
205205
self.assertEqual(self.captured["answer"], "some text")
206206
self.assertEqual(result[0]["awardedPoints"], True) # type: ignore
207207

208+
def test_typed_submission_falls_back_to_value_key(self):
209+
event = {
210+
"path": "/evaluate",
211+
"body": {
212+
"submission": {"type": "MATH", "content": {"value": "x+1"}},
213+
"task": {"title": "T", "referenceSolution": {"value": "x+1"}},
214+
},
215+
}
216+
result = handler(event)
217+
self.assertEqual(self.captured["response"], "x+1")
218+
self.assertEqual(self.captured["answer"], "x+1")
219+
220+
def test_missing_content_key_returns_error(self):
221+
event = {
222+
"path": "/evaluate",
223+
"body": {
224+
"submission": {"type": "MATH", "content": {"unknown_key": "x+1"}},
225+
},
226+
}
227+
result = handler(event)
228+
self.assertIn("error", result)
229+
self.assertIn("expression", result["error"]["message"])
230+
208231
def test_configuration_params_forwarded(self):
209232
event = {
210233
"path": "/evaluate",
@@ -412,6 +435,19 @@ def test_other_submission_extracts_value(self):
412435

413436
self.assertEqual(self.captured["response"], "some text")
414437

438+
def test_typed_submission_falls_back_to_value_key(self):
439+
event = {
440+
"path": "/evaluate",
441+
"body": {
442+
"submission": {"type": "MATH", "content": {"value": "x+1"}},
443+
"preSubmissionFeedback": {"enabled": True},
444+
},
445+
}
446+
447+
handler(event)
448+
449+
self.assertEqual(self.captured["response"], "x+1")
450+
415451
def test_configuration_params_forwarded(self):
416452
event = {
417453
"path": "/evaluate",

tools/commands.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,15 @@ def _extract_muEd_submission(body: JsonType):
144144
sub_type = submission.get("type", "OTHER")
145145
_type_key = {"MATH": "expression", "TEXT": "text", "CODE": "code", "MODEL": "model"}
146146
content_key = _type_key.get(sub_type, "value")
147-
response = submission.get("content", {}).get(content_key)
147+
content = submission.get("content", {})
148+
response = content.get(content_key)
149+
if response is None and content_key != "value":
150+
response = content.get("value")
151+
if response is None:
152+
raise EvaluationException(
153+
f"Could not extract response: expected '{content_key}' (or 'value') "
154+
f"in submission content."
155+
)
148156
params = body.get("configuration", {}).get("params", {})
149157
return response, params, content_key
150158

@@ -162,6 +170,8 @@ def _run_muEd_evaluation(body: JsonType) -> List[Dict]:
162170
if task:
163171
ref = task.get("referenceSolution") or {}
164172
answer = ref.get(content_key)
173+
if answer is None and content_key != "value":
174+
answer = ref.get("value")
165175
else:
166176
answer = None
167177

0 commit comments

Comments
 (0)