Spaces:
Running
Running
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() |