Julien Simon
fix: Update Gradio components for v6.0 API compatibility
29178b4
Raw
History Blame Contribute Delete
4.4 kB
"""Main Gradio application for RAG-powered document chat."""
import os
import gradio as gr
from config import HYBRID_ALPHA_UI_DEFAULT
from models import create_embeddings
from qa_chain import create_qa_chain
from vectorstore import load_or_create_vectorstore
from .components import CUSTOM_CSS, create_ui_components
from .handlers import (
create_respond_handler,
create_stream_chat_response,
update_hybrid_alpha_visibility,
update_rag_controls,
)
def initialize_chain():
"""Initialize the RAG chain components.
Returns:
tuple: (QAChainWrapper, list of available sources)
"""
embeddings = create_embeddings()
vectorstore = load_or_create_vectorstore(embeddings)
chain = create_qa_chain(vectorstore)
# Get available document sources for the filter dropdown
collection = vectorstore.get()
if not collection or not collection.get("metadatas"):
sources = []
else:
sources = sorted(
set(
os.path.basename(meta.get("source", ""))
for meta in collection["metadatas"]
if meta and meta.get("source")
)
)
return chain, sources
def create_app():
"""Create and configure the Gradio application.
Returns:
gr.Blocks: Configured Gradio interface
"""
# Initialize QA chain and get available sources
qa_chain, available_sources = initialize_chain()
# Create UI components
components = create_ui_components(available_sources)
demo = components["demo"]
# Create handlers
stream_chat_response_fn = create_stream_chat_response(qa_chain, available_sources)
respond_fn = create_respond_handler(stream_chat_response_fn)
# Event handlers - must be within Blocks context
with demo:
components["msg"].submit(
respond_fn,
[
components["msg"],
components["chatbot"],
components["rag_enabled"],
components["search_type"],
components["doc_filter"],
components["query_rewriting"],
components["reranking"],
components["hybrid_alpha"],
],
[
components["msg"],
components["chatbot"],
components["context_box"],
components["rag_enabled"],
components["doc_filter"],
],
)
components["submit"].click(
respond_fn,
[
components["msg"],
components["chatbot"],
components["rag_enabled"],
components["search_type"],
components["doc_filter"],
components["query_rewriting"],
components["reranking"],
components["hybrid_alpha"],
],
[
components["msg"],
components["chatbot"],
components["context_box"],
components["rag_enabled"],
components["doc_filter"],
],
)
components["clear"].click(
lambda: [[], "", False, "mmr", "All Documents", False, False, HYBRID_ALPHA_UI_DEFAULT],
None,
[
components["chatbot"],
components["context_box"],
components["rag_enabled"],
components["search_type"],
components["doc_filter"],
components["query_rewriting"],
components["reranking"],
components["hybrid_alpha"],
],
queue=False,
)
components["rag_enabled"].change(
update_rag_controls,
components["rag_enabled"],
[
components["search_col"],
components["filter_col"],
components["context_section"],
components["advanced_options"],
],
)
components["search_type"].change(
update_hybrid_alpha_visibility,
components["search_type"],
[components["hybrid_alpha"]],
)
return demo
if __name__ == "__main__":
app = create_app()
app.queue(max_size=20, default_concurrency_limit=2)
app.launch(share=False, server_port=7860, css=CUSTOM_CSS, theme=gr.themes.Soft())