SkillForge / backend /agents /interviewer.py
team99tech
added minor1 changes2
de21b45
from langchain_groq import ChatGroq
from langchain_core.messages import SystemMessage, HumanMessage
import os
GROQ_MODEL = "llama-3.3-70b-versatile"
INTERVIEWER_SYSTEM = """You are a senior technical interviewer.
Generate ONE question for the given skill and difficulty level.
Rules:
- If difficulty is 'conceptual' or 'scenario', MUST generate a Multiple Choice Question (with A, B, C, D options).
- If difficulty is 'applied' or 'debugging', MUST generate an open-ended descriptive question (NO options).
- For MCQs, clearly list the options but DO NOT include the correct answer in your output.
- Reference the candidate's resume context if available
- Return ONLY the question text (and choices if MCQ) — no numbering, no preamble, and NO answer keys."""
difficulty_ladder = {
1: "conceptual",
2: "applied",
3: "scenario",
}
def get_llm() -> ChatGroq:
return ChatGroq(
model=GROQ_MODEL,
api_key=os.getenv("GROQ_API_KEY", "dummy"),
temperature=0.7,
)
def get_difficulty(question_number: int, current_score: float) -> str:
if question_number == 1:
return "conceptual"
if question_number == 2:
return "applied"
if question_number >= 3:
return "debugging"
return "conceptual"
def generate_question(
skill_label: str,
resume_context: str,
jd_requirement_level: str,
current_score: float,
question_number: int,
previous_questions: list[str],
) -> str:
difficulty = get_difficulty(question_number, current_score)
llm = get_llm()
prompt = f"Skill: {skill_label}\nDifficulty: {difficulty}\nResume Context: {resume_context}\nPrevious Questions: {previous_questions}"
messages = [
SystemMessage(content=INTERVIEWER_SYSTEM),
HumanMessage(content=prompt)
]
response = llm.invoke(messages)
return response.content.strip()