Scale-aware HR assessment app for consultants. Submit pasted text, URLs, and files; get evidence-grounded rubric findings, stage/size guidance, and an HR assessment report aligned to template structure.
- Runtime is now profile-first using one tuning file:
tuning/profile.yaml. - Deprecated pack-era runtime paths were pruned; the main pipeline is profile-first only.
- Snapshot extraction is now evidence-first (not full corpus prompting).
- URL crawl prioritization is stricter to reduce irrelevant/niche pages.
- Stage inference now supports both company size bands and funding stage signals.
- Profile guidance supports stage-based HR structure recommendations, practices, and risks.
- CSV checklist inputs are supported as first-class ingestion sources.
app/main.pyCLI entry (run,serve)app/web/server.pyFastAPI serverapp/pipeline.pyshared pipelineapp/logic/evidence_collector.pyunified retrieval/evidence passapp/logic/profile_evaluator.pyrubric findings laneapp/logic/discovery.pyadditional observations laneapp/logic/stage_guidance.pystage-based recommendation laneapp/logic/scorecard.pymaturity/impact scorecard lanetuning/profile.yamlprimary tuning fileapp/schemas/profile_schema.jsonprofile schemadata/input_requests/saved web requestsout/generated outputs
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -e '.[dev]'OPENAI_API_KEYOPENAI_MODELOPENAI_TIMEOUT_SECONDSHR_REPORT_PROFILE(default:tuning/profile.yaml)HR_REPORT_OUTPUT_DIR(default:out)HR_REPORT_INPUT_STORE(default:data/input_requests)- Discovery synthesis controls:
HR_REPORT_DISCOVERY_MAX_PROMPT_CHARS(default:16000, above this discovery switches to catalog-batch mode)HR_REPORT_DISCOVERY_CATALOG_BATCH_SIZE(default:28)
- Snapshot evidence controls:
HR_REPORT_SNAPSHOT_EVIDENCE_MAX_PROMPT_CHARS(default:24000, above this the extractor switches to field-batch mode)HR_REPORT_SNAPSHOT_EVIDENCE_FIELD_BATCH_SIZE(default:12)
- Chunking controls:
HR_REPORT_CHUNK_MAX_CHARS(default:3200)HR_REPORT_CHUNK_OVERLAP_CHARS(default:320)HR_REPORT_CHUNK_MODE(default:legacy; setsemanticto enable heading-aware file chunking + tighter list/table chunks)
- URL controls:
HR_REPORT_URL_TIMEOUT_SECONDSHR_REPORT_URL_CRAWL_LIMITHR_REPORT_URL_MAX_TOTAL_FETCHESHR_REPORT_URL_LOCALE_BIAS
python -m app.main serve --host 127.0.0.1 --port 8080Open http://127.0.0.1:8080.
python -m app.main run --profile tuning/profile.yaml --input inputs/company_pack/POST /api/analyze (multipart form)
texturlsfiles[]
Response includes:
request_dirresult.output_dirresult.reportresult.report_markdown
Generated report sections include:
- Executive Summary
- Methodology and Data Sources
- HR Functional Scorecard
- Top Risks and Risk Flags
- Stage-Based Recommendations
- Functional Area Deep-Dives
Export endpoints:
POST /api/export/pdf(JSON body:markdown, optionalfilename)POST /api/export/docx(JSON body:markdown, optionalfilename)
The web UI includes one-click buttons for:
Download PDFDownload Word (.docx)
Each run still writes:
report.jsonreport.mdsnapshot.jsonchunks_index.jsonrun_meta.json
Findings keep explicit evidence semantics:
presentexplicitly_missingnot_provided_in_sourcesnot_assessed
Retrieval statuses remain explicit (MENTIONED_EXPLICIT, MENTIONED_IMPLICIT, etc.) for auditability.