import streamlit as st from PIL import Image from datetime import time as t import time from operator import itemgetter import os import json import getpass import openai from langchain.vectorstores import Pinecone from langchain.embeddings import OpenAIEmbeddings import pinecone from results import results_agent from filter import filter_agent from reranker import reranker from utils import build_filter OPENAI_API = st.secrets["OPENAI_API"] PINECONE_API = st.secrets["PINECONE_API"] openai.api_key = OPENAI_API pinecone.init( api_key= PINECONE_API, environment="gcp-starter" ) index_name = "use-class-db" embeddings = OpenAIEmbeddings(openai_api_key = OPENAI_API) index = pinecone.Index(index_name) k = 5 st.title("USC GPT - Find the perfect class") class_time = st.slider( "Filter Class Times:", value=(t(11, 30), t(12, 45))) # st.write("You're scheduled for:", class_time) units = st.slider( "Number of units", 1, 4, value = (1, 4) ) # for message in st.session_state.messages: # with st.chat_message(message["role"]): # st.markdown(message["content"]) for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) assistant = st.chat_message("assistant") initial_message = "How can I help you today?" def assistant_response(response): message_placeholder = assistant.empty() full_response = "" assistant_response = response # Simulate stream of response with milliseconds delay for chunk in assistant_response.split(): full_response += chunk + " " time.sleep(0.05) # Add a blinking cursor to simulate typing message_placeholder.markdown(full_response + "▌") message_placeholder.markdown(full_response) # Add assistant response to chat history st.session_state.messages.append({"role": "assistant", "content": full_response}) if "messages" not in st.session_state: st.session_state.messages = [] assistant_response(initial_message) if prompt := st.chat_input("What kind of class are you looking for?"): with st.chat_message("user"): st.markdown(prompt) st.session_state.messages.append({"role": "user", "content": prompt}) assistant_response("Yah I'm tired af right now boi") # if prompt := st.chat_input("What kind of class are you looking for?"): # # Display user message in chat message container # with st.chat_message("user"): # st.markdown(prompt) # # Add user message to chat history # st.session_state.messages.append({"role": "user", "content": prompt}) # response = filter_agent(prompt, OPENAI_API) # query = response # response = index.query( # vector= embeddings.embed_query(query), # # filter= build_filter(json), # top_k=5, # include_metadata=True # ) # response = reranker(query, response) # result_query = 'Original Query:' + query + 'Query Results:' + str(response) # assistant_response = results_agent(result_query, OPENAI_API) # if assistant_response: # with st.chat_message("assistant"): # message_placeholder = st.empty() # full_response = "" # # Simulate stream of response with milliseconds delay # for chunk in assistant_response.split(): # full_response += chunk + " " # time.sleep(0.05) # # Add a blinking cursor to simulate typing # message_placeholder.markdown(full_response + "▌") # message_placeholder.markdown(full_response) # # Add assistant response to chat history # st.session_state.messages.append({"role": "assistant", "content": full_response})