ebf998acb6
Co-authored-by: Harrison Chase <hw.chase.17@gmail.com> Co-authored-by: Lance Martin <lance@langchain.dev> Co-authored-by: Jacob Lee <jacoblee93@gmail.com> |
||
---|---|---|
.. | ||
self_query_supabase | ||
tests | ||
.gitignore | ||
poetry.lock | ||
pyproject.toml | ||
README.md |
Self-querying 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 LangServe API that can self-query Supabase. You'll be able to use natural language to generate a structured query against the database.
Install Package
From within your langservehub
project run:
poetry run poe add self-query-supabase
Setup Supabase Database
Use these steps to setup your Supabase database if you haven't already.
-
Head over to https://database.new to provision your Supabase database.
-
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 URLSUPABASE_SERVICE_KEY
corresponds to theservice_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()