Spaces:
Sleeping
Sleeping
File size: 1,873 Bytes
dfb3d07 de21b45 dfb3d07 de21b45 dfb3d07 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 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()
|