File size: 3,845 Bytes
f5eb34f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b447de
 
 
f5eb34f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b447de
 
 
 
 
 
 
 
 
 
f5eb34f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
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
    )