cv / groq_api.py
saherPervaiz's picture
Update groq_api.py
b908f19 verified
raw
history blame
2.12 kB
# groq_api.py
import os
import requests
# βœ… Load API key securely from environment variable
GROQ_API_KEY = "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" # DO NOT hardcode keys!
def summarize_match(job_description, cv_names, cv_snippets):
if not GROQ_API_KEY:
return "❌ GROQ_API_KEY not set. Please set it as an environment variable."
try:
# βœ… Limit job description and snippet size for Groq token limits
job_description = job_description.strip()[:600] or "[No description provided]"
cv_names = [name[:60] for name in cv_names[:3]]
cv_snippets = [(text.strip()[:400] or "[No content]") for text in cv_snippets[:3]]
# βœ… Combine into readable prompt
cv_info = "\n\n".join([
f"{cv_names[i]}:\n{cv_snippets[i]}"
for i in range(len(cv_names))
])
prompt = f"""
You are an AI recruiter assistant.
Here is the job description:
---
{job_description}
---
Here are the top 3 candidate CVs (partial content):
{cv_info}
Summarize why these candidates may be a good fit for this role.
""".strip()
# βœ… Optional debug info
print("πŸ“¦ Prompt length (chars):", len(prompt))
if len(prompt) > 8000:
return "❌ Prompt too long for Groq (must be under 8K characters)."
# βœ… Send request to Groq API
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", # βœ… Correct Groq model
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.5
},
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}"