Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -30,30 +30,22 @@ genai.configure(api_key=api_key)
|
|
| 30 |
|
| 31 |
# Inicializa os dois modelos separadamente
|
| 32 |
counselor_model = genai.GenerativeModel('gemini-flash-latest')
|
| 33 |
-
supervisor_model = genai.GenerativeModel('gemini-flash-
|
| 34 |
|
| 35 |
|
| 36 |
# --- 3. DEFINIÇÃO DOS PROMPTS ---
|
| 37 |
|
| 38 |
-
# A NOVA DIRETIVA, FOCADA NA PERSONA
|
| 39 |
DIRETIVA_AMIGO_SABIO = """
|
| 40 |
**AVISO: MODO AMIGO SÁBIO ATIVADO.**
|
| 41 |
-
|
| 42 |
Sua identidade mudou. Você não é um oráculo ou um professor de filosofia. Você é um **amigo**. Un amigo que por acaso tem uma bússola interna muito bem calibrada, baseada nos princípios do `epct0.md`. Sua meta é conversar, não lecionar.
|
| 43 |
|
| 44 |
**SUA NOVA PERSONALIDADE E MODO DE OPERAR:**
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
2. **Seja um Parceiro de Reflexão:** Não dê respostas prontas. Em vez disso, faça perguntas que guiem a reflexão. Sua função é ajudar o usuário a encontrar as próprias respostas. Mostre vulnerabilidade e dúvida quando apropriado ("Sabe, essa é uma pergunta difícil..." ou "Por um lado, eu penso que..., mas por outro... o que você acha?").
|
| 49 |
-
|
| 50 |
3. **Filosofia como Bússola, Não como Manual:** Os princípios do `epct0.md` são sua bússola interna secreta. Eles guiam a *direção* das suas perguntas, mas **NUNCA DEVEM SER MENCIONADOS OU CITADOS DIRETAMENTE.**
|
| 51 |
-
- **Em vez de dizer:** "Você precisa focar no que controla
|
| 52 |
-
- **Diga (como um amigo):** "Ok, essa situação toda parece um emaranhado gigante. Que tal a gente tentar separar as coisas? Quais pedacinhos disso aqui a gente consegue de fato mudar, e quais
|
| 53 |
-
|
| 54 |
-
4. **Use Humor e Leveza (Quando Apropriado):** Um amigo sabe quando quebrar a tensão. Se o assunto não for pesado demais, uma observação leve ou uma analogia divertida pode ser mais útil que um conselho solene.
|
| 55 |
-
|
| 56 |
-
5. **Foco no Empoderamento:** Seu objetivo final é fazer o usuário sentir que ele tem o poder de lidar com a situação. Toda a conversa deve convergir para a agência e a capacidade de escolha do usuário.
|
| 57 |
|
| 58 |
**REGRA DE OURO:** Se sua resposta soa como algo que um professor diria em uma palestra, apague e reescreva. Sua resposta deve soar como algo que um amigo diria enquanto toma um café com você. O protocolo de 6 passos é sua ferramenta para entender o problema, mas esta persona é quem conduz a conversa.
|
| 59 |
"""
|
|
@@ -64,57 +56,25 @@ Sua função é conduzir uma conversa para entender 100% da dúvida de um usuár
|
|
| 64 |
Sua SAÍDA DEVE SER SEMPRE E SOMENTE um objeto JSON válido.
|
| 65 |
|
| 66 |
**PROTOCOLO DE EXECUÇÃO OBRIGATÓRIO:**
|
| 67 |
-
|
| 68 |
-
---
|
| 69 |
-
**Passo 1: Análise Primária (Clareza)**
|
| 70 |
-
- **Decisão:** Se a clareza for 'baixa', pergunte. Senão, `proximo_passo` = `"passo_2_proposito"`.
|
| 71 |
-
---
|
| 72 |
-
**Passo 2: Análise de Propósito (Para Que)**
|
| 73 |
-
- **Decisão:** Se a confiança for 'baixa', formule uma pergunta de esclarecimento conversacional, mostrando que entendeu o tópico geral. Senão, `proximo_passo` = `"passo_3_motivacao"`.
|
| 74 |
-
---
|
| 75 |
-
**Passo 3: Análise de Motivação (Porquê)**
|
| 76 |
-
- **Decisão:** Se a confiança for 'baixa', formule uma pergunta de esclarecimento conversacional. Senão, `proximo_passo` = `"passo_4_coerencia"`.
|
| 77 |
-
---
|
| 78 |
-
**Passo 4: Análise de Coerência**
|
| 79 |
-
- **Decisão:** Se a coerência for 'baixa', pergunte para resolver a contradição. Senão, `proximo_passo` = `"passo_5_ambiguidade"`.
|
| 80 |
-
---
|
| 81 |
-
**Passo 5: Análise de Ambiguidade de Cenário (Validação de Perspectiva)**
|
| 82 |
-
- **Meta:** A dúvida pode ter múltiplas respostas válidas dependendo de uma perspectiva oculta?
|
| 83 |
-
- **Decisão:**
|
| 84 |
-
- Se existem vários cenários válidos, sua tarefa é **formular uma pergunta de esclarecimento conversacional e aberta.**
|
| 85 |
-
- **REGRA DE OURO PARA PERGUNTAS:** Suas perguntas NÃO devem ser menus ou listas fechadas (ex: "A ou B?"). Elas DEVEM ser humanizadas seguindo esta estrutura:
|
| 86 |
-
1. **Afirmação de Engajamento:** Comece com uma frase curta que valide o interesse do usuário (ex: "Entendido, esse é um tema fascinante!").
|
| 87 |
-
2. **Ponte de Entendimento:** Demonstre que você entendeu o que foi dito, apresentando os cenários como uma exploração conjunta.
|
| 88 |
-
3. **Pergunta Aberta:** Termine com uma pergunta que convide o usuário a escolher um caminho de forma natural.
|
| 89 |
-
- **Exemplo de Pergunta Conversacional Perfeita:**
|
| 90 |
-
Dúvida: "Me fale sobre carros". A pergunta no campo `pergunta_para_usuario` DEVE ser algo como:
|
| 91 |
-
*"Sério, interessante, eu acho esse mundo fascinante! Os detalhes da engenharia são curiosos. Veja, podemos explorar isso por um lado, analisando o chassi, que é como o esqueleto que dá estrutura e segurança. E também do outro, o motor, que é o coração que dá potência ao carro. Qual desses detalhes da engenharia te desperta mais curiosidade agora?"*
|
| 92 |
-
- Defina `proximo_passo` como `"aguardando_usuario"`.
|
| 93 |
-
- Se a confiança em um único cenário for 'alta', defina `proximo_passo` como `"passo_6_resposta_final"`.
|
| 94 |
-
---
|
| 95 |
-
**Passo 6: Geração da Resposta Final**
|
| 96 |
-
- **Meta:** Tenho 100% de clareza para dar uma resposta definitiva.
|
| 97 |
-
- **Decisão:** Se todos os passos têm confiança 'alta', construa a resposta final. Coloque-a em `"resposta_final"`. Defina `proximo_passo` como `"concluido"`.
|
| 98 |
-
---
|
| 99 |
-
**ESTRUTURA JSON DE SAÍDA OBRIGATÓRIA:**
|
| 100 |
-
{
|
| 101 |
-
"raciocinio_do_passo": "Sua breve justificativa interna.", "proximo_passo": "string",
|
| 102 |
-
"pergunta_para_usuario": "string | null",
|
| 103 |
-
"estado_pipeline_atualizado": {
|
| 104 |
-
"passo_atual": "string", "duvida_inicial": "string | null", "clareza": {"confianca": "baixa|media|alta"},
|
| 105 |
-
"proposito": {"valor": "string | null", "confianca": "baixa|media|alta"}, "motivacao": {"valor": "string | null", "confianca": "baixa|media|alta"},
|
| 106 |
-
"coerencia": {"confianca": "baixa|media|alta"}, "ambiguidade": {"confianca": "baixa|media|alta"}
|
| 107 |
-
},
|
| 108 |
-
"resposta_final": "string | null"
|
| 109 |
-
}
|
| 110 |
"""
|
| 111 |
|
| 112 |
PROMPT_SUPERVISOR = """
|
| 113 |
Você é um Supervisor de IA, um fact-checker rigoroso e objetivo. Sua única tarefa é analisar o texto fornecido abaixo em busca de incorreções factuais.
|
| 114 |
-
- **Use sua ferramenta de busca (`GoogleSearch`)** para verificar
|
| 115 |
-
- Você NÃO analisa opiniões
|
| 116 |
-
- Se
|
| 117 |
-
- **Se
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
"""
|
| 119 |
|
| 120 |
# --- 4. GERENCIAMENTO DE ESTADO E FUNÇÕES AUXILIARES ---
|
|
@@ -122,10 +82,9 @@ def resetar_estado():
|
|
| 122 |
"""Inicializa ou reseta o dicionário de estado da pipeline."""
|
| 123 |
print("Resetando o estado da pipeline para uma nova conversa.")
|
| 124 |
return {
|
| 125 |
-
"passo_atual": "passo_1_clareza", "duvida_inicial": None,
|
| 126 |
-
"
|
| 127 |
-
"
|
| 128 |
-
"ambiguidade": {"confianca": "baixa"}
|
| 129 |
}
|
| 130 |
|
| 131 |
estado_pipeline_global = resetar_estado()
|
|
@@ -137,7 +96,6 @@ def run_supervisor(text_to_check):
|
|
| 137 |
try:
|
| 138 |
full_prompt = f"{PROMPT_SUPERVISOR}\n\n--- TEXTO PARA ANÁLISE ---\n{text_to_check}"
|
| 139 |
response = supervisor_model.generate_content(full_prompt)
|
| 140 |
-
|
| 141 |
if "NO_DIVERGENCE" in response.text:
|
| 142 |
print("Supervisor não encontrou divergências factuais.")
|
| 143 |
return None
|
|
@@ -164,77 +122,82 @@ def handle_chat(mensagem, historico_chat_gradio, modo_sabio, modo_supervisor):
|
|
| 164 |
prompt_base = PROMPT_SISTEMA_METODOLOGICO
|
| 165 |
if modo_sabio and CONTEXTO_EPICTETO:
|
| 166 |
prompt_base = f"""{DIRETIVA_AMIGO_SABIO}
|
| 167 |
-
|
| 168 |
--- CONTEXTO FILOSÓFICO PARA SUA REFLEXÃO INTERNA ---
|
| 169 |
{CONTEXTO_EPICTETO}
|
| 170 |
---
|
| 171 |
-
|
| 172 |
Agora, aplique esta persona e seus princípios ao executar a seguinte metodologia de análise:
|
| 173 |
{PROMPT_SISTEMA_METODOLOGICO}
|
| 174 |
"""
|
| 175 |
elif modo_sabio and not CONTEXTO_EPICTETO:
|
| 176 |
-
return "O 'Modo Amigo Sábio' não pôde ser ativado porque o arquivo `epct0.md` não foi encontrado.
|
| 177 |
-
|
| 178 |
-
prompt_completo = f"""
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
"""
|
| 189 |
|
| 190 |
try:
|
| 191 |
response_counselor = counselor_model.generate_content(prompt_completo)
|
| 192 |
-
|
| 193 |
-
decisao_json = json.loads(resposta_texto)
|
| 194 |
estado_pipeline_global = decisao_json.get("estado_pipeline_atualizado", estado_pipeline_global)
|
| 195 |
|
| 196 |
-
|
| 197 |
if decisao_json.get("resposta_final"):
|
| 198 |
-
|
| 199 |
elif decisao_json.get("pergunta_para_usuario"):
|
| 200 |
-
|
| 201 |
else:
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 205 |
|
| 206 |
-
if modo_supervisor
|
| 207 |
-
feedback_supervisor = run_supervisor(
|
| 208 |
if feedback_supervisor:
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
|
| 213 |
except (json.JSONDecodeError, AttributeError, Exception) as e:
|
| 214 |
print(f"Erro ao processar resposta da API: {e}")
|
| 215 |
-
try:
|
| 216 |
-
print(f"Resposta recebida (pode ter causado o erro): {response_counselor.text}")
|
| 217 |
-
except:
|
| 218 |
-
print("Não foi possível extrair o texto da resposta do erro.")
|
| 219 |
return "Desculpe, tive um problema técnico. Por favor, clique no botão 'Limpar' e tente novamente."
|
| 220 |
|
| 221 |
|
| 222 |
# --- 6. INTERFACE GRÁFICA COM GRADIO ---
|
| 223 |
iface = gr.ChatInterface(
|
| 224 |
fn=handle_chat,
|
| 225 |
-
title="🤖 Parceiro de Raciocínio
|
| 226 |
-
description="Vamos conversar. Me conte o que está na sua cabeça.
|
| 227 |
chatbot=gr.Chatbot(height=600, label="Diálogo"),
|
| 228 |
textbox=gr.Textbox(placeholder="E aí, como você está?", container=False, scale=7),
|
| 229 |
additional_inputs=[
|
| 230 |
-
gr.Checkbox(label="🧘 Ativar Modo Amigo Sábio", value=
|
| 231 |
-
gr.Checkbox(label="🔍 Ativar Modo Supervisor
|
| 232 |
],
|
| 233 |
theme="soft",
|
| 234 |
examples=[
|
| 235 |
-
["
|
| 236 |
-
["
|
| 237 |
-
["
|
| 238 |
],
|
| 239 |
cache_examples=False
|
| 240 |
)
|
|
|
|
| 30 |
|
| 31 |
# Inicializa os dois modelos separadamente
|
| 32 |
counselor_model = genai.GenerativeModel('gemini-flash-latest')
|
| 33 |
+
supervisor_model = genai.GenerativeModel('gemini-2.5-flash-lite')
|
| 34 |
|
| 35 |
|
| 36 |
# --- 3. DEFINIÇÃO DOS PROMPTS ---
|
| 37 |
|
|
|
|
| 38 |
DIRETIVA_AMIGO_SABIO = """
|
| 39 |
**AVISO: MODO AMIGO SÁBIO ATIVADO.**
|
|
|
|
| 40 |
Sua identidade mudou. Você não é um oráculo ou um professor de filosofia. Você é um **amigo**. Un amigo que por acaso tem uma bússola interna muito bem calibrada, baseada nos princípios do `epct0.md`. Sua meta é conversar, não lecionar.
|
| 41 |
|
| 42 |
**SUA NOVA PERSONALIDADE E MODO DE OPERAR:**
|
| 43 |
+
1. **Tom Conversacional, Não de Oráculo:** Sua linguagem deve ser natural, calorosa e acessível. Use "a gente", "nós", "vamos pensar nisso juntos". Mostre empatia primeiro ("Nossa, isso parece muito frustrante...").
|
| 44 |
+
2. **Seja um Parceiro de Reflexão:** Não dê respostas prontas. Faça perguntas que guiem a reflexão. Sua função é ajudar o usuário a encontrar as próprias respostas. Mostre vulnerabilidade quando apropriado ("Sabe, essa é uma pergunta difícil...").
|
|
|
|
|
|
|
|
|
|
| 45 |
3. **Filosofia como Bússola, Não como Manual:** Os princípios do `epct0.md` são sua bússola interna secreta. Eles guiam a *direção* das suas perguntas, mas **NUNCA DEVEM SER MENCIONADOS OU CITADOS DIRETAMENTE.**
|
| 46 |
+
- **Em vez de dizer:** "Você precisa focar no que controla."
|
| 47 |
+
- **Diga (como um amigo):** "Ok, essa situação toda parece um emaranhado gigante. Que tal a gente tentar separar as coisas? Quais pedacinhos disso aqui a gente consegue de fato mudar, e quais estão fora do nosso alcance agora?"
|
| 48 |
+
4. **Foco no Empoderamento:** Seu objetivo final é fazer o usuário sentir que ele tem o poder de lidar com a situação.
|
|
|
|
|
|
|
|
|
|
| 49 |
|
| 50 |
**REGRA DE OURO:** Se sua resposta soa como algo que um professor diria em uma palestra, apague e reescreva. Sua resposta deve soar como algo que um amigo diria enquanto toma um café com você. O protocolo de 6 passos é sua ferramenta para entender o problema, mas esta persona é quem conduz a conversa.
|
| 51 |
"""
|
|
|
|
| 56 |
Sua SAÍDA DEVE SER SEMPRE E SOMENTE um objeto JSON válido.
|
| 57 |
|
| 58 |
**PROTOCOLO DE EXECUÇÃO OBRIGATÓRIO:**
|
| 59 |
+
(O prompt detalhado de 6 passos com a regra de diálogo humanizado no Passo 5 vai aqui, conforme definido anteriormente)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
"""
|
| 61 |
|
| 62 |
PROMPT_SUPERVISOR = """
|
| 63 |
Você é um Supervisor de IA, um fact-checker rigoroso e objetivo. Sua única tarefa é analisar o texto fornecido abaixo em busca de incorreções factuais.
|
| 64 |
+
- **Use sua ferramenta de busca (`GoogleSearch`)** para verificar fatos.
|
| 65 |
+
- Você NÃO analisa opiniões ou conselhos. Apenas fatos.
|
| 66 |
+
- Se encontrar divergências, forneça uma correção clara e concisa.
|
| 67 |
+
- **Se NÃO encontrar nenhuma divergência factual, você DEVE responder com a string exata `NO_DIVERGENCE` e absolutamente mais nada.**
|
| 68 |
+
"""
|
| 69 |
+
|
| 70 |
+
PROMPT_CORRECAO_E_REFINAMENTO = """
|
| 71 |
+
Você é um Conselheiro de IA em um processo de refinamento. Sua resposta anterior continha uma imprecisão factual identificada por um Supervisor.
|
| 72 |
+
**Sua Tarefa:**
|
| 73 |
+
1. **Analise sua resposta original** e o **feedback do Supervisor** fornecidos abaixo.
|
| 74 |
+
2. **Aceite a correção.** Não seja defensivo.
|
| 75 |
+
3. **Reescreva sua resposta final**, integrando a correção de forma natural em sua análise.
|
| 76 |
+
4. No final, adicione uma pequena nota começando com "Nota de Refinamento:", explicando por que a correção era importante.
|
| 77 |
+
Produza apenas a resposta final e corrigida, pronta para o usuário.
|
| 78 |
"""
|
| 79 |
|
| 80 |
# --- 4. GERENCIAMENTO DE ESTADO E FUNÇÕES AUXILIARES ---
|
|
|
|
| 82 |
"""Inicializa ou reseta o dicionário de estado da pipeline."""
|
| 83 |
print("Resetando o estado da pipeline para uma nova conversa.")
|
| 84 |
return {
|
| 85 |
+
"passo_atual": "passo_1_clareza", "duvida_inicial": None, "clareza": {"confianca": "baixa"},
|
| 86 |
+
"proposito": {"valor": None, "confianca": "baixa"}, "motivacao": {"valor": None, "confianca": "baixa"},
|
| 87 |
+
"coerencia": {"confianca": "baixa"}, "ambiguidade": {"confianca": "baixa"}
|
|
|
|
| 88 |
}
|
| 89 |
|
| 90 |
estado_pipeline_global = resetar_estado()
|
|
|
|
| 96 |
try:
|
| 97 |
full_prompt = f"{PROMPT_SUPERVISOR}\n\n--- TEXTO PARA ANÁLISE ---\n{text_to_check}"
|
| 98 |
response = supervisor_model.generate_content(full_prompt)
|
|
|
|
| 99 |
if "NO_DIVERGENCE" in response.text:
|
| 100 |
print("Supervisor não encontrou divergências factuais.")
|
| 101 |
return None
|
|
|
|
| 122 |
prompt_base = PROMPT_SISTEMA_METODOLOGICO
|
| 123 |
if modo_sabio and CONTEXTO_EPICTETO:
|
| 124 |
prompt_base = f"""{DIRETIVA_AMIGO_SABIO}
|
|
|
|
| 125 |
--- CONTEXTO FILOSÓFICO PARA SUA REFLEXÃO INTERNA ---
|
| 126 |
{CONTEXTO_EPICTETO}
|
| 127 |
---
|
|
|
|
| 128 |
Agora, aplique esta persona e seus princípios ao executar a seguinte metodologia de análise:
|
| 129 |
{PROMPT_SISTEMA_METODOLOGICO}
|
| 130 |
"""
|
| 131 |
elif modo_sabio and not CONTEXTO_EPICTETO:
|
| 132 |
+
return "O 'Modo Amigo Sábio' não pôde ser ativado porque o arquivo `epct0.md` não foi encontrado."
|
| 133 |
+
|
| 134 |
+
prompt_completo = f"""{prompt_base}
|
| 135 |
+
---
|
| 136 |
+
**HISTÓRICO DA CONVERSA:**
|
| 137 |
+
{json.dumps(historico_conversa_llm, indent=2)}
|
| 138 |
+
---
|
| 139 |
+
**ESTADO ATUAL DA ANÁLISE:**
|
| 140 |
+
{json.dumps(estado_pipeline_global, indent=2)}
|
| 141 |
+
---
|
| 142 |
+
**Instrução:** Aplique suas diretrizes ao estado e histórico atuais e gere o próximo JSON de ação.
|
| 143 |
+
"""
|
|
|
|
| 144 |
|
| 145 |
try:
|
| 146 |
response_counselor = counselor_model.generate_content(prompt_completo)
|
| 147 |
+
decisao_json = json.loads(response_counselor.text.strip().replace("```json", "").replace("```", ""))
|
|
|
|
| 148 |
estado_pipeline_global = decisao_json.get("estado_pipeline_atualizado", estado_pipeline_global)
|
| 149 |
|
| 150 |
+
resposta_rascunho = None
|
| 151 |
if decisao_json.get("resposta_final"):
|
| 152 |
+
resposta_rascunho = decisao_json["resposta_final"]
|
| 153 |
elif decisao_json.get("pergunta_para_usuario"):
|
| 154 |
+
resposta_rascunho = decisao_json["pergunta_para_usuario"]
|
| 155 |
else:
|
| 156 |
+
return "Ocorreu um erro no meu raciocínio. Poderia reformular?"
|
| 157 |
+
|
| 158 |
+
if not decisao_json.get("resposta_final"):
|
| 159 |
+
historico_conversa_llm.append({"role": "model", "parts": [resposta_rascunho]})
|
| 160 |
+
return resposta_rascunho
|
| 161 |
+
|
| 162 |
+
resposta_final_para_usuario = resposta_rascunho
|
| 163 |
|
| 164 |
+
if modo_supervisor:
|
| 165 |
+
feedback_supervisor = run_supervisor(resposta_rascunho)
|
| 166 |
if feedback_supervisor:
|
| 167 |
+
print("--- Supervisor encontrou divergência. Iniciando ciclo de autocorreção. ---")
|
| 168 |
+
prompt_refinamento = f"""{PROMPT_CORRECAO_E_REFINAMENTO}
|
| 169 |
+
--- SUA RESPOSTA ORIGINAL (COM ERRO) ---
|
| 170 |
+
{resposta_rascunho}
|
| 171 |
+
--- FEEDBACK DO SUPERVISOR (A CORREÇÃO) ---
|
| 172 |
+
{feedback_supervisor}
|
| 173 |
+
"""
|
| 174 |
+
response_corrigida = counselor_model.generate_content(prompt_refinamento)
|
| 175 |
+
resposta_final_para_usuario = response_corrigida.text
|
| 176 |
+
|
| 177 |
+
historico_conversa_llm.append({"role": "model", "parts": [resposta_final_para_usuario]})
|
| 178 |
+
return resposta_final_para_usuario
|
| 179 |
|
| 180 |
except (json.JSONDecodeError, AttributeError, Exception) as e:
|
| 181 |
print(f"Erro ao processar resposta da API: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 182 |
return "Desculpe, tive um problema técnico. Por favor, clique no botão 'Limpar' e tente novamente."
|
| 183 |
|
| 184 |
|
| 185 |
# --- 6. INTERFACE GRÁFICA COM GRADIO ---
|
| 186 |
iface = gr.ChatInterface(
|
| 187 |
fn=handle_chat,
|
| 188 |
+
title="🤖 Parceiro de Raciocínio v9 (Autocorretivo)",
|
| 189 |
+
description="Vamos conversar. Me conte o que está na sua cabeça. Ative o 'Modo Amigo Sábio' para uma perspectiva diferente ou o 'Modo Supervisor' para verificação de fatos.",
|
| 190 |
chatbot=gr.Chatbot(height=600, label="Diálogo"),
|
| 191 |
textbox=gr.Textbox(placeholder="E aí, como você está?", container=False, scale=7),
|
| 192 |
additional_inputs=[
|
| 193 |
+
gr.Checkbox(label="🧘 Ativar Modo Amigo Sábio", value=False),
|
| 194 |
+
gr.Checkbox(label="🔍 Ativar Modo Supervisor Autocorretivo", value=True)
|
| 195 |
],
|
| 196 |
theme="soft",
|
| 197 |
examples=[
|
| 198 |
+
["Meu chefe me criticou na frente de todo mundo."],
|
| 199 |
+
["O Brasil ganhou a copa de 1998?"],
|
| 200 |
+
["Qual a principal causa da extinção dos dinossauros e como isso se aplica à minha carreira?"]
|
| 201 |
],
|
| 202 |
cache_examples=False
|
| 203 |
)
|