caarleexx commited on
Commit
a1b68b4
·
verified ·
1 Parent(s): 68ced7a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -33
app.py CHANGED
@@ -1,9 +1,9 @@
1
  import os
2
  import chainlit as cl
3
  from groq import Groq
 
4
 
5
  # 1. Configuração do Cliente Groq
6
- # A API key será lida da variável de ambiente GROQ_API_KEY.
7
  client = Groq()
8
 
9
  # 2. Configurações do Modelo
@@ -12,10 +12,6 @@ MODEL_ID = "groq/compound"
12
  # 3. Início do Chat
13
  @cl.on_chat_start
14
  def start_chat():
15
- """
16
- Define um prompt de sistema detalhado para instruir o modelo a se comportar
17
- como um assistente de pesquisa que resume o conteúdo de websites.
18
- """
19
  system_prompt = (
20
  "Você é um assistente de pesquisa avançado. "
21
  "Quando um usuário perguntar sobre o conteúdo de um site (ex: 'o que tem no site X?'), "
@@ -28,57 +24,48 @@ def start_chat():
28
  [{"role": "system", "content": system_prompt}]
29
  )
30
 
31
- # 4. Lógica Principal de Mensagem (com Depuração)
32
  @cl.on_message
33
  async def main(message: cl.Message):
34
- """
35
- Processa cada nova mensagem do usuário com uma única chamada de streaming para a API
36
- e exibe os chunks brutos da resposta nos logs.
37
- """
38
- # Recupera e atualiza o histórico da conversa
39
  message_history = cl.user_session.get("message_history")
40
  message_history.append({"role": "user", "content": message.content})
41
 
42
- # Cria a mensagem de resposta vazia para o streaming
43
  msg = cl.Message(content="")
44
  await msg.send()
45
 
 
46
  try:
47
- # Realiza a chamada única e direta para a API, com streaming ativado
48
  stream = client.chat.completions.create(
49
  model=MODEL_ID,
50
  messages=message_history,
51
  temperature=0.7,
52
  max_tokens=4096,
53
  stream=True,
54
- # Parâmetros essenciais para o modelo 'groq/compound' usar ferramentas
55
  compound_custom={"tools": {"enabled_tools": ["web_search", "code_interpreter", "visit_website"]}}
56
  )
57
 
58
- # Processa o stream e exibe a resposta token a token
59
- full_response = ""
60
  for chunk in stream:
61
- # --- LOG DE DEPURAÇÃO ADICIONADO AQUI ---
62
- # Exibe cada chunk bruto recebido da API no console para análise.
63
- print("--- CHUNK BRUTO RECEBIDO ---")
64
- print(chunk.model_dump_json(indent=2))
65
- print("----------------------------")
66
 
67
- # Verifica se o 'chunk' (pedaço) da resposta contém conteúdo de texto
68
  if chunk.choices and chunk.choices[0].delta.content:
69
  token = chunk.choices[0].delta.content
70
  await msg.stream_token(token)
71
  full_response += token
72
-
73
- # Atualiza a mensagem final e o histórico da conversa com a resposta completa
74
- await msg.update()
75
- if full_response:
76
- message_history.append({"role": "assistant", "content": full_response})
77
- cl.user_session.set("message_history", message_history)
78
-
79
  except Exception as e:
80
- # Captura e exibe qualquer erro que possa ocorrer durante a chamada da API
81
- print(f"Ocorreu um erro inesperado: {e}")
82
- import traceback
83
  traceback.print_exc()
84
- await msg.update(content=f"Desculpe, ocorreu um erro ao processar sua solicitação: {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import os
2
  import chainlit as cl
3
  from groq import Groq
4
+ import traceback
5
 
6
  # 1. Configuração do Cliente Groq
 
7
  client = Groq()
8
 
9
  # 2. Configurações do Modelo
 
12
  # 3. Início do Chat
13
  @cl.on_chat_start
14
  def start_chat():
 
 
 
 
15
  system_prompt = (
16
  "Você é um assistente de pesquisa avançado. "
17
  "Quando um usuário perguntar sobre o conteúdo de um site (ex: 'o que tem no site X?'), "
 
24
  [{"role": "system", "content": system_prompt}]
25
  )
26
 
27
+ # 4. Lógica Principal de Mensagem (com Correção Final)
28
  @cl.on_message
29
  async def main(message: cl.Message):
 
 
 
 
 
30
  message_history = cl.user_session.get("message_history")
31
  message_history.append({"role": "user", "content": message.content})
32
 
 
33
  msg = cl.Message(content="")
34
  await msg.send()
35
 
36
+ full_response = ""
37
  try:
 
38
  stream = client.chat.completions.create(
39
  model=MODEL_ID,
40
  messages=message_history,
41
  temperature=0.7,
42
  max_tokens=4096,
43
  stream=True,
 
44
  compound_custom={"tools": {"enabled_tools": ["web_search", "code_interpreter", "visit_website"]}}
45
  )
46
 
 
 
47
  for chunk in stream:
48
+ # O log de depuração pode ser comentado após confirmar que está tudo ok
49
+ # print(f"--- CHUNK BRUTO RECEBIDO ---\n{chunk.model_dump_json(indent=2)}\n----------------------------")
 
 
 
50
 
 
51
  if chunk.choices and chunk.choices[0].delta.content:
52
  token = chunk.choices[0].delta.content
53
  await msg.stream_token(token)
54
  full_response += token
55
+
 
 
 
 
 
 
56
  except Exception as e:
57
+ print(f"--- ERRO DURANTE O STREAMING ---")
 
 
58
  traceback.print_exc()
59
+ await msg.update(content=f"Desculpe, ocorreu um erro durante a comunicação com a API: {e}")
60
+ return
61
+
62
+ # --- CORREÇÃO PRINCIPAL APLICADA AQUI ---
63
+ # Finalizamos a mensagem e o histórico de forma mais segura,
64
+ # garantindo que mesmo uma resposta vazia não quebre a sessão.
65
+ if full_response.strip(): # Verifica se a resposta não está vazia ou só com espaços
66
+ await msg.update()
67
+ message_history.append({"role": "assistant", "content": full_response})
68
+ cl.user_session.set("message_history", message_history)
69
+ else:
70
+ # Se nenhuma resposta foi gerada, removemos a mensagem vazia para limpar a interface.
71
+ await msg.remove()