You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
langchain/templates/rag-supabase
Erick Friis 4b16601d33
Format Templates (#12396)
8 months ago
..
rag_supabase Format Templates (#12396) 8 months ago
tests Templates (#12294) 8 months ago
.gitignore Templates (#12294) 8 months ago
README.md Templates (#12294) 8 months ago
poetry.lock Templates (#12294) 8 months ago
pyproject.toml Templates (#12294) 8 months ago

README.md

RAG with Supabase

Supabase is an open-source Firebase alternative. It is built on top of PostgreSQL, a free and open-source relational database management system (RDBMS) and uses pgvector to store embeddings within your tables.

Use this package to host a retrieval augment generation (RAG) API using LangServe + Supabase.

Install Package

From within your langservehub project run:

poetry run poe add rag-supabase

Setup Supabase Database

Use these steps to setup your Supabase database if you haven't already.

  1. Head over to https://database.new to provision your Supabase database.

  2. In the studio, jump to the SQL editor and run the following script to enable pgvector and setup your database as a vector store:

    -- Enable the pgvector extension to work with embedding vectors
    create extension if not exists vector;
    
    -- Create a table to store your documents
    create table
      documents (
        id uuid primary key,
        content text, -- corresponds to Document.pageContent
        metadata jsonb, -- corresponds to Document.metadata
        embedding vector (1536) -- 1536 works for OpenAI embeddings, change as needed
      );
    
    -- Create a function to search for documents
    create function match_documents (
      query_embedding vector (1536),
      filter jsonb default '{}'
    ) returns table (
      id uuid,
      content text,
      metadata jsonb,
      similarity float
    ) language plpgsql as $$
    #variable_conflict use_column
    begin
      return query
      select
        id,
        content,
        metadata,
        1 - (documents.embedding <=> query_embedding) as similarity
      from documents
      where metadata @> filter
      order by documents.embedding <=> query_embedding;
    end;
    $$;
    

Setup Environment Variables

Since we are using SupabaseVectorStore and OpenAIEmbeddings, we need to load their API keys.

Create a .env file in the root of your project:

.env

SUPABASE_URL=
SUPABASE_SERVICE_KEY=
OPENAI_API_KEY=

To find your SUPABASE_URL and SUPABASE_SERVICE_KEY, head to your Supabase project's API settings.

  • SUPABASE_URL corresponds to the Project URL
  • SUPABASE_SERVICE_KEY corresponds to the service_role API key

To get your OPENAI_API_KEY, navigate to API keys on your OpenAI account and create a new secret key.

Add this file to your .gitignore if it isn't already there (so that we don't commit secrets):

.gitignore

.env

Install python-dotenv which we will use to load the environment variables into the app:

poetry add python-dotenv

Finally, call load_dotenv() in server.py.

app/server.py

from dotenv import load_dotenv

load_dotenv()