File size: 2,695 Bytes
f0ecf68
 
 
38f2233
f40ea2a
f0ecf68
 
 
 
 
 
 
 
 
38f2233
f0ecf68
38f2233
 
 
 
 
 
 
f0ecf68
38f2233
f0ecf68
38f2233
 
 
f0ecf68
 
38f2233
f0ecf68
 
38f2233
 
 
 
 
 
 
f0ecf68
38f2233
 
 
 
 
 
 
f0ecf68
38f2233
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f0ecf68
38f2233
f0ecf68
38f2233
 
 
 
f0ecf68
38f2233
 
 
f0ecf68
 
 
38f2233
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import gradio as gr
from huggingface_hub import InferenceClient

# Inicializar el cliente de inferencia
client = InferenceClient("Qwen/QwQ-32B-Preview")

def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    # Construir el contexto de mensajes
    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})
    
    response = ""
    
    # Realizar la llamada al modelo con streaming deshabilitado para capturar toda la respuesta
    full_response = client.chat_completion(
        messages,
        max_tokens=max_tokens,
        stream=False,  # Deshabilitar streaming para capturar toda la respuesta de una vez
        temperature=temperature,
        top_p=top_p,
    )
    
    # Extraer el contenido de la respuesta
    if full_response and full_response.choices:
        response = full_response.choices[0].message['content']
    
    return response

# Definir los controles adicionales con mayor claridad y rangos adecuados
system_message_input = gr.Textbox(
    value="Responde siempre en español, y el código siempre completo",
    label="Mensaje del Sistema",
    lines=2,
    placeholder="Instrucciones para el modelo...",
)

max_tokens_slider = gr.Slider(
    minimum=512,
    maximum=8192,  # Aumentar el máximo si el modelo lo soporta
    step=1,
    value=2048,  # Aumentar el valor por defecto para respuestas más largas
    label="Máximo de Tokens Nuevos",
)

temperature_slider = gr.Slider(
    minimum=0.1,
    maximum=2.0,  # Ajustar el rango para mayor control
    step=0.1,
    value=0.7,
    label="Temperatura",
)

top_p_slider = gr.Slider(
    minimum=0.1,
    maximum=1.0,
    step=0.05,
    value=0.95,
    label="Top-p (muestreo por núcleo)",
)

# Configurar la interfaz de chat con una apariencia mejorada
demo = gr.ChatInterface(
    fn=respond,
    additional_inputs=[
        system_message_input,
        max_tokens_slider,
        temperature_slider,
        top_p_slider,
    ],
    title="Interfaz de Chat con QwQ-32B-Preview",
    description="Interactúa con el modelo QwQ-32B-Preview de Hugging Face. Ajusta los parámetros para personalizar las respuestas.",
    theme="default",  # Puedes cambiar a otros temas como "huggingface", "dark", etc.
)

if __name__ == "__main__":
    demo.launch(share=True)  # `share=True` permite compartir la interfaz públicamente