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()