ChatterIA_CPU / app.py
ailearnings's picture
Update app.py
e1e3d58 verified
raw
history blame
6.05 kB
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&oacute;n o tienes cualquier otra duda, puedes enviar un correo electr&oacute;nico a soporte: <a href='mailto:[email protected]'> Mandar email </a>. o revisar nuestras gu&iacute;as: <a href='http://fuentezuelas.com/playground/ChatterIA/index.php#guias' target="_blank"> Acceder a gu&iacute;as </a></li>
<li>Es importante que sepas este sitio es de uso educativo. El env&iacute;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()