File size: 4,674 Bytes
5b69b8e a2a4c59 5b69b8e 8ab6a28 5b69b8e d180c5e 87548ef 0765bc5 7cf976d 8ab6a28 f0ceea8 8ab6a28 5b69b8e d180c5e a2a4c59 5b69b8e 0198d09 5b69b8e a2a4c59 5b69b8e d180c5e 87548ef 8ab6a28 5b69b8e d180c5e 5b69b8e 8ab6a28 5b69b8e 26e4c05 5b69b8e 26e4c05 5b69b8e 8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 d180c5e 8ab6a28 5b69b8e 8ab6a28 d180c5e 5b69b8e d180c5e f2f55bf 11c4d5c 5b69b8e 9d2eef8 8ab6a28 5b69b8e af14f14 b728085 d180c5e a2a4c59 0765bc5 d180c5e 0765bc5 d180c5e a2a4c59 |
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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
from huggingface_hub import InferenceClient
import gradio as gr
import threading
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
# Variables para controlar el estado de la conversación
conversation_started = False
conversation_ongoing = True
system_prompt = "Asistente para los usuarios y clientes de la empresa Canal de Isabel II, https://oficinavirtual.canaldeisabelsegunda.es/"
def format_prompt(message, history, system_prompt):
prompt = "<s>"
for user_prompt, bot_response in history:
prompt += f"[INST] {user_prompt} [/INST]"
prompt += f" {bot_response}</s> "
prompt += f"[INST] {system_prompt}, {message} [/INST]"
return prompt
def generate(
prompt, history, system_prompt, temperature=0.9, max_new_tokens=4096, top_p=0.95, repetition_penalty=1.0,
):
global conversation_started, conversation_ongoing
temperature = float(temperature)
if temperature < 1e-2:
temperature = 1e-2
top_p = float(top_p)
generate_kwargs = dict(
temperature=temperature,
max_new_tokens=max_new_tokens,
top_p=top_p,
repetition_penalty=repetition_penalty,
do_sample=True,
seed=42,
)
formatted_prompt = format_prompt(prompt, history, system_prompt)
stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
output = ""
for response in stream:
output += response.token.text
if "¡Hasta luego!" in response.token.text: # Puedes ajustar este condicional según las respuestas de tu modelo
conversation_ongoing = False
yield output
def start_conversation():
global conversation_started
conversation_started = True
def end_conversation():
global conversation_ongoing
conversation_ongoing = False
additional_inputs = [
gr.Textbox(
label="System Prompt",
value=system_prompt,
max_lines=1,
interactive=True,
),
gr.Slider(
label="Temperature",
value=0.9,
minimum=0.0,
maximum=1.0,
step=0.05,
interactive=True,
info="Valores más altos producen resultados más diversos",
),
gr.Slider(
label="Max new tokens",
value=4096,
minimum=0,
maximum=4096,
step=64,
interactive=True,
info="El máximo número de nuevos tokens",
),
gr.Slider(
label="Top-p (nucleus sampling)",
value=0.90,
minimum=0.0,
maximum=1,
step=0.05,
interactive=True,
info="Valores más altos muestrean más tokens de baja probabilidad",
),
gr.Slider(
label="Repetition penalty",
value=1.2,
minimum=1.0,
maximum=2.0,
step=0.05,
interactive=True,
info="Penaliza los tokens repetidos",
)
]
examples = [
["Quiero que me verifiquen el contador de agua de mi vivienda", system_prompt, 0.7, 1500, 0.80, 1.1],
["Muestrame un cuadro con las tarifas que se aplican en el abastecimiento, depuración y alcantarillado ", system_prompt, 0.8, 4096, 0.85, 1.2],
["¿Qué es una acometida?", system_prompt, 0.7, 1800, 0.75, 1.2],
["¿Qué teléfono tiene para averías, información y página web?", system_prompt, 0.8, 2048, 0.80, 1.1],
]
# Crear una interfaz de chat Gradio con el modelo generativo
iface = gr.ChatInterface(
fn=generate,
chatbot=gr.Chatbot(avatar_images=["./15f4b2d3-c4f4-4a29-93cd-e47214953bd9.png", "./botm.png"], bubble_full_width=False, show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel", height=500),
textbox=gr.Textbox(placeholder="¿Qué parámetros definen la calidad del agua?", container=False, scale=7),
theme="soft",
additional_inputs=additional_inputs,
title="Mixtral 8B Fines didácticos Asistente de usuarios/clientes de Canal de Isabel ll",
description='Autor: <a href=\"https://huggingface.co/Antonio49\">Antonio Fernández</a> de <a href=\"https://saturdays.ai/\">SaturdaysAI</a>. Formación: <a href=\"https://cursos.saturdays.ai/courses/\">Cursos Online AI</a> Aplicación desarrollada con fines docentes',
examples=examples,
cache_examples=True,
retry_btn="Repetir",
undo_btn="Deshacer",
clear_btn="Borrar",
submit_btn="Enviar",
interface_height=550,
)
# Iniciar un hilo de conversación inicial
threading.Thread(target=start_conversation).start()
# Actualizar la interfaz después de la conversación inicial
while not conversation_started:
iface.update()
# Iniciar la interfaz principal
iface.launch(show_api=False)
|