Spaces:
Sleeping
Sleeping
File size: 1,972 Bytes
fb03edc 324d83a 1aaf3fc a49fb5a 8e8067f e12b285 1aaf3fc e12b285 92c510e e12b285 a49fb5a e12b285 3d8833c 8e8067f a49fb5a 1aaf3fc fb03edc e12b285 a49fb5a e12b285 1aaf3fc e12b285 1aaf3fc 1d5b387 a49fb5a 1aaf3fc a49fb5a 8e8067f a49fb5a 1aaf3fc 8e8067f |
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 |
from tests.candidate import complete_interview
from tests.grader import grade
from concurrent.futures import ThreadPoolExecutor
import random
import logging
from typing import List
def complete_and_grade_interview(interview_type: str, mode: str = "normal", min_score=0.3) -> float:
"""
Complete an interview and return the overall score.
:param interview_type: Type of the interview.
:param mode: Mode of the interview ("normal", "empty", "gibberish", "repeat").
:return: Overall score of the interview.
"""
file_path, _ = complete_interview(interview_type, "test", model="gpt-4o-mini", mode=mode)
feedback = grade(file_path, model="gpt-4o")
logging.info(f"Interview type: {interview_type}, mode: {mode}, score: {feedback['overall_score']}")
assert feedback["overall_score"] > min_score
return feedback["overall_score"]
def test_complete_interview() -> None:
"""
Test the complete interview process for various interview types, including edge cases.
"""
interview_types = ["ml_design", "math", "ml_theory", "system_design", "sql", "coding"]
scores: List[float] = []
with ThreadPoolExecutor(max_workers=5) as executor:
# Test normal interviews
futures = [executor.submit(complete_and_grade_interview, it) for it in interview_types]
# Test edge cases: empty, gibberish, repeat for one random interview type each
futures.append(executor.submit(complete_and_grade_interview, random.choice(interview_types), mode="empty"))
futures.append(executor.submit(complete_and_grade_interview, random.choice(interview_types), mode="gibberish"))
futures.append(executor.submit(complete_and_grade_interview, random.choice(interview_types), mode="repeat"))
for future in futures:
score = future.result()
scores.append(score)
logging.info(f"Average score: {sum(scores) / len(scores)}")
assert sum(scores) / len(scores) > 0.7
|