Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,44 +1,53 @@
|
|
| 1 |
import os
|
| 2 |
import gradio as gr
|
| 3 |
from mistralai.client import MistralClient
|
| 4 |
-
|
|
|
|
| 5 |
|
| 6 |
# --- Configuração da API da Mistral ---
|
| 7 |
|
| 8 |
# Acesse a chave da API a partir da variável de ambiente (o nome do Secret em maiúsculas)
|
|
|
|
| 9 |
api_key = os.environ.get("CHAT01")
|
| 10 |
|
| 11 |
-
# Verificação se a chave foi encontrada
|
|
|
|
| 12 |
if not api_key:
|
| 13 |
-
# Se a chave não estiver configurada,
|
| 14 |
-
# Para este template, vamos imprimir um aviso e não inicializar o cliente Mistral
|
| 15 |
print("AVISO: A chave da API Mistral (CHAT01) não está configurada nas variáveis de ambiente.")
|
| 16 |
-
print("
|
| 17 |
-
|
| 18 |
else:
|
| 19 |
-
#
|
| 20 |
try:
|
| 21 |
mistral_client = MistralClient(api_key=api_key)
|
| 22 |
print("Cliente Mistral inicializado com sucesso!")
|
| 23 |
except Exception as e:
|
| 24 |
-
|
| 25 |
-
|
|
|
|
|
|
|
| 26 |
|
| 27 |
# --- Função de Chat que usa a API da Mistral ---
|
| 28 |
|
| 29 |
def chatbot_response(message, history):
|
| 30 |
"""
|
| 31 |
-
Processa a mensagem do usuário
|
|
|
|
| 32 |
"""
|
| 33 |
# 'history' é uma lista de listas, onde cada sublista é [user_message, bot_response]
|
|
|
|
| 34 |
|
| 35 |
-
#
|
|
|
|
| 36 |
if mistral_client is None:
|
| 37 |
-
|
|
|
|
| 38 |
|
| 39 |
-
# Formata o histórico da conversa para o formato
|
| 40 |
messages = []
|
| 41 |
for human, assistant in history:
|
|
|
|
| 42 |
messages.append(ChatMessage(role="user", content=human))
|
| 43 |
messages.append(ChatMessage(role="assistant", content=assistant))
|
| 44 |
|
|
@@ -47,41 +56,46 @@ def chatbot_response(message, history):
|
|
| 47 |
|
| 48 |
try:
|
| 49 |
# Chama a API da Mistral para obter a resposta
|
| 50 |
-
print(f"
|
| 51 |
chat_response = mistral_client.chat(
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
| 53 |
messages=messages
|
| 54 |
)
|
|
|
|
| 55 |
resposta_bot = chat_response.choices[0].message.content
|
| 56 |
-
print(f"
|
| 57 |
return resposta_bot
|
| 58 |
|
| 59 |
except Exception as e:
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
|
|
|
| 63 |
|
| 64 |
# --- Configuração da Interface Gradio ---
|
| 65 |
|
| 66 |
-
# Cria a interface de chat
|
| 67 |
-
#
|
| 68 |
-
# `inputs` define o componente de entrada (um Chatbot para histórico e um Textbox para nova mensagem)
|
| 69 |
-
# `outputs` define o componente de saída (um Chatbot para exibir a conversa)
|
| 70 |
interface = gr.ChatInterface(
|
| 71 |
-
fn=chatbot_response,
|
| 72 |
-
title="Meu Chatbot Inteligente com Mistral AI",
|
| 73 |
-
description="Converse com um modelo da Mistral AI via API.",
|
| 74 |
-
examples=[
|
| 75 |
["Qual a capital do Brasil?"],
|
| 76 |
-
["Explique
|
| 77 |
-
["
|
| 78 |
-
]
|
|
|
|
| 79 |
)
|
| 80 |
|
| 81 |
-
#
|
| 82 |
-
|
| 83 |
-
#
|
|
|
|
| 84 |
if __name__ == "__main__":
|
| 85 |
-
#
|
| 86 |
-
# Se
|
| 87 |
interface.launch()
|
|
|
|
| 1 |
import os
|
| 2 |
import gradio as gr
|
| 3 |
from mistralai.client import MistralClient
|
| 4 |
+
# CORREÇÃO: Importação correta para ChatMessage na versão atual da biblioteca mistralai
|
| 5 |
+
from mistralai.models import ChatMessage
|
| 6 |
|
| 7 |
# --- Configuração da API da Mistral ---
|
| 8 |
|
| 9 |
# Acesse a chave da API a partir da variável de ambiente (o nome do Secret em maiúsculas)
|
| 10 |
+
# O nome do seu Secret nas configurações do Space é 'Chat01', então a variável de ambiente é 'CHAT01'
|
| 11 |
api_key = os.environ.get("CHAT01")
|
| 12 |
|
| 13 |
+
# Verificação se a chave foi encontrada e inicialização do cliente
|
| 14 |
+
mistral_client = None # Começa com o cliente como None
|
| 15 |
if not api_key:
|
| 16 |
+
# Se a chave não estiver configurada, imprime um aviso nos logs
|
|
|
|
| 17 |
print("AVISO: A chave da API Mistral (CHAT01) não está configurada nas variáveis de ambiente.")
|
| 18 |
+
print("Por favor, adicione a chave 'Chat01' nas configurações/Secrets do seu Space.")
|
| 19 |
+
# O bot não poderá responder usando a Mistral neste caso
|
| 20 |
else:
|
| 21 |
+
# Se a chave foi encontrada, tenta inicializar o cliente
|
| 22 |
try:
|
| 23 |
mistral_client = MistralClient(api_key=api_key)
|
| 24 |
print("Cliente Mistral inicializado com sucesso!")
|
| 25 |
except Exception as e:
|
| 26 |
+
# Em caso de erro na inicialização (chave inválida, etc.), imprime o erro
|
| 27 |
+
print(f"ERRO: Ocorreu um erro ao inicializar o cliente Mistral com a chave fornecida: {e}")
|
| 28 |
+
print("Verifique se a chave da API Mistral nas configurações está correta.")
|
| 29 |
+
mistral_client = None # Mantém o cliente como None em caso de erro
|
| 30 |
|
| 31 |
# --- Função de Chat que usa a API da Mistral ---
|
| 32 |
|
| 33 |
def chatbot_response(message, history):
|
| 34 |
"""
|
| 35 |
+
Processa a mensagem do usuário, obtém uma resposta da API da Mistral,
|
| 36 |
+
e gerencia o histórico da conversa.
|
| 37 |
"""
|
| 38 |
# 'history' é uma lista de listas, onde cada sublista é [user_message, bot_response]
|
| 39 |
+
# Gradio passa o histórico acumulado da conversa aqui.
|
| 40 |
|
| 41 |
+
# Se o cliente Mistral não foi inicializado (por falta ou erro na chave),
|
| 42 |
+
# retorna uma mensagem de erro e não tenta chamar a API.
|
| 43 |
if mistral_client is None:
|
| 44 |
+
print("Não foi possível responder: Cliente Mistral não está disponível.")
|
| 45 |
+
return "Desculpe, o serviço de inteligência artificial não está disponível no momento. Por favor, verifique a configuração da chave da API."
|
| 46 |
|
| 47 |
+
# Formata o histórico da conversa para o formato que a API da Mistral espera
|
| 48 |
messages = []
|
| 49 |
for human, assistant in history:
|
| 50 |
+
# Adiciona as mensagens anteriores do histórico
|
| 51 |
messages.append(ChatMessage(role="user", content=human))
|
| 52 |
messages.append(ChatMessage(role="assistant", content=assistant))
|
| 53 |
|
|
|
|
| 56 |
|
| 57 |
try:
|
| 58 |
# Chama a API da Mistral para obter a resposta
|
| 59 |
+
print(f"Enviando mensagem para a API da Mistral: '{message[:50]}...'") # Log para ver que a chamada está acontecendo
|
| 60 |
chat_response = mistral_client.chat(
|
| 61 |
+
# Especifique o modelo da Mistral que você deseja usar.
|
| 62 |
+
# Veja a documentação da Mistral para os modelos disponíveis.
|
| 63 |
+
# Exemplos comuns: "mistral-tiny", "mistral-small", "mistral-medium", "mistral-large-latest"
|
| 64 |
+
model="mistral-large-latest", # <-- Você pode mudar este nome de modelo
|
| 65 |
messages=messages
|
| 66 |
)
|
| 67 |
+
# Extrai o conteúdo da resposta do bot
|
| 68 |
resposta_bot = chat_response.choices[0].message.content
|
| 69 |
+
print(f"Recebida resposta da API (início): '{resposta_bot[:50]}...'") # Log para ver a resposta
|
| 70 |
return resposta_bot
|
| 71 |
|
| 72 |
except Exception as e:
|
| 73 |
+
# Em caso de erro durante a chamada da API (problema de conexão, erro na API, etc.)
|
| 74 |
+
print(f"ERRO: Ocorreu um erro ao chamar a API da Mistral: {e}")
|
| 75 |
+
# Retorna uma mensagem de erro amigável para o usuário na interface
|
| 76 |
+
return f"Desculpe, ocorreu um erro ao processar sua solicitação: {e}"
|
| 77 |
|
| 78 |
# --- Configuração da Interface Gradio ---
|
| 79 |
|
| 80 |
+
# Cria a interface de chat usando a função que definimos
|
| 81 |
+
# O Gradio ChatInterface já gerencia o histórico automaticamente
|
|
|
|
|
|
|
| 82 |
interface = gr.ChatInterface(
|
| 83 |
+
fn=chatbot_response, # A função que processa as mensagens
|
| 84 |
+
title="Meu Chatbot Inteligente com Mistral AI", # Título na interface
|
| 85 |
+
description="Converse com um modelo da Mistral AI via API.", # Descrição
|
| 86 |
+
examples=[ # Exemplos de perguntas para o usuário clicar e testar
|
| 87 |
["Qual a capital do Brasil?"],
|
| 88 |
+
["Explique o que é inteligência artificial."],
|
| 89 |
+
["Sugira 3 nomes para um cachorro."],
|
| 90 |
+
],
|
| 91 |
+
# Você pode adicionar mais configurações de interface aqui, se necessário
|
| 92 |
)
|
| 93 |
|
| 94 |
+
# --- Lançamento da Aplicação ---
|
| 95 |
+
|
| 96 |
+
# Esta parte inicia a interface Gradio.
|
| 97 |
+
# No Hugging Face Spaces, a função `launch()` é chamada para iniciar a aplicação web.
|
| 98 |
if __name__ == "__main__":
|
| 99 |
+
# O launch() sem argumentos roda a aplicação localmente ou no ambiente do Space.
|
| 100 |
+
# Se estivesse rodando localmente e quisesse um link público temporário para compartilhar, usaria interface.launch(share=True)
|
| 101 |
interface.launch()
|