Summary
The open_source scoring category has the highest weight in the software_engineering_intern role (35/100 points), yet the pipeline has no mechanism to extract an "Open Source Contributions" section from the resume. This means resumes with dedicated OSS sections will always score poorly on the most impactful category, regardless of their actual contributions.
Steps to Reproduce
- Create a resume PDF with a clearly labeled "Open Source Contributions" section listing merged PRs to major repos (e.g., litellm, llama_index, instructor)
- Run the scoring pipeline:
python score.py ./resume/sample.pdf --role software_engineering_intern
- Observe that
open_source scores low with evidence stating "no direct contributions to external open source projects"
- Check the cached JSON (
cache/resumecache_*.json) — no OSS data is present
Root Cause
The bug spans three layers:
1. Extraction — pdf.py line 269
The section extraction list is hardcoded to 6 sections:
sections = ["basics", "work", "education", "skills", "projects", "awards"]
There is no "open_source" or "contributions" section. Any resume content that doesn't map to one of these 6 sections is silently discarded.
2. Schema — models.py line 193
The JSONResume model has no field for open source contributions:
class JSONResume(BaseModel):
basics, work, volunteer, education, awards, certificates,
publications, skills, languages, interests, references, projects
Even if extraction was added, there's no schema field to store the data.
3. Serialization — transform.py line 728
convert_json_resume_to_text() only serializes existing schema fields. Since there's no OSS field, the evaluator LLM never sees this data in its prompt.
Evidence
Raw PDF extraction (pymupdf4llm.to_markdown()) correctly extracts the section:
Open Source Contributions
– litellm (BerriAI, 50k⋆): Fixed the MCP semantic tool filter silently dropping native (non-MCP) tools...
– llama_index (run-llama, 50k⋆): Fixed a Bedrock streaming bug...
– instructor (567-labs, 13k⋆): Added an on_event callback...
But the cached resumecache_*.json contains zero OSS data. The text exists in the PDF — the pipeline just doesn't capture it.
Impact
open_source is worth 35/100 points — the single highest-weighted category
- Candidates with significant OSS contributions (merged PRs to major repos) are scored as if they have none
- The only way to score well on
open_source is through the GitHub API enrichment step, which itself depends on a working GITHUB_TOKEN and only checks the candidate's own repos — not their PRs to other projects
Suggested Fix
- Add an
"open_source" section to the extraction pipeline in pdf.py
- Add a corresponding Jinja template in
prompts/templates/
- Add an
open_source_contributions field to JSONResume in models.py
- Serialize the new field in
convert_json_resume_to_text() in transform.py
Alternatively, pass the raw PDF markdown text alongside the structured JSON to the evaluator, so non-schema sections aren't lost.
Environment
- Python 3.12
- Model:
gemini-2.5-flash
- OS: Windows 11
Summary
The
open_sourcescoring category has the highest weight in thesoftware_engineering_internrole (35/100 points), yet the pipeline has no mechanism to extract an "Open Source Contributions" section from the resume. This means resumes with dedicated OSS sections will always score poorly on the most impactful category, regardless of their actual contributions.Steps to Reproduce
open_sourcescores low with evidence stating "no direct contributions to external open source projects"cache/resumecache_*.json) — no OSS data is presentRoot Cause
The bug spans three layers:
1. Extraction —
pdf.pyline 269The section extraction list is hardcoded to 6 sections:
There is no
"open_source"or"contributions"section. Any resume content that doesn't map to one of these 6 sections is silently discarded.2. Schema —
models.pyline 193The
JSONResumemodel has no field for open source contributions:Even if extraction was added, there's no schema field to store the data.
3. Serialization —
transform.pyline 728convert_json_resume_to_text()only serializes existing schema fields. Since there's no OSS field, the evaluator LLM never sees this data in its prompt.Evidence
Raw PDF extraction (
pymupdf4llm.to_markdown()) correctly extracts the section:But the cached
resumecache_*.jsoncontains zero OSS data. The text exists in the PDF — the pipeline just doesn't capture it.Impact
open_sourceis worth 35/100 points — the single highest-weighted categoryopen_sourceis through the GitHub API enrichment step, which itself depends on a workingGITHUB_TOKENand only checks the candidate's own repos — not their PRs to other projectsSuggested Fix
"open_source"section to the extraction pipeline inpdf.pyprompts/templates/open_source_contributionsfield toJSONResumeinmodels.pyconvert_json_resume_to_text()intransform.pyAlternatively, pass the raw PDF markdown text alongside the structured JSON to the evaluator, so non-schema sections aren't lost.
Environment
gemini-2.5-flash