LLM-powered resume vs. job-description matching and scoring library.
Project description
reveilio
LLM-powered resume and job-description matching and scoring.
Reveilio takes a job description (file or free text) and one or many resumes (PDF, DOCX, DOC, TXT, or free text) and returns a detailed, weighted match score together with structured candidate data. It supports Gemini, OpenAI, Azure OpenAI, and a local Ollama model.
Install
pip install reveilio
Quickstart
import reveilio
# 1. Configure your LLM provider once
reveilio.configure(provider="gemini", api_key="AIza...")
# or: provider="openai", api_key="sk-..."
# or: provider="azure", api_key="...", azure_endpoint="https://...", azure_deployment="gpt-4o"
# or: provider="ollama", base_url="http://localhost:11434", model="llama3.2"
# 2. Build a JD from a file or free text
jd = reveilio.JobDescription.from_file("jd.pdf")
# jd = reveilio.JobDescription.from_text("We're hiring a Senior Python engineer...")
# 3a. Analyze a single resume
result = reveilio.analyze_resume("resumes/alice.pdf", jd)
print(result.overall_score, result.recommendation)
# 3b. Or an entire folder of resumes, sorted and ranked by score
results = reveilio.analyze_folder("resumes/", jd)
for r in results:
print(r.rank, r.candidate_data.name, r.overall_score)
# 4. Export a PDF report
reveilio.save_report_pdf(result, "alice_report.pdf")
reveilio.save_batch_report_pdf(results, "batch_ranking.pdf")
Supported inputs
- JD:
.pdf,.docx,.doc,.txt, or a plain Python string. - Resume:
.pdf,.docx,.doc,.txt, or a plain Python string.
You can manage multiple JDs simultaneously by keeping multiple
JobDescription instances around. Each instance is independent.
Supported LLM providers
| Provider | configure() call |
|---|---|
| Gemini | configure(provider="gemini", api_key="AIza...") |
| OpenAI | configure(provider="openai", api_key="sk-...", model="gpt-4o-mini") |
| Azure OpenAI | configure(provider="azure", api_key=..., azure_endpoint=..., azure_deployment=...) |
| Ollama (self) | configure(provider="ollama", base_url="http://localhost:11434", model="llama3.2") |
Environment variable fallbacks: GEMINI_API_KEY, OPENAI_API_KEY,
AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_DEPLOYMENT,
and OLLAMA_BASE_URL.
Documentation
Full documentation lives in the docs/ directory. Open docs/index.html
in a browser for the complete guide, including configuration, API
reference, guides, architecture, and contributing instructions.
Contributing
Contributions are welcome. The full contributing guide is in
docs/contributing.html. The short version:
1. Fork and clone
git clone https://github.com/<your-username>/reveilio.git
cd reveilio
2. Create a virtual environment and install dev dependencies
python -m venv .venv
# Linux / macOS
source .venv/bin/activate
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
pip install -e ".[dev]"
3. Create a feature branch
Use a descriptive prefix: fix/, feat/, docs/, or refactor/.
git checkout -b feat/my-change
4. Make your change
- Keep pull requests focused. One PR should address one concern.
- Match the existing code style. Reveilio avoids over-abstraction.
- Add or update tests for every bug fix and feature. Tests must not
make real LLM calls; mock
json_completionas the existing suite does. - Update the relevant docs pages under
docs/when public behavior changes. - Do not add new runtime dependencies without prior discussion.
5. Lint and test locally
Reveilio uses ruff for linting and
formatting, and pytest for tests. Both must be green before you open
a pull request.
ruff check src tests
ruff format --check src tests
pytest -q
To auto-fix lint issues and format the code:
ruff check src tests --fix
ruff format src tests
6. Commit
Write imperative, present-tense commit subjects at 72 characters or fewer,
and explain the why in the body. Reference related issues with
Fixes #123 or Refs #123.
7. Open a pull request
Push your branch to your fork and open a pull request against main.
Fill out the PR template with a summary, motivation, and notes on any
manual testing. Respond to review feedback promptly, and rebase (do not
merge) onto main if it advances while your PR is open:
git fetch origin
git rebase origin/main
git push --force-with-lease
Reporting security issues
Please do not report security vulnerabilities through public GitHub issues. Email the maintainers privately with a detailed description.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reveilio-0.1.0.tar.gz.
File metadata
- Download URL: reveilio-0.1.0.tar.gz
- Upload date:
- Size: 270.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1841e6d4ba5178ba4d78e387a3a8a87592395e1210fcf736348e5c46b586579e
|
|
| MD5 |
5d83996f56bc3da92de3626dec88a5ce
|
|
| BLAKE2b-256 |
9694cd79a83c1dec55cf8a26cad73ad9ca165d9c580251c3e29d44f8b2728de0
|
File details
Details for the file reveilio-0.1.0-py3-none-any.whl.
File metadata
- Download URL: reveilio-0.1.0-py3-none-any.whl
- Upload date:
- Size: 29.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
655ab6f0c1a373792e9def6b78d29d2e01d3248ceaaec709de40562fde0a6e32
|
|
| MD5 |
57da937d7602c2fc23cbf4996bb57778
|
|
| BLAKE2b-256 |
8b1f430c5a389ef56cd0a7d299723a3ffc73105e937624b0c397deb939654544
|