Loading definitions/emails_definition/llm/task_email.md +1 −1 Original line number Diff line number Diff line # Assessment task # Assessment task Assess the received email. Respond in formatted text and assess this rubric: Loading exercise/lib/log_manager.py +3 −1 Original line number Diff line number Diff line Loading @@ -100,7 +100,6 @@ class TeamLogSerializer: self.team_llm_eval_path = os.path.join( self.team_log_path, "llm-evaluations" ) os.makedirs(self.team_llm_eval_path) def serialize_all( self, with_emails: bool, with_questionnaires: bool, with_llm: bool Loading @@ -110,6 +109,9 @@ class TeamLogSerializer: self.serialize_categories() self.copy_uploaded_files() if with_llm: os.makedirs(self.team_llm_eval_path, exist_ok=True) if with_emails: self.serialize_emails() if with_llm: Loading exercise/serializers.py +3 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ class ExerciseSerializer(ModelSerializer): "exercise_id", "states", "definition_id", "llm", "sandbox", ] Loading Loading @@ -81,6 +83,7 @@ class TeamSerializer(ModelSerializer): "achieved_score", "total_score", "exercise_state_id", "show_overview", ] def get_users(self, obj): Loading exercise_definition/serializers.py +24 −1 Original line number Diff line number Diff line Loading @@ -99,6 +99,7 @@ class MilestoneSerializer(ModelSerializer): "file_names", "initial_state", "score", "final", ] Loading Loading @@ -140,6 +141,7 @@ class ToolSerializer(ModelSerializer): class EmailAddressSerializer(ModelSerializer): email_address_id = IntegerField(source="id") control = ControlSerializer() assessment_id = IntegerField(source="llm_assessment_id") class Meta: model = EmailAddress Loading @@ -150,6 +152,7 @@ class EmailAddressSerializer(ModelSerializer): "team_visible", "organization", "control", "assessment_id", ] Loading Loading @@ -239,11 +242,13 @@ class MultipleChoiceQuestionSerializer(ModelSerializer): class FreeFormQuestionSerializer(ModelSerializer): related_milestone_ids = ListField(source="related_milestones") assessment_id = IntegerField(source="llm_assessment_id") class Meta: model = FreeFormQuestion fields = [ "related_milestone_ids", "assessment_id", ] Loading Loading @@ -313,8 +318,10 @@ class QuestionnaireSerializer(ModelSerializer): "name", "content", "time", "delay", "control", "repeatable", "show_feedback", "questions", ] Loading @@ -324,6 +331,16 @@ class LearningActivitySerializer(ModelSerializer): milestone_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="milestones" ) email_address_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="addresses" ) inject_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="injects" ) tool_ids = PrimaryKeyRelatedField(many=True, read_only=True, source="tools") questionnaire_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="questionnaires" ) total_score = SerializerMethodField() class Meta: Loading @@ -334,6 +351,10 @@ class LearningActivitySerializer(ModelSerializer): "description", "tags", "milestone_ids", "email_address_ids", "inject_ids", "tool_ids", "questionnaire_ids", "total_score", ] Loading Loading @@ -362,6 +383,8 @@ class LearningObjectiveSerializer(ModelSerializer): class LLMAssessmentSerializer(ModelSerializer): assessment_id = IntegerField(source="id") class Meta: model = LLMAssessment fields = ["id", "persona", "assessment"] fields = ["assessment_id", "persona", "assessment"] running_exercise/serializers.py +21 −15 Original line number Diff line number Diff line from typing import Dict, Type from rest_framework.fields import CharField from rest_framework.relations import RelatedField from rest_framework.relations import RelatedField, PrimaryKeyRelatedField from rest_framework.serializers import ( ModelSerializer, IntegerField, Loading Loading @@ -114,10 +114,11 @@ class QuestionnaireAnswerSerializer(ModelSerializer): class SubmissionDetailsSerializer(ModelSerializer): answers = QuestionnaireAnswerSerializer(many=True) correct = CharField(source="get_correct_display") class Meta: model = QuestionnaireSubmission fields = ["answers", "attempt", "accepted"] fields = ["answers", "attempt", "accepted", "correct"] class ConfirmationDetailsSerializer(ModelSerializer): Loading Loading @@ -201,6 +202,12 @@ class ActionLogSerializer(ModelSerializer): type = CharField(source="get_type_display") details = DetailsRelatedField(read_only=True) instructor_comment = InstructorCommentSerializer() previous_log_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="previous_logs" ) next_log_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="next_logs" ) class Meta: model = ActionLog Loading @@ -211,9 +218,9 @@ class ActionLogSerializer(ModelSerializer): "details", "channel_id", "instructor_comment", "previous_log_id", "previous_log_ids", "user_id", "next_logs", "next_log_ids", "in_exercise_time", ] Loading @@ -239,14 +246,12 @@ class TeamQuestionnaireStateSerializer(ModelSerializer): class LLMEmailSuggestionSerializer(ModelSerializer): thread_id = IntegerField(source="thread.id") trigger_email_id = IntegerField(source="trigger_email.id") email_participant_id = IntegerField(source="email_participant.id") suggestion_id = IntegerField(source="id") class Meta: model = LLMEmailSuggestion fields = [ "id", "suggestion_id", "thread_id", "trigger_email_id", "email_participant_id", Loading @@ -256,32 +261,33 @@ class LLMEmailSuggestionSerializer(ModelSerializer): class LLMFreeFormEvaluationSerializer(ModelSerializer): evaluation_id = IntegerField(source="id") submission_id = IntegerField(source="questionnaire_answer.submission_id") question_id = IntegerField(source="questionnaire_answer.question_id") assessment_definition_id = IntegerField(source="assessment_definition.id") assessment_id = IntegerField(source="assessment_definition_id") class Meta: model = LLMFreeFormEvaluation fields = [ "id", "evaluation_id", "submission_id", "question_id", "assessment_definition_id", "assessment_id", "response", "created_at", ] class LLMEmailEvaluationSerializer(ModelSerializer): action_log_id = IntegerField(source="action_log.id") assessment_definition_id = IntegerField(source="assessment_definition.id") evaluation_id = IntegerField(source="id") assessment_id = IntegerField(source="assessment_definition_id") class Meta: model = LLMEmailEvaluation fields = [ "id", "evaluation_id", "action_log_id", "assessment_definition_id", "assessment_id", "response", "created_at", ] Loading
definitions/emails_definition/llm/task_email.md +1 −1 Original line number Diff line number Diff line # Assessment task # Assessment task Assess the received email. Respond in formatted text and assess this rubric: Loading
exercise/lib/log_manager.py +3 −1 Original line number Diff line number Diff line Loading @@ -100,7 +100,6 @@ class TeamLogSerializer: self.team_llm_eval_path = os.path.join( self.team_log_path, "llm-evaluations" ) os.makedirs(self.team_llm_eval_path) def serialize_all( self, with_emails: bool, with_questionnaires: bool, with_llm: bool Loading @@ -110,6 +109,9 @@ class TeamLogSerializer: self.serialize_categories() self.copy_uploaded_files() if with_llm: os.makedirs(self.team_llm_eval_path, exist_ok=True) if with_emails: self.serialize_emails() if with_llm: Loading
exercise/serializers.py +3 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ class ExerciseSerializer(ModelSerializer): "exercise_id", "states", "definition_id", "llm", "sandbox", ] Loading Loading @@ -81,6 +83,7 @@ class TeamSerializer(ModelSerializer): "achieved_score", "total_score", "exercise_state_id", "show_overview", ] def get_users(self, obj): Loading
exercise_definition/serializers.py +24 −1 Original line number Diff line number Diff line Loading @@ -99,6 +99,7 @@ class MilestoneSerializer(ModelSerializer): "file_names", "initial_state", "score", "final", ] Loading Loading @@ -140,6 +141,7 @@ class ToolSerializer(ModelSerializer): class EmailAddressSerializer(ModelSerializer): email_address_id = IntegerField(source="id") control = ControlSerializer() assessment_id = IntegerField(source="llm_assessment_id") class Meta: model = EmailAddress Loading @@ -150,6 +152,7 @@ class EmailAddressSerializer(ModelSerializer): "team_visible", "organization", "control", "assessment_id", ] Loading Loading @@ -239,11 +242,13 @@ class MultipleChoiceQuestionSerializer(ModelSerializer): class FreeFormQuestionSerializer(ModelSerializer): related_milestone_ids = ListField(source="related_milestones") assessment_id = IntegerField(source="llm_assessment_id") class Meta: model = FreeFormQuestion fields = [ "related_milestone_ids", "assessment_id", ] Loading Loading @@ -313,8 +318,10 @@ class QuestionnaireSerializer(ModelSerializer): "name", "content", "time", "delay", "control", "repeatable", "show_feedback", "questions", ] Loading @@ -324,6 +331,16 @@ class LearningActivitySerializer(ModelSerializer): milestone_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="milestones" ) email_address_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="addresses" ) inject_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="injects" ) tool_ids = PrimaryKeyRelatedField(many=True, read_only=True, source="tools") questionnaire_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="questionnaires" ) total_score = SerializerMethodField() class Meta: Loading @@ -334,6 +351,10 @@ class LearningActivitySerializer(ModelSerializer): "description", "tags", "milestone_ids", "email_address_ids", "inject_ids", "tool_ids", "questionnaire_ids", "total_score", ] Loading Loading @@ -362,6 +383,8 @@ class LearningObjectiveSerializer(ModelSerializer): class LLMAssessmentSerializer(ModelSerializer): assessment_id = IntegerField(source="id") class Meta: model = LLMAssessment fields = ["id", "persona", "assessment"] fields = ["assessment_id", "persona", "assessment"]
running_exercise/serializers.py +21 −15 Original line number Diff line number Diff line from typing import Dict, Type from rest_framework.fields import CharField from rest_framework.relations import RelatedField from rest_framework.relations import RelatedField, PrimaryKeyRelatedField from rest_framework.serializers import ( ModelSerializer, IntegerField, Loading Loading @@ -114,10 +114,11 @@ class QuestionnaireAnswerSerializer(ModelSerializer): class SubmissionDetailsSerializer(ModelSerializer): answers = QuestionnaireAnswerSerializer(many=True) correct = CharField(source="get_correct_display") class Meta: model = QuestionnaireSubmission fields = ["answers", "attempt", "accepted"] fields = ["answers", "attempt", "accepted", "correct"] class ConfirmationDetailsSerializer(ModelSerializer): Loading Loading @@ -201,6 +202,12 @@ class ActionLogSerializer(ModelSerializer): type = CharField(source="get_type_display") details = DetailsRelatedField(read_only=True) instructor_comment = InstructorCommentSerializer() previous_log_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="previous_logs" ) next_log_ids = PrimaryKeyRelatedField( many=True, read_only=True, source="next_logs" ) class Meta: model = ActionLog Loading @@ -211,9 +218,9 @@ class ActionLogSerializer(ModelSerializer): "details", "channel_id", "instructor_comment", "previous_log_id", "previous_log_ids", "user_id", "next_logs", "next_log_ids", "in_exercise_time", ] Loading @@ -239,14 +246,12 @@ class TeamQuestionnaireStateSerializer(ModelSerializer): class LLMEmailSuggestionSerializer(ModelSerializer): thread_id = IntegerField(source="thread.id") trigger_email_id = IntegerField(source="trigger_email.id") email_participant_id = IntegerField(source="email_participant.id") suggestion_id = IntegerField(source="id") class Meta: model = LLMEmailSuggestion fields = [ "id", "suggestion_id", "thread_id", "trigger_email_id", "email_participant_id", Loading @@ -256,32 +261,33 @@ class LLMEmailSuggestionSerializer(ModelSerializer): class LLMFreeFormEvaluationSerializer(ModelSerializer): evaluation_id = IntegerField(source="id") submission_id = IntegerField(source="questionnaire_answer.submission_id") question_id = IntegerField(source="questionnaire_answer.question_id") assessment_definition_id = IntegerField(source="assessment_definition.id") assessment_id = IntegerField(source="assessment_definition_id") class Meta: model = LLMFreeFormEvaluation fields = [ "id", "evaluation_id", "submission_id", "question_id", "assessment_definition_id", "assessment_id", "response", "created_at", ] class LLMEmailEvaluationSerializer(ModelSerializer): action_log_id = IntegerField(source="action_log.id") assessment_definition_id = IntegerField(source="assessment_definition.id") evaluation_id = IntegerField(source="id") assessment_id = IntegerField(source="assessment_definition_id") class Meta: model = LLMEmailEvaluation fields = [ "id", "evaluation_id", "action_log_id", "assessment_definition_id", "assessment_id", "response", "created_at", ]