Spaces:
Sleeping
Sleeping
File size: 6,050 Bytes
a9c50ff 043c7e0 a9c50ff df05bab 1d1618a a9c50ff 043c7e0 a9c50ff e1e3d58 a9c50ff |
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
import gradio as gr
from ctransformers import AutoModelForCausalLM
import threading
from langdetect import detect, DetectorFactory
# Introducimos un mensaje para el modelo para que hable solo en español y con respeto
system_message = "Eres un asistente que siempre responde en español."
def load_llm():
llm = AutoModelForCausalLM.from_pretrained(
"TheBloke/Llama-2-7B-Chat-GGUF",
model_file='llama-2-7b-chat.Q5_K_M.gguf',
model_type='llama',
max_new_tokens=2048,
context_length = 4096,
repetition_penalty=1.13,
temperature=0.1
)
return llm
def llm_function(message, chat_history):
llm = load_llm()
# Concatenar el mensaje del sistema con el mensaje del usuario
full_message = f"{system_message}\nUser: {message}\nAssistant:"
response = llm(full_message)
# Registrar el mensaje y la respuesta en el archivo de logs
logging.info(f"Message: {message}")
logging.info(f"Response: {response}")
# Verificar el idioma de la respuesta
try:
response_language = detect(response)
except:
response_language = "error"
if response_language != 'es':
return "Su pregunta es muy compleja para el modelo. Por favor, elabore preguntas más sencillas para que el modelo pueda responderle. Estamos investigando cómo, en un futuro, pueda utilizar la pregunta que quiera y el modelo le responda correctamente."
else:
return response
# Función con límite de tiempo
def llm_function_with_timeout(message, chat_history, timeout=120):
result = [None] # Lista para almacenar el resultado
def target():
result[0] = llm_function(message, chat_history)
thread = threading.Thread(target=target)
thread.start()
thread.join(timeout)
if thread.is_alive():
thread.join()
return "Tu pregunta no ha podido ser respondida en el tiempo estimado. Por favor, intenta de nuevo o reformula tu pregunta."
return result[0]
title = "ChatterIA"
description = """
ChatterIA es un modelo de lenguaje que funciona como un asistente con infinidad de conocimientos, pero no infalible. Si desconoces el uso de este modelo, aquí tienes unas instrucciones para optimizar su uso:
<ul>
<li>Las respuestas de este modelo pueden no ser siempre precisas, al depender de su configuración, capacidad de interpretación y contextualización</li>
<li>Usa este modelo bajo tu responsabilidad.</li>
<li>Si no o obtienes respuesta a tu consulta, intenta volver a reformularla.</li>
<li>Si necesitas alguna aclaración o tienes cualquier otra duda, puedes enviar un correo electrónico a soporte: <a href='mailto:[email protected]'> Mandar email </a>. o revisar nuestras guías: <a href='http://fuentezuelas.com/playground/ChatterIA/index.php#guias' target="_blank"> Acceder a guías </a></li>
<li>Es importante que sepas este sitio es de uso educativo. El envío de mensajes masivos puede dar error.</li>
</ul>
"""
theme = 'Taithrah/Minimal'
examples = [
'Escribe un código de python para conectarte con una base de datos en MySQL y liste todas las tablas.',
'Escribe un modelo de correo para enviar como felicitación navideña para un amigo y para un familiar.',
'Explícame porque a día de hoy la economía global no ha cambiado su modelo de capitalismo por uno más sostenible como la economía circular.',
'Ayudame a programar un juego de tres en raya para jugar en html, css y javascript.',
'¿Cuáles son los reinados de la historia que más han conseguido?'
]
css = """
#component-0 {
height:auto !important;
min-height:400px !important;
overflow:auto !important;
}
#component-0 .chatbot{
text-align:justify !important;
padding: 5px 20px !important;
}
#component-3 div{
display:flex;
justify-content:center;
}
#component-3 h1{
font-size:2rem;
text-align:center !important;
}
#component-4 p{
font-size:18px;
margin-bottom:25px;
}
#component-4 ul{
padding-left:5%;
}
#component-4 li{
font-size:16px;
}
#component-4 li::first-letter{
margin-left:-10px;
}
.gallery-item{
flex:1 0 33%;
align-self:center;
height:75px;
}
footer{
display:none !important;
}
@media only screen and (max-width:600px){
#component-0 .chatbot{
text-align:justify !important;
padding: 5px 20px !important;
}
#component-3 h1{
font-size:1.5rem;
text-align:center !important;
}
#component-4 p{
font-size:14px;
text-align:justify;
}
#component-4 li{
font-size:12px;
paddding:20px;
}
#component-4 li::first-letter{
margin-left:-10px;
}
#component-5{
display:flex;
flex-direction:row;
}
#component-5 button{
flex: 1 1 30%;
}
.gallery-item{
flex:1 0 100%;
height:100px;
}
#component-0 pre, #component-0 code{
max-width: 100%; /* Asegura que el bloque de código no sea más ancho que su contenedor */
box-sizing: border-box; /* Incluye padding y border dentro del ancho y alto del elemento */
white-space: pre-wrap; /* Mantiene el formato pero permite el ajuste de palabras */
word-break: break-all; /* Permite que las palabras se rompan para evitar desbordamiento */
overflow-x: auto; /* Permite desplazamiento horizontal dentro del bloque de código si es necesario */
overflow-y: hidden; /* Oculta el desbordamiento vertical, no debería ser necesario con pre-wrap */
}
}
"""
demo = gr.ChatInterface(
fn = llm_function_with_timeout,
chatbot=gr.Chatbot(label="ChatterIA"),
textbox= gr.Textbox(placeholder="Envía tu mensaje...", lines=3, max_lines=10),
title=title,
description = description,
theme = theme,
examples = examples,
#cache_examples=True,
css=css,
submit_btn = "📤 Enviar",
retry_btn = "🔁 Reenviar",
undo_btn = "🔙 Deshacer",
clear_btn= "🗑 Limpiar",
)
demo.launch() |