from piragi import Ragi
kb = Ragi(\["./docs", "./code/\*\*/\*.py", "https://api.example.com/docs"\])
answer = kb.ask("How do I deploy this?")
That's the entire setup. No API keys required - runs on Ollama + sentence-transformers locally.What it does:
- All formats - PDF, Word, Excel, Markdown, code, URLs, images, audio
- Auto-updates - watches sources, refreshes in background, zero query latency
- Citations - every answer includes sources
- Advanced retrieval - HyDE, hybrid search (BM25 + vector), cross-encoder reranking
- Smart chunking - semantic, contextual, hierarchical strategies
- OpenAI compatible - swap in GPT/Claude whenever you want
Quick examples: # Filter by metadata
answer = kb.filter(file_type="pdf").ask("What's in the contracts?")
#Enable advanced retrieval
kb = Ragi("./docs", config={
"retrieval": {
"use_hyde": True,
"use_hybrid_search": True,
"use_cross_encoder": True
}
})
# Use OpenAI instead
kb = Ragi("./docs", config={"llm": {"model": "gpt-4o-mini", "api_key": "sk-..."}})
Install: pip install piragi
PyPI: https://pypi.org/project/piragi/
Would love feedback. What's missing? What would make this actually useful for your projects?So I thought it'd be cool to show it off here too- it can be played around with at mchess.io/donut - you can also set up an AI or online game on the site.
This is all indie dev work from a couple friends and myself.
When I analyzed the Extended Euclidean Algorithm, one thing led to another, and I ended up writing a little intro to generating functions. You can even jump to that part and ignore the rest, if you want! Other readers may instead choose to skip that section altogether, as it's self-contained.
Location:
Remote:
Willing to relocate:
Technologies:
Résumé/CV:
Email:
Please only post if you are personally looking for work. Agencies, recruiters, job boards,
and so on, are off topic here.Readers: please only email these addresses to discuss work opportunities.
There's a site for searching these posts at https://www.wantstobehired.com.