Alias / evaluator.py
TahaRasouli's picture
Update evaluator.py
8f38bd2 verified
import os
import base64
from groq import Groq
TEXT_MODEL = "llama-3.1-8b-instant"
FAST_MODEL = "qwen/qwen3-32b"
VISION_MODEL = "meta-llama/llama-4-maverick-17b-128e-instruct"
# ================================================================
# TASK 2 EVALUATOR
# ================================================================
class IELTSTask2Evaluator:
def __init__(self):
self.client = Groq(api_key=os.getenv("GROQ_API_KEY"))
self.model = TEXT_MODEL
def evaluate_essay(self, question, essay):
prompt = f"""
Evaluate this IELTS Task 2 essay...
Question: {question}
Essay:
{essay}
"""
return self._get_completion(prompt)
def analyze_grammar(self, essay):
prompt = f"Grammar analysis:\n{essay}"
return self._get_completion(prompt)
def analyze_vocabulary(self, essay):
prompt = f"Vocabulary analysis:\n{essay}"
return self._get_completion(prompt)
def analyze_cohesion_coherence(self, essay):
prompt = f"Cohesion & Coherence analysis:\n{essay}"
return self._get_completion(prompt)
def analyze_task_achievement(self, question, essay):
prompt = f"Task Achievement analysis for:\n{question}\nEssay:\n{essay}"
return self._get_completion(prompt)
def _get_completion(self, prompt):
response = self.client.chat.completions.create(
model=self.model,
messages=[{"role": "user", "content": prompt}],
)
return response.choices[0].message.content
# ================================================================
# TASK 2 EXERCISE GENERATOR
# ================================================================
class IELTSTask2ExerciseGenerator:
def __init__(self):
self.client = Groq(api_key=os.getenv("GROQ_API_KEY"))
self.model = FAST_MODEL
def generate_grammar_exercises(self, grammar, essay):
prompt = f"Generate grammar exercises:\n{grammar}\nEssay:\n{essay}"
return self._get_completion(prompt)
def generate_vocabulary_exercises(self, vocab):
prompt = f"Generate vocabulary exercises:\n{vocab}"
return self._get_completion(prompt)
def _get_completion(self, prompt):
resp = self.client.chat.completions.create(
model=self.model,
messages=[{"role": "user", "content": prompt}],
)
return resp.choices[0].message.content
# ================================================================
# TASK 1 EVALUATOR
# ================================================================
class IELTSTask1Evaluator:
def __init__(self):
self.client = Groq(api_key=os.getenv("GROQ_API_KEY"))
self.text_model = TEXT_MODEL
self.vision_model = VISION_MODEL
def encode_image(self, path):
with open(path, "rb") as f:
return base64.b64encode(f.read()).decode()
def analyze_graph(self, path, question):
img = self.encode_image(path)
response = self.client.chat.completions.create(
model=self.vision_model,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": question},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img}"}},
],
}
],
)
return response.choices[0].message.content
def evaluate_task1_response(self, question, graph, essay):
prompt = f"Evaluate Task 1 response:\n{question}\nGraph:\n{graph}\nEssay:\n{essay}"
return self._get_completion(prompt)
def analyze_grammar(self, essay):
return self._get_completion(f"Grammar analysis:\n{essay}")
def analyze_vocabulary(self, essay):
return self._get_completion(f"Vocabulary analysis:\n{essay}")
def analyze_task_achievement(self, question, graph, essay):
return self._get_completion(f"Task Achievement:\n{question}\nGraph:\n{graph}\nEssay:\n{essay}")
def analyze_cohesion_coherence(self, essay, graph):
return self._get_completion(f"Cohesion & Coherence:\nGraph:\n{graph}\nEssay:\n{essay}")
def _get_completion(self, prompt):
resp = self.client.chat.completions.create(
model=self.text_model,
messages=[{"role": "user", "content": prompt}],
)
return resp.choices[0].message.content
# ================================================================
# TASK 1 EXERCISE GENERATOR
# ================================================================
class IELTSTask1ExerciseGenerator:
def __init__(self):
self.client = Groq(api_key=os.getenv("GROQ_API_KEY"))
self.model = FAST_MODEL
def generate_grammar_exercises(self, grammar, essay):
prompt = f"Generate grammar exercises:\n{grammar}\nEssay:\n{essay}"
return self._get_completion(prompt)
def generate_vocabulary_exercises(self, vocab):
prompt = f"Generate vocabulary exercises:\n{vocab}"
return self._get_completion(prompt)
def _get_completion(self, prompt):
resp = self.client.chat.completions.create(
model=self.model,
messages=[{"role": "user", "content": prompt}],
)
return resp.choices[0].message.content