Home

Awesome

Verba

The Golden RAGtriever

Weaviate PyPi downloads Docker support Demo

Welcome to Verba: The Golden RAGtriever, an open-source application designed to offer an end-to-end, streamlined, and user-friendly interface for Retrieval-Augmented Generation (RAG) out of the box. In just a few easy steps, explore your datasets and extract insights with ease, either locally with HuggingFace and Ollama or through LLM providers such as OpenAI, Cohere, and Google.

pip install goldenverba

Demo of Verba

What Is Verba?

Verba is a fully-customizable personal assistant for querying and interacting with your data, either locally or deployed via cloud. Resolve questions around your documents, cross-reference multiple data points or gain insights from existing knowledge bases. Verba combines state-of-the-art RAG techniques with Weaviate's context-aware database. Choose between different RAG frameworks, data types, chunking & retrieving techniques, and LLM providers based on your individual use-case.

Open Source Spirit

Weaviate is proud to offer this open-source project for the community. While we strive to address issues promptly, please understand that it may not be maintained with the same rigor as production software. We welcome and encourage community contributions to help keep it running smoothly. Your support in fixing open issues quickly is greatly appreciated.

Watch our newest Verba video here:

VIDEO LINK

Feature Lists

🤖 Model SupportImplementedDescription
Ollama (e.g. Llama3)Local Embedding and Generation Models powered by Ollama
HuggingFace (e.g. MiniLMEmbedder)Local Embedding Models powered by HuggingFace
Cohere (e.g. Command R+)Embedding and Generation Models by Cohere
Google (e.g. Gemini)Embedding and Generation Models by Google
OpenAI (e.g. GPT4)Embedding and Generation Models by OpenAI
🤖 Embedding SupportImplementedDescription
OllamaLocal Embedding Models powered by Ollama
MiniLMEmbedderpowered by HuggingFace
AllMPNetEmbedderpowered by HuggingFace
MixedbreadEmbedderpowered by HuggingFace
CohereEmbedding Models by Cohere
GoogleEmbedding Models by Google
OpenAIEmbedding Models by OpenAI
📁 Data SupportImplementedDescription
PDF IngestionImport PDF into Verba
GitHub & GitLabImport Files from Github and GitLab
CSV/XLSX IngestionImport Table Data into Verba
.DOCXImport .docx files
Multi-Modalplanned ⏱️Import Multi-Modal Data into Verba
UnstructuredIOImport Data through Unstructured
✨ RAG FeaturesImplementedDescription
Hybrid SearchSemantic Search combined with Keyword Search
Semantic CachingResults saved and retrieved based on semantic meaning
Autocomplete SuggestionVerba suggests autocompletion
Filteringplanned ⏱️Apply Filters (e.g. documents, document types etc.) before performing RAG
Advanced Queryingplanned ⏱️Task Delegation Based on LLM Evaluation
Rerankingplanned ⏱️Rerank results based on context for improved results
RAG Evaluationplanned ⏱️Interface for Evaluating RAG pipelines
Customizable Metadataplanned ⏱️Free control over Metadata
🆒 Cool BonusImplementedDescription
Docker SupportVerba is deployable via Docker
Customizable FrontendVerba's frontend is fully-customizable via the frontend
🤝 RAG LibrariesImplementedDescription
Haystackplanned ⏱️Implement Haystack RAG pipelines
LlamaIndexplanned ⏱️Implement LlamaIndex RAG pipelines
LangChainplanned ⏱️Implement LangChain RAG pipelines

Something is missing? Feel free to create a new issue or discussion with your idea!

Showcase of Verba


Getting Started with Verba

You have three deployment options for Verba:

pip install goldenverba
git clone https://github.com/weaviate/Verba

pip install -e .

Prerequisites: If you're not using Docker, ensure that you have Python >=3.10.0 installed on your system.

If you're unfamiliar with Python and Virtual Environments, please read the python tutorial guidelines.

API Keys

Before starting Verba you'll need to configure access to various components depending on your chosen technologies, such as OpenAI, Cohere, and HuggingFace via an .env file. Create this .env in the same directory you want to start Verba in. You can find an .env.example file in the goldenverba directory.

Make sure to only set environment variables you intend to use, environment variables with missing or incorrect values may lead to errors.

Below is a comprehensive list of the API keys and variables you may require:

Environment VariableValueDescription
WEAVIATE_URL_VERBAURL to your hosted Weaviate ClusterConnect to your WCS Cluster
WEAVIATE_API_KEY_VERBAAPI Credentials to your hosted Weaviate ClusterConnect to your WCS Cluster
OPENAI_API_KEYYour API KeyGet Access to OpenAI Models
OPENAI_BASE_URLURL to OpenAI instanceModels
COHERE_API_KEYYour API KeyGet Access to Cohere Models
OLLAMA_URLURL to your Ollama instance (e.g. http://localhost:11434 )Get Access to Ollama Models
OLLAMA_MODELModel Name (e.g. llama)Get Access to a specific Ollama Model
OLLAMA_EMBED_MODELModel Name (e.g. mxbai-embed-large)Get Access to a specific Ollama Model for embedding (Defaults to OLLAMA_MODEL if not specified)
UNSTRUCTURED_API_KEYYour API KeyGet Access to Unstructured Data Ingestion
UNSTRUCTURED_API_URLURL to Unstructured InstanceGet Access to Unstructured Data Ingestion
GITHUB_TOKENYour GitHub TokenGet Access to Data Ingestion via GitHub
GITLAB_TOKENYour GitLab TokenGet Access to Data Ingestion via GitLab
GOOGLE_APPLICATION_CREDENTIALSGoogle CredentialsGet Access to Google Models
GOOGLE_CLOUD_PROJECTGoogle Cloud ProjectGet Access to Google Models
GOOGLE_API_KEYYour API KeyGet Access to Google Models
VERBA_PRODUCTIONTrueRun Verba in Production Mode

Weaviate

Verba provides flexibility in connecting to Weaviate instances based on your needs. By default, Verba opts for Weaviate Embedded if it doesn't detect the WEAVIATE_URL_VERBA and WEAVIATE_API_KEY_VERBA environment variables. This local deployment is the most straightforward way to launch your Weaviate database for prototyping and testing.

However, you also have other options:

🌩️ Weaviate Cloud Service (WCS)

If you prefer a cloud-based solution, Weaviate Cloud Service (WCS) offers a scalable, managed environment. Learn how to set up a cloud cluster and get the API keys by following the Weaviate Cluster Setup Guide.

🐳 Docker Deployment Another robust local alternative is deploying Weaviate using Docker. For more details, consult the Weaviate Docker Guide.

Ollama

Verba supports Ollama models. Download and Install Ollama on your device (https://ollama.com/download). Make sure to install your preferred LLM using ollama run <model>.

Tested with llama3, llama3:70b and mistral. The bigger models generally perform better, but need more computational power.

Ensure that you have the right configurations for the Embedder and Generator selected before going ahead.

verba-embedder

Make sure Ollama Server runs in the background and that you don't ingest documents with different ollama models since their vector dimension can vary that will lead to errors

You can verify that by running the following command

ollama run llama3

verba-ollama-llama3

Google

If you want to use the Google Features, make sure to install the Google Verba package.

pip install goldenverba[google]

or

pip install `.[google]`

If you're using Docker, modify the Dockerfile accordingly

Google Embeddings

For the Google Embeddings, Verba is using Vertex AI Studio inside Google Cloud. You can find instructions for obtaining a key here. If you have the gcloud CLI installed, you can run the following command: gcloud auth print-access-token. At the moment, this access token must be renewed every hour.

You also need to set the GOOGLE_CLOUD_PROJECT environment variable to the name of your project.

Google Gemini

To use Google Gemini, you need a service account key, which is a JSON file. To obtain this, go to "project settings" in your Google Cloud console, then to "service accounts". Create a new service account, then create a new key. Download this key and place it in the route of Verba. Name it gemini_secrets.json to have it excluded from git automatically. Set the environment variable GOOGLE_APPLICATION_CREDENTIALS to the location of this file, e.g. gemini_secrets.json.

You also need to set the GOOGLE_CLOUD_PROJECT environment variable to the name of your project.

Unstructured

Verba supports importing documents through Unstructured IO (e.g plain text, .pdf, .csv, and more). To use them you need the UNSTRUCTURED_API_KEY and UNSTRUCTURED_API_URL environment variable. You can get it from Unstructured

UNSTRUCTURED_API_URL is set to https://api.unstructured.io/general/v0/general by default

OpenAI

Verba supports OpenAI Models such as Ada, GPT3, and GPT4. To use them, you need to specify the OPENAI_API_KEY environment variable. You can get it from OpenAI

You can also add a OPENAI_BASE_URL to use proxies such as LiteLLM (https://github.com/BerriAI/litellm)

OPENAI_BASE_URL=YOUR-OPENAI_BASE_URL

Azure OpenAI

To use Azure OpenAI, you need to set

OPENAI_API_TYPE="azure"
OPENAI_API_KEY=<YOUR_KEY>
OPENAI_BASE_URL=http://XXX.openai.azure.com
AZURE_OPENAI_RESOURCE_NAME=<YOUR_AZURE_RESOURCE_NAME>
AZURE_OPENAI_EMBEDDING_MODEL="text-embedding-ada-002"
OPENAI_MODEL="gpt-4"
WAIT_TIME_BETWEEN_INGESTION_QUERIES_MS="100"

HuggingFace

If you want to use the HuggingFace Features, make sure to install the correct Verba package. It will install required packages to use the local embedding models. Please note that on startup, Verba will automatically download and install all embedding models, if you just want specific models, please remove unwanted models from the goldenverba/components/managers.py file.

pip install goldenverba[huggingface]

or

pip install `.[huggingface]`

If you're using Docker, modify the Dockerfile accordingly

How to deploy with pip

Python >=3.10.0

  1. Initialize a new Python Environment
python3 -m virtualenv venv
  1. Install Verba
pip install goldenverba
  1. Launch Verba
verba start

You can specify the --port and --host via flags

  1. Access Verba
Visit localhost:8000
  1. Create .env file and add environment variables

How to build from Source

  1. Clone the Verba repos
git clone https://github.com/weaviate/Verba.git
  1. Initialize a new Python Environment
python3 -m virtualenv venv
  1. Install Verba
pip install -e .
  1. Launch Verba
verba start

You can specify the --port and --host via flags

  1. Access Verba
Visit localhost:8000
  1. Create .env file and add environment variables

How to install Verba with Docker

Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers. To get started with deploying Verba using Docker, follow the steps below. If you need more detailed instructions on Docker usage, check out the Docker Curriculum.

  1. Clone the Verba repos Ensure you have Git installed on your system. Then, open a terminal or command prompt and run the following command to clone the Verba repository:
git clone https://github.com/weaviate/Verba.git
  1. Set necessary environment variables Make sure to set your required environment variables in the .env file. You can read more about how to set them up in the API Keys Section

  2. Adjust the docker-compose file You can use the docker-compose.yml to add required environment variables under the verba service and can also adjust the Weaviate Docker settings to enable Authentification or change other settings of your database instance. You can read more about the Weaviate configuration in our docker-compose documentation

Please make sure to only add environment variables that you really need. If you have no authentication enabled in your Weaviate Cluster, make sure to not include the WEAVIATE_API_KEY_VERBA environment variable

  1. Deploy using Docker With Docker installed and the Verba repository cloned, navigate to the directory containing the Docker Compose file in your terminal or command prompt. Run the following command to start the Verba application in detached mode, which allows it to run in the background:

docker compose up -d


docker compose --env-file .env up -d

This command will download the necessary Docker images, create containers, and start Verba. Remember, Docker must be installed on your system to use this method. For installation instructions and more details about Docker, visit the official Docker documentation.

  1. Access Verba

If you want your Docker Instance to install a specific version of Verba you can edit the Dockerfile and change the installation line.

RUN pip install -e '.'

Verba Walkthrough

Overview Page

Once you have access to Verba, you can use the Overview Page to validate if all environments and libraries were correctly set and installed. You can use the Admin Console, to see all data stored in the Weaviate Collections and reset certain parts of Verba (e.g. Documents, Cache, Configuration, etc.)

Demo of Verba

Import Your Data

With Verba configured, you're ready to import your data and start exploring. Use the Add Documents Page to ingest your data. You can choose between Readers that support different data types, chunking techniques, and embedding model.

Demo of Verba

Query Your Data

With Data imported, you can use the Chat page to ask any related questions. You will receive relevant chunks that are semantically relevant to your question and an answer generated by your chosen model. You can configure the RAG pipeline under the RAG page.

Demo of Verba

Open Source Contribution

Your contributions are always welcome! Feel free to contribute ideas, feedback, or create issues and bug reports if you find any! Before contributing, please read the Contribution Guide. Visit our Weaviate Community Forum if you need any help!

Project Architecture

You can learn more about Verba's architecture and implementation in its technical documentation and frontend documentation. It's recommended to have a look at them before making any contributions.

JSON Files

In Verba you can import JSON with a specific format, this format allows you to add links to the original sources, chunks, metadata and more.

Currently, one document needs to be in one .json file (this will change in the future)

Document Structure

{
  "text": "<Content>", // Content that will be chunked
  "type": "<Type>", // Will be used to filter documents
  "name": "<Document Name>", // Included in the context sent to the LLM
  "path": "<Path to Local File>", // Currently not implemented, can be empty
  "link": "<Link to Original Source>", // Link to original sources
  "timestamp": "<YYYY-MM-DD HH:MM:SS>", // Currently not used, can be empty
  "reader": "<READER>", // Currently not used, can be empty
  "meta": {}, // Currently not used
  "chunks": [] // You can add chunks here and skip the chunking part during the ingestion
}

Chunk Structure

{
  "text": "<Content>", // Chunk Content
  "doc_name": "<Document Name>", // Name of the Document
  "doc_type": "<Document Type>", // Type of the Document
  "doc_uuid": "<Document UUID>", // UUID of the Document
  "chunk_id": "<Chunk ID>", // Order of the chunk, starts at 0 - n (n = number of total chunks)
  "tokens": "<Number of Tokens>", // Number of tokens in the chunk, not used, can be empty
  "vector": "<Vector>", // Vector of the chunk, not used, can be empty
  "score": "<Retrieval Score>" // Score of the chunk, will be added by the retriever during runtime, can be empty
}

Known Issues

FAQ