import pinecone from sentence_transformers import SentenceTransformer import openai import json import gradio as gr pinecone.init(api_key="60422c7f-218d-4343-8158-5b4df9559628", environment="us-east1-gcp") index = pinecone.Index("chatgpt-memory") openai.api_key = "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" embmodel = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') def get_response(input, conversation): user_message = input if conversation!=[]: assistant_message = conversation[-1]["content"] else: assistant_message = "" messages = [{"role": "system", "content": "You are the assistant of 22 year old Henry Leonardi. You have access to memories from previous conversations."}] embed = embmodel.encode([user_message]).tolist()[0] matches = index.query(embed, top_k=5, include_metadata=True)["matches"] try: best = [m["id"] for m in matches][:3] for b in best: messages.extend(eval(b)) except: messages = [] pair = [] d = {"role":"user","content":user_message} conversation.append(d) messages.extend(conversation[-6:]) d["content"] = d["content"][:200] pair.append(d) assistant_message = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=messages)["choices"][0]["message"].to_dict()["content"] d = {"role":"assistant","content":assistant_message} conversation.append(d) response = d["content"] d["content"] = d["content"][:200] pair.append(d) if pair[0]["content"]!="bye": pair_str = str(json.dumps(pair).encode('utf-8'))[2:-1] index.upsert([(pair_str, embmodel.encode([pair]).tolist()[0])]) return response def conv(input, history=[]): conversation = [] for item in history: conversation.append({"role":"user","content":item[0]}) conversation.append({"role":"assistant","content":item[1]}) output = get_response(input, conversation) history.append((input, output)) return history, history block = gr.Blocks() with block: gr.Markdown("""