vadirajkrishna Codex commited on
Commit
df470ef
·
unverified ·
1 Parent(s): 9662a80

Improve interview coach live flow

Browse files

Co-authored-by: Codex <codex@openai.com>

Files changed (6) hide show
  1. README.md +2 -0
  2. app.py +8 -0
  3. article.md +4 -0
  4. config.py +4 -0
  5. fine-tune/lora-finetune.py +4 -0
  6. requirements.txt +14 -0
README.md CHANGED
@@ -12,6 +12,8 @@ pinned: false
12
 
13
  Interview Coach is a local-first assistant for live technical interviews. It listens to noisy interview audio, extracts the actual Data Science, ML, AI, or System Design question, and shows a compact coaching card with important pointers while the candidate is answering.
14
 
 
 
15
  ## Why It Matters
16
 
17
  The goal is not to handhold the candidate through the interview or generate a scripted answer. The goal is to give timely, high-signal reminders so the candidate can cover the important parts of their own answer naturally.
 
12
 
13
  Interview Coach is a local-first assistant for live technical interviews. It listens to noisy interview audio, extracts the actual Data Science, ML, AI, or System Design question, and shows a compact coaching card with important pointers while the candidate is answering.
14
 
15
+ Development note: the live transcription flow, coaching-card timing, and transcript extraction loop were iterated with Codex assistance.
16
+
17
  ## Why It Matters
18
 
19
  The goal is not to handhold the candidate through the interview or generate a scripted answer. The goal is to give timely, high-signal reminders so the candidate can cover the important parts of their own answer naturally.
app.py CHANGED
@@ -12,6 +12,7 @@ import numpy as np
12
  from agents.evaluator import EvaluationAgent
13
  from agents.hf_chat import HuggingFaceChatModel
14
  from agents.topic_pattern import TopicPatternAgent
 
15
  from config import (
16
  APP_HOST,
17
  APP_PORT,
@@ -21,6 +22,9 @@ from config import (
21
  STREAMING_WHISPER_MODEL,
22
  TOPIC_PATTERN_MODEL,
23
  )
 
 
 
24
  from db.queries import (
25
  add_evaluation,
26
  append_exchange_answer,
@@ -418,7 +422,11 @@ async def classify_topic_and_steps(question: str) -> dict[str, Any]:
418
  "model_unavailable": True,
419
  "message": (
420
  "Topic/steps model unavailable. Expected Hugging Face model "
 
421
  f"{TOPIC_PATTERN_MODEL}.{suffix}"
 
 
 
422
  ),
423
  }
424
 
 
12
  from agents.evaluator import EvaluationAgent
13
  from agents.hf_chat import HuggingFaceChatModel
14
  from agents.topic_pattern import TopicPatternAgent
15
+ <<<<<<< HEAD
16
  from config import (
17
  APP_HOST,
18
  APP_PORT,
 
22
  STREAMING_WHISPER_MODEL,
23
  TOPIC_PATTERN_MODEL,
24
  )
25
+ =======
26
+ from config import APP_HOST, APP_PORT, BASE_DIR, GENERAL_LLM_MODEL, HF_SPACE_MODE, STREAMING_WHISPER_MODEL
27
+ >>>>>>> c0f39ad (initial commit - InterviewCopilotLocal)
28
  from db.queries import (
29
  add_evaluation,
30
  append_exchange_answer,
 
422
  "model_unavailable": True,
423
  "message": (
424
  "Topic/steps model unavailable. Expected Hugging Face model "
425
+ <<<<<<< HEAD
426
  f"{TOPIC_PATTERN_MODEL}.{suffix}"
427
+ =======
428
+ f"vadirajkrishna/interview-coach-3b.{suffix}"
429
+ >>>>>>> c0f39ad (initial commit - InterviewCopilotLocal)
430
  ),
431
  }
432
 
article.md CHANGED
@@ -39,7 +39,11 @@ The project uses a multi-model approach. Instead of forcing one model to handle
39
  | --- | ---: | --- |
40
  | `mlx-community/whisper-tiny` | ~39M parameters | Fast streaming transcription for live audio |
41
  | `mlx-community/whisper-small-mlx` | ~244M parameters | Higher-quality local transcription when needed |
 
42
  | `build-small-hackathon/interview-coach-3b` | 3B base model plus LoRA adapter | Fine-tuned topic and pattern detection |
 
 
 
43
  | `Qwen/Qwen2.5-3B-Instruct` | ~3B parameters | General reasoning, coaching hint generation, transcript cleanup, and evaluation |
44
  | SQLite | Local database | Session, exchange, and evaluation storage |
45
 
 
39
  | --- | ---: | --- |
40
  | `mlx-community/whisper-tiny` | ~39M parameters | Fast streaming transcription for live audio |
41
  | `mlx-community/whisper-small-mlx` | ~244M parameters | Higher-quality local transcription when needed |
42
+ <<<<<<< HEAD
43
  | `build-small-hackathon/interview-coach-3b` | 3B base model plus LoRA adapter | Fine-tuned topic and pattern detection |
44
+ =======
45
+ | `vadirajkrishna/interview-coach-3b` | 3B base model plus LoRA adapter | Fine-tuned topic and pattern detection |
46
+ >>>>>>> c0f39ad (initial commit - InterviewCopilotLocal)
47
  | `Qwen/Qwen2.5-3B-Instruct` | ~3B parameters | General reasoning, coaching hint generation, transcript cleanup, and evaluation |
48
  | SQLite | Local database | Session, exchange, and evaluation storage |
49
 
config.py CHANGED
@@ -14,7 +14,11 @@ STT_BACKEND = os.environ.get("INTERVIEW_COACH_STT_BACKEND", "transformers" if HF
14
  HF_WHISPER_MODEL = os.environ.get("INTERVIEW_COACH_HF_WHISPER_MODEL", "openai/whisper-tiny")
15
  APP_HOST = os.environ.get("INTERVIEW_COACH_HOST", "0.0.0.0" if HF_SPACE_MODE else "127.0.0.1")
16
  APP_PORT = 7860
 
17
  TOPIC_PATTERN_MODEL = os.environ.get("INTERVIEW_COACH_TOPIC_PATTERN_MODEL", "build-small-hackathon/interview-coach-3b")
 
 
 
18
  TOPIC_PATTERN_BASE_MODEL = os.environ.get("INTERVIEW_COACH_TOPIC_PATTERN_BASE_MODEL", GENERAL_LLM_MODEL)
19
  USE_TOPIC_PATTERN_MODEL = os.environ.get("INTERVIEW_COACH_USE_TOPIC_PATTERN_MODEL", "1").strip().lower() not in {
20
  "0",
 
14
  HF_WHISPER_MODEL = os.environ.get("INTERVIEW_COACH_HF_WHISPER_MODEL", "openai/whisper-tiny")
15
  APP_HOST = os.environ.get("INTERVIEW_COACH_HOST", "0.0.0.0" if HF_SPACE_MODE else "127.0.0.1")
16
  APP_PORT = 7860
17
+ <<<<<<< HEAD
18
  TOPIC_PATTERN_MODEL = os.environ.get("INTERVIEW_COACH_TOPIC_PATTERN_MODEL", "build-small-hackathon/interview-coach-3b")
19
+ =======
20
+ TOPIC_PATTERN_MODEL = os.environ.get("INTERVIEW_COACH_TOPIC_PATTERN_MODEL", "vadirajkrishna/interview-coach-3b")
21
+ >>>>>>> c0f39ad (initial commit - InterviewCopilotLocal)
22
  TOPIC_PATTERN_BASE_MODEL = os.environ.get("INTERVIEW_COACH_TOPIC_PATTERN_BASE_MODEL", GENERAL_LLM_MODEL)
23
  USE_TOPIC_PATTERN_MODEL = os.environ.get("INTERVIEW_COACH_USE_TOPIC_PATTERN_MODEL", "1").strip().lower() not in {
24
  "0",
fine-tune/lora-finetune.py CHANGED
@@ -41,7 +41,11 @@ import modal
41
  SCRIPT_DIR = Path(__file__).resolve().parent
42
 
43
  # Your Hugging Face username (https://huggingface.co/settings/profile)
 
44
  HF_USERNAME = "build-small-hackathon"
 
 
 
45
 
46
  # Name for the fine-tuned model repo on Hugging Face
47
  HF_MODEL_NAME = "interview-coach-3b"
 
41
  SCRIPT_DIR = Path(__file__).resolve().parent
42
 
43
  # Your Hugging Face username (https://huggingface.co/settings/profile)
44
+ <<<<<<< HEAD
45
  HF_USERNAME = "build-small-hackathon"
46
+ =======
47
+ HF_USERNAME = "vadirajkrishna"
48
+ >>>>>>> c0f39ad (initial commit - InterviewCopilotLocal)
49
 
50
  # Name for the fine-tuned model repo on Hugging Face
51
  HF_MODEL_NAME = "interview-coach-3b"
requirements.txt CHANGED
@@ -1,3 +1,4 @@
 
1
  accelerate>=1.9.0
2
  aiosqlite>=0.20.0
3
  gradio>=6.16.0
@@ -6,9 +7,22 @@ imageio-ffmpeg>=0.5.1
6
  langgraph>=0.2.0
7
  mlx-whisper>=0.4.0; platform_system == "Darwin"
8
  numpy>=1.26.0
 
 
 
 
 
 
 
 
 
9
  peft>=0.16.0
10
  pyyaml>=6.0.2
11
  scipy>=1.11.0
12
  sounddevice>=0.5.1; platform_system == "Darwin"
 
13
  torch>=2.4.0
 
 
 
14
  transformers>=4.54.0
 
1
+ <<<<<<< HEAD
2
  accelerate>=1.9.0
3
  aiosqlite>=0.20.0
4
  gradio>=6.16.0
 
7
  langgraph>=0.2.0
8
  mlx-whisper>=0.4.0; platform_system == "Darwin"
9
  numpy>=1.26.0
10
+ =======
11
+ aiosqlite>=0.20.0
12
+ accelerate>=1.9.0
13
+ gradio>=4.44.0
14
+ imageio-ffmpeg>=0.5.1
15
+ langgraph>=0.2.0
16
+ mlx-whisper>=0.4.0; platform_system == "Darwin"
17
+ modal>=1.1.0
18
+ >>>>>>> c0f39ad (initial commit - InterviewCopilotLocal)
19
  peft>=0.16.0
20
  pyyaml>=6.0.2
21
  scipy>=1.11.0
22
  sounddevice>=0.5.1; platform_system == "Darwin"
23
+ <<<<<<< HEAD
24
  torch>=2.4.0
25
+ =======
26
+ torch>=2.3.0
27
+ >>>>>>> c0f39ad (initial commit - InterviewCopilotLocal)
28
  transformers>=4.54.0