cv / groq_api.py
saherPervaiz's picture
Update groq_api.py
5c62f99 verified
raw
history blame
1.92 kB
import os
import requests
GROQ_API_KEY = os.getenv("GROQ_API_KEY") or "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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:
# Limit content length per CV to avoid token overflow
cv_snippets = [text.strip()[:1500] or "[No content]" for text in cv_snippets[:3]]
cv_names = [name[:60] for name in cv_names[:3]]
# Create structured prompt
prompt = f"""
You are an AI recruitment assistant helping to match candidates to job descriptions.
### 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]}
Analyze how well each candidate matches the job requirements, especially in terms of:
- PHP programming
- Software or web development
- Relevant technical experience
Clearly identify which candidates are suitable and why.
""".strip()
# Debug info (optional)
print("πŸ“¦ Prompt length:", len(prompt))
if len(prompt) > 8000:
return "❌ Prompt too long. Please shorten the CVs or JD."
# Groq API call
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": "mixtral-8x7b-32768", # Or change to a different supported Groq model
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.4
},
timeout=30
)
response.raise_for_status()
return response.json()["choices"][0]["message"]["content"]
except Exception as e:
return f"❌ Groq API error: {e}"