Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1 |
-
import spaces
|
2 |
import os
|
3 |
import random
|
4 |
from llama_cpp import Llama
|
@@ -22,66 +21,57 @@ llm = None
|
|
22 |
|
23 |
# Arrays para la generación de personalidades
|
24 |
rasgos_personalidad = [
|
25 |
-
"
|
26 |
-
"
|
|
|
|
|
|
|
27 |
]
|
28 |
|
29 |
intereses = [
|
30 |
-
"ciencia
|
31 |
-
"
|
|
|
|
|
|
|
32 |
]
|
33 |
|
34 |
profesiones = [
|
35 |
-
"
|
36 |
-
"
|
|
|
|
|
|
|
37 |
]
|
38 |
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
- Interés principal: {interes}
|
47 |
-
- Profesión: {profesion}
|
48 |
-
|
49 |
-
Proporciona una descripción de 3-4 oraciones sobre cómo es esta persona, su forma de hablar y comportarse."""
|
50 |
|
51 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
|
53 |
-
def
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
n_gpu_layers=81,
|
61 |
-
n_batch=1024,
|
62 |
-
n_ctx=8192,
|
63 |
-
)
|
64 |
-
|
65 |
-
proveedor = LlamaCppPythonProvider(llm)
|
66 |
-
agente = LlamaCppAgent(
|
67 |
-
proveedor,
|
68 |
-
system_prompt="Eres un creador de personalidades detalladas y creativas.",
|
69 |
-
predefined_messages_formatter_type=MessagesFormatterType.GEMMA_2,
|
70 |
-
debug_output=False
|
71 |
)
|
72 |
-
|
73 |
-
configuracion = proveedor.get_provider_default_settings()
|
74 |
-
configuracion.temperature = 0.7
|
75 |
-
configuracion.max_tokens = 300
|
76 |
-
|
77 |
-
respuesta = agente.get_chat_response(prompt, llm_sampling_settings=configuracion)
|
78 |
-
return respuesta
|
79 |
|
80 |
-
@spaces.GPU(duration=120)
|
81 |
def responder(
|
82 |
mensaje,
|
83 |
historial: list[tuple[str, str]],
|
84 |
-
mensaje_sistema,
|
85 |
max_tokens,
|
86 |
temperatura,
|
87 |
top_p,
|
@@ -93,18 +83,23 @@ def responder(
|
|
93 |
if llm is None:
|
94 |
llm = Llama(
|
95 |
model_path="models/gemma-2-2b-it-abliterated-Q4_K_M.gguf",
|
96 |
-
|
97 |
-
n_gpu_layers=81,
|
98 |
-
n_batch=1024,
|
99 |
-
n_ctx=8192,
|
100 |
)
|
101 |
-
|
102 |
plantilla_chat = MessagesFormatterType.GEMMA_2
|
103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
proveedor = LlamaCppPythonProvider(llm)
|
105 |
agente = LlamaCppAgent(
|
106 |
proveedor,
|
107 |
-
system_prompt=
|
108 |
predefined_messages_formatter_type=plantilla_chat,
|
109 |
debug_output=True
|
110 |
)
|
@@ -118,7 +113,7 @@ def responder(
|
|
118 |
configuracion.stream = True
|
119 |
|
120 |
mensajes = BasicChatHistory()
|
121 |
-
for msj in historial:
|
122 |
usuario = {
|
123 |
'role': Roles.user,
|
124 |
'content': msj[0]
|
@@ -141,26 +136,7 @@ def responder(
|
|
141 |
salida = ""
|
142 |
for fragmento in flujo:
|
143 |
salida += fragmento
|
144 |
-
yield salida
|
145 |
-
|
146 |
-
def chat_with_personality(message, history):
|
147 |
-
if not history:
|
148 |
-
# Primera interacción, generamos la personalidad
|
149 |
-
personalidad = generar_personalidad()
|
150 |
-
mensaje_sistema = f"Eres un personaje con la siguiente personalidad: {personalidad}. Actúa y responde de acuerdo a estas características en todo momento."
|
151 |
-
history.append(("Sistema", f"Se ha generado una nueva personalidad: {personalidad}"))
|
152 |
-
else:
|
153 |
-
mensaje_sistema = history[0][1].split(": ", 1)[1]
|
154 |
-
|
155 |
-
# Configuración por defecto
|
156 |
-
max_tokens = 2048
|
157 |
-
temperatura = 0.7
|
158 |
-
top_p = 0.95
|
159 |
-
top_k = 40
|
160 |
-
penalizacion_repeticion = 1.1
|
161 |
-
|
162 |
-
for response in responder(message, history[1:], mensaje_sistema, max_tokens, temperatura, top_p, top_k, penalizacion_repeticion):
|
163 |
-
yield history + [(message, response)]
|
164 |
|
165 |
descripcion = """<p align="center">Chat de Rol Play con Gemma 2B Abliterated usando llama.cpp</p>
|
166 |
<p>Este chat genera automáticamente una personalidad al inicio de la conversación y luego responde de acuerdo a esa personalidad.</p>
|
@@ -170,12 +146,17 @@ descripcion = """<p align="center">Chat de Rol Play con Gemma 2B Abliterated usa
|
|
170 |
</center></p>"""
|
171 |
|
172 |
demo = gr.ChatInterface(
|
173 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
chatbot=gr.Chatbot(height=500),
|
175 |
-
textbox=gr.Textbox(placeholder="Escribe tu mensaje aquí...", container=False, scale=7),
|
176 |
title="Chat de Rol Play con Gemma 2B",
|
177 |
description=descripcion,
|
178 |
-
theme="soft",
|
179 |
examples=[
|
180 |
"Hola, ¿cómo estás?",
|
181 |
"¿Puedes contarme sobre tu día típico?",
|
|
|
|
|
1 |
import os
|
2 |
import random
|
3 |
from llama_cpp import Llama
|
|
|
21 |
|
22 |
# Arrays para la generación de personalidades
|
23 |
rasgos_personalidad = [
|
24 |
+
"Extrovertido y carismático, siempre el alma de la fiesta.",
|
25 |
+
"Introvertido y reflexivo, con una rica vida interior.",
|
26 |
+
"Analítico y metódico, siempre buscando la lógica en todo.",
|
27 |
+
"Creativo y soñador, con una imaginación desbordante.",
|
28 |
+
"Empático y compasivo, siempre pensando en los demás."
|
29 |
]
|
30 |
|
31 |
intereses = [
|
32 |
+
"Apasionado por la ciencia y la tecnología, siempre al día con los últimos avances.",
|
33 |
+
"Amante del arte en todas sus formas, desde la pintura hasta la música.",
|
34 |
+
"Entusiasta de los deportes y la actividad física, siempre en movimiento.",
|
35 |
+
"Aficionado a la literatura y la escritura, con una biblioteca personal impresionante.",
|
36 |
+
"Fascinado por la historia y las culturas antiguas, un verdadero erudito."
|
37 |
]
|
38 |
|
39 |
profesiones = [
|
40 |
+
"Médico dedicado, especializado en medicina de emergencias.",
|
41 |
+
"Ingeniero innovador, trabajando en proyectos de energía renovable.",
|
42 |
+
"Artista multidisciplinario, explorando nuevas formas de expresión.",
|
43 |
+
"Profesor universitario, inspirando a la próxima generación de pensadores.",
|
44 |
+
"Emprendedor visionario, fundador de varias startups exitosas."
|
45 |
]
|
46 |
|
47 |
+
trasfondos = [
|
48 |
+
"Creció en una pequeña ciudad costera, lo que le dio una perspectiva única sobre la vida.",
|
49 |
+
"Proviene de una familia de inmigrantes, lo que ha moldeado su visión del mundo.",
|
50 |
+
"Pasó su juventud viajando por el mundo, acumulando experiencias diversas.",
|
51 |
+
"Superó grandes adversidades en su infancia, lo que le hizo más resiliente.",
|
52 |
+
"Creció en una comunidad muy unida, valorando profundamente las relaciones personales."
|
53 |
+
]
|
|
|
|
|
|
|
|
|
54 |
|
55 |
+
filosofias = [
|
56 |
+
"Cree firmemente en el poder de la educación para cambiar el mundo.",
|
57 |
+
"Aboga por la sostenibilidad y la protección del medio ambiente en todo lo que hace.",
|
58 |
+
"Valora la honestidad y la integridad por encima de todo.",
|
59 |
+
"Busca constantemente el equilibrio entre la tradición y la innovación.",
|
60 |
+
"Cree en el poder de la colaboración y el trabajo en equipo para lograr grandes cosas."
|
61 |
+
]
|
62 |
|
63 |
+
def generar_personalidad():
|
64 |
+
return (
|
65 |
+
random.choice(rasgos_personalidad) + " " +
|
66 |
+
random.choice(intereses) + " " +
|
67 |
+
random.choice(profesiones) + " " +
|
68 |
+
random.choice(trasfondos) + " " +
|
69 |
+
random.choice(filosofias)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
|
|
72 |
def responder(
|
73 |
mensaje,
|
74 |
historial: list[tuple[str, str]],
|
|
|
75 |
max_tokens,
|
76 |
temperatura,
|
77 |
top_p,
|
|
|
83 |
if llm is None:
|
84 |
llm = Llama(
|
85 |
model_path="models/gemma-2-2b-it-abliterated-Q4_K_M.gguf",
|
86 |
+
n_ctx=2048,
|
|
|
|
|
|
|
87 |
)
|
88 |
+
|
89 |
plantilla_chat = MessagesFormatterType.GEMMA_2
|
90 |
|
91 |
+
if not historial:
|
92 |
+
# Generar personalidad al inicio del chat
|
93 |
+
personalidad = generar_personalidad()
|
94 |
+
mensaje_sistema = f"Eres un personaje con la siguiente personalidad: {personalidad}. Actúa y responde de acuerdo a estas características en todo momento."
|
95 |
+
historial.append(("Sistema", f"Se ha generado una nueva personalidad: {personalidad}"))
|
96 |
+
else:
|
97 |
+
mensaje_sistema = historial[0][1].split(": ", 1)[1]
|
98 |
+
|
99 |
proveedor = LlamaCppPythonProvider(llm)
|
100 |
agente = LlamaCppAgent(
|
101 |
proveedor,
|
102 |
+
system_prompt=mensaje_sistema,
|
103 |
predefined_messages_formatter_type=plantilla_chat,
|
104 |
debug_output=True
|
105 |
)
|
|
|
113 |
configuracion.stream = True
|
114 |
|
115 |
mensajes = BasicChatHistory()
|
116 |
+
for msj in historial[1:]: # Excluimos el mensaje del sistema
|
117 |
usuario = {
|
118 |
'role': Roles.user,
|
119 |
'content': msj[0]
|
|
|
136 |
salida = ""
|
137 |
for fragmento in flujo:
|
138 |
salida += fragmento
|
139 |
+
yield historial + [(mensaje, salida)]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
|
141 |
descripcion = """<p align="center">Chat de Rol Play con Gemma 2B Abliterated usando llama.cpp</p>
|
142 |
<p>Este chat genera automáticamente una personalidad al inicio de la conversación y luego responde de acuerdo a esa personalidad.</p>
|
|
|
146 |
</center></p>"""
|
147 |
|
148 |
demo = gr.ChatInterface(
|
149 |
+
responder,
|
150 |
+
additional_inputs=[
|
151 |
+
gr.Slider(minimum=1, maximum=2048, value=1024, step=1, label="Tokens máximos"),
|
152 |
+
gr.Slider(minimum=0.1, maximum=2.0, value=0.7, step=0.1, label="Temperatura"),
|
153 |
+
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p"),
|
154 |
+
gr.Slider(minimum=0, maximum=100, value=40, step=1, label="Top-k"),
|
155 |
+
gr.Slider(minimum=1.0, maximum=2.0, value=1.1, step=0.1, label="Penalización por repetición"),
|
156 |
+
],
|
157 |
chatbot=gr.Chatbot(height=500),
|
|
|
158 |
title="Chat de Rol Play con Gemma 2B",
|
159 |
description=descripcion,
|
|
|
160 |
examples=[
|
161 |
"Hola, ¿cómo estás?",
|
162 |
"¿Puedes contarme sobre tu día típico?",
|