import os import requests # Load from environment variable or fallback GROQ_API_KEY = "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" def summarize_match(job_description, cv_names, cv_snippets): if not GROQ_API_KEY: return "❌ GROQ_API_KEY not set." try: # Ensure 3 CVs are present (pad if needed) while len(cv_names) < 3: cv_names.append("[No CV]") cv_snippets.append("[No content]") # Truncate content safely job_description = job_description.strip()[:1000] or "[No description provided]" cv_names = [name[:60] for name in cv_names[:3]] cv_snippets = [(text.strip()[:1500] or "[No content]") for text in cv_snippets[:3]] # Compose prompt prompt = f""" You are an AI recruitment assistant helping to evaluate candidates for a job. ### Job Description: {job_description} ### Candidate CVs: 1. {cv_names[0]}: {cv_snippets[0]} 2. {cv_names[1]}: {cv_snippets[1]} 3. {cv_names[2]}: {cv_snippets[2]} Please analyze how well each candidate matches the job. Focus on: - PHP/web development experience - Programming and software skills - Relevant technical background List the best matches and briefly justify each recommendation. """.strip() # Truncate to fit Groq token window if needed if len(prompt) > 8000: prompt = prompt[:8000] # Send request to Groq API using LLaMA3 response = requests.post( url="https://api.groq.com/openai/v1/chat/completions", headers={ "Authorization": f"Bearer {GROQ_API_KEY}", "Content-Type": "application/json" }, json={ "model": "llama3-8b-8192", "messages": [ {"role": "system", "content": "You are a helpful recruitment assistant."}, {"role": "user", "content": prompt} ], "temperature": 0.4 }, timeout=30 ) response.raise_for_status() return response.json()["choices"][0]["message"]["content"] except requests.exceptions.RequestException as e: return f"❌ Groq API error: {e}" except Exception as e: return f"❌ Unexpected error: {e}"