Spaces:
Sleeping
Sleeping
| 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 | |