Skip to content

AI chat over the US Constitution ๐Ÿ“œ ๐Ÿ’ฌ ๐Ÿ‡บ๐Ÿ‡ธ

Notifications You must be signed in to change notification settings

vdutts7/constitutionGPT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

33 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation


Logo Logo

Constitution GPT

AI chat over the US Constitution ๐Ÿ“œ ๐Ÿ’ฌ ๐Ÿ‡บ๐Ÿ‡ธ

Website Github


Table of Contents

    ๐Ÿ“ About
    ๐Ÿ’ป How to build ๐Ÿš€ Next steps
    ๐Ÿ”ง Tools used
    ๐Ÿ‘ค Contact

๐Ÿ“About

Chat with the US Constitution. Combines pgvector embeddings (Supabase), OpenAI, and NextJs to provide frontend UI chat interface.


๐Ÿ’ปHow to Build

Initial setup

Clone and install dependencies:

git clone https://github.com/vdutts7/constitutionGPT
cd constitutionGPT
npm i

Copy .env.example and rename to .env in root directory. Fill out API keys:

SUPABASE_ANON_KEY=""
NEXT_PUBLIC_SUPABASE_URL=""
OPENAI_API_KEY=""

#optional- leave blank if unused. DO NOT DELETE
OPENAI_PROXY=""
SPLASH_URL=""

Get API keys:

IMPORTANT: Verify that .gitignore contains .env in it.

Embeddings backend

Create a Supabase account and project at Supabase:

  • Run this query Supabase's SQL editor:
    create extension vector;
    
  • Create a table to store embeddings with this query:
    create table documents (
      id bigserial primary key,
      content text,
      url text,
      embedding vector (1536)
    );
  • Add similarity search function with another query:
    create or replace function match_documents (
      query_embedding vector(1536),
      similarity_threshold float,
      match_count int
    )
    returns table (
      id bigint,
      content text,
      url text,
      similarity float
    )
    language plpgsql
    as $$
    begin
      return query
      select
        documents.id,
        documents.content,
        documents.url,
        1 - (documents.embedding <=> query_embedding) as similarity
      from documents
      where 1 - (documents.embedding <=> query_embedding) > similarity_threshold
      order by documents.embedding <=> query_embedding
      limit match_count;
    end;
    $$;

Chat frontend

  • NextJs styled with Tailwind CSS
  • Chats streamed using OpenAIStream. See utils/OpenAIStream.ts for details

๐Ÿš€Next Steps

Use this project as a foundation and build on top of this!

๐Ÿ’ก Ideas ๐Ÿ’ก

  • Entire history of SCOTUS cases?
  • Specific data for each US president + administration?
  • Patriot Act? Chips Act?
  • CIA, DEA, FDA, CDC, etc. + all the confusing docs on the .gov websites

๐Ÿ”งTools Used

Next OpenAI Supabase Tailwind CSS Vercel

๐Ÿ‘คContact

Email Twitter