ailearnings commited on
Commit
a9c50ff
·
verified ·
1 Parent(s): 19c0c17

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +199 -0
app.py ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ import gradio as gr
3
+ from ctransformers import AutoModelForCausalLM
4
+ import threading
5
+ from langdetect import detect, DetectorFactory
6
+
7
+ # Configuración del logger
8
+ logging.basicConfig(filename='logs.txt', level=logging.INFO,
9
+ format='%(asctime)s %(levelname)s:%(message)s')
10
+
11
+ DetectorFactory.seed = 0 # Para obtener resultados consistentes en la detección del idioma
12
+
13
+ # Introducimos un mensaje para el modelo para que hable solo en español y con respeto
14
+ system_message = """
15
+ Eres un asistente que siempre responde en español.
16
+
17
+ """
18
+ # """
19
+ # Eres un asistente útil, respetuoso y honesto. Responde siempre de la manera más útil posible, a la vez que de manera segura.
20
+ # Tus respuestas no deben incluir contenido dañino, no ético, racista, sexista, tóxico, peligroso o ilegal.
21
+ # Por favor, asegúrate de que tus respuestas sean socialmente imparciales y de naturaleza positiva.
22
+ # Si una pregunta no tiene sentido o no es coherente desde un punto de vista factual,
23
+ # explica por qué en lugar de responder algo incorrecto. Si no conoces la respuesta a una pregunta,
24
+ # por favor, no compartas información falsa.
25
+ # """
26
+
27
+ def load_llm():
28
+
29
+ # "./models/llama-2-7b-chat.Q5_K_M.gguf",
30
+ # "./models/llama-2-7b-langchain-chat-q5_0.gguf",
31
+ # "./models/llama-2-7b-langchain-chat-q5_1.gguf",
32
+ # "./models/llama-2-7b-langchain-chat-q8_0.gguf"
33
+
34
+ llm = AutoModelForCausalLM.from_pretrained(
35
+ "./models/llama-2-7b-chat.Q5_K_M.gguf",
36
+ model_type='llama',
37
+ max_new_tokens=2048,
38
+ context_length = 4096,
39
+ repetition_penalty=1.13,
40
+ temperature=0.1
41
+ )
42
+ return llm
43
+
44
+ def llm_function(message, chat_history):
45
+ llm = load_llm()
46
+ # Concatenar el mensaje del sistema con el mensaje del usuario
47
+ full_message = f"{system_message}\nUser: {message}\nAssistant:"
48
+ response = llm(full_message)
49
+ # Registrar el mensaje y la respuesta en el archivo de logs
50
+ logging.info(f"Message: {message}")
51
+ logging.info(f"Response: {response}")
52
+
53
+ # Verificar el idioma de la respuesta
54
+ try:
55
+ response_language = detect(response)
56
+ except:
57
+ response_language = "error"
58
+
59
+ if response_language != 'es':
60
+ 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."
61
+ else:
62
+ return response
63
+
64
+ # Función con límite de tiempo
65
+ def llm_function_with_timeout(message, chat_history, timeout=120):
66
+ result = [None] # Lista para almacenar el resultado
67
+
68
+ def target():
69
+ result[0] = llm_function(message, chat_history)
70
+
71
+ thread = threading.Thread(target=target)
72
+ thread.start()
73
+ thread.join(timeout)
74
+ if thread.is_alive():
75
+ thread.join()
76
+ return "Tu pregunta no ha podido ser respondida en el tiempo estimado. Por favor, intenta de nuevo o reformula tu pregunta."
77
+ return result[0]
78
+
79
+ # def desplegar_chatbot():
80
+
81
+ title = "ChatterIA"
82
+
83
+ description = """
84
+ 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:
85
+ <ul>
86
+ <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>
87
+ <li>Usa este modelo bajo tu responsabilidad.</li>
88
+ <li>Si no o obtienes respuesta a tu consulta, intenta volver a reformularla.</li>
89
+ <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://192.168.120.112/playground/ChatterIA/index.php#guias' target="_blank"> Acceder a gu&iacute;as </a></li>
90
+ <li>Es importante que sepas este sitio es de uso educativo. El env&iacute;o de mensajes masivos puede dar error.</li>
91
+ </ul>
92
+ """
93
+
94
+ theme = 'Taithrah/Minimal'
95
+
96
+ examples = [
97
+ 'Escribe un código de python para conectarte con una base de datos en MySQL y liste todas las tablas.',
98
+ 'Escribe un modelo de correo para enviar como felicitación navideña para un amigo y para un familiar.',
99
+ '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.',
100
+ 'Ayudame a programar un juego de tres en raya para jugar en html, css y javascript.',
101
+ '¿Cuáles son los reinados de la historia que más han conseguido?'
102
+ ]
103
+ css = """
104
+ #component-0 {
105
+ height:auto !important;
106
+ min-height:400px !important;
107
+ overflow:auto !important;
108
+ }
109
+ #component-0 .chatbot{
110
+ text-align:justify !important;
111
+ padding: 5px 20px !important;
112
+ }
113
+ #component-3 div{
114
+ display:flex;
115
+ justify-content:center;
116
+ }
117
+ #component-3 h1{
118
+ font-size:2rem;
119
+ text-align:center !important;
120
+ }
121
+ #component-4 p{
122
+ font-size:18px;
123
+ margin-bottom:25px;
124
+ }
125
+ #component-4 ul{
126
+ padding-left:5%;
127
+ }
128
+ #component-4 li{
129
+ font-size:16px;
130
+ }
131
+ #component-4 li::first-letter{
132
+ margin-left:-10px;
133
+ }
134
+ .gallery-item{
135
+ flex:1 0 33%;
136
+ align-self:center;
137
+ height:75px;
138
+ }
139
+ footer{
140
+ display:none !important;
141
+ }
142
+ @media only screen and (max-width:600px){
143
+ #component-0 .chatbot{
144
+ text-align:justify !important;
145
+ padding: 5px 20px !important;
146
+ }
147
+ #component-3 h1{
148
+ font-size:1.5rem;
149
+ text-align:center !important;
150
+ }
151
+ #component-4 p{
152
+ font-size:14px;
153
+ text-align:justify;
154
+ }
155
+ #component-4 li{
156
+ font-size:12px;
157
+ paddding:20px;
158
+ }
159
+ #component-4 li::first-letter{
160
+ margin-left:-10px;
161
+ }
162
+ #component-5{
163
+ display:flex;
164
+ flex-direction:row;
165
+ }
166
+ #component-5 button{
167
+ flex: 1 1 30%;
168
+ }
169
+ .gallery-item{
170
+ flex:1 0 100%;
171
+ height:100px;
172
+ }
173
+ #component-0 pre, #component-0 code{
174
+ max-width: 100%; /* Asegura que el bloque de código no sea más ancho que su contenedor */
175
+ box-sizing: border-box; /* Incluye padding y border dentro del ancho y alto del elemento */
176
+ white-space: pre-wrap; /* Mantiene el formato pero permite el ajuste de palabras */
177
+ word-break: break-all; /* Permite que las palabras se rompan para evitar desbordamiento */
178
+ overflow-x: auto; /* Permite desplazamiento horizontal dentro del bloque de código si es necesario */
179
+ overflow-y: hidden; /* Oculta el desbordamiento vertical, no debería ser necesario con pre-wrap */
180
+ }
181
+ }
182
+ """
183
+
184
+ demo = gr.ChatInterface(
185
+ fn = llm_function_with_timeout,
186
+ chatbot=gr.Chatbot(label="ChatterIA"),
187
+ textbox= gr.Textbox(placeholder="Envía tu mensaje...", lines=3, max_lines=10),
188
+ title=title,
189
+ description = description,
190
+ theme = theme,
191
+ examples = examples,
192
+ cache_examples=True,
193
+ css=css,
194
+ submit_btn = "📤 Enviar",
195
+ retry_btn = "🔁 Reenviar",
196
+ undo_btn = "🔙 Deshacer",
197
+ clear_btn= "🗑 Limpiar",
198
+ )
199
+ demo.launch()