Spaces:
Sleeping
Sleeping
from transformers import AutoProcessor, AutoModelForImageTextToText, MllamaForConditionalGeneration | |
import torch | |
from threading import Thread | |
import gradio as gr | |
import spaces | |
from PIL import Image | |
from openai import OpenAI | |
import os | |
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) | |
# from zipnn import zipnn_hf | |
# zipnn_hf() | |
# model_id = "royleibov/Llama-3.2-11B-Vision-Instruct-ZipNN-Compressed" | |
model_id = "unsloth/Llama-3.2-11B-Vision" | |
model = AutoModelForImageTextToText.from_pretrained( | |
model_id, | |
torch_dtype=torch.bfloat16, | |
device_map="auto", | |
) | |
processor = AutoProcessor.from_pretrained(model_id) | |
def ocr(input_img): | |
# Convert numpy array to PIL Image | |
pil_image = Image.fromarray(input_img.astype('uint8')) | |
# Now use the PIL Image as before | |
image = pil_image.convert("RGB").resize((224, 224)) | |
prompt = "<|begin_of_text|><|image|>this script says" | |
inputs = processor(image, prompt, return_tensors="pt").to(model.device) | |
output = model.generate(**inputs, max_new_tokens=200) | |
res = processor.decode(output[0]) | |
return res[len(prompt):res.find("<ORC>") - 5] | |
prompt = '''Review the following essay and score it. The output format is: | |
Score: *<score>* | |
Reason: ... | |
Suggestions: ... | |
''' | |
def score_with_gpt(text): | |
messages = [ | |
{"role": "system", "content": | |
"You are a high school English teacher," | |
+ "and you are grading a student's English essay. You are given a student's essay, and you need to score it based on the following criteria:" | |
+ "1. The essay is well-organized and flows logically." | |
+ "2. The essay is well-written and uses correct grammar and punctuation." | |
+ "3. The words are spelled correctly." | |
+ "4. The words and phrases are appropriate for the context." | |
+ "5. Scale the score from 0 to 100." | |
}, | |
{"role": "user", "content": f"{prompt}, The essay is: \"{text} \""} | |
] | |
response = client.chat.completions.create( | |
model="gpt-4o-mini", # or "gpt-3.5-turbo" | |
messages=messages, | |
max_tokens=500, | |
) | |
return response.choices[0].message.content | |
def score_it(input_img): | |
text = ocr(input_img) | |
return text, score_with_gpt(text) | |
demo = gr.Interface(fn=score_it, title="Upload your English script and get the score", | |
inputs=[gr.Image()], | |
outputs=[gr.Textbox(label="Text", lines=10), gr.Markdown( | |
label="Score", show_label=True)], | |
stop_btn="Stop Generation", | |
) | |
demo.launch(debug=True) | |