Provider-agnostic voice RAG pipeline. Plug in your voice provider, LLM, vector store, and document parsers.
Project description
voice-rag
voice-rag is a Python package for voice-oriented RAG pipelines: ingest local documents, store them in Qdrant, serve an OpenAI-style chat-completions webhook, and swap voice or LLM providers behind a stable interface.
What it includes
- Python SDK via
KnowledgeAgent - CLI for
init,ingest,serve,query,inspect, anddoctor - Built-in voice adapters for
elevenlabsanddeepgram - Built-in LLM clients for
openai,anthropic, andgemini - Built-in parsers for
.txt,.md,.pdf, and.docx - Qdrant vector store integration with hybrid dense + BM25 retrieval
Quickstart
pip install "voice-rag[elevenlabs]"
export OPENAI_API_KEY=your_api_key_here
voice-rag init
Edit voice-rag.yaml, then ingest and serve:
voice-rag ingest ./data/sample_docs/claude-code-changelog.md --recreate
voice-rag serve
Point your voice platform to http://localhost:8000/v1 if it expects an OpenAI-style Custom LLM endpoint.
By default, voice-rag uses an embedded local Qdrant store in .qdrant, so you do not need to start a separate Qdrant server unless you set vector_store.url.
CLI
voice-rag init [--dir PATH]
voice-rag ingest <path> [--recreate] [--config PATH]
voice-rag serve [--host HOST] [--port PORT] [--reload] [--config PATH]
voice-rag query <text> [--limit N] [--config PATH]
voice-rag inspect [--config PATH]
voice-rag doctor
Python API
from voice_rag import KnowledgeAgent, VoiceRagConfig
config = VoiceRagConfig()
agent = KnowledgeAgent(config=config)
agent.ingest("./docs", recreate=True)
app = agent.create_app()
Configuration
voice-rag reads configuration from voice-rag.yaml and environment variables. It does not auto-load .env files.
| Key | Env | Default |
|---|---|---|
llm.api_key / embedding.api_key |
OPENAI_API_KEY |
(required for OpenAI) |
llm.provider |
LLM_PROVIDER |
openai |
llm.model |
LLM_MODEL |
gpt-4o-mini |
embedding.model |
EMBEDDING_MODEL |
text-embedding-3-small |
vector_store.url |
VECTOR_STORE_URL |
empty; use local .qdrant |
vector_store.collection_name |
VECTOR_STORE_COLLECTION_NAME |
knowledge_base |
vector_store.local_path |
VECTOR_STORE_LOCAL_PATH |
.qdrant |
server.port |
SERVER_PORT |
8000 |
See voice-rag.yaml for the full schema.
Development
pip install -e ".[all,dev]"
pytest tests/ -v
Use CONTRIBUTING.md for connector and packaging guidelines.
Publishing to PyPI
With PYPI_TOKEN and the release environment configured in the repo, push a version tag to trigger the GitHub Actions workflow:
git tag v0.1.0
git push origin v0.1.0
The workflow runs smoke test → build → publish to PyPI.
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
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 voice_rag-0.1.0.tar.gz.
File metadata
- Download URL: voice_rag-0.1.0.tar.gz
- Upload date:
- Size: 96.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e60400a45da76b6a013d44ef78e917fd68a885d4b99b98bacdeccd3a568b9102
|
|
| MD5 |
9f406182a09eed1fc2ad1c3eff353989
|
|
| BLAKE2b-256 |
cb49e00f064d4589efd5e8d84888e633a1ef5ad84a39d16019b7dc742eed5183
|
Provenance
The following attestation bundles were made for voice_rag-0.1.0.tar.gz:
Publisher:
publish.yml on kytona/voice-rag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
voice_rag-0.1.0.tar.gz -
Subject digest:
e60400a45da76b6a013d44ef78e917fd68a885d4b99b98bacdeccd3a568b9102 - Sigstore transparency entry: 1110709117
- Sigstore integration time:
-
Permalink:
kytona/voice-rag@1b3ee6733d07805ef391bb24cc8f6e48c7c24fb1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/kytona
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1b3ee6733d07805ef391bb24cc8f6e48c7c24fb1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file voice_rag-0.1.0-py3-none-any.whl.
File metadata
- Download URL: voice_rag-0.1.0-py3-none-any.whl
- Upload date:
- Size: 29.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41d94347787428d785e4741ec2abc5ac63685cbb2ca9bcc0f9c5a31ac2a6bd0b
|
|
| MD5 |
f51b10a57f3a8c11dcffbe10335da674
|
|
| BLAKE2b-256 |
581940fac43ede5f2005ae352774aa386e5bd18da145391040f275fb2ef22d12
|
Provenance
The following attestation bundles were made for voice_rag-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on kytona/voice-rag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
voice_rag-0.1.0-py3-none-any.whl -
Subject digest:
41d94347787428d785e4741ec2abc5ac63685cbb2ca9bcc0f9c5a31ac2a6bd0b - Sigstore transparency entry: 1110709123
- Sigstore integration time:
-
Permalink:
kytona/voice-rag@1b3ee6733d07805ef391bb24cc8f6e48c7c24fb1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/kytona
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1b3ee6733d07805ef391bb24cc8f6e48c7c24fb1 -
Trigger Event:
push
-
Statement type: