🐸 Amphib is built on Hiring Agent by HackerRank — and we're making it better.

Architecture

Five stages. Each is independent, testable, and replaceable.

1. PDF → Markdown

pymupdf_rag.py and pdf.py turn PDF pages into Markdown using PyMuPDF. Headings, links, tables — everything survives.

2. Markdown → JSON

pdf.py sends each section (work, education, skills, etc.) to the LLM via Jinja templates in prompts/templates/. Results assemble into a typed JSONResume object.

3. GitHub enrichment

github.py finds the candidate's GitHub handle, fetches profile and repos, classifies projects, and asks the LLM to pick the 7 most meaningful ones.

4. Evaluation

evaluator.py scores across four axes — open source, personal projects, production experience, technical skills — with bonus marks, deductions, and cited evidence.

5. Output

score.py prints a readable summary. With DEVELOPMENT_MODE=True it also caches results and appends to resume_evaluations.csv.

Key modules

Module Role
models.py Pydantic schemas + LLM provider interfaces
llm_utils.py Provider init + response cleanup
transform.py Normalises LLM JSON to JSON Resume format
prompt.py Routes to the right prompt templates
prompts/ All Jinja templates for extraction + scoring
config.py Dev mode toggle (caching + CSV)