Spaces:
Running
Running
from groq import Groq | |
import json | |
import os | |
from charset_normalizer import from_path | |
# Load API key from environment variables | |
GROQ_API_KEY = os.getenv("GROQ_API_KEY") | |
# Initialize Groq client | |
client = Groq(api_key=GROQ_API_KEY) | |
def load_job_description(file_path): | |
""" | |
Reads the job description from the specified file and automatically detects the encoding. | |
""" | |
try: | |
# Automatically detect encoding and return content as a string | |
detected = from_path(file_path).best() | |
if detected is None: | |
raise RuntimeError("Failed to detect file encoding.") | |
return str(detected) # Converts the content to a string | |
except FileNotFoundError: | |
raise FileNotFoundError(f"File '{file_path}' not found.") | |
except Exception as e: | |
raise RuntimeError(f"Error reading file: {e}") | |
def analyze_job_description(job_description): | |
""" | |
Analyzes the job description using the Groq API. | |
""" | |
structure_template = """{ | |
"jobTitle": "", | |
"company": "", | |
"location": "", | |
"keyResponsibilities": [ | |
"", "", "" | |
], | |
"requiredSkills": [ | |
"", "", "" | |
], | |
"preferredQualifications": [ | |
"", "", "" | |
] | |
}""" | |
# API call for analysis | |
completion = client.chat.completions.create( | |
model="llama-3.3-70b-versatile", | |
messages=[ | |
{ | |
"role": "system", | |
"content": "You are an HR Assistant. You will analyze Job Descriptions for the necessary skills, responsibilities, and qualifications needed for the position." | |
}, | |
{ | |
"role": "user", | |
"content": f"Analyze the following Job Description: {job_description} and extract the necessary details using this structure: {structure_template}. Just output an JSON, we dont need any other text ! DO NOT INVENT THINGS!" | |
} | |
], | |
temperature=1, | |
max_tokens=1024, | |
top_p=1, | |
stream=True, | |
stop=None, | |
) | |
# Collect the output | |
response_content = "" | |
for chunk in completion: | |
response_content += chunk.choices[0].delta.content or "" | |
# Parse JSON data | |
try: | |
analysis_result = json.loads(response_content) | |
return analysis_result | |
except json.JSONDecodeError: | |
return {"error": "Failed to parse JSON", "raw_response": response_content} | |
def save_to_json_file(data, output_file_path): | |
""" | |
Saves the analysis results to a JSON file. | |
""" | |
try: | |
with open(output_file_path, "w", encoding="utf-8") as json_file: | |
json.dump(data, json_file, indent=4, ensure_ascii=False) | |
print(f"Output successfully saved to {output_file_path}") | |
except Exception as e: | |
raise RuntimeError(f"Error saving JSON file: {e}") | |
if __name__ == "__main__": | |
# File paths | |
input_file = "Job.txt" | |
output_file = "JobAnalyzed.json" | |
try: | |
# Load the job description | |
job_description = load_job_description(input_file) | |
# Analyze the job description | |
analysis_result = analyze_job_description(job_description) | |
# Save the analysis results | |
save_to_json_file(analysis_result, output_file) | |
except Exception as e: | |
print(f"Error: {e}") | |