import gradio as gr from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings from langchain.vectorstores import Chroma import openai import os openai.api_key = os.environ["OPENAI_API_KEY"] embedding = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2") vectordb = Chroma(persist_directory='db-DA', embedding_function=embedding) retriever = vectordb.as_retriever(search_kwargs={"k": 3}) def remove_duplicates(input_list): return list(dict.fromkeys(input_list)) def format_sources(doc): string = doc.metadata['source'][13:-4] if string == "home": return "https://dupperanalytics.com/" else: return "https://dupperanalytics.com/" + string def answer(message): ctx = retriever.get_relevant_documents(message) prompt = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. {context} Question: {question} Helpful Answer: """.format(context = " ".join([doc.page_content for doc in ctx]), question = message) response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages= [ {'role': 'user', 'content': prompt} ], temperature=0 ) sources_list = remove_duplicates([format_sources(doc) for doc in ctx]) sources = "\n\nSources:\n" + "\n".join(sources_list) ans = response['choices'][0]['message']['content'] + sources return ans iface = gr.Interface(fn=answer, inputs="text", outputs="text", examples=["Why might I choose DupperAnalytics over other providers?", "What makes the CEO unique?", "What cloud servers do Dupper Analytics use?"]) iface.launch()