Spaces:
Sleeping
Sleeping
File size: 4,117 Bytes
6db9247 3a70a3d 6db9247 bc69b77 6db9247 34c5ca8 6db9247 8f459b9 6db9247 122fd53 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
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("## <center>All in One Document Chatting App</center>")
with gr.Tab("Chat With Your Documents"):
with gr.Column(elem_classes="col"):
with gr.Tab("Upload and Process Documents"):
with gr.Column():
# docs_upload_input = gr.Files(label="Upload File(s)")
# docs_upload_button = gr.Button("Upload")
# docs_upload_output = gr.Textbox(label="Output")
# docs_process_button = gr.Button("Process")
# docs_process_output = gr.Textbox(label="Output")
create_agent_button = gr.Button("Create Agent")
create_agent_output = gr.Textbox(label="Output")
# gr.ClearButton([docs_upload_input, docs_upload_output, docs_process_output, create_agent_output])
gr.ClearButton([create_agent_output])
with gr.Tab("Query Documents"):
with gr.Column():
docs_prompt_input = gr.Textbox(label="Custom Prompt")
docs_chatbot = gr.Chatbot(label="Chats")
docs_state = gr.State()
docs_search_input = gr.Textbox(label="Question")
docs_search_button = gr.Button("Search")
gr.ClearButton([docs_prompt_input, docs_search_input])
########################################################################################################
# docs_upload_button.click(save_docs, inputs=docs_upload_input, outputs=docs_upload_output)
# docs_process_button.click(process_docs, inputs=None, outputs=docs_process_output)
create_agent_button.click(create_agent, inputs=None, outputs=create_agent_output)
docs_search_button.click(
search_docs,
inputs=[docs_prompt_input, docs_search_input, docs_state],
outputs=[docs_chatbot, docs_state],
)
########################################################################################################
demo.queue()
demo.launch()
|