Download interview_env/tasks.py from doublechocolatecup/ai-interview-simulator: direct link, hf CLI and curl.
- Browser
- Download file 15.5 kB
-
https://huggingface.co/spaces/doublechocolatecup/ai-interview-simulator/resolve/main/interview_env/tasks.py
- Command line
-
hf download hf://spaces/doublechocolatecup/ai-interview-simulator/interview_env/tasks.py
-
curl -L -o tasks.py https://huggingface.co/spaces/doublechocolatecup/ai-interview-simulator/resolve/main/interview_env/tasks.py
15.5 kB
| """ | |
| Task definitions for the AI Interview Simulator. | |
| Three tasks with increasing difficulty: | |
| Task 1 β junior_behavioral (EASY) | |
| Task 2 β mid_technical (MEDIUM) | |
| Task 3 β senior_system_design (HARD) | |
| """ | |
| from __future__ import annotations | |
| from dataclasses import dataclass, field | |
| from typing import List | |
| from interview_env.models import DifficultyLevel, InterviewStage | |
| class InterviewQuestion: | |
| text: str | |
| stage: InterviewStage | |
| key_topics: List[str] # expected themes / keywords | |
| ideal_length: int = 150 # target word count (approximate) | |
| weight: float = 1.0 # relative importance within the task | |
| class TaskDefinition: | |
| task_id: str | |
| name: str | |
| difficulty: DifficultyLevel | |
| job_title: str | |
| company_context: str | |
| questions: List[InterviewQuestion] | |
| description: str | |
| def total_questions(self) -> int: | |
| return len(self.questions) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # TASK 1 β Junior Behavioral Interview (EASY) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TASK_JUNIOR_BEHAVIORAL = TaskDefinition( | |
| task_id = "junior_behavioral", | |
| name = "Junior Software Engineer β Behavioral Interview", | |
| difficulty = DifficultyLevel.EASY, | |
| job_title = "Junior Software Engineer", | |
| company_context = ( | |
| "TechStart Inc. is a Series-A startup building developer tools. " | |
| "The team is 20 engineers, culture is collaborative, and they value " | |
| "learning, ownership, and clear communication." | |
| ), | |
| description = ( | |
| "Entry-level behavioral interview with 4 questions. " | |
| "Answers are evaluated on the STAR framework (Situation, Task, " | |
| "Action, Result), relevance, and professionalism. " | |
| "Good answers are 100β200 words with concrete examples." | |
| ), | |
| questions = [ | |
| InterviewQuestion( | |
| text = ( | |
| "Tell me about yourself and why you're interested in " | |
| "this Junior Software Engineer role at TechStart." | |
| ), | |
| stage = InterviewStage.INTRO, | |
| key_topics = [ | |
| "background", "education", "experience", "motivation", | |
| "interest", "skills", "goal", "passionate", "learn", | |
| ], | |
| ideal_length = 120, | |
| weight = 0.8, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "Describe a time when you had to debug a challenging problem. " | |
| "What was the situation, what did you try, and what did you learn?" | |
| ), | |
| stage = InterviewStage.BEHAVIORAL, | |
| key_topics = [ | |
| "debug", "problem", "error", "solution", "fixed", "learned", | |
| "log", "test", "stack trace", "isolate", "reproduce", | |
| "situation", "result", "action", | |
| ], | |
| ideal_length = 180, | |
| weight = 1.2, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "Tell me about a project you're proud of. " | |
| "What did you build, what was your role, and what impact did it have?" | |
| ), | |
| stage = InterviewStage.BEHAVIORAL, | |
| key_topics = [ | |
| "project", "built", "developed", "designed", "team", | |
| "role", "impact", "users", "result", "outcome", | |
| "feature", "deployed", "shipped", | |
| ], | |
| ideal_length = 180, | |
| weight = 1.0, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "How do you handle feedback on your code during a code review? " | |
| "Give a specific example." | |
| ), | |
| stage = InterviewStage.BEHAVIORAL, | |
| key_topics = [ | |
| "feedback", "code review", "comment", "improve", "change", | |
| "open", "learn", "collaborate", "understand", "appreciate", | |
| "review", "PR", "pull request", | |
| ], | |
| ideal_length = 150, | |
| weight = 1.0, | |
| ), | |
| ], | |
| ) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # TASK 2 β Mid-Level Full-Stack Technical Interview (MEDIUM) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TASK_MID_TECHNICAL = TaskDefinition( | |
| task_id = "mid_technical", | |
| name = "Mid-Level Full-Stack Engineer β Technical Interview", | |
| difficulty = DifficultyLevel.MEDIUM, | |
| job_title = "Mid-Level Full-Stack Engineer", | |
| company_context = ( | |
| "FinFlow Ltd. builds B2B fintech SaaS used by 500+ companies. " | |
| "Stack: React, Node.js, PostgreSQL, AWS. " | |
| "The team ships weekly and values reliability, code quality, and velocity." | |
| ), | |
| description = ( | |
| "5-question interview mixing technical knowledge and behavioral depth. " | |
| "Technical questions expect accurate, specific answers with trade-offs. " | |
| "Behavioral questions require the STAR method with measurable results. " | |
| "Good answers are 150β250 words with concrete examples and numbers." | |
| ), | |
| questions = [ | |
| InterviewQuestion( | |
| text = ( | |
| "Explain the difference between REST and GraphQL APIs. " | |
| "When would you choose one over the other?" | |
| ), | |
| stage = InterviewStage.TECHNICAL, | |
| key_topics = [ | |
| "rest", "graphql", "endpoint", "query", "schema", | |
| "over-fetching", "under-fetching", "flexibility", | |
| "mutation", "http", "stateless", "client", "tradeoff", | |
| ], | |
| ideal_length = 200, | |
| weight = 1.0, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "How does the JavaScript event loop work? " | |
| "Explain the call stack, task queue, and microtask queue." | |
| ), | |
| stage = InterviewStage.TECHNICAL, | |
| key_topics = [ | |
| "event loop", "call stack", "task queue", "microtask", | |
| "asynchronous", "promise", "setTimeout", "blocking", | |
| "non-blocking", "single thread", "callback", "execution", | |
| ], | |
| ideal_length = 200, | |
| weight = 1.2, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "Describe your approach to database query optimisation. " | |
| "Walk me through how you'd diagnose and fix a slow SQL query." | |
| ), | |
| stage = InterviewStage.TECHNICAL, | |
| key_topics = [ | |
| "index", "explain", "query plan", "N+1", "join", | |
| "slow query log", "cache", "pagination", "analyse", | |
| "execution plan", "select", "table scan", "optimise", | |
| ], | |
| ideal_length = 220, | |
| weight = 1.2, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "Tell me about a time you had to meet a tight deadline " | |
| "without sacrificing quality. What trade-offs did you make?" | |
| ), | |
| stage = InterviewStage.BEHAVIORAL, | |
| key_topics = [ | |
| "deadline", "priority", "scope", "tradeoff", "quality", | |
| "technical debt", "stakeholder", "communicate", "plan", | |
| "shipped", "delivered", "result", | |
| ], | |
| ideal_length = 180, | |
| weight = 1.0, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "How do you ensure your front-end React components remain " | |
| "performant as the application scales?" | |
| ), | |
| stage = InterviewStage.TECHNICAL, | |
| key_topics = [ | |
| "memo", "useMemo", "useCallback", "virtualisation", | |
| "lazy load", "code split", "re-render", "profiler", | |
| "bundle size", "lighthouse", "key", "state", "performance", | |
| ], | |
| ideal_length = 200, | |
| weight = 0.9, | |
| ), | |
| ], | |
| ) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # TASK 3 β Senior Engineer System Design + Leadership (HARD) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TASK_SENIOR_SYSTEM_DESIGN = TaskDefinition( | |
| task_id = "senior_system_design", | |
| name = "Senior Software Engineer β System Design & Leadership", | |
| difficulty = DifficultyLevel.HARD, | |
| job_title = "Senior Software Engineer", | |
| company_context = ( | |
| "ScaleUp Corp is a Series-C e-commerce platform processing 50 million " | |
| "orders per year. Stack: microservices, Kubernetes, Kafka, " | |
| "PostgreSQL, Redis, AWS. " | |
| "Engineers are expected to own systems end-to-end, mentor juniors, " | |
| "and drive architectural decisions." | |
| ), | |
| description = ( | |
| "6-question interview covering system design, distributed systems, " | |
| "leadership, and conflict resolution. " | |
| "System design answers must include scalability, fault tolerance, " | |
| "and trade-offs. Leadership answers must show influence and impact. " | |
| "Good answers are 200β350 words with specifics, numbers, and alternatives considered." | |
| ), | |
| questions = [ | |
| InterviewQuestion( | |
| text = ( | |
| "Design a distributed rate limiter that can handle " | |
| "100,000 requests per second across multiple servers. " | |
| "Walk me through your architecture, storage choice, and failure modes." | |
| ), | |
| stage = InterviewStage.TECHNICAL, | |
| key_topics = [ | |
| "redis", "token bucket", "sliding window", "fixed window", | |
| "distributed", "race condition", "atomic", "lua script", | |
| "consistency", "availability", "latency", "failure", | |
| "fallback", "partition", "replication", "cache", | |
| ], | |
| ideal_length = 300, | |
| weight = 1.5, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "How would you design the order processing system for " | |
| "an e-commerce platform that must guarantee no orders are lost, " | |
| "even if services go down? Focus on event-driven design." | |
| ), | |
| stage = InterviewStage.TECHNICAL, | |
| key_topics = [ | |
| "kafka", "message queue", "idempotent", "outbox pattern", | |
| "saga", "event sourcing", "retry", "dead letter queue", | |
| "exactly once", "at least once", "transaction", "durability", | |
| "consumer group", "offset", "ack", | |
| ], | |
| ideal_length = 300, | |
| weight = 1.5, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "Tell me about the most technically complex system you've " | |
| "designed or owned. What were the biggest risks, and how did you " | |
| "mitigate them in production?" | |
| ), | |
| stage = InterviewStage.BEHAVIORAL, | |
| key_topics = [ | |
| "designed", "owned", "risk", "mitigation", "production", | |
| "monitoring", "alert", "rollback", "canary", "feature flag", | |
| "incident", "postmortem", "scale", "bottleneck", | |
| ], | |
| ideal_length = 280, | |
| weight = 1.3, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "Describe a situation where you disagreed with your tech lead " | |
| "or manager on a technical decision. How did you handle it, " | |
| "and what was the outcome?" | |
| ), | |
| stage = InterviewStage.SITUATIONAL, | |
| key_topics = [ | |
| "disagree", "decision", "data", "evidence", "compromise", | |
| "respected", "escalate", "influence", "RFC", "proposal", | |
| "outcome", "learned", "relationship", "align", | |
| ], | |
| ideal_length = 220, | |
| weight = 1.1, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "How do you approach mentoring junior engineers? " | |
| "Give a concrete example of how you helped someone grow significantly." | |
| ), | |
| stage = InterviewStage.BEHAVIORAL, | |
| key_topics = [ | |
| "mentor", "junior", "growth", "feedback", "pair programming", | |
| "review", "goal", "1:1", "autonomy", "confidence", | |
| "promoted", "improved", "impact", "coaching", | |
| ], | |
| ideal_length = 220, | |
| weight = 1.0, | |
| ), | |
| InterviewQuestion( | |
| text = ( | |
| "ScaleUp's checkout latency has increased by 300ms over the last " | |
| "month after a Kubernetes cluster upgrade. Walk me through exactly " | |
| "how you would diagnose and resolve this in production." | |
| ), | |
| stage = InterviewStage.TECHNICAL, | |
| key_topics = [ | |
| "apm", "tracing", "jaeger", "datadog", "prometheus", | |
| "metrics", "latency", "p99", "kubernetes", "resource limit", | |
| "cpu", "memory", "network", "service mesh", "ingress", | |
| "rollback", "profiling", "flamegraph", "baseline", | |
| ], | |
| ideal_length = 300, | |
| weight = 1.5, | |
| ), | |
| ], | |
| ) | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Registry | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TASK_REGISTRY: dict[str, TaskDefinition] = { | |
| TASK_JUNIOR_BEHAVIORAL.task_id: TASK_JUNIOR_BEHAVIORAL, | |
| TASK_MID_TECHNICAL.task_id: TASK_MID_TECHNICAL, | |
| TASK_SENIOR_SYSTEM_DESIGN.task_id: TASK_SENIOR_SYSTEM_DESIGN, | |
| } | |
| def get_task(task_id: str) -> TaskDefinition: | |
| if task_id not in TASK_REGISTRY: | |
| raise ValueError( | |
| f"Unknown task_id '{task_id}'. " | |
| f"Available: {list(TASK_REGISTRY.keys())}" | |
| ) | |
| return TASK_REGISTRY[task_id] | |