MimicMark / Mimicapp.py
YUVALON's picture
Try1 app.py
4c35124 verified
import gradio as gr
from transformers import pipeline
import os
# Load model (replace with any instruct-style model hosted on Hugging Face Hub)
model_name = "mistralai/Mixtral-8x7B-Instruct-v0.1" # You can change this
generator = pipeline("text-generation", model=model_name, device=-1) # CPU only
# Prompt template
def build_prompt(essay_text):
return f"""You are an experienced English teacher.
Your task is to evaluate the following student essay in 6 categories, each scored from 0 to 100.
Categories:
1. Grammar & Mechanics
2. Coherence & Flow
3. Clarity & Style
4. Argument Strength & Evidence
5. Structure & Organization
6. Teacher-Specific Style
Then, calculate the average of the 6 scores as the Total Grade.
Output format:
Return only a JSON object like this:
{{
"Grammar & Mechanics": score,
"Coherence & Flow": score,
"Clarity & Style": score,
"Argument Strength & Evidence": score,
"Structure & Organization": score,
"Teacher-Specific Style": score,
"Total Grade": average
}}
Here is the essay:
{essay_text}
"""
# Text extractor for uploaded files
def extract_text(file):
if file.name.endswith(".txt"):
return file.read().decode("utf-8")
return "Unsupported file type. Please upload a .txt file."
# Main function
def grade_essay(essay, file):
if not essay and not file:
return "Please provide either text or a file."
if file:
essay = extract_text(file)
if "Unsupported" in essay:
return essay
prompt = build_prompt(essay)
result = generator(prompt, max_new_tokens=400, temperature=0.5)[0]["generated_text"]
# Extract JSON from result
start = result.find("{")
end = result.rfind("}") + 1
try:
return result[start:end]
except:
return "Model response couldn't be parsed."
# UI
with gr.Blocks() as demo:
gr.Markdown("# ✏️ MimicMark - Essay Evaluator")
gr.Markdown("Upload or paste your essay. The AI will rate it in 6 categories and return a final score.")
with gr.Row():
essay_input = gr.Textbox(label="Paste Your Essay Here", lines=12)
file_input = gr.File(label="Or Upload a .txt File", file_types=[".txt"])
output = gr.Textbox(label="Evaluation Output", lines=15)
btn = gr.Button("Evaluate Essay")
btn.click(fn=grade_essay, inputs=[essay_input, file_input], outputs=output)
demo.launch()