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">
|
<script lang="ts">
|
||||||
export let grade: string = '';
|
export let grade: string = '';
|
||||||
export let strengths: string = '';
|
export let strengths: string = '';
|
||||||
export let areas_for_improvement: string = '';
|
export let areasForImprovement: string = '';
|
||||||
export let individualized_activity: string = '';
|
export let individualizedActivity: string = '';
|
||||||
export let reflection_question: string = '';
|
export let reflectionQuestion: string = '';
|
||||||
export let teacher_suggestion: string = '';
|
export let teacherSuggestion: string = '';
|
||||||
|
export let spellingAndGrammar: string = '';
|
||||||
export let reasoning: string = '';
|
export let reasoning: string = '';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -12,10 +13,11 @@
|
|||||||
<h2 class="text-xl font-bold mb-4 text-blue-700">AI Assessment Feedback</h2>
|
<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">Grade:</span> {grade}</div>
|
||||||
<div class="mb-2"><span class="font-semibold">Strengths:</span> {strengths}</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">Areas for Improvement:</span> {areasForImprovement}</div>
|
||||||
<div class="mb-2"><span class="font-semibold">Individualized Activity:</span> {individualized_activity}</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> {reflection_question}</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> {teacher_suggestion}</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">
|
<details class="mt-4">
|
||||||
<summary class="cursor-pointer font-semibold text-gray-600">Show AI Reasoning</summary>
|
<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>
|
<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="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">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">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">Areas for Improvement:</span> {entry.areasForImprovement}</div>
|
||||||
<div class="mb-1"><span class="font-semibold">Individualized Activity:</span> {entry.individualized_activity}</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.reflection_question}</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.teacher_suggestion}</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">
|
<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>
|
<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>
|
<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 { client, agent } from '../agent/services/agentService';
|
||||||
import type { MessageTextContentOutput, ToolOutput } from '@azure/ai-projects';
|
import type { MessageTextContentOutput, ToolOutput } from '@azure/ai-projects';
|
||||||
import { PARTYKIT_BASE_URL } from '$env/static/private';
|
import { PARTYKIT_BASE_URL } from '$env/static/private';
|
||||||
|
import type { OpenAIResponse } from './types';
|
||||||
|
|
||||||
// Prompt template for grading and feedback
|
// Prompt template for grading and feedback
|
||||||
export function buildGradingPrompt(submission: string, task: string) {
|
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):
|
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>",
|
"strengths": "<text>",
|
||||||
"areas_for_improvement": "<text>",
|
"areasForImprovement": "<text>",
|
||||||
"individualized_activity": "<text>",
|
"individualizedActivity": "<text>",
|
||||||
"reflection_question": "<text>",
|
"reflectionQuestion": "<text>",
|
||||||
"teacher_suggestion": "<text>",
|
"teacherSuggestion": "<text>",
|
||||||
|
"spellingAndGrammar": "<text>",
|
||||||
"reasoning": "<step-by-step explanation>"
|
"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 {
|
function fallbackGrade(submission: string, task: string): OpenAIResponse {
|
||||||
console.log('using fallback');
|
console.log('using fallback');
|
||||||
return {
|
return {
|
||||||
grade: '7/10',
|
grade: '7/10',
|
||||||
strengths: 'Clear argument and good evidence (in response to the task: ' + task + ").",
|
strengths: 'Clear argument and good evidence (in response to the task: ' + task + ").",
|
||||||
areas_for_improvement: 'Needs deeper analysis and more examples.',
|
areasForImprovement: '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.',
|
individualizedActivity: '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?',
|
reflectionQuestion: '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.',
|
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.'
|
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 {
|
return {
|
||||||
grade: '',
|
grade: '',
|
||||||
strengths: '',
|
strengths: '',
|
||||||
areas_for_improvement: '',
|
areasForImprovement: '',
|
||||||
individualized_activity: '',
|
individualizedActivity: '',
|
||||||
reflection_question: '',
|
reflectionQuestion: '',
|
||||||
teacher_suggestion: '',
|
teacherSuggestion: '',
|
||||||
|
spellingAndGrammar: '',
|
||||||
reasoning: text || 'No feedback generated.'
|
reasoning: text || 'No feedback generated.'
|
||||||
};
|
};
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
export interface OpenAIResponse {
|
export interface OpenAIResponse {
|
||||||
grade: string;
|
grade: string;
|
||||||
strengths: string;
|
strengths: string;
|
||||||
areas_for_improvement: string;
|
areasForImprovement: string;
|
||||||
individualized_activity: string;
|
individualizedActivity: string;
|
||||||
reflection_question: string;
|
reflectionQuestion: string;
|
||||||
teacher_suggestion: string;
|
teacherSuggestion: string;
|
||||||
|
spellingAndGrammar: string;
|
||||||
reasoning: string;
|
reasoning: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export const POST: RequestHandler = async (event: RequestEvent) => {
|
|||||||
return new Response(JSON.stringify({
|
return new Response(JSON.stringify({
|
||||||
success: true,
|
success: true,
|
||||||
task: task.trim(),
|
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
|
...aiResult
|
||||||
}), {
|
}), {
|
||||||
status: 200,
|
status: 200,
|
||||||
|
|||||||
Reference in New Issue
Block a user