Solicitation Analyzer
Internal tool
Turns an RFP, RFQ, or RFI PDF into a compliance checklist: deadlines, how to submit, eligibility, evaluation factors, and required content. Every item quotes the page it came from and is checked against the PDF. It runs on a local open-weight model, so documents never leave the machine.
Browse sample checklists
Current buildDevelopment details
- Source code
- Public
Built with
Screenshots

Drop in the solicitation with its amendments and attachments. The page runs on 127.0.0.1 and the model runs on the same machine.

A 2-page RFI with its 9-page statement of work became 88 checklist items in about four minutes, every quote found word for word.

Key facts first, then the evaluation factors with their points, each cited to its page.

Addendum 2 moved the deadline from August 7 to August 13. The struck-through old date survives in the PDF text as "August 7 13", so the tool asks a person to confirm.

When the model reads across table cells, the item is kept only if every word sits close together on the page, and it is flagged for a person to check.

Scored against reference answers for five public solicitations, alongside a keyword baseline with no model.
What it does
It reads a solicitation with its amendments and attachments. It returns the response and questions deadlines, how and where to submit, the page limit, the set-aside, the NAICS code, the evaluation factors with their weights, and a checklist of what the response must contain. Each item gives the page it came from.
Every item is checked against the PDF
The model must quote 8 to 35 words from the page it cites. The tool then finds that quote in the PDF text, including across page breaks, two-column pages, and tables, and removes anything it cannot find. Dates are checked against the quoted words, and an amended deadline replaces the original.
Measured, not assumed
The test set is five public solicitation packages, 129 pages in all. The tool got 34 of 35 key facts right, found all 15 evaluation factors, and covered 57 of 58 must-do items. A keyword baseline with no model scored 83%, 67%, and 67% on the same measures. The reference answers, scoring, and caveats are in the repository.
Private by default
It runs an open-weight model on local hardware through LM Studio, so a solicitation and a draft response never leave the machine. A hosted model can be switched in when speed matters more than keeping documents in-house.
Built to be checked
It needs no third-party Python packages. Its unit tests run without a model, and model replies are cached so runs repeat exactly. The published sample reports replace people's names, emails, and phone numbers with placeholders.