import streamlit as st try: import dotenv dotenv.load_dotenv() except ImportError: pass import openai import os import streamlit.components.v1 as components import requests openai.api_key = os.getenv("OPENAI_API_KEY") embedbase_api_key = os.getenv("EMBEDBASE_API_KEY") URL = "https://api.embedbase.xyz" local_history = [] def add_to_dataset(dataset_id: str, data: str): response = requests.post( f"{URL}/v1/{dataset_id}", headers={ "Content-Type": "application/json", "Authorization": "Bearer " + embedbase_api_key, }, json={ "documents": [ { "data": data, }, ], }, ) response.raise_for_status() return response.json() def search_dataset(dataset_id: str, query: str, limit: int = 3): response = requests.post( f"{URL}/v1/{dataset_id}/search", headers={ "Content-Type": "application/json", "Authorization": "Bearer " + embedbase_api_key, }, json={ "query": query, "top_k": limit, }, ) response.raise_for_status() return response.json() def chat(user_input: str, conversation_name: str) -> str: local_history.append(user_input) history = search_dataset( f"infinite-pt-{conversation_name}", # searching using last 4 messages from local history "\n\n---\n\n".join(local_history[-4:]), limit=3, ) print("history", history) response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ { "role": "system", "content": "You are a helpful assistant.", }, *[ { "role": "assistant", "content": h["data"], } for h in history["similarities"][-5:] ], {"role": "user", "content": user_input}, ], ) message = response.choices[0]["message"] add_to_dataset(f"infinite-pt-{conversation_name}", message["content"]) local_history.append(message) return message["content"] from datetime import datetime # conversation name is date like ddmmyy_hhmmss # conversation_name = datetime.now().strftime("%d%m%y_%H%M%S") conversation_name = st.text_input("Conversation name", "purpose") # eg not local dev if not os.getenv("OPENAI_API_KEY"): embedbase_api_key = st.text_input( "Your Embedbase key", "get it here " ) openai_key = st.text_input( "Your OpenAI key", "get it here " ) openai.api_key = openai_key user_input = st.text_input("You", "How can I reach maximum happiness this year?") if st.button("Send"): infinite_pt_response = chat(user_input, conversation_name) st.markdown( f""" Infinite-PT """ ) st.write(infinite_pt_response) components.html( """ """, height=0, width=0, ) st.markdown( """ [Source code](https://huggingface.co./spaces/louis030195/infinite-memory-chatgpt) """ ) st.markdown( """ Built with ❤️ by [louis030195](https://louis030195.com). """ ) st.markdown( """ Powered by [Embedbase](https://embedbase.xyz). """ )