Download Mimicapp.py from DataThree/MimicMark: direct link, hf CLI and curl.
- Browser
- Download file 2.4 kB
-
https://huggingface.co/spaces/DataThree/MimicMark/resolve/main/Mimicapp.py
- Command line
-
hf download hf://spaces/DataThree/MimicMark/Mimicapp.py
-
curl -L -o Mimicapp.py https://huggingface.co/spaces/DataThree/MimicMark/resolve/main/Mimicapp.py
2.4 kB
| 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() | |