Skip to content

Commit 3ce7908

Browse files
committed
fix: its strange, but seems frontend is sending all the data in params
1 parent 1d4475b commit 3ce7908

1 file changed

Lines changed: 22 additions & 13 deletions

File tree

evaluation_function/evaluation.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,58 @@
55
from .correction import analyze_fsa_correction
66

77
def validate_fsa(value: str | dict) -> FSA:
8+
"""Parse a FSA from JSON string or dict."""
89
if isinstance(value, str):
910
return FSA.model_validate_json(value)
1011
return FSA.model_validate(value)
1112

12-
def evaluation_function(payload: Any) -> LFResult:
13+
def evaluation_function(
14+
response: Any = None,
15+
answer: Any = None,
16+
params: Any = None # Temp workaround: treat params as Any
17+
) -> LFResult:
1318
"""
14-
Evaluate a student's FSA response against the expected answer.
19+
Temporary FSA evaluation function.
1520
1621
Args:
17-
payload: dict with keys 'response', 'answer', 'params' (front-end may wrap everything)
22+
response: Student's FSA (may be None if frontend wraps everything in params)
23+
answer: Expected FSA (may be None)
24+
params: Additional parameters (or full payload if frontend wraps everything here)
1825
1926
Returns:
20-
LFResult
27+
LFResult with is_correct and feedback_items
2128
"""
2229
try:
23-
# Extract response/answer from the payload
24-
raw_response = payload.get("response") or payload.get("params", {}).get("response")
25-
raw_answer = payload.get("answer") or payload.get("params", {}).get("answer")
26-
params = payload.get("params", {})
30+
# Extract student and expected FSAs from whatever is present
31+
raw_response = response or getattr(params, "response", None) or params.get("response", None)
32+
raw_answer = answer or getattr(params, "answer", None) or params.get("answer", None)
33+
extra_params = params.get("params") or params
2734

2835
if raw_response is None or raw_answer is None:
29-
raise ValueError("Missing response or answer in payload")
36+
raise ValueError("Missing FSA data: response or answer is None")
3037

3138
# Parse FSAs
3239
student_fsa = validate_fsa(raw_response)
3340
expected_fsa = validate_fsa(raw_answer)
3441

35-
require_minimal = params.get("require_minimal", False)
42+
require_minimal = extra_params.get("require_minimal", False) if isinstance(extra_params, dict) else False
3643

37-
# Run correction
44+
# Run correction pipeline
3845
result: Result = analyze_fsa_correction(student_fsa, expected_fsa, require_minimal)
3946

40-
# Convert to LFResult
47+
# Return LFResult
4148
return LFResult(
4249
is_correct=result.is_correct,
4350
feedback_items=[("feedback", result.feedback)]
4451
)
4552

4653
except Exception as e:
54+
# Always return LFResult with raw payload for debugging
4755
return LFResult(
4856
is_correct=False,
4957
feedback_items=[(
5058
"error",
51-
f"Invalid FSA format: {str(e)}\n\npayload received:\n{payload}"
59+
f"Invalid FSA format: {str(e)}\n\n"
60+
f"response: {response}\nanswer: {answer}\nparams: {params}"
5261
)]
5362
)

0 commit comments

Comments
 (0)