Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

🐰 Ragbits

Building blocks for rapid development of GenAI applications

Homepage | Documentation | Contact

deepsense-ai%2Fragbits | Trendshift

PyPI - License PyPI - Version PyPI - Python Version


Features

🔨 Build Reliable & Scalable GenAI Apps

📚 Fast & Flexible RAG Processing

  • Ingest 20+ formats – Process PDFs, HTML, spreadsheets, presentations, and more. Process data using Docling, Unstructured or create a custom parser.
  • Handle complex data – Extract tables, images, and structured content with built-in VLMs support.
  • Connect to any data source – Use prebuilt connectors for S3, GCS, Azure, or implement your own.
  • Scale ingestion – Process large datasets quickly with Ray-based parallel processing.

🤖 Build Multi-Agent Workflows with Ease

  • Multi-agent coordination – Create teams of specialized agents with role-based collaboration using A2A protocol for interoperability.
  • Real-time data integration – Leverage Model Context Protocol (MCP) for live web access, database queries, and API integrations.
  • Conversation state management – Maintain context across interactions with automatic history tracking.

🚀 Deploy & Monitor with Confidence

  • Real-time observability – Track performance with OpenTelemetry and CLI insights.
  • Built-in testing – Validate prompts with promptfoo before deployment.
  • Auto-optimization – Continuously evaluate and refine model performance.
  • Chat UI – Deploy chatbot interface with API, persistance and user feedback.

Installation

Stable Release

To get started quickly, you can install the latest stable release with:

pip install ragbits

Nightly Builds

For the latest development features, you can install nightly builds that are automatically published from the develop branch:

pip install ragbits --pre

Note: Nightly builds include the latest features and bug fixes but may be less stable than official releases. They follow the version format X.Y.Z.devYYYYMMDDHHMM.

Package Contents

This is a starter bundle of packages, containing:

  • ragbits-core - fundamental tools for working with prompts, LLMs and vector databases.
  • ragbits-agents - abstractions for building agentic systems.
  • ragbits-document-search - retrieval and ingestion piplines for knowledge bases.
  • ragbits-evaluate - unified evaluation framework for Ragbits components.
  • ragbits-guardrails - utilities for ensuring the safety and relevance of responses.
  • ragbits-chat - full-stack infrastructure for building conversational AI applications.
  • ragbits-cli - ragbits shell command for interacting with Ragbits components.

Alternatively, you can use individual components of the stack by installing their respective packages.

Quickstart

Basics

To define a prompt and run LLM:

import asyncio
from pydantic import BaseModel
from ragbits.core.llms import LiteLLM
from ragbits.core.prompt import Prompt

class QuestionAnswerPromptInput(BaseModel):
    question: str

class QuestionAnswerPrompt(Prompt[QuestionAnswerPromptInput, str]):
    system_prompt = """
    You are a question answering agent. Answer the question to the best of your ability.
    """
    user_prompt = """
    Question: {{ question }}
    """

llm = LiteLLM(model_name="gpt-4.1-nano")

async def main() -> None:
    prompt = QuestionAnswerPrompt(QuestionAnswerPromptInput(question="What are high memory and low memory on linux?"))
    response = await llm.generate(prompt)
    print(response)

if __name__ == "__main__":
    asyncio.run(main())

Document Search

To build and query a simple vector store index:

import asyncio
from ragbits.core.embeddings import LiteLLMEmbedder
from ragbits.core.vector_stores import InMemoryVectorStore
from ragbits.document_search import DocumentSearch

embedder = LiteLLMEmbedder(model_name="text-embedding-3-small")
vector_store = InMemoryVectorStore(embedder=embedder)
document_search = DocumentSearch(vector_store=vector_store)

async def run() -> None:
    await document_search.ingest("web://https://arxiv.org/pdf/1706.03762")
    result = await document_search.search("What are the key findings presented in this paper?")
    print(result)

if __name__ == "__main__":
    asyncio.run(run())

Retrieval-Augmented Generation

To build a simple RAG pipeline:

import asyncio
from collections.abc import Iterable
from pydantic import BaseModel
from ragbits.core.embeddings import LiteLLMEmbedder
from ragbits.core.llms import LiteLLM
from ragbits.core.prompt import Prompt
from ragbits.core.vector_stores import InMemoryVectorStore
from ragbits.document_search import DocumentSearch
from ragbits.document_search.documents.element import Element

class QuestionAnswerPromptInput(BaseModel):
    question: str
    context: Iterable[Element]

class QuestionAnswerPrompt(Prompt[QuestionAnswerPromptInput, str]):
    system_prompt = """
    You are a question answering agent. Answer the question that will be provided using context.
    If in the given context there is not enough information refuse to answer.
    """
    user_prompt = """
    Question: {{ question }}
    Context: {% for chunk in context %}{{ chunk.text_representation }}{%- endfor %}
    """

llm = LiteLLM(model_name="gpt-4.1-nano")
embedder = LiteLLMEmbedder(model_name="text-embedding-3-small")
vector_store = InMemoryVectorStore(embedder=embedder)
document_search = DocumentSearch(vector_store=vector_store)

async def run() -> None:
    question = "What are the key findings presented in this paper?"

    await document_search.ingest("web://https://arxiv.org/pdf/1706.03762")
    chunks = await document_search.search(question)

    prompt = QuestionAnswerPrompt(QuestionAnswerPromptInput(question=question, context=chunks))
    response = await llm.generate(prompt)
    print(response)

if __name__ == "__main__":
    asyncio.run(run())

Agentic RAG

To build an agentic RAG pipeline:

import asyncio
from ragbits.agents import Agent
from ragbits.core.embeddings import LiteLLMEmbedder
from ragbits.core.llms import LiteLLM
from ragbits.core.vector_stores import InMemoryVectorStore
from ragbits.document_search import DocumentSearch

embedder = LiteLLMEmbedder(model_name="text-embedding-3-small")
vector_store = InMemoryVectorStore(embedder=embedder)
document_search = DocumentSearch(vector_store=vector_store)

llm = LiteLLM(model_name="gpt-4.1-nano")
agent = Agent(llm=llm, tools=[document_search.search])

async def main() -> None:
    await document_search.ingest("web://https://arxiv.org/pdf/1706.03762")
    response = await agent.run("What are the key findings presented in this paper?")
    print(response.content)

if __name__ == "__main__":
    asyncio.run(main())

Chat UI

To expose your GenAI application through Ragbits API:

from collections.abc import AsyncGenerator
from ragbits.agents import Agent, ToolCallResult
from ragbits.chat.api import RagbitsAPI
from ragbits.chat.interface import ChatInterface
from ragbits.chat.interface.types import ChatContext, ChatResponse, LiveUpdateType
from ragbits.core.embeddings import LiteLLMEmbedder
from ragbits.core.llms import LiteLLM, ToolCall
from ragbits.core.prompt import ChatFormat
from ragbits.core.vector_stores import InMemoryVectorStore
from ragbits.document_search import DocumentSearch

embedder = LiteLLMEmbedder(model_name="text-embedding-3-small")
vector_store = InMemoryVectorStore(embedder=embedder)
document_search = DocumentSearch(vector_store=vector_store)

llm = LiteLLM(model_name="gpt-4.1-nano")
agent = Agent(llm=llm, tools=[document_search.search])

class MyChat(ChatInterface):
    async def setup(self) -> None:
        await document_search.ingest("web://https://arxiv.org/pdf/1706.03762")

    async def chat(
        self,
        message: str,
        history: ChatFormat,
        context: ChatContext,
    ) -> AsyncGenerator[ChatResponse]:
        async for result in agent.run_streaming(message):
            match result:
                case str():
                    yield self.create_live_update(
                        update_id="1",
                        type=LiveUpdateType.START,
                        label="Answering...",
                    )
                    yield self.create_text_response(result)
                case ToolCall():
                    yield self.create_live_update(
                        update_id="2",
                        type=LiveUpdateType.START,
                        label="Searching...",
                    )
                case ToolCallResult():
                    yield self.create_live_update(
                        update_id="2",
                        type=LiveUpdateType.FINISH,
                        label="Search",
                        description=f"Found {len(result.result)} relevant chunks.",
                    )

        yield self.create_live_update(
            update_id="1",
            type=LiveUpdateType.FINISH,
            label="Answer",
        )

if __name__ == "__main__":
    api = RagbitsAPI(MyChat)
    api.run()

Rapid development

Create Ragbits projects from templates:

uvx create-ragbits-app

Explore create-ragbits-app repo here. If you have a new idea for a template, feel free to contribute!

Documentation

  • Tutorials - Get started with Ragbits in a few minutes
  • How-to - Learn how to use Ragbits in your projects
  • CLI - Learn how to run Ragbits in your terminal
  • API reference - Explore the underlying Ragbits API

Contributing

We welcome contributions! Please read CONTRIBUTING.md for more information.

License

Ragbits is licensed under the MIT License.

Metadata

Release files for ragbits 1.4.0.dev202602120304

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ragbits 1.4.0.dev202602120304
File Size Uploaded
ragbits-1.4.0.dev202602120304.tar.gz 13.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ragbits 1.4.0.dev202602120304
File Interpreter ABI Platform
ragbits-1.4.0.dev202602120304-py3-none-any.whl Python 3 none any Details

Total release size: 19.2 kB

Release files / ragbits-1.4.0.dev202602120304.tar.gz

Download URL ragbits-1.4.0.dev202602120304.tar.gz
Size 13.7 kB
Tags Source
SHA-256 checksum
How to use checksums
9f45d4208dbc1dc84efb0307b51dc1321d567a1cc4539c0d4d00e3b8a55308ac
BLAKE2b-256 checksum
How to use checksums
ff29ddfa4d411ff46d69ea8a397469afc103626f5aa56e1ae3599e0dbe2de10a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.19

Release files / ragbits-1.4.0.dev202602120304-py3-none-any.whl

Download URL ragbits-1.4.0.dev202602120304-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
00702bb8320115a861aa8c1e6f3a32ff019f861d4275b480c3a052fd7a34dbf6
BLAKE2b-256 checksum
How to use checksums
dd430c07e0029ec1084e68d0e08d0d5440de78a4f3c9f1862683db55c63040cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.19

Release history Release notifications | RSS feed

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

This release

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.19.1

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.17.1

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.2

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page