from langchain_community.embeddings import GPT4AllEmbeddings from langchain_community.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.chains import RetrievalQA from langchain import PromptTemplate from langchain_openai import OpenAI from time import time import pandas as pd import numpy as np import getpass import re import os import gradio as gr os.environ['OPENAI_API_KEY'] """#### Load predefined chroma""" persist_directory = 'chromadb' embedding = OpenAIEmbeddings(model='text-embedding-3-large') vectordb = Chroma(persist_directory=persist_directory, embedding_function=embedding) retriever = vectordb.as_retriever(search_type="similarity",search_kwargs={"k":50}) """## MultiQueryRetriever """ from langchain.retrievers.multi_query import MultiQueryRetriever from langchain_openai import ChatOpenAI llm = ChatOpenAI(model_name="gpt-4-turbo",temperature=0) retriever_from_llm = MultiQueryRetriever.from_llm( retriever=vectordb.as_retriever(search_type="mmr", search_kwargs={"k":50}), llm=llm ) import logging logging.basicConfig() logging.getLogger("langchain.retrievers.multi_query").setLevel(logging.INFO) from langchain.prompts import PromptTemplate from langchain.chains import LLMChain qa_prompt = PromptTemplate( input_variables=['query','contexts'], template = """ You are a recommendation system that analyze the user's interest and generate an email subject and body for PETCO. If the question cannot be answered using the information provided answer with 'I don't know'. Context: {context} Question: {query}, """, ) qa_chain = LLMChain(llm=llm, prompt=qa_prompt) def call_rag(question): docs = retriever_from_llm.get_relevant_documents(query=question) out = qa_chain.invoke( input={ "query": question, "context": "\n---\n".join([d.page_content for d in docs]) } ) return out["text"] user_db={ os.environ["username"]:os.environ["password"], } interface = gr.Interface( fn=call_rag, inputs="text", outputs="text", title="PETCO Email Generator Using RAG", description=""" Try input below example prompts in the model! Example prompt: \n 1. Send an email that conveys to consumers that they are able to get $2 off all online purchases above $10 on Valentines’ Day 2024. Please use the appropriate emojis for the holiday. 2. Generate a welcoming email for a new pet owner who just adopted a puppy, including a checklist of essential items they need to buy. """, ) if __name__=="__main__": interface.launch( auth=lambda u,p: user_db.get(u)==p, auth_message="Welcome! Please enable third party cookies or you will not be able to login." )