import gradio as gr
from pipeline import preprocessing_pipeline, conversational_rag
from pipeline import system_message, user_message
from haystack.dataclasses import ChatMessage
import time
import os
def process_files_into_docs(files, progress=gr.Progress()):
if isinstance(files, dict):
files = [files]
if not files:
return 'No file uploaded!'
preprocessing_pipeline.run({'file_type_router': {'sources': files}})
return "Database created🤗🤗"
def rag(history, question):
if history is None:
history = []
messages = [system_message, user_message]
res = conversational_rag.run(
data = {
'query_rephrase_prompt_builder' : {'query': question},
'prompt_builder': {'template': messages, 'query': question},
'memory_joiner': {'values': [ChatMessage.from_user(question)]}
},
include_outputs_from=['llm', 'query_rephrase_llm']
)
bot_message = res['llm']['replies'][0].content
streamed_message = ""
for token in bot_message.split():
streamed_message += f"{token} "
yield history + [(question, streamed_message.strip())], " "
time.sleep(0.05)
history.append((question, bot_message))
yield history, " "
EXAMPLE_FILE = "RAG Survey.pdf"
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.HTML("
TalkToFiles - Query your documents! 📂📄
")
gr.Markdown("""##### This AI chatbot🤖 can help you chat with your documents. Can upload Text(.txt), PDF(.pdf) and Markdown(.md) files.
Please do not upload confidential documents.""")
with gr.Row():
with gr.Column(scale=86):
gr.Markdown("""#### ***Step 1 - Upload Documents and Initialize RAG pipeline*** Can upload Multiple documents""")
with gr.Row():
file_input = gr.File(
label='Upload Files',
file_count='multiple',
file_types=['.pdf', '.txt', '.md'],
interactive=True
)
with gr.Row():
process_files = gr.Button('Create Document store')
with gr.Row():
result = gr.Textbox(label="Document store", value='Document store not initialized')
# Pre-processing Events
process_files.click(
fn=process_files_into_docs,
inputs=file_input,
outputs=result,
show_progress=True
)
def load_example():
return [EXAMPLE_FILE]
with gr.Row():
gr.Examples(
examples=[[EXAMPLE_FILE]],
inputs=file_input,
examples_per_page=1,
label="Click to upload an example"
).dataset.click(fn=load_example, inputs=[], outputs=file_input)
with gr.Column(scale=200):
gr.Markdown("""#### ***Step 2 - Chat with your docs*** """)
chatbot = gr.Chatbot(label='ChatBot', type="messages") # <-- Added type="messages" to fix deprecation
user_input = gr.Textbox(label='Enter your query', placeholder='Type here...')
with gr.Row():
submit_button = gr.Button("Submit")
clear_btn = gr.ClearButton([user_input, chatbot], value='Clear')
submit_button.click(
rag,
inputs=[chatbot, user_input],
outputs=[chatbot, user_input]
)
# Use api_name=None to avoid API generation issues
demo.launch()