from enum import Enum class QuestionType(Enum): WRITING_TASK_2 = "Writing Task 2" SPEAKING = "Speaking Task" def get_grading_messages(question_type: QuestionType, question: str, answer: str): if QuestionType.WRITING_TASK_2 == question_type: return [ { "role": "user", "content": "You are a IELTS examiner.", }, { "role": "user", "content": f"The question you have to grade is of type Writing Task 2 and is the following: {question}", }, { "role": "user", "content": "It is mandatory for you to provide your response with the overall grade and breakdown grades, " "with just the following json format: {'comment': 'comment about answer quality', 'overall': 7.0, " "'task_response': {'Task Achievement': 8.0, 'Coherence and Cohesion': 6.5, 'Lexical Resource': 7.5, " "'Grammatical Range and Accuracy': 6.0}}", }, { "role": "user", "content": "Example output: { 'comment': 'Overall, the response is good but there are some areas that need " "improvement.\n\nIn terms of Task Achievement, the writer has addressed all parts of the question " "and has provided a clear opinion on the topic. However, some of the points made are not fully " "developed or supported with examples.\n\nIn terms of Coherence and Cohesion, there is a clear " "structure to the response with an introduction, body paragraphs and conclusion. However, there " "are some issues with cohesion as some sentences do not flow smoothly from one to another.\n\nIn " "terms of Lexical Resource, there is a good range of vocabulary used throughout the response and " "some less common words have been used effectively.\n\nIn terms of Grammatical Range and Accuracy, " "there are some errors in grammar and sentence structure which affect clarity in places.\n\nOverall, " "this response would score a band 6.5.', 'overall': 6.5, 'task_response': " "{ 'Coherence and Cohesion': 6.5, 'Grammatical Range and Accuracy': 6.0, 'Lexical Resource': 7.0, " "'Task Achievement': 7.0}}", }, { "role": "user", "content": f"Evaluate this answer according to ielts grading system: {answer}", }, ] elif QuestionType.SPEAKING == question_type: return [ { "role": "user", "content": "You are a IELTS examiner.", }, { "role": "user", "content": f"The question you have to grade is of type Speaking and is the following: {question}", }, { "role": "user", "content": "It is mandatory for you to provide your response with the overall grade and breakdown grades, " "with just the following json format: {'comment': 'comment about answer quality', 'overall': 7.0, " "'task_response': {'Fluency and Coherence': 8.0, 'Lexical Resource': 6.5, " "'Grammatical Range and Accuracy': 7.5, 'Pronunciation': 6.0}}", }, { "role": "user", "content": "Example output: { 'comment': 'The candidate has provided a clear response to the question and has " "given examples of how they spend their weekends. However, there are some issues with grammar and " "pronunciation that affect the overall score. In terms of fluency and coherence, the candidate speaks " "clearly and smoothly with only minor hesitations. They have also provided a well-organized response " "that is easy to follow. Regarding lexical resource, the candidate has used a range of vocabulary " "related to weekend activities but there are some errors in word choice that affect the meaning of " "their sentences. In terms of grammatical range and accuracy, the candidate has used a mix of simple " "and complex sentence structures but there are some errors in subject-verb agreement and preposition " "use. Finally, regarding pronunciation, the candidate's speech is generally clear but there are some " "issues with stress and intonation that make it difficult to understand at times.', 'overall': 6.5, " "'task_response': {'Fluency and Coherence': 7.0, 'Lexical Resource': 6.5, 'Grammatical Range and Accuracy': 7.0," " 'Pronunciation': 6.0}}", }, { "role": "user", "content": f"Evaluate this answer according to ielts grading system: {answer}", }, ] else: raise Exception("Question type not implemented: " + question_type.value) def get_question_gen_messages(question_type: QuestionType): if QuestionType.WRITING_TASK_2 == question_type: return [ { "role": "user", "content": "You are a IELTS program that generates questions for the exams.", }, { "role": "user", "content": "The question you have to generate is of type Writing Task 2.", }, { "role": "user", "content": "It is mandatory for you to provide your response with the question " "just with the following json format: {'question': 'question'}", }, { "role": "user", "content": "Example output: { 'question': 'We are becoming increasingly dependent on computers. " "They are used in businesses, hospitals, crime detection and even to fly planes. What things will " "they be used for in the future? Is this dependence on computers a good thing or should we he more " "auspicious of their benefits?'}", }, { "role": "user", "content": "Generate a question for IELTS exam Writing Task 2.", }, ] elif QuestionType.SPEAKING == question_type: return [ { "role": "user", "content": "You are a IELTS program that generates questions for the exams.", }, { "role": "user", "content": "The question you have to generate is of type Speaking Task.", }, { "role": "user", "content": "It is mandatory for you to provide your response with the question " "just with the following json format: {'question': 'question'}", }, { "role": "user", "content": "Example output: { 'question': 'Describe someone you know who does something well. You should say " "who this person is, how do you know this person, what they do well and explain why you think this " "person is so good at doing this.'}", }, { "role": "user", "content": "Generate a question for IELTS exam Speaking Task.", }, ] else: raise Exception("Question type not implemented: " + question_type.value)