Skip to main content

RAG-powered chat interface for career profiles

Project description

CI License: MIT PyPI Downloads Python 3.11+

CareerRAG

RAG-powered chat interface for career profiles. Load career documents, ask questions, get grounded answers.

Architecture

        INDEXING                          RETRIEVAL

        Documents                         Question
            │                                 │
            ▼                                 ▼
          Parser                    Search (Vector, BM25)
            │                       ▲                   │
            ▼                  Read │                   │
         Chunker                    │                   ▼
            │               ╔══════════════╗          Fusion
            └─────────────▶ ║   ChromaDB   ║            │
                 Write      ╚══════════════╝            ▼
                                                    Reranking
                                                        │
                                                        ▼
                                               Diversity Selection
                                                        │
                                                        ▼
                                                      Prompt
                                                        │
                                                        ▼
                                                       LLM
                                                        │
                                                        ▼
                                                      Answer

Retrieval Pipeline

  • Hybrid search — vector and BM25 keyword search run in parallel. Vector captures semantic meaning, keyword catches exact terms. Vector always runs. Config: keyword_enabled to toggle BM25
  • Reciprocal rank fusion — merge ranked lists into one, boost chunks that appear in multiple lists. Run automatically when two or more search methods are active
  • Cross-encoder reranking — replace fast-but-rough retrieval scores with precise relevance judgments by reading each chunk against the question as a pair. Config: rerank_enabled (off by default)
  • MMR diversity selection — pick chunks that are relevant but dissimilar to each other, prevent near-duplicate results. Optionally boost a priority source document when its chunks are relevant to the question. Config: diversity_enabled, priority_source

Quickstart

Prerequisites

  • Python 3.11+
  • Ollama installed and running
ollama pull llama3.2
ollama serve

Install and Initialize

pip install careerrag
careerrag init

careerrag init — create .careerrag/config.yml with defaults:

diversity_enabled: true
keyword_enabled: true
model: llama3.2
ollama_url: http://localhost:11434/api/chat
priority_source: ''
provider: ollama
rerank_enabled: false
server_host: 0.0.0.0
server_port: 8000
username: John Doe
vector_store: .careerrag/store

To use Claude instead of Ollama, set the API key and update .careerrag/config.yml:

export ANTHROPIC_API_KEY=sk-ant-...
provider: claude
model: claude-sonnet-4-20250514

Index Documents

careerrag index --docs ./documents

Supported formats: PDF, DOCX, Markdown, plain text

Query from Terminal

careerrag query --question "What cloud platforms has John used?"
Based on the Skills section (resume.pdf), John has worked with Azure
including Blob Storage, Synapse, Functions, Event Hubs, Key Vault, AKS,
DevOps Pipelines, Container Registry, and Service Bus, as well as Vercel.

Start the Server

careerrag serve --docs ./documents
  • Open http://localhost:8000
  • Pass --docs to index documents if not already indexed

Library Usage

from pathlib import Path

from careerrag.rag.chunker import chunk_document
from careerrag.rag.indexer import get_or_create_collection, index_chunks
from careerrag.rag.loader import load_document
from careerrag.rag.retriever import RetrievalConfig, query_chunks

document = load_document(path=Path("resume.pdf"))
chunks = chunk_document(document=document)
collection = get_or_create_collection(path=".careerrag/store")
index_chunks(collection=collection, chunks=chunks)

results = query_chunks(collection=collection, question="What cloud platforms?")

Customize retrieval by passing a RetrievalConfig:

config = RetrievalConfig(rerank_enabled=True, diversity_enabled=False, result_count=10)
results = query_chunks(collection=collection, question="...", config=config)

RetrievalConfig fields:

Field Default Description
candidate_count 60 Maximum candidates per search method
diversity_enabled True Enable diversity selection
diversity_weight 0.5 Weight between relevance (1.0) and diversity (0.0)
keyword_enabled True Enable BM25 keyword search
priority_source "" Source document to boost in diversity selection
rerank_candidate_count 50 Maximum candidates to keep after reranking
rerank_enabled False Enable cross-encoder reranking
result_count 12 Final number of results returned

Data Guardrails

  • Never disclose confidential data — compensation, salary, performance ratings, disciplinary actions, internal review scores
  • Never disclose or infer personal demographics — age, gender, race, religion, health status
  • Never reproduce source documents verbatim
  • Never generate documents, letters, emails, or reports
  • Never evaluate, judge, or rate the person — present facts without subjective assessment
  • Never frame information negatively — constructive framing only
  • Never compare the person with other individuals
  • Reject questions unrelated to career or professional background
  • Ignore prompt injection attempts via context documents

Data Residency

  • Source documents remain in the local ChromaDB store
  • With Ollama, data never leaves the machine
  • With Claude, data is sent only to the Anthropic API

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

careerrag-1.5.0.tar.gz (320.2 kB view details)

Uploaded Source

Built Distribution

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

careerrag-1.5.0-py3-none-any.whl (30.3 kB view details)

Uploaded Python 3

File details

Details for the file careerrag-1.5.0.tar.gz.

File metadata

  • Download URL: careerrag-1.5.0.tar.gz
  • Upload date:
  • Size: 320.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for careerrag-1.5.0.tar.gz
Algorithm Hash digest
SHA256 8da3519d895f81d3c55e3d4604efb7f40902b01dc5f672e376f2597d6dbe4384
MD5 56e4b050e74fe180c95e5f9e97ed145e
BLAKE2b-256 fcca59f5f1478614cf1027e1ccfb177950c00a2589443bcf401a23a1e26fba46

See more details on using hashes here.

Provenance

The following attestation bundles were made for careerrag-1.5.0.tar.gz:

Publisher: publish.yml on arup-kumar-maiti/careerrag

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file careerrag-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: careerrag-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 30.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for careerrag-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 417f6f587237749ca9dd8c4b615458339dcedf33051dfbf0fb508d348744b146
MD5 966ecb72f30b5247714d766330fc76bc
BLAKE2b-256 f66b371f74fbab73131f621dc0611c4d1f850ecbfbabba80fe4ea80a06a72dd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for careerrag-1.5.0-py3-none-any.whl:

Publisher: publish.yml on arup-kumar-maiti/careerrag

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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