Output Format of the Hiring Agent Evaluation Report: JSON Schema and Usage Guide
The Hiring Agent produces a structured JSON object that conforms to the EvaluationData Pydantic model, containing four category scores, bonus points, deductions, key strengths, and areas for improvement.
The interviewstreet/hiring-agent repository automates technical resume screening using Large Language Models (LLMs). Understanding the output format of the Hiring Agent evaluation report is essential for integrating this tool into existing HR pipelines, analytics dashboards, or custom hiring workflows. The report follows a strict, type-safe schema defined in Pydantic models, ensuring consistent structure across all candidate assessments.
Understanding the EvaluationData Schema
The core output structure is defined in models.py within the EvaluationData class (lines 44-50). This Pydantic model enforces a standardized schema that the LLM populates during the evaluation process, providing both quantitative metrics and qualitative assessments.
Top-Level Structure
The JSON object contains five primary fields:
scores: An object containing four category assessmentsbonus_points: Total bonus points with a human-readable breakdowndeductions: Total deduction points with narrative reasonskey_strengths: A list of 1-5 candidate strengthsareas_for_improvement: A list of 1-5 suggested development areas
Category Score Breakdown
Each of the four evaluation categories uses a CategoryScore sub-model defined in models.py:
open_source: Contributions to open-source projectsself_projects: Personal and side projectsproduction: Production code experiencetechnical_skills: Technical competency demonstration
Every category includes three fields: score (numeric rating), max (maximum possible score), and evidence (supporting details extracted from the resume).
How the Evaluation Report Is Generated
In evaluator.py, the ResumeEvaluator class orchestrates the evaluation process. Lines 75-86 handle the transformation from raw LLM output to structured data:
- The LLM returns a JSON-encoded string
extract_json_from_response(fromllm_utils.py) parses the raw text- The JSON validates against the
EvaluationDataschema - Returns a populated
EvaluationDatainstance
Because the model inherits from Pydantic, you can serialize the output using model.json() for JSON strings or model.dict() for Python dictionaries.
Working with the Output Format
Serializing to JSON
To obtain a JSON string representation of the evaluation report:
from evaluator import ResumeEvaluator
evaluator = ResumeEvaluator()
evaluation = evaluator.evaluate_resume(resume_text)
json_report = evaluation.json()
print(json_report)
This produces a formatted JSON object:
{
"scores": {
"open_source": {"score": 8.5, "max": 10, "evidence": "..."},
"self_projects": {"score": 7.0, "max": 10, "evidence": "..."},
"production": {"score": 6.5, "max": 10, "evidence": "..."},
"technical_skills": {"score": 9.0, "max": 10, "evidence": "..."}
},
"bonus_points": {"total": 12.0, "breakdown": "..."},
"deductions": {"total": 3.0, "reasons": "..."},
"key_strengths": ["Strong problem-solving", "Effective communication"],
"areas_for_improvement": ["Depth of production experience", "Advanced tooling"]
}
Accessing Python Attributes
Access individual fields directly as Python attributes without parsing:
# Access specific category scores
open_source_score = evaluation.scores.open_source.score
max_possible = evaluation.scores.open_source.max
evidence_text = evaluation.scores.open_source.evidence
# Access bonus and deduction totals
bonus_total = evaluation.bonus_points.total
deduction_total = evaluation.deductions.total
reasons = evaluation.deductions.reasons
Converting to Dictionaries
For integration with data pipelines or persistent storage:
report_dict = evaluation.dict()
# Write to file for downstream processing
import json
with open("evaluation_report.json", "w") as f:
json.dump(report_dict, f, indent=2)
Summary
- The Hiring Agent evaluation report follows the
EvaluationDataPydantic schema defined inmodels.py(lines 44-50) - Output includes four categorized scores (
open_source,self_projects,production,technical_skills) with numeric values and evidence - Bonus points and deductions include both numeric totals and narrative explanations
- The format supports JSON serialization via
.json()and dictionary conversion via.dict() - Lists of strengths and improvements contain 1-5 items each, as implemented in
evaluator.py(lines 75-86)
Frequently Asked Questions
What data structure does the Hiring Agent return?
The Hiring Agent returns a Pydantic EvaluationData object that can be serialized to JSON or accessed as a Python class. This structure ensures type safety and includes nested models for scores, bonuses, and deductions, with validation enforced by the schema in models.py.
How are the evaluation scores categorized?
Scores are organized into four categories: open_source for contributions to public repositories, self_projects for personal work, production for professional experience, and technical_skills for general competencies. Each category contains a score, max value, and supporting evidence string.
Can I export the evaluation report to a file?
Yes. Use the .dict() method to convert the Pydantic model to a Python dictionary, then write it to a JSON file using the standard json module. Alternatively, use the .json() method to obtain a pre-formatted JSON string for direct file writing or API responses.
Where is the output format defined in the source code?
The schema is defined in models.py (lines 44-50) which specifies the EvaluationData class and its nested components like CategoryScore. The instantiation logic resides in evaluator.py (lines 75-86) where the LLM response transforms into the structured format using extract_json_from_response from llm_utils.py.
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 →