import os import openai os.environ["TOKENIZERS_PARALLELISM"] = "false" os.environ["OPENAI_API_KEY"] global agent def create_agent(): from langchain.chat_models import ChatOpenAI from langchain.chains.conversation.memory import ConversationSummaryBufferMemory from langchain.chains import ConversationChain global agent llm = ChatOpenAI(model_name="gpt-4o") memory = ConversationSummaryBufferMemory(llm=llm, max_token_limit=1000) agent = ConversationChain(llm=llm, memory=memory, verbose=True) return "Successful!" def formatted_response(docs, question, response, state): formatted_output = response + "\n\nSources" for i, doc in enumerate(docs): source_info = doc.metadata.get("source", "Unknown source") page_info = doc.metadata.get("page", None) doc_name = source_info.split("/")[-1].strip() if page_info is not None: formatted_output += f"\n{doc_name}\tpage no {page_info}" else: formatted_output += f"\n{doc_name}" state.append((question, formatted_output)) return state, state def search_docs(prompt, question, state): from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import FAISS from langchain.callbacks import get_openai_callback global agent agent = agent state = state or [] embeddings = OpenAIEmbeddings() docs_db = FAISS.load_local("/home/user/app/docs_db/", embeddings, allow_dangerous_deserialization=True) docs = docs_db.similarity_search(question) prompt += "\n\n" prompt += question prompt += "\n\n" prompt += str(docs) with get_openai_callback() as cb: response = agent.predict(input=prompt) print(cb) return formatted_response(docs, question, response, state) import gradio as gr css = """ .col{ max-width: 75%; margin: 0 auto; display: flex; flex-direction: column; justify-content: center; align-items: center; } """ with gr.Blocks(css=css) as demo: gr.Markdown("##