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()