Job-Interview / generator.py
ruslanmv's picture
First commit
5798cfc
import os
import json
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
# Load environment variables
load_dotenv()
# File paths
PROFESSIONS_FILE = "professions.json"
TYPES_FILE = "types.json"
OUTPUT_FILE = "all_questions.json"
def generate_questions(profession, interview_type, description, max_questions):
"""
Generates interview questions using the OpenAI API based on profession, type, and description.
"""
openai_api_key = os.getenv("OPENAI_API_KEY")
if not openai_api_key:
raise RuntimeError(
"OpenAI API key not found. Please add it to your .env file as OPENAI_API_KEY."
)
chat = ChatOpenAI(
openai_api_key=openai_api_key, model="gpt-4", temperature=0.7, max_tokens=750
)
messages = [
SystemMessage(
content="You are an expert interviewer who generates concise technical interview questions for HR interviews. "
"Answer only with questions. Do not number the questions. Each question should be a separate string. "
"The questions should be appropriate for "
f"the {interview_type} stage of the interview process and relevant to the {profession} profession."
f" Generate no more than {max_questions} questions."
),
HumanMessage(
content=f"Generate interview questions for the role of '{profession}'. "
f"Interview Type: '{interview_type}'. "
f"Description of the role: '{description}'. "
),
]
try:
print(f"[DEBUG] Sending request to OpenAI for {profession} - {interview_type}")
response = chat.invoke(messages)
# Directly split the response into individual questions without numbering
questions = [q.strip() for q in response.content.split("\n") if q.strip()]
except Exception as e:
print(f"[ERROR] Failed to generate questions: {e}")
questions = ["An error occurred while generating questions."]
return questions
def load_json_data(filepath):
"""Loads data from a JSON file."""
with open(filepath, "r") as f:
return json.load(f)
def save_questions_to_file(output_file, all_questions, overwrite=True):
"""
Saves the questions to the specified JSON file.
Args:
output_file: The path to the output JSON file.
all_questions: The list of question dictionaries to save.
overwrite: If True, overwrites the file if it exists. If False, appends to the file.
"""
if overwrite:
with open(output_file, "w") as outfile:
json.dump(all_questions, outfile, indent=4)
else:
try:
existing_questions = load_json_data(output_file)
except (FileNotFoundError, json.JSONDecodeError):
existing_questions = []
existing_questions.extend(all_questions)
with open(output_file, "w") as outfile:
json.dump(existing_questions, outfile, indent=4)
def main(overwrite_output=True):
"""
Main function to generate and save interview questions.
"""
try:
professions_data = load_json_data(PROFESSIONS_FILE)
types_data = load_json_data(TYPES_FILE)
except FileNotFoundError as e:
print(f"Error: File not found - {e}")
return
except json.JSONDecodeError as e:
print(f"Error: Invalid JSON format in file - {e}")
return
all_questions = []
for profession_info in professions_data:
profession = profession_info["profession"]
description = profession_info["description"]
for interview_type_info in types_data:
interview_type = interview_type_info["type"]
max_questions = interview_type_info.get("max_questions", 5)
questions = generate_questions(
profession, interview_type, description, max_questions
)
all_questions.append(
{
"profession": profession,
"interview_type": interview_type,
"description": description,
"max_questions": max_questions,
"questions": questions,
}
)
# Save the questions, either overwriting or appending based on the parameter
save_questions_to_file(OUTPUT_FILE, all_questions, overwrite=overwrite_output)
print(f"[INFO] Questions saved to {OUTPUT_FILE}")
if __name__ == "__main__":
# Set overwrite_output to True to overwrite the existing file, False to append
main(overwrite_output=True)