ceadibc commited on
Commit
690b725
·
verified ·
1 Parent(s): c8c1be3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -43
app.py CHANGED
@@ -1,69 +1,45 @@
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
3
 
4
- # Cliente do modelo
5
- client = InferenceClient(model="meta-llama/Meta-Llama-3-8B-Instruct")
6
 
7
- # Lista de palavras-chave proibidas (fora do escopo do Benjamin)
8
- palavras_proibidas = [
9
- "presidente", "barão", "napoleão", "astronomia", "filosofia",
10
- "história do brasil", "segundo reinado", "guerra", "matemática",
11
- "química", "física", "celebridade", "política", "ator", "cantor", "esporte",
12
- "futebol", "economia", "bolsa", "bitcoin", "sexo", "fake news", "dinheiro"
13
- ]
14
-
15
- # Mensagem para perguntas fora do escopo
16
- mensagem_educada = (
17
- "Desculpe, posso responder apenas perguntas sobre acessibilidade na web, "
18
- "educação especial, tecnologia assistiva digital, deficiência visual, ou temas ligados ao Instituto Benjamin Constant (IBC)."
19
- )
20
-
21
- # Função principal do assistente
22
  def responder(mensagem, historico):
23
- # Verifica se a mensagem contém algum termo proibido
24
- mensagem_lower = mensagem.lower()
25
- if any(palavra in mensagem_lower for palavra in palavras_proibidas):
26
- yield mensagem_educada
27
- return
28
-
29
- mensagens = [{
30
- "role": "system",
31
- "content": (
32
- "Você é Benjamin, um assistente virtual técnico e educacional do Instituto Benjamin Constant (IBC). "
33
- "Você responde apenas perguntas relacionadas à acessibilidade na web, educação especial, deficiência visual, "
34
- "EaD acessível e temas do IBC. Quando não souber a resposta, diga que não sabe."
35
- )
36
- }]
37
-
38
  if historico is None:
39
  historico = []
40
 
41
  for item in historico:
42
  if isinstance(item, list) and len(item) == 2:
43
- mensagens.append({"role": "user", "content": item[0]})
44
- mensagens.append({"role": "assistant", "content": item[1]})
45
-
 
 
46
  mensagens.append({"role": "user", "content": mensagem})
47
  resposta = ""
48
 
49
  try:
50
- for msg in client.chat_completion(
51
  mensagens,
52
  max_tokens=5000,
53
  stream=True,
54
  temperature=0.3,
55
  top_p=0.8,
56
  ):
57
- if not msg or not isinstance(msg, dict):
58
  continue
 
59
  try:
60
- conteudo = msg["choices"][0]["delta"].get("content", "")
61
  if conteudo.strip():
62
  resposta += conteudo
63
  yield resposta
64
  except (AttributeError, IndexError, KeyError) as e:
65
  print(f"Erro ao processar mensagem: {e}")
66
  continue
 
67
  except Exception as e:
68
  print(f"Erro inesperado: {e}")
69
  yield "Ocorreu um erro ao gerar a resposta."
@@ -71,13 +47,13 @@ def responder(mensagem, historico):
71
  if not resposta.strip():
72
  yield "Nenhuma resposta gerada. Tente novamente."
73
 
74
- # Interface Gradio
75
  demo = gr.ChatInterface(
76
  responder,
77
- title="Benjamin – Assistente Virtual da CEaD / IBC",
78
- textbox=gr.Textbox(placeholder="Digite sua pergunta e pressione Enter"),
79
- type="messages"
80
  )
81
 
82
  if __name__ == "__main__":
83
- demo.launch()
 
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
3
 
4
+ # Cliente de inferência com modelo de IA pública
5
+ client = InferenceClient(model="meta-llama/Meta-Llama-3-8B-Instruct") # Modelo gratuito e avançado
6
 
7
+ # Função para processar a conversa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  def responder(mensagem, historico):
9
+ mensagens = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  if historico is None:
11
  historico = []
12
 
13
  for item in historico:
14
  if isinstance(item, list) and len(item) == 2:
15
+ user_msg, bot_msg = item
16
+ mensagens.append({"role": "user", "content": user_msg})
17
+ if bot_msg:
18
+ mensagens.append({"role": "assistant", "content": bot_msg})
19
+
20
  mensagens.append({"role": "user", "content": mensagem})
21
  resposta = ""
22
 
23
  try:
24
+ for mensagem in client.chat_completion(
25
  mensagens,
26
  max_tokens=5000,
27
  stream=True,
28
  temperature=0.3,
29
  top_p=0.8,
30
  ):
31
+ if not mensagem or not isinstance(mensagem, dict):
32
  continue
33
+
34
  try:
35
+ conteudo = mensagem["choices"][0]["delta"].get("content", "")
36
  if conteudo.strip():
37
  resposta += conteudo
38
  yield resposta
39
  except (AttributeError, IndexError, KeyError) as e:
40
  print(f"Erro ao processar mensagem: {e}")
41
  continue
42
+
43
  except Exception as e:
44
  print(f"Erro inesperado: {e}")
45
  yield "Ocorreu um erro ao gerar a resposta."
 
47
  if not resposta.strip():
48
  yield "Nenhuma resposta gerada. Tente novamente."
49
 
50
+ # Interface do chat com labels em português
51
  demo = gr.ChatInterface(
52
  responder,
53
+ title="Benjamin – Assistente Virtual com Inteligência Artificial da CEaD - IBC - Tire dúvidas, receba orientações e aproveite melhor com minha ajuda (minha base de dados vai até 2021)",
54
+ textbox=gr.Textbox(placeholder="Digite uma mensagem e depois tecle Enter"),
55
+ type="messages"
56
  )
57
 
58
  if __name__ == "__main__":
59
+ demo.launch()