import re import json from groq import Groq class MultiLanguageAgent: def __init__(self, api_key: str, model: str = "llama-3.3-70b-versatile"): self.client = Groq(api_key=api_key) self.model = model def generate(self, task: str) -> dict: prompt = f"""You are an expert polyglot programmer and technical writer. TASK: {task} Respond with a single valid JSON object using this exact structure: {{ "summary": "2-3 sentence overview of what this task covers and what languages/frameworks are involved", "implementations": [ {{ "language": "Language or Framework name", "code": "Complete, correct, runnable code", "explanation": "2-3 sentences about the approach and any language-specific notes", "difficulty": "Easy", "difficulty_score": 1, "frameworks": ["relevant library or framework names, empty array if none"] }} ], "comparison": "Detailed paragraph comparing all implementations — syntax, verbosity, type system, tooling, performance", "key_differences": [ "Specific difference 1", "Specific difference 2", "Specific difference 3" ], "recommendation": "Which language/approach is best for this specific task and why" }} Rules: - difficulty_score is an integer from 1 (easiest) to 5 (hardest) - difficulty is one of: Easy, Medium, Hard - Include every language mentioned in the task - Include framework-based alternatives where relevant (e.g. NumPy for Python, Streams for Java) - Write complete, working code — not pseudocode - Output ONLY the JSON object. No text before or after it.""" response = self.client.chat.completions.create( model=self.model, messages=[{"role": "user", "content": prompt}], temperature=0.3, max_tokens=4096, ) raw = response.choices[0].message.content.strip() return self._parse(raw) def _parse(self, text: str) -> dict: try: return json.loads(text) except json.JSONDecodeError: pass match = re.search(r"\{[\s\S]*\}", text) if match: try: return json.loads(match.group()) except json.JSONDecodeError: pass return { "summary": text[:600] if len(text) > 600 else text, "implementations": [], "comparison": "", "key_differences": [], "recommendation": "", }