import gradio as gr import os from huggingface_hub.file_download import http_get from llama_cpp import Llama SYSTEM_PROMPT = "Tú eres ABI, un asistente automático de habla española. Hablas con las personas y las ayudas." def obtener_tokens_mensaje(modelo, rol, contenido): contenido = f"{rol}\n{contenido}\n" contenido = contenido.encode("utf-8") return modelo.tokenize(contenido, special=True) def obtener_tokens_sistema(modelo): mensaje_sistema = {"role": "system", "content": SYSTEM_PROMPT} return obtener_tokens_mensaje(modelo, **mensaje_sistema) def cargar_modelo( directorio: str = ".", nombre_modelo: str = "ecastera/eva-mistral-7b-spanish-GGUF", url_modelo: str = "https://huggingface.co/ecastera/eva-mistral-7b-spanish-GGUF/resolve/main/Turdus-trained-20-int4.gguf" ): ruta_modelo_final = os.path.join(directorio, nombre_modelo) print("Descargando todos los archivos...") if not os.path.exists(ruta_modelo_final): with open(ruta_modelo_final, "wb") as f: http_get(url_modelo, f) os.chmod(ruta_modelo_final, 0o777) print("¡Archivos descargados!") modelo = Llama( model_path=ruta_modelo_final, n_ctx=2048 ) print("¡Modelo cargado!") return modelo MODELO = cargar_modelo() def usuario(mensaje, historial): nuevo_historial = historial + [[mensaje, None]] return "", nuevo_historial def bot( historial, prompt_sistema, top_p, top_k, temp ): modelo = MODELO tokens = obtener_tokens_sistema(modelo)[:] for mensaje_usuario, mensaje_bot in historial[:-1]: tokens_mensaje = obtener_tokens_mensaje(modelo=modelo, rol="usuario", contenido=mensaje_usuario) tokens.extend(tokens_mensaje) if mensaje_bot: tokens_mensaje = obtener_tokens_mensaje(modelo=modelo, rol="bot", contenido=mensaje_bot) tokens.extend(tokens_mensaje) ultimo_mensaje_usuario = historial[-1][0] tokens_mensaje = obtener_tokens_mensaje(modelo=modelo, rol="usuario", contenido=ultimo_mensaje_usuario) tokens.extend(tokens_mensaje) tokens_rol = modelo.tokenize("bot\n".encode("utf-8"), special=True) tokens.extend(tokens_rol) generador = modelo.generate( tokens, top_k=top_k, top_p=top_p, temp=temp ) texto_parcial = "" for i, token in enumerate(generador): if token == modelo.token_eos(): break texto_parcial += modelo.detokenize([token]).decode("utf-8", "ignore") historial[-1][1] = texto_parcial yield historial with gr.Blocks( theme=gr.themes.Soft() ) as demo: favicon = '' gr.Markdown( f"""