Skip to main content

LLM-powered resume vs. job-description matching and scoring library.

Project description

Reveilio logo

reveilio

LLM-powered resume and job-description matching and scoring.

PyPI Tests License Python

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_completion as 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reveilio-0.1.0.tar.gz (270.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reveilio-0.1.0-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

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

Hashes for reveilio-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1841e6d4ba5178ba4d78e387a3a8a87592395e1210fcf736348e5c46b586579e
MD5 5d83996f56bc3da92de3626dec88a5ce
BLAKE2b-256 9694cd79a83c1dec55cf8a26cad73ad9ca165d9c580251c3e29d44f8b2728de0

See more details on using hashes here.

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

Hashes for reveilio-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 655ab6f0c1a373792e9def6b78d29d2e01d3248ceaaec709de40562fde0a6e32
MD5 57da937d7602c2fc23cbf4996bb57778
BLAKE2b-256 8b1f430c5a389ef56cd0a7d299723a3ffc73105e937624b0c397deb939654544

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page