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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -29
app.py CHANGED
@@ -1,29 +1,34 @@
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
3
- import os # Para gerenciar tokens do Hugging Face (opcional, mas recomendado)
4
  import sys
5
 
 
6
  print(f"Versão do Python: {sys.version}")
7
  print(f"Versão do Gradio: {gr.__version__}")
8
- # Cliente de inferência com o modelo google/gemma-7b-it
 
 
 
9
  # Você pode precisar de um token de acesso do Hugging Face (HUGGING_FACE_HUB_TOKEN)
10
  # para evitar limites de taxa mais baixos ou se o modelo tiver restrições de acesso.
11
  # Obtenha um token em: https://huggingface.co/settings/tokens
 
12
  # Ex: export HUGGING_FACE_HUB_TOKEN="hf_SUA_CHAVE_AQUI"
13
  HUGGING_FACE_TOKEN = os.getenv("HUGGING_FACE_HUB_TOKEN")
14
 
15
  client = InferenceClient(
16
- model="google/gemma-7b-it", # Alterado para google/gemma-7b-it
17
- token=HUGGING_FACE_TOKEN # Passe o token aqui (pode ser None se não tiver um)
18
  )
19
 
20
- # Função para processar a conversa (adaptada para o formato do Hugging Face)
21
  def responder_gemma(mensagem, historico):
22
  mensagens = []
23
  if historico is None:
24
  historico = []
25
 
26
- # Adiciona o histórico da conversa
27
  for item in historico:
28
  if isinstance(item, list) and len(item) == 2:
29
  user_msg, bot_msg = item
@@ -33,54 +38,61 @@ def responder_gemma(mensagem, historico):
33
 
34
  # Adiciona a mensagem atual do usuário
35
  mensagens.append({"role": "user", "content": mensagem})
36
- resposta = ""
 
37
 
38
  try:
39
- # A API de chat_completion do Hugging Face é compatível com o formato OpenAI
 
40
  for mensagem_chunk in client.chat_completion(
41
- messages=mensagens, # O parâmetro é 'messages' para o InferenceClient
42
- max_tokens=300,
43
- stream=True,
44
- temperature=0.7, # Ajuste a temperatura para um pouco mais de criatividade
45
- top_p=0.9, # Ajuste top_p para focar em palavras mais prováveis
46
  ):
 
47
  if not mensagem_chunk or not isinstance(mensagem_chunk, dict):
48
  continue
49
 
50
  try:
51
  # Extrai o conteúdo da resposta do chunk
52
  conteudo = mensagem_chunk["choices"][0]["delta"].get("content", "")
53
- if conteudo.strip():
54
  resposta += conteudo
55
  yield resposta # Envia a resposta parcial para a interface do Gradio
56
  except (AttributeError, IndexError, KeyError) as e:
 
57
  print(f"Erro ao processar mensagem do chunk: {e}")
58
- continue # Continua para o próximo chunk se houver erro neste
59
 
60
  except Exception as e:
 
61
  print(f"Erro inesperado ao chamar a API do Hugging Face com Gemma: {e}")
62
- yield "Ocorreu um erro ao gerar a resposta. Tente novamente."
63
 
 
64
  if not resposta.strip():
65
- yield "Nenhuma resposta gerada. Tente novamente."
66
 
67
- # Interface do chat com labels em português
68
  demo = gr.ChatInterface(
69
- responder_gemma, # Usar a nova função para Gemma
70
- title="Benjamin – Assistente Virtual da CEaD - IBC (Gemma-7B-IT)",
71
- textbox=gr.Textbox(placeholder="Digite uma mensagem e depois tecle Enter"),
72
- examples=[
73
- "O que é o Instituto Benjamin Constant?",
74
  "Qual a missão da CEaD?",
75
  "Quem foi Louis Braille?",
76
  "Qual a importância da educação inclusiva?"
77
  ],
78
- theme="soft",
79
- fill_height=True,
80
- retry_btn="Tentar novamente",
81
- undo_btn="Desfazer",
82
- clear_btn="Limpar conversa"
83
  )
84
 
 
85
  if __name__ == "__main__":
86
- demo.launch()
 
1
  import gradio as gr
2
  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
 
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()