ceadibc commited on
Commit
a77c5e5
·
verified ·
1 Parent(s): 97b2894

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -45
app.py CHANGED
@@ -3,96 +3,75 @@ from huggingface_hub import InferenceClient
3
  import os
4
  import sys
5
 
6
- # --- Verificações de versão para depuração ---
7
  print(f"Versão do Python: {sys.version}")
8
- print(f"Versão do Gradio: {gr.__version__}")
9
- # -------------------------------------------
10
 
11
- # Configuração do Cliente de Inferência do Hugging Face
12
- # Modelo: google/gemma-7b-it
13
- # Você pode precisar de um token de acesso do Hugging Face (HUGGING_FACE_HUB_TOKEN)
14
- # para evitar limites de taxa mais baixos ou se o modelo tiver restrições de acesso.
15
- # Obtenha um token em: https://huggingface.co/settings/tokens
16
- # Recomenda-se armazenar o token como uma variável de ambiente:
17
- # Ex: export HUGGING_FACE_HUB_TOKEN="hf_SUA_CHAVE_AQUI"
18
  HUGGING_FACE_TOKEN = os.getenv("HUGGING_FACE_HUB_TOKEN")
19
 
20
  client = InferenceClient(
21
  model="google/gemma-7b-it",
22
- token=HUGGING_FACE_TOKEN # Será None se a variável de ambiente não estiver definida
23
  )
24
 
25
- # Função para processar a conversa com o modelo Gemma
26
  def responder_gemma(mensagem, historico):
27
  mensagens = []
28
  if historico is None:
29
  historico = []
30
 
31
- # Constrói o histórico da conversa no formato esperado pela API de chat do Hugging Face
32
  for item in historico:
33
  if isinstance(item, list) and len(item) == 2:
34
  user_msg, bot_msg = item
35
  mensagens.append({"role": "user", "content": user_msg})
36
- if bot_msg: # Adiciona a resposta do bot apenas se não for vazia
37
  mensagens.append({"role": "assistant", "content": bot_msg})
38
 
39
- # Adiciona a mensagem atual do usuário
40
  mensagens.append({"role": "user", "content": mensagem})
41
-
42
- resposta = "" # Variável para acumular a resposta do modelo
43
 
44
  try:
45
- # Chama a API de chat_completion do Hugging Face com o modelo Gemma
46
- # O stream=True permite que a resposta seja construída e exibida em tempo real
47
  for mensagem_chunk in client.chat_completion(
48
- messages=mensagens, # O parâmetro é 'messages'
49
- max_tokens=300, # Limite de tokens na resposta do modelo
50
- stream=True, # Ativa o streaming da resposta
51
- temperature=0.7, # Controla a aleatoriedade da resposta (0.0 a 1.0)
52
- top_p=0.9, # Controla a diversidade da resposta (0.0 a 1.0)
53
  ):
54
- # Verifica se o chunk da mensagem é válido
55
  if not mensagem_chunk or not isinstance(mensagem_chunk, dict):
56
  continue
57
 
58
  try:
59
- # Extrai o conteúdo da resposta do chunk
60
  conteudo = mensagem_chunk["choices"][0]["delta"].get("content", "")
61
- if conteudo.strip(): # Se houver conteúdo válido
62
  resposta += conteudo
63
- yield resposta # Envia a resposta parcial para a interface do Gradio
 
 
64
  except (AttributeError, IndexError, KeyError) as e:
65
- # Captura erros ao processar um chunk específico (ex: formato inesperado)
66
  print(f"Erro ao processar mensagem do chunk: {e}")
67
- continue # Continua para o próximo chunk
68
 
69
  except Exception as e:
70
- # Captura erros gerais na chamada da API (ex: problema de conexão, token inválido)
71
  print(f"Erro inesperado ao chamar a API do Hugging Face com Gemma: {e}")
72
- yield "Ocorreu um erro ao gerar a resposta. Por favor, tente novamente mais tarde."
73
 
74
- # Mensagem de fallback se nenhuma resposta for gerada
75
  if not resposta.strip():
76
- yield "Nenhuma resposta gerada. Por favor, tente novamente."
77
 
78
- # Definição da interface do chat com Gradio
79
  demo = gr.ChatInterface(
80
- responder_gemma, # A função que processa as mensagens do chat
81
- title="Benjamin – Assistente Virtual da CEaD - IBC (Gemma-7B-IT)", # Título da interface
82
- textbox=gr.Textbox(placeholder="Digite uma mensagem e depois tecle Enter", container=False, scale=7), # Configurações da caixa de texto
83
- examples=[ # Exemplos de perguntas para facilitar o teste
84
  "O que é o IBC?",
85
  "Qual a missão da CEaD?",
86
  "Quem foi Louis Braille?",
87
  "Qual a importância da educação inclusiva?"
88
  ],
89
- theme="soft", # Tema visual da interface
90
- fill_height=True, # Preenche a altura disponível
91
- retry_btn="Tentar novamente", # Botão para tentar a última pergunta novamente
92
- undo_btn="Desfazer", # Botão para desfazer a última interação
93
- clear_btn="Limpar conversa" # Botão para limpar todo o histórico da conversa
94
  )
95
 
96
- # Lança a interface do Gradio quando o script é executado
97
  if __name__ == "__main__":
98
  demo.launch()
 
3
  import os
4
  import sys
5
 
 
6
  print(f"Versão do Python: {sys.version}")
7
+ print(f"Versão do Gradio: {gr.__version__}") # Ainda mostrará 5.38.2, mas o código irá rodar
 
8
 
 
 
 
 
 
 
 
9
  HUGGING_FACE_TOKEN = os.getenv("HUGGING_FACE_HUB_TOKEN")
10
 
11
  client = InferenceClient(
12
  model="google/gemma-7b-it",
13
+ token=HUGGING_FACE_TOKEN
14
  )
15
 
 
16
  def responder_gemma(mensagem, historico):
17
  mensagens = []
18
  if historico is None:
19
  historico = []
20
 
 
21
  for item in historico:
22
  if isinstance(item, list) and len(item) == 2:
23
  user_msg, bot_msg = item
24
  mensagens.append({"role": "user", "content": user_msg})
25
+ if bot_msg:
26
  mensagens.append({"role": "assistant", "content": bot_msg})
27
 
 
28
  mensagens.append({"role": "user", "content": mensagem})
29
+ resposta = ""
 
30
 
31
  try:
 
 
32
  for mensagem_chunk in client.chat_completion(
33
+ messages=mensagens,
34
+ max_tokens=300,
35
+ stream=True,
36
+ temperature=0.7,
37
+ top_p=0.9,
38
  ):
 
39
  if not mensagem_chunk or not isinstance(mensagem_chunk, dict):
40
  continue
41
 
42
  try:
 
43
  conteudo = mensagem_chunk["choices"][0]["delta"].get("content", "")
44
+ if conteudo.strip():
45
  resposta += conteudo
46
+ yield resposta
47
+ # else: # Comentei para evitar mensagens desnecessárias nos logs
48
+ # print(f"Chunk sem conteúdo: {mensagem_chunk}")
49
  except (AttributeError, IndexError, KeyError) as e:
 
50
  print(f"Erro ao processar mensagem do chunk: {e}")
51
+ continue
52
 
53
  except Exception as e:
 
54
  print(f"Erro inesperado ao chamar a API do Hugging Face com Gemma: {e}")
55
+ yield "Ocorreu um erro ao gerar a resposta. Tente novamente."
56
 
 
57
  if not resposta.strip():
58
+ yield "Nenhuma resposta gerada. Tente novamente."
59
 
60
+ # Interface do chat com labels em português
61
  demo = gr.ChatInterface(
62
+ responder_gemma,
63
+ title="Benjamin – Assistente Virtual da CEaD - IBC (Gemma-7B-IT)",
64
+ textbox=gr.Textbox(placeholder="Digite uma mensagem e depois tecle Enter"),
65
+ examples=[
66
  "O que é o IBC?",
67
  "Qual a missão da CEaD?",
68
  "Quem foi Louis Braille?",
69
  "Qual a importância da educação inclusiva?"
70
  ],
71
+ theme="soft",
72
+ fill_height=True,
73
+
 
 
74
  )
75
 
 
76
  if __name__ == "__main__":
77
  demo.launch()