Spaces:
Sleeping
Sleeping
| import os | |
| from openai import OpenAI | |
| from dotenv import load_dotenv | |
| import json | |
| from helper import convert_markdown_to_pdf | |
| load_dotenv() | |
| def eval_flow(student_resp: dict, standard_key: dict, output_pdf_path: str): | |
| # Generate the report | |
| report_md = generate_report(student_resp, standard_key) | |
| # Convert the Markdown report to PDF | |
| convert_markdown_to_pdf(report_md, output_pdf_path) | |
| print(f"Report has been saved to '{output_pdf_path}'") | |
| return output_pdf_path | |
| def generate_report(student_resp: dict, standard_key: dict) -> str: | |
| client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) | |
| student_resp_str = json.dumps(student_resp, indent=4) | |
| standard_key_str = json.dumps(standard_key, indent=4) | |
| response = client.chat.completions.create( | |
| model="gpt-4o", | |
| messages=[ | |
| { | |
| "role": "system", | |
| "content": [ | |
| { | |
| "type": "text", | |
| "text": "You are an AI-powered answer sheet evaluator designed to assess students' responses by comparing them with a standard answer key and create Answer-wise Detailed Assessment Report (ADAR) in Markdown format. \n\nYour tasks include:\n1) Answer Evaluation: Assess the completeness, relevance, and accuracy of the content in comparison to the standard answers.\na) Feedback Generation: Provide detailed and constructive feedback for each question, including:\nb) Identifying mistakes and misconceptions.\nc) Suggesting improvements with a focus on clarity, structure, and content.\nd) Scoring: Assign marks for each question based on accuracy, relevance, and completeness.\n\n2) Reporting: Generate a comprehensive report including:\na) Per-question analysis: Scores and feedback.\nb) Overall performance: Strengths, weaknesses, and areas for improvement.\nc) Suggestions: Practical tips for enhancing future performance.\n\nEnsure your responses are clear, detailed, and supportive to help students understand their mistakes and improve effectively.\n\n\nExample of ADAR Entry;\n\n# Answer-wise Detailed Assessment Report (ADAR)\n\n**Name:** Atiya Salim \n**Subject:** Business Laws, Ethics and Communication \n---\n\n## Q1 (a)\n**Score:** 2/6 \n\n**Feedback:**\n\n● You have defined coercion incorrectly. It is not just committing or threatening others to do/not to do any act but “Coercion” is committing, or threatening to commit any act forbidden by Indian Penal Code 1860. \n\n● The definition of undue influence seems to be incomplete. You however managed to describe the crux of the definition well. \n\n● The differentiation mentioned by you was simply a repetition of the introductory part. \n\n● You have missed out the important distinguishing point that contract entered under coercion is voidable at the option of the party & contract entered under undue influence is voidable or court may set it aside or enforce it in a modified form. \n\n● It seems you need more practice.\n\n---\n\n## Q1 (b)\n**Score:** 2/6 \n\n**Feedback:**\n\n● Your answer was incomplete. You did not mention the 4 basic conditions that need to be satisfied for making the payment of honor. Please refer to suggested answers for the same. \n\n● Moreover, your introductory part was slightly erroneous and there was not enough clarity. The payment is made after the party fails to make the payment. \n\n● Work more on the concepts. \n\n---", | |
| # "text": "You are an AI-powered answer sheet evaluator designed to assess students' responses by comparing them with a standard answer key and create Answer-wise Detailed Assessment Report (ADAR) in Markdown format. Your tasks include:\n\n1) Answer Evaluation: Assess the completeness, relevance, and accuracy of the content in comparison to the standard answers.\na) Feedback Generation: Provide detailed and constructive feedback for each question, including:\nb) Identifying mistakes and misconceptions.\nc) Suggesting improvements with a focus on clarity, structure, and content.\nd) Scoring: Assign marks for each question based on accuracy, relevance, and completeness.\n\n2) Reporting: Generate a comprehensive report including:\na) Per-question analysis: Scores and feedback.\nb) Overall performance: Strengths, weaknesses, and areas for improvement.\nc) Suggestions: Practical tips for enhancing future performance.\n\nEnsure your responses are clear, detailed, and supportive to help students understand their mistakes and improve effectively.\n\n\nExample of ADAR Entry;\n\n# Answer-wise Detailed Assessment Report (ADAR)\n\n**Name:** Atiya Salim \n**Subject:** Business Laws, Ethics and Communication \n**Marks Scored:** 23/70 \n\n---\n\n## Q1 (a)\n**Score:** 2/6 \n\n**Feedback:**\n- ❌ You have defined *coercion* incorrectly. It is not just committing or threatening others to do/not to do any act but “Coercion” is committing, or threatening to commit any act forbidden by the Indian Penal Code 1860. \n- ⚠️ The definition of *undue influence* seems to be incomplete. However, you managed to describe the crux of the definition well. \n- ❌ The differentiation mentioned was a repetition of the introductory part. \n- ❗ You missed a key point: contracts entered under coercion are voidable at the option of the party, while those under undue influence can be voidable or modified by the court. \n- 📌 **Suggestion:** More practice is needed on legal definitions and distinctions.\n\n---\n\n## Q1 (b)\n**Score:** 2/6 \n\n**Feedback:**\n- ❌ Your answer was incomplete. You did not mention the **four basic conditions** that need to be satisfied for making the payment of honor. Please refer to suggested answers. \n- ⚠️ The introductory part was slightly erroneous and lacked clarity. \n- 📌 **Suggestion:** Focus on enhancing clarity and understanding of key conditions.\n\n---" | |
| } | |
| ] | |
| }, | |
| { | |
| "role": "user", | |
| "content": [ | |
| { | |
| "type": "text", | |
| "text": f"Standard Answer Key;\n```json\n{standard_key_str}\n```\nStudents Response;\n```json\n{student_resp_str}\n```" | |
| } | |
| ] | |
| } | |
| ], | |
| response_format={ | |
| "type": "text" | |
| }, | |
| temperature=1, | |
| max_completion_tokens=4048, | |
| top_p=1, | |
| frequency_penalty=0, | |
| presence_penalty=0 | |
| ) | |
| # print(response.choices[0].message.content) | |
| return response.choices[0].message.content |