Spaces:
Running
Running
File size: 2,512 Bytes
b340140 4c2a3dd b340140 4c2a3dd b340140 4c2a3dd b340140 4c2a3dd b340140 4c2a3dd b340140 4c2a3dd b340140 4c2a3dd b340140 4c2a3dd b340140 4c2a3dd b340140 4c2a3dd b340140 |
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 |
import gradio as gr
from main import grade_submission
import pdfplumber
import docx
def extract_text(file):
if file is None:
return ""
name = file.name.lower()
if name.endswith(".pdf"):
text = ""
with pdfplumber.open(file) as pdf:
for page in pdf.pages:
text += page.extract_text() + "\n"
return text
if name.endswith(".docx"):
doc = docx.Document(file)
return "\n".join(p.text for p in doc.paragraphs)
return file.read().decode("utf-8", errors="ignore")
def resolve_input(file, text):
return extract_text(file) if file else text
def grade_ui(
model,
q_file, q_text,
r_file, r_text,
s_file, s_text,
instruction
):
question_paper = resolve_input(q_file, q_text)
rubric = resolve_input(r_file, r_text)
student_answer = resolve_input(s_file, s_text)
return grade_submission(
model,
question_paper,
rubric,
student_answer,
instruction
)
with gr.Blocks() as demo:
gr.Markdown("## AutoGrader")
model = gr.Dropdown(
["Phi-3-mini", "Mistral-7B-Instruct"],
value="Phi-3-mini",
label="Model"
)
with gr.Tab("Question Paper"):
q_file = gr.File(
label="Upload Question Paper (PDF/DOCX/TXT)",
file_types=[".pdf", ".docx", ".txt"]
)
q_text = gr.Textbox(
label="Or paste Question Paper",
lines=5
)
with gr.Tab("Rubric"):
r_file = gr.File(
label="Upload Rubric (PDF/DOCX/TXT)",
file_types=[".pdf", ".docx", ".txt"]
)
r_text = gr.Textbox(
label="Or paste Rubric",
lines=5
)
with gr.Tab("Student Submission"):
s_file = gr.File(
label="Upload Student Submission (PDF/DOCX/TXT)",
file_types=[".pdf", ".docx", ".txt"]
)
s_text = gr.Textbox(
label="Or paste Student Submission",
lines=6
)
instruction = gr.Textbox(
label="Grading Instruction",
placeholder="e.g. Grade only Q2 out of 20"
)
output = gr.Textbox(
label="Grading Output (JSON)",
lines=12
)
gr.Button("Grade").click(
grade_ui,
inputs=[
model,
q_file, q_text,
r_file, r_text,
s_file, s_text,
instruction
],
outputs=output
)
demo.launch()
|