Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,101 +1,59 @@
|
|
| 1 |
import os
|
| 2 |
import gradio as gr
|
| 3 |
from mistralai.client import MistralClient
|
| 4 |
-
# Importação correta para ChatMessage, compatível com a versão 0.1.2 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 |
-
|
| 27 |
-
|
| 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 |
-
|
| 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 |
-
#
|
| 48 |
messages = []
|
| 49 |
for human, assistant in history:
|
| 50 |
-
|
| 51 |
-
messages.append(
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
# Adiciona a mensagem atual do usuário
|
| 55 |
-
messages.append(ChatMessage(role="user", content=message))
|
| 56 |
|
| 57 |
try:
|
| 58 |
-
|
| 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 |
-
#
|
| 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 |
-
|
| 68 |
-
|
| 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 |
-
|
| 74 |
-
|
| 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 |
-
#
|
| 81 |
-
# O Gradio ChatInterface já gerencia o histórico automaticamente
|
| 82 |
interface = gr.ChatInterface(
|
| 83 |
-
fn=chatbot_response,
|
| 84 |
-
title="Meu Chatbot
|
| 85 |
-
description="Converse com um modelo da Mistral AI
|
| 86 |
-
examples=[
|
| 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
|
| 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 |
-
|
| 100 |
-
# Se estivesse rodando localmente e quisesse um link público temporário para compartilhar, usaria interface.launch(share=True)
|
| 101 |
-
interface.launch()
|
|
|
|
| 1 |
import os
|
| 2 |
import gradio as gr
|
| 3 |
from mistralai.client import MistralClient
|
|
|
|
|
|
|
| 4 |
|
| 5 |
# --- Configuração da API da Mistral ---
|
|
|
|
|
|
|
|
|
|
| 6 |
api_key = os.environ.get("CHAT01")
|
| 7 |
+
mistral_client = None
|
| 8 |
|
|
|
|
|
|
|
| 9 |
if not api_key:
|
|
|
|
| 10 |
print("AVISO: A chave da API Mistral (CHAT01) não está configurada nas variáveis de ambiente.")
|
|
|
|
|
|
|
| 11 |
else:
|
|
|
|
| 12 |
try:
|
| 13 |
mistral_client = MistralClient(api_key=api_key)
|
| 14 |
+
print("✅ Cliente Mistral inicializado com sucesso!")
|
| 15 |
except Exception as e:
|
| 16 |
+
print(f"❌ ERRO ao inicializar o cliente Mistral: {e}")
|
| 17 |
+
mistral_client = None
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
|
| 19 |
+
# --- Função de resposta do chatbot ---
|
| 20 |
def chatbot_response(message, history):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
if mistral_client is None:
|
| 22 |
+
return "⚠️ O serviço de IA não está disponível. Verifique a chave da API."
|
|
|
|
| 23 |
|
| 24 |
+
# Constrói o histórico no formato da API Mistral
|
| 25 |
messages = []
|
| 26 |
for human, assistant in history:
|
| 27 |
+
messages.append({"role": "user", "content": human})
|
| 28 |
+
messages.append({"role": "assistant", "content": assistant})
|
| 29 |
+
messages.append({"role": "user", "content": message})
|
|
|
|
|
|
|
|
|
|
| 30 |
|
| 31 |
try:
|
| 32 |
+
print(f"📤 Enviando para a API: {message[:50]}...")
|
|
|
|
| 33 |
chat_response = mistral_client.chat(
|
| 34 |
+
model="mistral-large-latest", # Você pode mudar para outro modelo como "mistral-small"
|
|
|
|
|
|
|
|
|
|
| 35 |
messages=messages
|
| 36 |
)
|
| 37 |
+
resposta_bot = chat_response.choices[0].message["content"]
|
| 38 |
+
print(f"📥 Resposta recebida: {resposta_bot[:50]}...")
|
|
|
|
| 39 |
return resposta_bot
|
| 40 |
|
| 41 |
except Exception as e:
|
| 42 |
+
print(f"❌ ERRO ao chamar a API da Mistral: {e}")
|
| 43 |
+
return f"❌ Erro ao processar sua solicitação: {e}"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
|
| 45 |
+
# --- Interface do Gradio ---
|
|
|
|
| 46 |
interface = gr.ChatInterface(
|
| 47 |
+
fn=chatbot_response,
|
| 48 |
+
title="🤖 Meu Chatbot com Mistral AI",
|
| 49 |
+
description="Converse com um modelo da Mistral AI em tempo real!",
|
| 50 |
+
examples=[
|
| 51 |
["Qual a capital do Brasil?"],
|
| 52 |
["Explique o que é inteligência artificial."],
|
| 53 |
["Sugira 3 nomes para um cachorro."],
|
| 54 |
],
|
|
|
|
| 55 |
)
|
| 56 |
|
| 57 |
+
# --- Lançamento da aplicação ---
|
|
|
|
|
|
|
|
|
|
| 58 |
if __name__ == "__main__":
|
| 59 |
+
interface.launch()
|
|
|
|
|
|