File size: 2,544 Bytes
ef6d407
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import ollama
import gradio as gr
from utils.rag_retriever import inicializar_rag, buscar_contexto  # Importe as funções do módulo

print("Inicializando...")

# Função para gerar resposta com o Ollama (agora usa prompt customizável)
def gerar_resposta_custom(frase_entrada, prompt_custom, documentos, index, embedder):
    """Gera uma resposta baseada no contexto recuperado e um prompt customizável."""
    contextos_com_distancia = buscar_contexto(frase_entrada, documentos, index, embedder)
    # Extrai apenas o texto dos documentos da lista de tuplas
    contexto = [texto for _, texto, _ in contextos_com_distancia]
    contexto_str = "\n".join(contexto)

    # Insere o contexto e a frase de entrada no prompt customizável
    prompt = prompt_custom.replace("{{context}}", contexto_str).replace("{{frase_entrada}}", frase_entrada)

    # Imprime o prompt no terminal
    print("\n--- Prompt Gerado ---")
    print(prompt)
    print("--- Fim do Prompt ---")

    resposta = ollama.generate(model='gemma3:1b', prompt=prompt)
    return contexto_str, resposta['response']

# Função principal para a interface Gradio (agora com prompt customizável e múltiplas saídas)
def interface_rag_alternativa(frase_entrada, prompt_custom):
    """Função chamada pela interface Gradio alternativa."""
    contexto, resposta = gerar_resposta_custom(frase_entrada, prompt_custom, documentos, index, embedder)
    return contexto, resposta

# Inicialização do RAG (mantida)
print("Inicializando RAG...")
documentos, index, embedder = inicializar_rag()

# Prompt padrão (pode ser editado pelo usuário)
prompt_padrao = """
Com base no seguinte contexto:
{{context}}

Responda à seguinte pergunta:
{{frase_entrada}}
"""

# Configuração da interface Gradio alternativa
with gr.Blocks() as interface_alternativa:
    with gr.Column(scale=1):
        frase_entrada_input = gr.Textbox(label="Frase de Entrada", placeholder="Ex.: O que é função puberal?")
        prompt_input = gr.Textbox(label="Prompt Customizado", value=prompt_padrao, lines=10)
        botao_enviar = gr.Button("Enviar")
    with gr.Column(scale=1):
        contexto_output = gr.Textbox(label="Contexto Recuperado")
        resposta_output = gr.Textbox(label="Resposta da LLM")

    botao_enviar.click(
        fn=interface_rag_alternativa,
        inputs=[frase_entrada_input, prompt_input],
        outputs=[contexto_output, resposta_output]
    )

# Iniciar a interface alternativa
print("Gerando Interface Alternativa...")
interface_alternativa.launch(share=True)