Skip to content

Commit 6a54e2e

Browse files
authored
Merge pull request #8 from lambda-feedback/feature/muEd
Feature/mu ed
2 parents d8fa563 + 88a76cf commit 6a54e2e

6 files changed

Lines changed: 3971 additions & 67 deletions

File tree

.github/workflows/production-deploy.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ jobs:
3737
uses: lambda-feedback/evaluation-function-workflows/.github/workflows/deploy.yml@main
3838
with:
3939
template-repository-name: 'lambda-feedback/evaluation-function-boilerplate-python'
40-
build-file: "app/Dockerfile"
41-
build-context: "./app"
4240
environment: "production"
4341
version-bump: ${{ inputs.version-bump }}
4442
branch: ${{ inputs.branch }}

.github/workflows/staging-deploy.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ jobs:
5555
uses: lambda-feedback/evaluation-function-workflows/.github/workflows/deploy.yml@main
5656
with:
5757
template-repository-name: "lambda-feedback/evaluation-function-boilerplate-python"
58-
build-file: "app/Dockerfile"
59-
build-context: "./app"
6058
build-platforms: "aws"
6159
environment: "staging"
6260
lfs: false

evaluation_function/evaluation.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
import logging
12
from typing import Any
23
from sympy import simplify_logic, Equivalent
34
from lf_toolkit.evaluation import Result, Params
45
from lf_toolkit.parse.set import SetParser, LatexPrinter, SymPyBooleanTransformer, ASCIIPrinter
56

67
from .parse import parse_with_feedback, FeedbackException
78

9+
logger = logging.getLogger(__name__)
10+
logging.basicConfig(level=logging.DEBUG, format="%(levelname)s [%(name)s] %(message)s")
11+
812
def evaluation_function(
913
response: Any,
1014
answer: Any,
@@ -33,36 +37,58 @@ def evaluation_function(
3337
to output the evaluation response.
3438
"""
3539

40+
logger.debug("evaluation_function called")
41+
logger.debug("response type=%s value=%r", type(response).__name__, response)
42+
logger.debug("answer type=%s value=%r", type(answer).__name__, answer)
43+
logger.debug("params value=%r", params)
44+
3645
parser = SetParser.instance()
3746
sympyTransformer = SymPyBooleanTransformer()
3847

3948
# here we want to compare the response set with the example solution set.
4049
# we have to do the following steps
4150

4251
try:
52+
is_latex = params.get("is_latex", False)
53+
logger.debug("is_latex=%r", is_latex)
54+
4355
# 1. convert the `response`, which may be a latex string, to a sympy expression
44-
responseSet = parse_with_feedback(response, latex=params.get("is_latex", False))
56+
logger.debug("parsing response...")
57+
responseSet = parse_with_feedback(response, latex=is_latex)
58+
logger.debug("responseSet=%r", responseSet)
4559
responseSetSympy = sympyTransformer.transform(responseSet)
60+
logger.debug("responseSetSympy=%r", responseSetSympy)
4661

4762
# 2. convert the `answer`, which may be a latex string, to a sympy expression
4863
# TODO: what if answer is also in latex? how do we know?
49-
answerSet = parser.parse(answer, latex=False)
64+
logger.debug("parsing answer...")
65+
try:
66+
answerSet = parser.parse(answer, latex=False)
67+
except Exception as e:
68+
logger.error("failed to parse answer: type=%s value=%r error=%r", type(answer).__name__, answer, e)
69+
raise FeedbackException() from e
70+
logger.debug("answerSet=%r", answerSet)
5071
answerSetSympy = sympyTransformer.transform(answerSet)
72+
logger.debug("answerSetSympy=%r", answerSetSympy)
5173

5274
# 3. compare the two sympy expressions w/ simplification enabled.
5375
# If they are equal, the sets produced by the two expressions are
5476
# semantically equal. However, the expressions may not be equal.
5577
semantic_equal = simplify_logic(Equivalent(responseSetSympy, answerSetSympy)) == True
78+
logger.debug("semantic_equal=%r", semantic_equal)
5679

5780
# 4. compare the two sympy expressions w/ simplifaction disabled.
5881
# If they are equal, the expressions are also equal in syntax.
5982
# This respects laws of commutativity, e.g. A u B == B u A.
6083
syntactic_equal = responseSetSympy == answerSetSympy
84+
logger.debug("syntactic_equal=%r", syntactic_equal)
6185

6286
enforce_expression_equality = params.get("enforce_expression_equality", False)
87+
logger.debug("enforce_expression_equality=%r", enforce_expression_equality)
6388

6489
# 5. `is_correct` is True, iff 3) is True, and either 4) or `enforce_expression_equality` is True
6590
is_correct = semantic_equal and (syntactic_equal or not enforce_expression_equality)
91+
logger.debug("is_correct=%r", is_correct)
6692

6793
feedback_items=[]
6894

@@ -84,6 +110,7 @@ def evaluation_function(
84110
feedback_items=feedback_items,
85111
)
86112
except FeedbackException as e:
113+
logger.error("FeedbackException: %r", e)
87114
return Result(
88115
is_correct=False,
89116
feedback_items=[("parse_error", str(e))]

0 commit comments

Comments
 (0)