A modular AI system that automates Interview preparation workflows using specialized agents.
Streamlines Interviewer's background discovery, Company finding, roles insights, all contributing to a comprehensive prep guide, display on Streamlit dashboard and choice to edit and send to your own email via Inky bot service.
Explore the docs Β»
View Demo
Β·
Report Bugs
Β·
Request Features
Contributions, issues, and feature requests are welcome!
Maintained by: @Kathy331
Table of Contents
For more information please refer to the "docs" folder. Inside, there are flowcharts folders, agents folder, guidelines (standard for interview prep guide) folder, and pipeline folder, also include architecture markdown, etc. Which will all help you to understand more about the overall project architecture.
- GPT models for intelligent text processing and generation
- Named Entity Recognition for email parsing and resume analysis
- Machine learning utilities and text classification
- LLM application framework
- Core backend language (3.10+)
- Interview data storage with deduplication
- Data manipulation and analysis
- Web search and company/interviewer research intelligence
- Email fetching and sending automation
- Secure authentication and authorization
- Data validation and settings management
- Testing framework for unit tests and integration tests
- Retrieval-Augmented Generation for context enrichment
- OpenAI API cache optimization and output file management
Follow these steps to get a local copy up and running:
Ensure you have Python 3.10+
-
Clone the repo:
git clone https://github.com/Kathy331/resume-ai-agents.git cd resume-ai-agents -
Create and activate a virtual environment:
python3 -m venv .venv. #On Windows: python -m venv .venv source .venv/bin/activate #On Windows: .venv\Scripts\activate
-
Install Python dependencies:
pip install -r requirements.txt
make sure to also download spacy model before running workflow_runner.py
python -m spacy download en_core_web_sm
-
Copy .env.example to .env and fill in your:
- OpenAI API Key (create one here: https://platform.openai.com/api-keys)
- Tavily API Key (create one here: https://www.tavily.com/)
- Google API credentials JSON file (create one here: https://cloud.google.com/docs/authentication/getting-started) or contact any of the developers to get the secret file
cp .env.example .env
-
Set up bot email credentials:
- Follow the instructions in
setup_bot_email.pyto authenticate with Gmail API - Ensure you have the
google_oauthfolder with your credentials JSON file
- Follow the instructions in
-
Run the Streamlit app:
streamlit run ui/testui/app.py
-
Optional: Use Docker for containerized deployment: Download Docker for Mac or Windows: https://www.docker.com/
docker compose up --build
-
Testing: to run all test you could run:
pytest
but please be careful of token limits, to run a single test, run:
pytest tests/test_agents/test_keyword_extractor.py
there will be an
outputsfile generated for you to better see your test results
demo Once the app is running, you can:
- View the dashboard: Access the Streamlit interface in your browser (usually at
http://localhost:8501) - Set up your bot email: Authenticate with Gmail to enable sending emails directly from the app
- Generate prep guides: Use the provided buttons to trigger different agents:
- Monitor logs: Check the console output for agent activity and debugging information
- Send emails: Use the Inky bot service to send personalized application emails directly from the app, you can send all the generated prep guide to your own email or pick a specific email address to send
- View results: Check the generated prep guide on the dashboard, which includes company insights, role details, and personalized questions
- Edit and save: Modify the prep guide as needed and save it to your local machine or send it via email
- Download files: Download any generated files or reports for offline access
flowchart TB
subgraph EmailPipeline["π§ Email Pipeline"]
direction TB
InterviewFolder["π INTERVIEW_FOLDER<br>β’ Configurable email source<br>β’ Individual email processing"]
EmailClassifier["π¬ Email Classifier Agent<br>β’ Interview vs Personal vs Other<br>β’ OpenAI GPT-4o-mini"]
EntityExtractor["π― Entity Extractor Agent<br>β’ Company, Role, Interviewer<br>β’ Custom spaCy NER model"]
KeywordExtractor["π·οΈ Keyword Extractor Agent<br>β’ Company name extraction<br>β’ Safe filename generation"]
MemoryCheck{"π§ Memory Systems Check<br>β’ Interview Store lookup<br>β’ Duplicate prevention"}
end
subgraph DeepResearchPipeline["π¬ Deep Research Pipeline"]
direction TB
ResearchCoordinator["π€ Research Coordinator<br>β’ Multi-agent orchestration<br>β’ Parallel API calls"]
CompanyResearch["π’ Company Research Agent<br>β’ Tavily API integration<br>β’ Culture & news analysis"]
RoleResearch["πΌ Role Research Agent<br>β’ Market trends analysis<br>β’ Skill requirements"]
InterviewerResearch["π€ Interviewer Research Agent<br>β’ LinkedIn profile search<br>β’ Professional background"]
QualityReflection["π€ Research Quality Reflection<br>β’ Adequacy validation<br>β’ Additional research loops"]
end
subgraph PrepGuidePipeline["π Prep Guide Pipeline"]
direction TB
GuideGenerator["π Personalized Guide Generator<br>β’ OpenAI GPT-4o integration<br>β’ Research-driven content"]
TechnicalPrep["β‘ Technical Prep Section<br>β’ Role-specific competencies<br>β’ Sample questions"]
InterviewerInsights["π₯ Interviewer Background Analysis<br>β’ Professional insights<br>β’ Connection points"]
StrategicQuestions["β Strategic Questions Generator<br>β’ Personalized inquiries<br>β’ Research-backed"]
CitationEngine["π Citation Engine<br>β’ Source references<br>β’ Research credibility"]
end
subgraph CacheManagement["πΎ Cache Management Systems"]
direction TB
TavilyCache["π Tavily Cache<br>β’ API response caching<br>β’ Query optimization<br>β’ cache/tavily/ directory"]
OpenAICache["π€ OpenAI Cache<br>β’ Response caching<br>β’ Cost optimization<br>β’ .openai_cache/ directory"]
CacheManager["βοΈ Cache Manager CLI<br>β’ Status monitoring<br>β’ Cache clearing<br>β’ Optimization tools"]
end
subgraph MemorySystems["π§ Memory Systems"]
direction TB
InterviewStore["π Interview Store<br>β’ SQLite database<br>β’ Deduplication logic<br>β’ Status tracking"]
ResumeMemory["π Resume Memory<br>β’ User profile storage<br>β’ Skills & experience<br>β’ Context integration"]
SharedMemory["π Shared Memory Layer<br>β’ Cross-agent context<br>β’ State synchronization"]
end
subgraph WorkflowOrchestration["π― Workflow Orchestration"]
direction TB
MainWorkflow["π Interview Prep Workflow<br>β’ Individual email processing<br>β’ Terminal feedback<br>β’ workflows/interview_prep_workflow.py"]
WorkflowRunner["β‘ Workflow Runner<br>β’ Pipeline coordination<br>β’ Error handling<br>β’ workflows/workflow_runner.py"]
end
subgraph OutputManagement["π Output Management"]
direction TB
FileOutput["π Individual Company Files<br>β’ outputs/fullworkflow/<br>β’ [company_name].txt format<br>β’ Complete prep guides"]
TerminalFeedback["π¬ Real-time Terminal Output<br>β’ Processing progress<br>β’ Classification results<br>β’ Research status"]
end
%% Main workflow connections
MainWorkflow --> InterviewFolder
InterviewFolder --> EmailClassifier
EmailClassifier --> EntityExtractor
EntityExtractor --> KeywordExtractor
KeywordExtractor --> MemoryCheck
%% Memory check branching
MemoryCheck -->|"Already Processed"| TerminalFeedback
MemoryCheck -->|"New Interview"| ResearchCoordinator
%% Research pipeline flow
ResearchCoordinator --> CompanyResearch
ResearchCoordinator --> RoleResearch
ResearchCoordinator --> InterviewerResearch
CompanyResearch --> QualityReflection
RoleResearch --> QualityReflection
InterviewerResearch --> QualityReflection
%% Quality reflection branching
QualityReflection -->|"Sufficient"| GuideGenerator
QualityReflection -->|"Insufficient"| ResearchCoordinator
%% Prep guide pipeline flow
GuideGenerator --> TechnicalPrep
GuideGenerator --> InterviewerInsights
GuideGenerator --> StrategicQuestions
TechnicalPrep --> CitationEngine
InterviewerInsights --> CitationEngine
StrategicQuestions --> CitationEngine
CitationEngine --> FileOutput
%% Cache integration
CompanyResearch <--> TavilyCache
RoleResearch <--> TavilyCache
InterviewerResearch <--> TavilyCache
GuideGenerator <--> OpenAICache
TechnicalPrep <--> OpenAICache
InterviewerInsights <--> OpenAICache
StrategicQuestions <--> OpenAICache
%% Memory systems integration
MemoryCheck <--> InterviewStore
EntityExtractor <--> ResumeMemory
ResearchCoordinator <--> SharedMemory
GuideGenerator <--> SharedMemory
%% Cache management
CacheManager --> TavilyCache
CacheManager --> OpenAICache
%% Workflow coordination
WorkflowRunner --> MainWorkflow
MainWorkflow --> TerminalFeedback
FileOutput --> TerminalFeedback
%% Non-interview email handling
EmailClassifier -->|"Personal/Other"| TerminalFeedback
%% Styling
classDef emailStyle fill:#e3f2fd,stroke:#1976d2,stroke-width:2px,color:#000000
classDef researchStyle fill:#f1f8e9,stroke:#558b2f,stroke-width:2px,color:#000000
classDef prepStyle fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px,color:#000000
classDef cacheStyle fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#000000
classDef memoryStyle fill:#fce4ec,stroke:#c2185b,stroke-width:2px,color:#000000
classDef workflowStyle fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px,color:#000000
classDef outputStyle fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#000000
class InterviewFolder,EmailClassifier,EntityExtractor,KeywordExtractor,MemoryCheck emailStyle
class ResearchCoordinator,CompanyResearch,RoleResearch,InterviewerResearch,QualityReflection researchStyle
class GuideGenerator,TechnicalPrep,InterviewerInsights,StrategicQuestions,CitationEngine prepStyle
class TavilyCache,OpenAICache,CacheManager cacheStyle
class InterviewStore,ResumeMemory,SharedMemory memoryStyle
class MainWorkflow,WorkflowRunner workflowStyle
class FileOutput,TerminalFeedback outputStyle
- Email Pipeline: Classification, entity extraction, memory management
- Deep Research Pipeline: Multi-agent research with Tavily API integration
- Prep Guide Pipeline: Personalized guide generation with citations
- Tavily Cache: Research query caching for cost optimization (
cache/tavily/) - OpenAI Cache: Response caching for guide generation (
.openai_cache/) - Cache Manager CLI: Centralized cache monitoring and management (
workflows/cache_manager.py)
- Interview Store: SQLite-based deduplication and status tracking
- Shared Memory: Cross-agent context synchronization
- Tavily API: Web search and company intelligence (
api/run_tavily.py) - OpenAI API: Guide generation and content creation (
shared/openai_cache.py)
- Interview Prep Workflow:
workflows/interview_prep_workflow.py - Cache Manager:
workflows/cache_manager.py --status - Workflow Runner:
workflows/workflow_runner.py
Kathy Chen - @Linkedin - email: kathychen331@outlook.com
Grace Chen - @Linkedin - email: chenpgrace1@gmail.com
Julianna Bracamonte - @Linkedin - email: bracamontejulianna@gmail.com
- Dandilyonn SEEDS Program
- Streamlit for their amazing framework
- OpenAI for language models powering the agents
- Tavily for intelligent web search APIs