What Kind of Data Does the Hiring-Agent Store? A Complete Technical Breakdown
The interviewstreet/hiring-agent pipeline stores structured resume extracts as JSON caches, GitHub profile data as separate JSON files, and final evaluation scores as CSV rows, while processing raw PDFs only in memory.
The hiring-agent repository by InterviewStreet automates technical candidate evaluation by processing resume PDFs and enriching them with GitHub activity signals. If you are investigating what kind of data does hiring-agent store during this pipeline, the system persists three distinct categories of artifacts: parsed resume structures, cached API responses, and fairness-aware scoring results. These storage mechanisms enable fast repeatable runs and auditability while minimizing redundant LLM and GitHub API calls.
Resume Data Artifacts: From PDF to Structured JSON
Raw PDF Conversion to Markdown
The data pipeline begins in pymupdf_rag.py, which reads PDF pages using PyMuPDF and converts them to a Markdown-style text representation. This raw content remains in memory to serve as the basis for section parsing, but the system does not persist the original PDF or its raw text extract to disk.
Structured JSONResume Objects
The pdf.py module invokes an LLM for each resume section and assembles a JSONResume object defined in models.py. When DEVELOPMENT_MODE=True, the system serializes this structured data to cache/resumecache_<basename>.json as implemented in score.py (lines 215-260). This caching strategy allows reuse of extraction results without reprocessing the PDF through expensive LLM calls.
# 1️⃣ Save extracted resume JSON to cache
cache_filename = f"cache/resumecache_{os.path.basename(pdf_path).replace('.pdf', '')}.json"
if DEVELOPMENT_MODE:
os.makedirs(os.path.dirname(cache_filename), exist_ok=True)
Path(cache_filename).write_text(json.dumps(resume_dict, indent=2))
GitHub Profile and Repository Caching
The github.py module extracts candidate usernames and fetches user profiles and repositories via the GitHub API. To limit API usage and speed up repeated evaluations, responses are cached as JSON in cache/githubcache_<basename>.json (or cache/gh_githubcache_… .json) when DEVELOPMENT_MODE=True, as defined in github.py (lines 18-40).
# 2️⃣ Cache GitHub API responses
def _create_cache_filename(api_url: str, params: dict = None) -> str:
# builds a deterministic filename under the cache directory
…
cache_filename = _create_cache_filename(api_url, params)
if DEVELOPMENT_MODE and os.path.exists(cache_filename):
cached_data = json.loads(Path(cache_filename).read_text(encoding="utf-8"))
else:
# fetch from GitHub, then cache
Path(cache_filename).write_text(json.dumps(data, indent=2))
Evaluation Scores and Evidence Storage
The evaluator.py module runs a fairness-aware scoring routine, producing category scores, bonus points, deductions, and explanatory evidence. According to score.py (lines 295-320), the system appends these results as a row to resume_evaluations.csv when operating in development mode, generating both human-readable reports and machine-readable data for further analysis.
# 3️⃣ Append evaluation results to CSV (development mode)
if DEVELOPMENT_MODE:
csv_path = "resume_evaluations.csv"
header = ["candidate", "open_source", "self_projects", "production", "technical_skills", "bonus", "deductions"]
write_header = not os.path.exists(csv_path)
with open(csv_path, "a", newline="") as f:
writer = csv.writer(f)
if write_header:
writer.writerow(header)
writer.writerow([candidate_name, *scores, bonus, deductions])
Intermediate Data Models and Validation
While transform.py normalizes loose LLM JSON into the strict JSON-Resume format and models.py holds Pydantic schemas for data structures, these intermediate artifacts remain as in-memory objects only. They influence the final JSON and CSV outputs and enforce data consistency across the pipeline, but they are not persisted to disk independently.
Summary
- Structured resume data is stored as JSON files in the
cache/directory, specificallyresumecache_<basename>.json, enabling reuse of expensive LLM extraction results. - GitHub API responses are cached as separate JSON files to avoid rate limiting and accelerate repeated candidate evaluations.
- Final evaluation scores are appended to
resume_evaluations.csvfor auditability and downstream analysis. - Raw PDF content is processed in memory only and never persisted to disk, ensuring the system retains only extracted insights and quantitative scores.
Frequently Asked Questions
Where does hiring-agent store cached resume data?
The system stores cached resume data in cache/resumecache_<basename>.json files within the project root, generated by the logic in score.py (lines 215-260) when DEVELOPMENT_MODE is enabled. These JSON files contain the complete structured representation of the parsed resume sections, allowing the pipeline to skip LLM processing on subsequent runs.
What format does the hiring-agent use for GitHub data storage?
GitHub profile and repository data are stored as JSON files in the cache/ directory, typically named githubcache_<basename>.json or gh_githubcache_...json. The github.py module (lines 18-40) implements this caching strategy to store raw API responses and avoid redundant network requests during repeated evaluations of the same candidate.
How does the system persist final evaluation results?
Final evaluation results are persisted as rows in a CSV file named resume_evaluations.csv. According to score.py lines 295-320, the system appends candidate scores, bonus points, and deductions to this file during development mode, creating a machine-readable audit trail of all fairness-aware scoring decisions suitable for further HR analysis.
Does hiring-agent store the original PDF files?
No, the hiring-agent does not persist the original PDF files to disk. The pymupdf_rag.py module converts PDFs to Markdown-like text in memory only, and the pipeline works with extracted structured data from that point forward. Only the processed JSON extracts, cached GitHub data, and evaluation CSV scores are stored persistently.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →