Kukedlc commited on
Commit
920b347
·
verified ·
1 Parent(s): 9f4a766

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -76
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
- "extrovertido", "introvertido", "amable", "reservado", "creativo", "analítico",
26
- "aventurero", "cauteloso", "optimista", "pesimista", "empático", "pragmático"
 
 
 
27
  ]
28
 
29
  intereses = [
30
- "ciencia", "arte", "deportes", "literatura", "tecnología", "cocina",
31
- "viajes", "música", "cine", "historia", "filosofía", "naturaleza"
 
 
 
32
  ]
33
 
34
  profesiones = [
35
- "médico", "ingeniero", "artista", "profesor", "chef", "escritor",
36
- "deportista", "científico", "músico", "empresario", "abogado", "periodista"
 
 
 
37
  ]
38
 
39
- def generar_personalidad():
40
- rasgos = random.sample(rasgos_personalidad, 3)
41
- interes = random.choice(intereses)
42
- profesion = random.choice(profesiones)
43
-
44
- prompt_personalidad = f"""Crea una personalidad detallada basada en los siguientes rasgos:
45
- - Rasgos principales: {', '.join(rasgos)}
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
- return generar_descripcion_personalidad(prompt_personalidad)
 
 
 
 
 
 
52
 
53
- def generar_descripcion_personalidad(prompt):
54
- global llm
55
-
56
- if llm is None:
57
- llm = Llama(
58
- model_path="models/gemma-2-2b-it-abliterated-Q4_K_M.gguf",
59
- flash_attn=True,
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
- flash_attn=True,
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=f"{mensaje_sistema}",
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
- chat_with_personality,
 
 
 
 
 
 
 
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?",