mirror of
https://github.com/jcreek/AutomatedAssessmentFeedbackAgent.git
synced 2026-07-12 18:43:49 +00:00
feat(*): Add spelling and grammar
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
<script lang="ts">
|
||||
export let grade: string = '';
|
||||
export let strengths: string = '';
|
||||
export let areas_for_improvement: string = '';
|
||||
export let individualized_activity: string = '';
|
||||
export let reflection_question: string = '';
|
||||
export let teacher_suggestion: string = '';
|
||||
export let areasForImprovement: string = '';
|
||||
export let individualizedActivity: string = '';
|
||||
export let reflectionQuestion: string = '';
|
||||
export let teacherSuggestion: string = '';
|
||||
export let spellingAndGrammar: string = '';
|
||||
export let reasoning: string = '';
|
||||
</script>
|
||||
|
||||
@@ -12,10 +13,11 @@
|
||||
<h2 class="text-xl font-bold mb-4 text-blue-700">AI Assessment Feedback</h2>
|
||||
<div class="mb-2"><span class="font-semibold">Grade:</span> {grade}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Strengths:</span> {strengths}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Areas for Improvement:</span> {areas_for_improvement}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Individualized Activity:</span> {individualized_activity}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Reflection Question:</span> {reflection_question}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Teacher Suggestion:</span> {teacher_suggestion}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Areas for Improvement:</span> {areasForImprovement}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Individualized Activity:</span> {individualizedActivity}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Reflection Question:</span> {reflectionQuestion}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Teacher Suggestion:</span> {teacherSuggestion}</div>
|
||||
<div class="mb-2"><span class="font-semibold">Spelling and Grammar:</span> {spellingAndGrammar}</div>
|
||||
<details class="mt-4">
|
||||
<summary class="cursor-pointer font-semibold text-gray-600">Show AI Reasoning</summary>
|
||||
<div class="mt-2 text-gray-700 whitespace-pre-line">{reasoning}</div>
|
||||
|
||||
@@ -35,10 +35,11 @@
|
||||
<div class="mt-2 p-2 bg-gray-50 rounded">
|
||||
<div class="mb-1"><span class="font-semibold">Submission:</span> <span class="whitespace-pre-line">{entry.submission}</span></div>
|
||||
<div class="mb-1"><span class="font-semibold">Strengths:</span> {entry.strengths}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Areas for Improvement:</span> {entry.areas_for_improvement}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Individualized Activity:</span> {entry.individualized_activity}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Reflection Question:</span> {entry.reflection_question}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Teacher Suggestion:</span> {entry.teacher_suggestion}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Areas for Improvement:</span> {entry.areasForImprovement}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Individualized Activity:</span> {entry.individualizedActivity}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Reflection Question:</span> {entry.reflectionQuestion}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Teacher Suggestion:</span> {entry.teacherSuggestion}</div>
|
||||
<div class="mb-1"><span class="font-semibold">Spelling and Grammar:</span> {entry.spellingAndGrammar}</div>
|
||||
<details class="mt-2">
|
||||
<summary class="cursor-pointer font-semibold text-gray-600" aria-label="Show AI reasoning for this assessment">Show AI Reasoning</summary>
|
||||
<div class="mt-1 text-gray-700 whitespace-pre-line">{entry.reasoning}</div>
|
||||
|
||||
+17
-23
@@ -1,6 +1,7 @@
|
||||
import { client, agent } from '../agent/services/agentService';
|
||||
import type { MessageTextContentOutput, ToolOutput } from '@azure/ai-projects';
|
||||
import { PARTYKIT_BASE_URL } from '$env/static/private';
|
||||
import type { OpenAIResponse } from './types';
|
||||
|
||||
// Prompt template for grading and feedback
|
||||
export function buildGradingPrompt(submission: string, task: string) {
|
||||
@@ -27,12 +28,13 @@ Follow these steps:
|
||||
RESPONSE FORMAT (respond with a single JSON object, no extra text):
|
||||
|
||||
{
|
||||
"grade": "<number or string, e.g. 8/10 or 8>",
|
||||
"grade": "<number or string, e.g. A, B, C+, etc>",
|
||||
"strengths": "<text>",
|
||||
"areas_for_improvement": "<text>",
|
||||
"individualized_activity": "<text>",
|
||||
"reflection_question": "<text>",
|
||||
"teacher_suggestion": "<text>",
|
||||
"areasForImprovement": "<text>",
|
||||
"individualizedActivity": "<text>",
|
||||
"reflectionQuestion": "<text>",
|
||||
"teacherSuggestion": "<text>",
|
||||
"spellingAndGrammar": "<text>",
|
||||
"reasoning": "<step-by-step explanation>"
|
||||
}
|
||||
|
||||
@@ -40,25 +42,16 @@ Respond ONLY with the JSON object, with no preamble or explanation.
|
||||
`;
|
||||
}
|
||||
|
||||
export type OpenAIResponse = {
|
||||
grade: string;
|
||||
strengths: string;
|
||||
areas_for_improvement: string;
|
||||
individualized_activity: string;
|
||||
reflection_question: string;
|
||||
teacher_suggestion: string;
|
||||
reasoning: string;
|
||||
};
|
||||
|
||||
function fallbackGrade(submission: string, task: string): OpenAIResponse {
|
||||
console.log('using fallback');
|
||||
return {
|
||||
grade: '7/10',
|
||||
strengths: 'Clear argument and good evidence (in response to the task: ' + task + ").",
|
||||
areas_for_improvement: 'Needs deeper analysis and more examples.',
|
||||
individualized_activity: 'Write a paragraph expanding on your main point and provide two additional examples to support your argument.',
|
||||
reflection_question: 'What was the most challenging part of this assignment for you, and why?',
|
||||
teacher_suggestion: 'In the next lesson, review how to develop arguments with supporting evidence and provide a model answer for comparison.',
|
||||
areasForImprovement: 'Needs deeper analysis and more examples.',
|
||||
individualizedActivity: 'Write a paragraph expanding on your main point and provide two additional examples to support your argument.',
|
||||
reflectionQuestion: 'What was the most challenging part of this assignment for you, and why?',
|
||||
teacherSuggestion: 'In the next lesson, review how to develop arguments with supporting evidence and provide a model answer for comparison.',
|
||||
spellingAndGrammar: 'Everything was spelled correctly',
|
||||
reasoning: 'The submission demonstrates a good structure and evidence, but lacks depth and breadth of analysis. The activity and suggestions are designed to target this gap.'
|
||||
};
|
||||
}
|
||||
@@ -189,10 +182,11 @@ export async function gradeSubmissionWithAgent(submission: string, task: string,
|
||||
return {
|
||||
grade: '',
|
||||
strengths: '',
|
||||
areas_for_improvement: '',
|
||||
individualized_activity: '',
|
||||
reflection_question: '',
|
||||
teacher_suggestion: '',
|
||||
areasForImprovement: '',
|
||||
individualizedActivity: '',
|
||||
reflectionQuestion: '',
|
||||
teacherSuggestion: '',
|
||||
spellingAndGrammar: '',
|
||||
reasoning: text || 'No feedback generated.'
|
||||
};
|
||||
} catch (err) {
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
export interface OpenAIResponse {
|
||||
grade: string;
|
||||
strengths: string;
|
||||
areas_for_improvement: string;
|
||||
individualized_activity: string;
|
||||
reflection_question: string;
|
||||
teacher_suggestion: string;
|
||||
areasForImprovement: string;
|
||||
individualizedActivity: string;
|
||||
reflectionQuestion: string;
|
||||
teacherSuggestion: string;
|
||||
spellingAndGrammar: string;
|
||||
reasoning: string;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ export const POST: RequestHandler = async (event: RequestEvent) => {
|
||||
return new Response(JSON.stringify({
|
||||
success: true,
|
||||
task: task.trim(),
|
||||
feedback: `Grade: ${aiResult.grade}\nStrengths: ${aiResult.strengths}\nAreas for Improvement: ${aiResult.areas_for_improvement}\nIndividualized Activity: ${aiResult.individualized_activity}\nReasoning: ${aiResult.reasoning}`,
|
||||
feedback: `Grade: ${aiResult.grade}\nStrengths: ${aiResult.strengths}\nAreas for Improvement: ${aiResult.areasForImprovement}\nIndividualized Activity: ${aiResult.individualizedActivity}\nSpelling and Grammar: ${aiResult.spellingAndGrammar}\nReasoning: ${aiResult.reasoning}`,
|
||||
...aiResult
|
||||
}), {
|
||||
status: 200,
|
||||
|
||||
Reference in New Issue
Block a user