""" RAG Template - Aplicação Educativa com PostgreSQL + pgvector Interface interativa mostrando cada passo do processo RAG: - Ingestão de documentos com visualizações - Exploração da base de conhecimento - Chat RAG com contextos visíveis - Playground de parâmetros - Monitoramento de métricas """ import os import uuid import gradio as gr from src.config import DATABASE_URL, APP_PORT from src.database import DatabaseManager from src.embeddings import EmbeddingManager from src.generation import GenerationManager from ui.ingestion_tab import create_ingestion_tab from ui.exploration_tab import create_exploration_tab from ui.chat_tab import create_chat_tab from ui.playground_tab import create_playground_tab from ui.monitoring_tab import create_monitoring_tab from ui.chunking_comparison_tab import create_chunking_comparison_tab from ui.hybrid_search_tab import create_hybrid_search_tab from ui.visualizations_tab import create_visualizations_tab from ui.custom_css import CUSTOM_CSS def create_app(): """Cria aplicação Gradio com todas as abas""" # Inicializa gerenciadores db_manager = DatabaseManager() embedding_manager = EmbeddingManager() generation_manager = GenerationManager() # Inicializa schema do banco db_ok = db_manager.init_schema() # Gera session ID único session_id = str(uuid.uuid4()) # Interface Gradio with gr.Blocks(title="RAG Template", css=CUSTOM_CSS) as demo: # Header with gr.Row(): gr.Markdown(""" # RAG Template Template interativo de Retrieval-Augmented Generation com PostgreSQL + pgvector Explore cada etapa do processo RAG de forma visual e educativa. """) # Status da conexão with gr.Row(): if db_ok: connection_status = gr.Markdown("**Status**: Banco de dados conectado", elem_classes=["success"]) else: error_msg = db_manager.last_error if db_manager.last_error else "Erro desconhecido" connection_status = gr.Markdown( f"**Status**: Erro de conexão com banco - {error_msg}. Configure a variável DATABASE_URL corretamente.", elem_classes=["error"] ) # Abas principais with gr.Tabs(): # Aba 1: Ingestão create_ingestion_tab(db_manager, embedding_manager, session_id) # Aba 2: Exploração create_exploration_tab(db_manager, embedding_manager, session_id) # Aba 3: Chat RAG create_chat_tab(db_manager, embedding_manager, generation_manager, session_id) # Aba 4: Playground create_playground_tab(db_manager, embedding_manager, generation_manager, session_id) # Aba 5: Comparação de Chunking create_chunking_comparison_tab() # Aba 6: Busca Híbrida create_hybrid_search_tab(db_manager, embedding_manager, session_id) # Aba 7: Visualizações create_visualizations_tab(db_manager, embedding_manager, session_id) # Aba 8: Monitoramento create_monitoring_tab(db_manager) # Footer with gr.Row(): gr.Markdown(""" --- **Tecnologias**: PostgreSQL + pgvector | Sentence Transformers | Hugging Face | Gradio [Documentação](https://github.com/guifav/rag_template) | [Reportar Issue](https://github.com/guifav/rag_template/issues) | [GitHub](https://github.com/guifav/rag_template) """) return demo if __name__ == "__main__": app = create_app() # Launch app.queue().launch( server_name="0.0.0.0", server_port=APP_PORT, share=False, show_error=True )