ceadibc commited on
Commit
682ea63
·
verified ·
1 Parent(s): cf85019

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -29
app.py CHANGED
@@ -1,19 +1,85 @@
1
  import gradio as gr
2
- from huggingface_hub import InferenceClient
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 = []
@@ -29,46 +95,38 @@ def responder_gemma(mensagem, historico):
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",
64
  textbox=gr.Textbox(placeholder="Digite uma mensagem e depois tecle Enter"),
65
- examples=[
66
- "O que é Acessibilidade Digital?",
67
- "Qual a importância da educação inclusiva?"
68
- ],
69
- theme="soft",
70
- fill_height=True,
71
-
72
  )
73
 
74
  if __name__ == "__main__":
 
1
  import gradio as gr
2
+ import google.generativeai as genai
3
  import os
 
4
 
5
+ # Configurar a API do Gemini
6
+ # Você pode obter sua chave de API em https://aistudio.google.com/app/apikey
7
+ # É altamente recomendável armazenar sua chave de API como uma variável de ambiente
8
+ # Ex: export GOOGLE_API_KEY="SUA_API_KEY_AQUI"
9
+ API_KEY = os.getenv("GOOGLE_API_KEY") # Obtém a chave de API da variável de ambiente
10
+ if not API_KEY:
11
+ # Se a variável de ambiente não estiver definida, use o valor direto (apenas para testes, não recomendado em produção)
12
+ API_KEY = "SUA_API_KEY_AQUI"
13
+
14
+ genai.configure(api_key=API_KEY)
15
+
16
+ # Inicializar o modelo Gemini
17
+ # Escolha um modelo adequado, por exemplo, "gemini-pro" para texto
18
+ model = genai.GenerativeModel('gemini-pro')
19
 
20
+ # Função para processar a conversa com a API do Gemini
21
+ def responder_gemini(mensagem, historico):
22
+ chat = model.start_chat(history=[])
23
+
24
+ # Adicionar histórico da conversa para o Gemini
25
+ # O formato do histórico para a API do Gemini é diferente
26
+ for item in historico:
27
+ if isinstance(item, list) and len(item) == 2:
28
+ user_msg, bot_msg = item
29
+ chat.send_message(user_msg)
30
+ chat.send_message(bot_msg) # Gemini intercala user/model, então tratamos como "model"
31
+
32
+ resposta_completa = ""
33
+ try:
34
+ response = chat.send_message(mensagem, stream=True)
35
+ for chunk in response:
36
+ if hasattr(chunk, 'text'):
37
+ resposta_completa += chunk.text
38
+ yield resposta_completa
39
+ else:
40
+ # Tratar casos onde o chunk pode não ter 'text' imediatamente
41
+ # Isso pode acontecer com blocos de segurança ou outras informações
42
+ pass
43
 
44
+ except Exception as e:
45
+ print(f"Erro inesperado ao chamar a API do Gemini: {e}")
46
+ yield "Ocorreu um erro ao gerar a resposta. Verifique sua chave de API e conexão."
47
+
48
+ if not resposta_completa.strip():
49
+ yield "Nenhuma resposta gerada. Tente novamente."
50
+
51
+
52
+ # Interface do chat com labels em português
53
+ demo = gr.ChatInterface(
54
+ responder_gemini, # Usar a nova função para o Gemini
55
+ title="Benjamin – Assistente Virtual da CEaD - IBC. Tire dúvidas com minha inteligência artificial (minha base de dados vai até 2021)",
56
+ textbox=gr.Textbox(placeholder="Digite uma mensagem e depois tecle Enter"),
57
+ examples=[
58
+ "O que é o IBC?",
59
+ "Qual a missão da CEaD?",
60
+ "Quem foi Louis Braille?",
61
+ "Qual a importância da educação inclusiva?"
62
+ ],
63
+ theme="soft", # Um tema mais suave para a interface
64
+ fill_height=True,
65
+ retry_btn="Tentar novamente",
66
+ undo_btn="Desfazer",
67
+ clear_btn="Limpar conversa"
68
  )
69
 
70
+ if __name__ == "__main__":
71
+ demo.launch()
72
+
73
+ ------------------
74
+
75
+ import gradio as gr
76
+ from huggingface_hub import InferenceClient
77
+
78
+ # Cliente de inferência com modelo de IA pública
79
+ client = InferenceClient(model="meta-llama/Llama-3.3-70B-Instruct") # Modelo gratuito e avançado
80
+
81
+ # Função para processar a conversa
82
+ def responder(mensagem, historico):
83
  mensagens = []
84
  if historico is None:
85
  historico = []
 
95
  resposta = ""
96
 
97
  try:
98
+ for mensagem in client.chat_completion(
99
+ mensagens,
100
  max_tokens=300,
101
  stream=True,
102
+ temperature=0.4,
103
+ top_p=0.8,
104
  ):
105
+ if not mensagem or not isinstance(mensagem, dict):
106
  continue
107
 
108
  try:
109
+ conteudo = mensagem["choices"][0]["delta"].get("content", "")
110
  if conteudo.strip():
111
  resposta += conteudo
112
  yield resposta
 
 
113
  except (AttributeError, IndexError, KeyError) as e:
114
+ print(f"Erro ao processar mensagem: {e}")
115
  continue
116
 
117
  except Exception as e:
118
+ print(f"Erro inesperado: {e}")
119
+ yield "Ocorreu um erro ao gerar a resposta."
120
 
121
  if not resposta.strip():
122
  yield "Nenhuma resposta gerada. Tente novamente."
123
 
124
  # Interface do chat com labels em português
125
  demo = gr.ChatInterface(
126
+ responder,
127
+ title="Benjamin – Assistente Virtual da CEaD - IBC. Tire dúvidas com minha inteligência artificial (minha base de dados vai até 2021)",
128
  textbox=gr.Textbox(placeholder="Digite uma mensagem e depois tecle Enter"),
129
+ type="messages"
 
 
 
 
 
 
130
  )
131
 
132
  if __name__ == "__main__":