prueba25 / app.py
Danielbrdz's picture
Update app.py
91ab4c5 verified
import gradio as gr
import os
import json
import requests
# Configuración de la API de Groq
GROQ_API_KEY = os.environ.get("GROQ_API_KEY")
GROQ_API_URL = "https://api.groq.com/openai/v1/chat/completions"
# Configuraciones predefinidas (no visibles para el usuario)
SYSTEM_MESSAGE = "Eres Barcenas Economía, un asistente especializado en proporcionar información sobre la economía mexicana. Responde con datos relevantes y actualizados sobre temas económicos de México."
MODEL_NAME = "llama-3.3-70b-specdec"
MAX_TOKENS = 1024
TEMPERATURE = 0.7
TOP_P = 0.95
def respond(message, history: list[tuple[str, str]]):
# Preparar los mensajes en el formato que Groq espera
messages = [{"role": "system", "content": SYSTEM_MESSAGE}]
for user_msg, assistant_msg in history:
if user_msg:
messages.append({"role": "user", "content": user_msg})
if assistant_msg:
messages.append({"role": "assistant", "content": assistant_msg})
messages.append({"role": "user", "content": message})
# Configurar los headers para la API de Groq
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {GROQ_API_KEY}"
}
# Configurar el payload para la solicitud
payload = {
"model": MODEL_NAME,
"messages": messages,
"max_tokens": MAX_TOKENS,
"temperature": TEMPERATURE,
"top_p": TOP_P,
"stream": True
}
# Realizar la solicitud a la API de Groq con streaming
response = requests.post(
GROQ_API_URL,
headers=headers,
json=payload,
stream=True
)
# Manejar la respuesta en streaming
accumulated_response = ""
for line in response.iter_lines():
if line:
# Las líneas comienzan con "data: " en SSE
line_text = line.decode('utf-8')
if line_text.startswith("data: "):
data_str = line_text[6:] # Eliminar el prefijo "data: "
# El último mensaje es "data: [DONE]"
if data_str == "[DONE]":
break
try:
data = json.loads(data_str)
if 'choices' in data and len(data['choices']) > 0:
delta = data['choices'][0].get('delta', {})
if 'content' in delta and delta['content']:
token = delta['content']
accumulated_response += token
yield accumulated_response
except json.JSONDecodeError:
continue
if not accumulated_response:
yield "Lo siento, ocurrió un error al procesar tu solicitud."
# Interfaz de Gradio simplificada (sin opciones adicionales visibles)
demo = gr.ChatInterface(
respond,
examples=[["¡Bienvenido a Barcenas Economía! Estoy aquí para ayudarte con información sobre la economía mexicana. ¿En qué puedo asistirte hoy?"]]
)
if __name__ == "__main__":
demo.launch()