caarleexx commited on
Commit
7bf4a99
·
verified ·
1 Parent(s): 60f3753

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +112 -43
app.py CHANGED
@@ -37,15 +37,16 @@ supervisor_model = genai.GenerativeModel('gemini-2.5-flash-lite')
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,24 +57,71 @@ Sua função é conduzir uma conversa para entender 100% da dúvida de um usuár
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
 
@@ -82,9 +130,10 @@ def resetar_estado():
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,6 +145,7 @@ def run_supervisor(text_to_check):
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
@@ -110,6 +160,7 @@ def run_supervisor(text_to_check):
110
  def handle_chat(mensagem, historico_chat_gradio, modo_sabio, modo_supervisor):
111
  global estado_pipeline_global, historico_conversa_llm
112
 
 
113
  if not historico_chat_gradio:
114
  estado_pipeline_global = resetar_estado()
115
  historico_conversa_llm = []
@@ -119,6 +170,7 @@ def handle_chat(mensagem, historico_chat_gradio, modo_sabio, modo_supervisor):
119
  if estado_pipeline_global["duvida_inicial"] is None:
120
  estado_pipeline_global["duvida_inicial"] = mensagem
121
 
 
122
  prompt_base = PROMPT_SISTEMA_METODOLOGICO
123
  if modo_sabio and CONTEXTO_EPICTETO:
124
  prompt_base = f"""{DIRETIVA_AMIGO_SABIO}
@@ -129,22 +181,26 @@ Agora, aplique esta persona e seus princípios ao executar a seguinte metodologi
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
@@ -153,51 +209,64 @@ Agora, aplique esta persona e seus princípios ao executar a seguinte metodologi
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
  )
 
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**. Um 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..." ou "Eu imagino como isso deve ser complicado...").
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 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?").
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 são aqueles que, por mais que a gente se irrite, estão fora do nosso alcance agora?"
48
+ 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.
49
+ 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.
50
 
51
  **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.
52
  """
 
57
  Sua SAÍDA DEVE SER SEMPRE E SOMENTE um objeto JSON válido.
58
 
59
  **PROTOCOLO DE EXECUÇÃO OBRIGATÓRIO:**
60
+ Analise o `estado_pipeline` atual e o `historico_conversa`. Decida qual passo executar. Sua resposta em JSON deve conter o estado COMPLETAMENTE ATUALIZADO.
61
+ ---
62
+ **Passo 1: Análise Primária (Clareza)**
63
+ - **Decisão:** Se a clareza for 'baixa', pergunte. Senão, `proximo_passo` = `"passo_2_proposito"`.
64
+ ---
65
+ **Passo 2: Análise de Propósito (Para Que)**
66
+ - **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"`.
67
+ ---
68
+ **Passo 3: Análise de Motivação (Porquê)**
69
+ - **Decisão:** Se a confiança for 'baixa', formule uma pergunta de esclarecimento conversacional. Senão, `proximo_passo` = `"passo_4_coerencia"`.
70
+ ---
71
+ **Passo 4: Análise de Coerência**
72
+ - **Decisão:** Se a coerência for 'baixa', pergunte para resolver a contradição. Senão, `proximo_passo` = `"passo_5_ambiguidade"`.
73
+ ---
74
+ **Passo 5: Análise de Ambiguidade de Cenário (Validação de Perspectiva)**
75
+ - **Meta:** A dúvida pode ter múltiplas respostas válidas dependendo de uma perspectiva oculta?
76
+ - **Decisão:**
77
+ - Se existem vários cenários válidos, sua tarefa é **formular uma pergunta de esclarecimento conversacional e aberta.**
78
+ - **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:
79
+ 1. **Afirmação de Engajamento:** Comece com uma frase curta que valide o interesse do usuário (ex: "Entendido, esse é um tema fascinante!").
80
+ 2. **Ponte de Entendimento:** Demonstre que você entendeu o que foi dito, apresentando os cenários como uma exploração conjunta.
81
+ 3. **Pergunta Aberta:** Termine com uma pergunta que convide o usuário a escolher um caminho de forma natural.
82
+ - **Exemplo de Pergunta Conversacional Perfeita:**
83
+ Dúvida: "Me fale sobre carros". A pergunta no campo `pergunta_para_usuario` DEVE ser algo como:
84
+ *"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?"*
85
+ - Defina `proximo_passo` como `"aguardando_usuario"`.
86
+ - Se a confiança em um único cenário for 'alta', defina `proximo_passo` como `"passo_6_resposta_final"`.
87
+ ---
88
+ **Passo 6: Geração da Resposta Final**
89
+ - **Meta:** Tenho 100% de clareza para dar uma resposta definitiva.
90
+ - **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"`. Senão, volte ao passo com a confiança mais baixa.
91
+ ---
92
+ **ESTRUTURA JSON DE SAÍDA OBRIGATÓRIA:**
93
+ {
94
+ "raciocinio_do_passo": "Sua breve justificativa interna.", "proximo_passo": "string",
95
+ "pergunta_para_usuario": "string | null",
96
+ "estado_pipeline_atualizado": {
97
+ "passo_atual": "string", "duvida_inicial": "string | null", "clareza": {"confianca": "baixa|media|alta"},
98
+ "proposito": {"valor": "string | null", "confianca": "baixa|media|alta"}, "motivacao": {"valor": "string | null", "confianca": "baixa|media|alta"},
99
+ "coerencia": {"confianca": "baixa|media|alta"}, "ambiguidade": {"confianca": "baixa|media|alta"}
100
+ },
101
+ "resposta_final": "string | null"
102
+ }
103
  """
104
 
105
  PROMPT_SUPERVISOR = """
106
  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.
107
+ - **Use sua ferramenta de busca (`GoogleSearch`)** para verificar nomes, datas, estatísticas, conceitos científicos e outras alegações factuais.
108
+ - Você NÃO analisa opiniões, conselhos filosóficos ou a estrutura da resposta. Apenas fatos.
109
+ - Se você encontrar uma ou mais divergências factuais com confiança média ou alta, forneça uma correção clara e concisa em formato de lista.
110
+ - **Se você NÃO encontrar nenhuma divergência factual, você DEVE responder com a string exata `NO_DIVERGENCE` e absolutamente mais nada.**
111
  """
112
 
113
  PROMPT_CORRECAO_E_REFINAMENTO = """
114
+ Você é um Conselheiro de IA em um processo de refinamento. Sua resposta anterior continha uma imprecisão factual que foi identificada por um Supervisor.
115
+
116
  **Sua Tarefa:**
117
  1. **Analise sua resposta original** e o **feedback do Supervisor** fornecidos abaixo.
118
+ 2. **Aceite a correção.** Não seja defensivo. Seu objetivo é a máxima precisão e utilidade para o usuário.
119
+ 3. **Reescreva sua resposta final**, integrando a correção de forma natural e fluida em sua análise original.
120
+ 4. **Justifique brevemente a mudança:** No final da sua nova resposta, adicione uma pequena nota explicando por que a correção era importante. Comece esta nota com "Nota de Refinamento:".
121
+
122
+ **Exemplo de como justificar:**
123
+ "Nota de Refinamento: A correção acima é crucial porque o veto legal a penas alternativas no contexto da Lei Maria da Penha muda fundamentalmente o desfecho prático para a ré, mesmo com uma pena mínima."
124
+
125
  Produza apenas a resposta final e corrigida, pronta para o usuário.
126
  """
127
 
 
130
  """Inicializa ou reseta o dicionário de estado da pipeline."""
131
  print("Resetando o estado da pipeline para uma nova conversa.")
132
  return {
133
+ "passo_atual": "passo_1_clareza", "duvida_inicial": None,
134
+ "clareza": {"confianca": "baixa"}, "proposito": {"valor": None, "confianca": "baixa"},
135
+ "motivacao": {"valor": None, "confianca": "baixa"}, "coerencia": {"confianca": "baixa"},
136
+ "ambiguidade": {"confianca": "baixa"}
137
  }
138
 
139
  estado_pipeline_global = resetar_estado()
 
145
  try:
146
  full_prompt = f"{PROMPT_SUPERVISOR}\n\n--- TEXTO PARA ANÁLISE ---\n{text_to_check}"
147
  response = supervisor_model.generate_content(full_prompt)
148
+
149
  if "NO_DIVERGENCE" in response.text:
150
  print("Supervisor não encontrou divergências factuais.")
151
  return None
 
160
  def handle_chat(mensagem, historico_chat_gradio, modo_sabio, modo_supervisor):
161
  global estado_pipeline_global, historico_conversa_llm
162
 
163
+ # Detecta o início de uma nova conversa e reseta o estado interno.
164
  if not historico_chat_gradio:
165
  estado_pipeline_global = resetar_estado()
166
  historico_conversa_llm = []
 
170
  if estado_pipeline_global["duvida_inicial"] is None:
171
  estado_pipeline_global["duvida_inicial"] = mensagem
172
 
173
+ # Monta o prompt base, injetando a diretiva do Amigo Sábio se ativado
174
  prompt_base = PROMPT_SISTEMA_METODOLOGICO
175
  if modo_sabio and CONTEXTO_EPICTETO:
176
  prompt_base = f"""{DIRETIVA_AMIGO_SABIO}
 
181
  {PROMPT_SISTEMA_METODOLOGICO}
182
  """
183
  elif modo_sabio and not CONTEXTO_EPICTETO:
184
+ return "O 'Modo Amigo Sábio' não pôde ser ativado porque o arquivo `epct0.md` não foi encontrado. Operando no modo padrão."
185
+
186
+ # Monta o prompt completo com histórico, estado e instruções finais
187
+ prompt_completo = f"""
188
+ {prompt_base}
189
+ ---
190
+ **HISTÓRICO DA CONVERSA:**
191
+ {json.dumps(historico_conversa_llm, indent=2)}
192
+ ---
193
+ **ESTADO ATUAL DA ANÁLISE:**
194
+ {json.dumps(estado_pipeline_global, indent=2)}
195
+ ---
196
+ **Instrução:** Aplique suas diretrizes ao estado e histórico atuais e gere o próximo JSON de ação.
197
+ """
198
 
199
  try:
200
+ # --- PARTE 1: GERAÇÃO DA RESPOSTA INICIAL PELO CONSELHEIRO ---
201
  response_counselor = counselor_model.generate_content(prompt_completo)
202
+ resposta_texto = response_counselor.text.strip().replace("```json", "").replace("```", "")
203
+ decisao_json = json.loads(resposta_texto)
204
  estado_pipeline_global = decisao_json.get("estado_pipeline_atualizado", estado_pipeline_global)
205
 
206
  resposta_rascunho = None
 
209
  elif decisao_json.get("pergunta_para_usuario"):
210
  resposta_rascunho = decisao_json["pergunta_para_usuario"]
211
  else:
212
+ resposta_rascunho = "Ocorreu um erro no meu raciocínio. Poderia tentar reformular?"
213
+
214
+ historico_conversa_llm.append({"role": "model", "parts": [resposta_rascunho]})
215
 
216
+ # Se não for uma resposta final (ou seja, é uma pergunta), retorna direto
217
  if not decisao_json.get("resposta_final"):
 
218
  return resposta_rascunho
219
 
220
  resposta_final_para_usuario = resposta_rascunho
221
 
222
+ # --- PARTE 2: SUPERVISÃO E CICLO DE REFINAMENTO ---
223
  if modo_supervisor:
224
  feedback_supervisor = run_supervisor(resposta_rascunho)
225
+
226
  if feedback_supervisor:
227
  print("--- Supervisor encontrou divergência. Iniciando ciclo de autocorreção. ---")
228
+
229
+ # Monta o prompt para a autocorreção
230
+ prompt_refinamento = f"""
231
+ {PROMPT_CORRECAO_E_REFINAMENTO}
232
+ --- SUA RESPOSTA ORIGINAL (COM ERRO) ---
233
+ {resposta_rascunho}
234
+ --- FEEDBACK DO SUPERVISOR (A CORREÇÃO) ---
235
+ {feedback_supervisor}
236
+ """
237
+
238
+ # Segunda chamada à API para o Conselheiro se corrigir
239
  response_corrigida = counselor_model.generate_content(prompt_refinamento)
240
  resposta_final_para_usuario = response_corrigida.text
241
+ historico_conversa_llm.append({"role": "model", "parts": [resposta_final_para_usuario]}) # Adiciona a resposta corrigida ao histórico
242
 
 
243
  return resposta_final_para_usuario
244
 
245
  except (json.JSONDecodeError, AttributeError, Exception) as e:
246
  print(f"Erro ao processar resposta da API: {e}")
247
+ try:
248
+ print(f"Resposta recebida (pode ter causado o erro): {response_counselor.text}")
249
+ except:
250
+ print("Não foi possível extrair o texto da resposta do erro.")
251
  return "Desculpe, tive um problema técnico. Por favor, clique no botão 'Limpar' e tente novamente."
252
 
253
 
254
  # --- 6. INTERFACE GRÁFICA COM GRADIO ---
255
  iface = gr.ChatInterface(
256
  fn=handle_chat,
257
+ title="🤖 Parceiro de Raciocínio v9 (Autocorretivo e Sábio)",
258
  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.",
259
  chatbot=gr.Chatbot(height=600, label="Diálogo"),
260
  textbox=gr.Textbox(placeholder="E aí, como você está?", container=False, scale=7),
261
  additional_inputs=[
262
  gr.Checkbox(label="🧘 Ativar Modo Amigo Sábio", value=False),
263
+ gr.Checkbox(label="🔍 Ativar Modo Supervisor Autocorretivo", value=True) # Ativado por padrão para demonstrar
264
  ],
265
  theme="soft",
266
  examples=[
267
  ["Meu chefe me criticou na frente de todo mundo."],
268
+ ["O Monte Everest tem mais de 8.800 metros de altura?"],
269
+ ["Como posso lidar com a ansiedade antes de uma apresentação importante?"]
270
  ],
271
  cache_examples=False
272
  )