Spaces:
Sleeping
Sleeping
File size: 4,951 Bytes
c82f7c8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | import React, { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import RubricBuilder from './RubricBuilder';
import './GradingSystem.css';
import { getRubric } from './SubmissionsPage';
export function GradingSystem() {
const [isBuilding, setIsBuilding] = useState(false);
const [currentRubric, setCurrentRubric] = useState(null);
const navigate = useNavigate();
const parseRubricToString = (rubric) => {
let rubricString = "RUBRIC:\n\n";
rubric.questions.forEach((question, qIndex) => {
rubricString += `QUESTION ${qIndex + 1} (${question.points} points):\n`;
rubricString += `${question.text}\n\n`;
rubricString += "Grading Criteria:\n";
question.criteria.forEach((criterion, cIndex) => {
const pointSign = criterion.points >= 0 ? '+' : '';
rubricString += `${cIndex + 1}. [${pointSign}${criterion.points} points] ${criterion.description}\n`;
});
rubricString += "\n---\n\n";
});
getRubric(rubricString);
return rubricString;
};
const handleRubricComplete = (rubric) => {
const rubricString = parseRubricToString(rubric);
console.log(rubricString); // For testing - you can see the output in console
setCurrentRubric(rubric);
setIsBuilding(false);
};
return (
<div className="grading-system content-container">
{!isBuilding && !currentRubric && (
<div className="welcome-screen">
<div className="welcome-content">
<div className="welcome-icon">
<i className="fas fa-clipboard-check"></i>
</div>
<h1>Welcome to TAI</h1>
<p className="welcome-description">
An advanced AI-powered assessment engine that leverages cutting-edge large language models (LLMs) to decipher and evaluate handwritten tests and homework with human-like precision. Utilizing a custom-designed grading rubric and intelligent analysis, TAI ensures fair, consistent, and insightful feedback, transforming the academic evaluation process with unparalleled efficiency. </p>
<button
className="create-rubric-btn"
onClick={() => setIsBuilding(true)}
>
<i className="fas fa-plus-circle"></i>
<span>Create New Rubric</span>
</button>
<div className="feature-grid">
<div className="feature-item">
<i className="fas fa-pencil-ruler"></i>
<h3>Custom Rubrics</h3>
<p>Create detailed grading criteria</p>
</div>
<div className="feature-item">
<i className="fas fa-bolt"></i>
<h3>Fast Grading</h3>
<p>Grade multiple submissions quickly</p>
</div>
<div className="feature-item">
<i className="fas fa-chart-bar"></i>
<h3>Detailed Analytics</h3>
<p>Get comprehensive grading insights</p>
</div>
<div className="feature-item">
<i className="fas fa-cloud-upload-alt"></i>
<h3>Easy Upload</h3>
<p>Support for PDF and images</p>
</div>
</div>
</div>
</div>
)}
{isBuilding && (
<RubricBuilder
onRubricComplete={handleRubricComplete}
onCancel={() => setIsBuilding(false)}
/>
)}
{currentRubric && (
<div className="completed-rubric-view">
<h2>Completed Rubric</h2>
<div className="rubric-content">
{currentRubric.questions.map((question, index) => (
<div key={index} className="rubric-question">
<div className="question-header">
<h3>Question {index + 1}</h3>
<span className="points">{question.points} Points</span>
</div>
<p className="question-text">{question.text}</p>
<div className="criteria-list">
{question.criteria.map((criterion, cIndex) => (
<div key={cIndex} className="criterion-item">
<span className={criterion.points >= 0 ? 'points-positive' : 'points-negative'}>
{criterion.points >= 0 ? '+' : ''}{criterion.points} pts
</span>
<span>{criterion.description}</span>
</div>
))}
</div>
</div>
))}
</div>
<button
className="grade-submissions-btn"
onClick={() => navigate('/submissions', { state: { rubric: currentRubric } })}
>
<i className="fas fa-upload"></i>
Grade Submissions
</button>
</div>
)}
</div>
);
}
export default GradingSystem; |