File size: 2,565 Bytes
5e994a1
5914582
 
 
250dba9
5e994a1
5914582
 
 
 
 
 
 
 
 
 
5e994a1
5914582
ab53869
 
470ad92
7f8f7cd
ab53869
5914582
 
ab53869
 
1af021a
5914582
250dba9
 
 
ab53869
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250dba9
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import streamlit as st
import chromadb
from chromadb.utils import embedding_functions
from sentence_transformers import SentenceTransformer
from openai import OpenAI

client = chromadb.PersistentClient(path="./chromadb/")
MODEL_NAME: str = "mixedbread-ai/mxbai-embed-large-v1" # ~ 0.5 gb
COLLECTION_NAME: str = "scheme"
EMBEDDING_FUNC = embedding_functions.SentenceTransformerEmbeddingFunction(model_name=MODEL_NAME)
schemer = client.get_collection(
    name=COLLECTION_NAME,
    embedding_function=EMBEDDING_FUNC,
)
DATA_AVAL: bool = schemer.count() > 0
APP_NAME: str = "Groove-GPT"

st.title(APP_NAME)
st.header("What is Groovy-GPT?")
st.write("Groovy-GPT is a RAG (Retrieval-Augmented Generation) model that uses ChromaDB to retrieve relevant documents and then uses OpenAI's models to generate a response.")
st.write("The model is trained on the MIT Scheme textbook and a handful of Discrete Math and Paradigms related content that Professor Troeger posted")
st.write("Data Avaliable: ", DATA_AVAL)

user_question: str = st.text_area("Enter your groovy questions here")
access_key: str = st.text_input("Enter your gpt key here", type="password")
st.markdown("*For more information about how to get an access key, read [this article](https://platform.openai.com/api-keys).*", unsafe_allow_html=True)
gpt_type: str = st.selectbox(label="Choose GPT Type", options=["gpt-3.5-turbo", "gpt-3.5-turbo-1106", "gpt-3.5-turbo-0125", "gpt-4-32k-0613", "gpt-4-0613", "gpt-4-0125-preview"], index=0)
st.markdown("*For more information about GPT types, read [this article](https://platform.openai.com/docs/models). Make sure it has money in it ☠️*", unsafe_allow_html=True)

if st.button('Query Database') & (access_key != "") & (user_question != ""):
    openai_client = OpenAI(api_key=access_key)

    with st.spinner('Loading...'):
        st.header("Results")
        # Perform the Chromadb query.
        results = schemer.query(
            query_texts=[user_question],
            n_results=10,
            include = ['documents']
        )
        documents = results["documents"]
        response = openai_client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "You are an expert in functional programming in Scheme, with great knowledge on programming paradigms."},
                {"role": "user", "content": user_question},
                {"role": "assistant", "content": str(documents)},
            ]
        )

    st.write(response.choices[0].message.content)