File size: 5,257 Bytes
8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 7cf976d 8ab6a28 f0ceea8 8ab6a28 5b69b8e 8ab6a28 5b69b8e 6de3f96 8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 0198d09 5b69b8e 8ab6a28 5b69b8e 8ab6a28 f0ceea8 5b69b8e 498e50f 5b69b8e 8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 1d508a2 5b69b8e 26e4c05 5b69b8e 26e4c05 5b69b8e 8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 5b69b8e 8ab6a28 e09af24 b51c1c4 e09af24 8ab6a28 5b69b8e 8ab6a28 5b69b8e 1ae4dce 8ab6a28 af14f14 5b69b8e af14f14 5b69b8e f0ceea8 |
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 |
# Importar las bibliotecas necesarias
from huggingface_hub import InferenceClient
import gradio as gr
# Crear un cliente de inferencia para el modelo preentrenado Mixtral-8x7B-Instruct-v0.1
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
# Función para formatear el prompt con historial
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
# Función para generar respuestas dada una serie de parámetros
def generate(
prompt, history, system_prompt, temperature=0.9, max_new_tokens=4096, top_p=0.95, repetition_penalty=1.0,):
# Ajustar valores de temperatura y top_p para asegurar que estén en el rango adecuado
temperature = float(temperature)
if temperature < 1e-2:
temperature = 1e-2
top_p = float(top_p)
# Configurar los parámetros para la generación de texto
generate_kwargs = dict(
temperature=temperature,
max_new_tokens=max_new_tokens,
top_p=top_p,
repetition_penalty=repetition_penalty,
do_sample=True,
seed=42,
)
# Formatear el prompt y obtener la respuesta del modelo de manera continua
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 = ""
# Iterar a través de las respuestas en el stream
for response in stream:
output += response.token.text
yield output
return output
# Configurar inputs adicionales para la interfaz Gradio
additional_inputs = [
# Entrada de texto para el System Prompt (puedes omitir esto si no lo necesitas)
gr.Textbox(
label="System Prompt",
value="Experto en servicios de abastecimiento, depuracion, reutilizacion y calidad del agua, para la empresa Canal de Isabel II",
max_lines=1,
interactive=True,
),
# Control deslizante para la temperatura
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",
),
# Control deslizante para el número máximo de nuevos tokens
# Tengo que comprobar el número máximo de nuevos tokens, por el momento lo fijo a 4096.
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",
),
# Control deslizante para top-p (nucleus sampling)
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",
),
# Control deslizante para la penalización de repetición
gr.Slider(
label="Repetition penalty",
value=1.2,
minimum=1.0,
maximum=2.0,
step=0.05,
interactive=True,
info="Penaliza los tokens repetidos",
)
]
# Ejemplos predefinidos para la interfaz Gradio
examples = [
["que parametros definen la calidad del agua", "Experto en servicios de abastecimiento, depuracion, reutilizacion y calidad del agua, para la empresa Canal de Isabel II", 0.7, 150, 0.80, 1.1],
["Describeme el proceso basico de depuracion del agua", "Experto en servicios de abastecimiento, depuracion y reutilizacion del agua", 0.8, 250, 0.85, 1.2],
["¿Que es una acometida?", "Experto en servicios de abastecimiento, depuracion, reutilizacion y calidad del agua, para la empresa Canal de Isabel II", 0.7, 180, 0.75, 1.2],
["¿Que es una toma?", "Experto en servicios de abastecimiento, depuracion, reutilizacion y calidad del agua, para la empresa Canal de Isabel II", 0.8, 180, 0.80, 1.1],
]
# Crear una interfaz de chat Gradio con el modelo generativo
gr.ChatInterface(
fn=generate,
chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
additional_inputs=additional_inputs,
title="Mixtral 8B Fines didácticos",
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',
theme="soft",
examples=examples,
iface = gr.ChatInterface(
fn = querying,
chatbot=gr.Chatbot(height=600),
textbox=gr.Textbox(placeholder="What is GenAI Ecosystem?", container=False, scale=7),
title="HiberusBot",
theme="soft",
examples=["Why Hiberus has created GenAI Ecosystem?",
"What is GenAI Ecosystem?"],
cache_examples=True,
retry_btn="Repetir",
undo_btn="Deshacer",
clear_btn="Borrar",
submit_btn="Enviar"
)
iface.launch(share=True)
concurrency_limit=20,
).launch(show_api=False)
|