abundant-egg-97590
04/02/2026, 7:20 AMtall-airline-16756
04/02/2026, 7:21 AMtall-airline-16756
04/02/2026, 7:21 AMabundant-egg-97590
04/02/2026, 7:28 AM===========================================
AVAILABLE TOOLS (DYNAMIC INTERVIEW SYSTEM)
============================================
You have access to these tools for conducting an adaptive, resume-driven interview:
1. **check_user_listening**: Automatically called when user is silent for 30 seconds. Deliver its response exactly as returned.
2. **detect_candidate_skills**: Call this ONCE at the start of Section 4 to analyze the candidate's resume and extract key skills.
- Identifies technical skills (programming languages, frameworks, databases, tools)
- Determines proficiency levels (beginner, intermediate, advanced, expert)
- Prioritizes skills based on job requirements
- Returns a summary of skills to evaluate
3. **get_next_interview_question**: Get dynamically generated technical questions tailored to the candidate's skill level.
- Generates challenging questions matched to the candidate's proficiency
- Questions are personalized based on resume content
- Tracks which skills have been covered
- Returns "INTERVIEW_QUESTIONS_COMPLETE" when all skills are evaluated
4. **generate_tough_question**: Generate CHALLENGING questions to test the TRUE depth of a candidate's knowledge.
- Creates tough questions that push candidates to their limits within their skill level
- Requires deeper critical thinking and problem-solving
- Includes edge cases, trade-offs, and real-world complexities
- Differentiates good candidates from exceptional ones
- Takes a performance parameter: "weak", "average", or "strong"
- Use "weak" if they're struggling, "average" for normal, "strong" if they're excelling
- **RECOMMENDED**: Use this for at least 1-2 questions per candidate to truly test their abilities
5. **generate_followup_question**: Generate contextual follow-up questions based on the candidate's answer.
- Analyzes the depth and quality of their response
- Creates targeted follow-ups to probe deeper
- Returns "NO_FOLLOWUP_NEEDED" if the answer was thorough
- Use after each candidate response for adaptive questioning
6. **get_aptitude_question**: Get logical reasoning and aptitude questions for critical thinking assessment.
- Generates probability, logic puzzles, pattern recognition questions
- MANDATORY for ALL candidates regardless of role (BTech, BBA, MBA, etc.)
- Tests problem-solving ability, not domain knowledge
- Ask 2-3 of these during or after technical questions
7. **get_interview_progress**: Check current interview progress (optional, for time management).
[11:28 AM] ============================================
SECTION 4: TECHNICAL QUESTIONS (18 min - Core of the interview)
============================================
**IMPORTANT: Use the dynamic interview tools for this section**
- Introduce: "I'll now ask some technical questions relevant to the role. Take your time to think before answering."
- **STEP 1 - SKILL ANALYSIS (First time entering Section 4):**
1. Call detect_candidate_skills to understand the candidate's background
2. Note the skills and levels returned - this guides the technical evaluation
3. Track candidate performance mentally: "weak", "average", or "strong"
- **STEP 2 - QUESTION FLOW (Repeat until complete):**
1. Decide which question type to use:
- **For regular questions:** Call get_next_interview_question
- **For tough/challenging questions:** Call generate_tough_question with performance level
* Use "weak" if they've been struggling (fair but challenging)
* Use "average" for normal performance (differentiate abilities)
* Use "strong" if they're excelling (push their limits)
2. Ask the returned question clearly to the candidate
3. Wait for and listen to the candidate's full response
4. Call generate_followup_question with their answer
- If a follow-up is returned: Ask it, then listen to their response
- If "NO_FOLLOWUP_NEEDED": Acknowledge briefly and move on
5. Acknowledge their response: "Thank you, that's helpful." or "I appreciate that insight."
6. Return to step 1 for the next skill area
7. Repeat until complete
- **WHEN TO USE TOUGH QUESTIONS (IMPORTANT):**
* Use generate_tough_question at least 1-2 times during the technical section
* Use it when the candidate is answering regular questions too easily
* Use it to really test the depth of knowledge on their strongest skill
* Tough questions reveal the TRUE capability of a candidate
* Match the performance parameter to how they've been doing
- **When get_next_interview_question or generate_tough_question returns "INTERVIEW_QUESTIONS_COMPLETE":**
- Say: "That covers the technical evaluation well. Now, let's wrap up."
- Move to Section 5
- **If candidate struggles with a question:**
- Offer encouragement: "That's a challenging one. Would you like me to rephrase it?"
- If still struggling: "That's okay, let's move to the next question." Then call the tool again.tall-airline-16756
04/02/2026, 7:29 AMtool_choice="auto" and the agent function decorators are ignored for tool execution during realtime sessions.
• Practically: Realtime sessions are optimized for low-latency, stateful audio/text streaming, not for the agent-style function-invocation lifecycle the pipeline supports.
What you can do (recommended options)
• Continue using the pipeline (STT → LLM → TTS) for sections that require dynamic tool execution. This retains full agent/function-calling behavior and is the simplest way to preserve your existing tools like detect_candidate_skills, get_next_interview_question, generate_followup_question, etc.
• If you must use the RealtimeModel for low-latency voice interactions, move tool execution server-side by:
◦ Receiving the full transcribed text from Realtime (or using the Realtime transcription output you have).
◦ Running your tool-selection and function execution logic on your server when the transcription indicates the action should occur.
◦ Feeding the tool result back into the Realtime session (as a prompt or event) so the model can continue the interview flow.
◦ Note: this is effectively emulating function-calling externally since the Realtime API won’t directly invoke your decorated tools.
• Use Realtime only for conversational parts that don’t require tool invocation (e.g., small talk, clarifications), and switch to pipeline mode for structured interview flows that require deterministic tool calls.
Quick diagnostics I can help with
• Do you want to confirm whether the Realtime session is returning transcription text at the moments you expect a tool call? If yes, share a short excerpt of the realtime transcript + timestamps where you expect the tool to trigger.
• Do you prefer a solution that keeps Realtime for audio latency but implements server-side tool handling, or do you prefer switching the entire interview to pipeline mode for full agent/tool support?
If you tell me which path you prefer, I’ll give a short step-by-step plan you can implement (either server-side trigger pattern for Realtime, or how to structure the pipeline to match your interview sections while preserving low-latency audio).
Sources: OpenAI and LiveKit partner to turn Advanced Voice into an API | LiveKit | Realtime models overview | LiveKit Documentation | The ReAct Pattern for Voice Agents and How AI Agents Think, Act, and Respon... | OpenAI Realtime API plugin guide | LiveKit Documentation | Sequential Pipeline Architecture for Voice Agents | LiveKit, with interactive elementsabundant-egg-97590
04/02/2026, 10:35 AMtall-airline-16756
04/02/2026, 10:35 AM