from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.embeddings import OpenAIEmbeddings from langchain.chains import LLMChain from langchain.memory import ConversationBufferMemory from redis.commands.search.query import Query import time import os from dotenv import load_dotenv import numpy as np from database import redis_conn load_dotenv() llm = OpenAI(model_name="gpt-3.5-turbo", temperature=0.3, openai_api_key=os.getenv('OPENAI_API_KEY')) prompt = PromptTemplate( input_variables=["product_description"], template="Create comma seperated product keywords to perform a query on a amazon dataset for this user input: {product_description}", ) chain = LLMChain(llm=llm, prompt=prompt) userinput = input("Hey im a E-commerce Chatbot, how can i help you today? ") print("User:", userinput) # Run the chain only specifying the input variable. keywords = chain.run(userinput) embedding_model = OpenAIEmbeddings(openai_api_key=os.getenv('OPENAI_API_KEY')) #vectorize the query query_vector = embedding_model.embed_query(keywords) query_vector = np.array(query_vector).astype(np.float32).tobytes() #prepare the query ITEM_KEYWORD_EMBEDDING_FIELD = 'item_vector' topK=5 q = Query(f'*=>[KNN {topK} @{ITEM_KEYWORD_EMBEDDING_FIELD} $vec_param AS vector_score]').sort_by('vector_score').paging(0,topK).return_fields('vector_score','item_name','item_id','item_keywords').dialect(2) params_dict = {"vec_param": query_vector} #Execute the query results = redis_conn.ft().search(q, query_params = params_dict) full_result_string = '' for product in results.docs: full_result_string += product.item_name + ' ' + product.item_keywords + ' ' + product.item_id + "\n\n\n" # code The response template = """You are a chatbot. Be kind, detailed and nice. Present the given queried search result in a nice way as answer to the user input. dont ask questions back! just take the given context {chat_history} Human: {user_msg} Chatbot:""" prompt = PromptTemplate( input_variables=["chat_history", "user_msg"], template=template ) memory = ConversationBufferMemory(memory_key="chat_history") llm_chain = LLMChain( llm=OpenAI(model_name="gpt-3.5-turbo", temperature=0.8, openai_api_key=os.getenv('OPENAI_API_KEY')), prompt=prompt, verbose=False, memory=memory, ) answer = llm_chain.predict(user_msg=f"{full_result_string} ---\n\n {userinput}") print("Bot:", answer) time.sleep(0.5) while True: follow_up = input("Anything else you want to ask about this topic?") print("User:", follow_up) answer = llm_chain.predict( user_msg=follow_up ) print("Bot:", answer) time.sleep(0.5)