pbesa 4.0.28__tar.gz → 4.0.30__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pbesa-4.0.28 → pbesa-4.0.30}/PKG-INFO +1 -1
- pbesa-4.0.30/pbesa/celulas/celula_conversador.py +60 -0
- pbesa-4.0.30/pbesa/celulas/celula_cuestionador.py +62 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_datos_identificables.py +1 -1
- pbesa-4.0.30/pbesa/celulas/celula_evaluador.py +59 -0
- pbesa-4.0.30/pbesa/celulas/celula_extraccion.py +51 -0
- pbesa-4.0.30/pbesa/celulas/celula_generar_caso.py +58 -0
- pbesa-4.0.30/pbesa/celulas/celula_instruccion.py +57 -0
- pbesa-4.0.30/pbesa/celulas/celula_parafraseo.py +56 -0
- pbesa-4.0.30/pbesa/celulas/celula_respuesta.py +58 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_saludos.py +1 -1
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/cognitive.py +150 -7
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/dispatcher_team.py +4 -1
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa.egg-info/PKG-INFO +1 -1
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa.egg-info/SOURCES.txt +8 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/setup.py +1 -1
- {pbesa-4.0.28 → pbesa-4.0.30}/.gitignore +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/LICENSE +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/LICENSE.txt +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/MANIFEST +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/README.md +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/db.sqlite3 +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/__pycache__/__init__.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/__pycache__/pbesa.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/__pycache__/settings.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/__pycache__/urls.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/__pycache__/wsgi.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/asgi.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/pbesa.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/settings.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/urls.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/helloworld/wsgi.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/manage.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/__pycache__/__init__.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/__pycache__/admin.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/__pycache__/apps.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/__pycache__/models.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/__pycache__/urls.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/__pycache__/views.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/admin.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/apps.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/controller/__pycache__/translatecontroller.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/controller/__pycache__/translatedelegate.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/controller/__pycache__/translateresponse.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/controller/translatecontroller.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/controller/translatedelegate.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/controller/translateresponse.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/worker/__pycache__/translatetask.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/worker/__pycache__/workeragent.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/worker/translatetask.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/mas/worker/workeragent.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/migrations/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/migrations/__pycache__/__init__.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/models.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/tests.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/urls.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/django/helloworld/translate/views.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/__pycache__/countercontroller.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/__pycache__/counterdelegate.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/__pycache__/counterresponse.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/__pycache__/translatecontroller.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/__pycache__/translatedelegate.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/__pycache__/translateresponse.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/countercontroller.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/counterdelegate.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/controller/counterresponse.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/worker/__pycache__/counteragent.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/worker/__pycache__/countertask.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/worker/__pycache__/translatetask.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/worker/__pycache__/workeragent.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/worker/counteragent.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/mas/worker/countertask.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/remote_a.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/remote_b.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/examples/remote/remote_c.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_casos.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_consultas.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_expertos.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_generar_documento.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_pertinencia.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_preguntas.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/celula_simulador_ciudadano.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/data_extraction_cel.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/celulas/web.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/adapter.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/agent.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/io/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/io/system_file.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/io/tcp_server.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/res/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/res/__pycache__/__init__.cpython-36.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/res/__pycache__/__init__.cpython-37.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/res/__pycache__/__init__.cpython-38.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/res/__pycache__/__init__.cpython-39.pyc +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/res/conf.json +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/util.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/kernel/world.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/mas.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/models.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/remote/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/remote/adm_listener.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/remote/adm_listener_handler.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/remote/exceptions.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/remote/remote_adm.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/remote/remote_adm_handler.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/__init__.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/collaborative_team.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/delegator.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/delegator_team.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/dialog.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/prompts.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/selected_dispatcher_team.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/templates.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa/social/worker.py +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa.egg-info/dependency_links.txt +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa.egg-info/requires.txt +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/pbesa.egg-info/top_level.txt +0 -0
- {pbesa-4.0.28 → pbesa-4.0.30}/setup.cfg +0 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
SYSTEM_PROMPT = """
|
4
|
+
[ROL Y OBJETIVO]
|
5
|
+
Eres un asistente conversacional amigable y servicial llamado Justino especializado en las funciones jurisdiccionales de las entidades SIC, DIMAR, DNDA, SFC, SNS, ICA y Supersociedades.
|
6
|
+
|
7
|
+
Tu objetivo es analizar el historial de la conversación y las reglas para identificar qué información falta y luego formular una pregunta clara y natural al usuario.
|
8
|
+
|
9
|
+
[DEFINICIONES DE REFERENCIA]
|
10
|
+
%s
|
11
|
+
|
12
|
+
[REGLAS]
|
13
|
+
%s
|
14
|
+
|
15
|
+
[HISTORIAL DE LA CONVERSACIÓN]
|
16
|
+
%s
|
17
|
+
|
18
|
+
[TAREA]
|
19
|
+
Sigue un proceso de Chain of Thought para construir tu respuesta. Primero, razona sobre la información que tienes y la que te falta. Luego, escribe la pregunta final para el usuario.
|
20
|
+
|
21
|
+
[FORMATO DE RESPUESTA]
|
22
|
+
**Chain of Thought:**
|
23
|
+
1. **Información disponible:** (Resume los datos que el usuario ya ha proporcionado).
|
24
|
+
2. **Información requerida por las reglas:** (Enumera los datos que necesitas para validar todas las reglas).
|
25
|
+
3. **Análisis de carencias:** (Compara la información disponible con la requerida para identificar exactamente qué falta).
|
26
|
+
4. **Formulación de la pregunta:** (Diseña una pregunta amigable y precisa basada en el análisis de carencias).
|
27
|
+
|
28
|
+
[RESTRICCIONES]
|
29
|
+
- No debes proporcionar respuestas directas o afirmaciones, solo preguntas.
|
30
|
+
- La pregunta debe ser clara y natural, evitando tecnicismos innecesarios.
|
31
|
+
- No debes asumir información que no esté explícitamente en el historial de la conversación.
|
32
|
+
- Si el usario responde con una pregunta o comentario que no es relevante, debes ignorarlo y centrarte en la información que falta.
|
33
|
+
|
34
|
+
"""
|
35
|
+
|
36
|
+
USER_PROMPT = """
|
37
|
+
|
38
|
+
**Respuesta final para el usuario:**
|
39
|
+
(Escribe aquí únicamente la pregunta que le harás al usuario).
|
40
|
+
"""
|
41
|
+
|
42
|
+
# Efectua la inferencia del modelo.
|
43
|
+
def derive(service, definiciones, reglas, text, max_tkns=2000) -> any:
|
44
|
+
try:
|
45
|
+
tmp_work_memory = []
|
46
|
+
prompt = SYSTEM_PROMPT % (definiciones, reglas, text)
|
47
|
+
tmp_work_memory.append({"role": "system", "content": prompt})
|
48
|
+
prompt = USER_PROMPT
|
49
|
+
tmp_work_memory.append({"role": "user", "content": prompt})
|
50
|
+
res = service.generate(tmp_work_memory, max_tokens=max_tkns)
|
51
|
+
logging.info(f"\n\n\nProcesando:\nDefiniciones: {definiciones}\nReglas: {reglas}\nTexto: {text}")
|
52
|
+
logging.info(f"Respuesta: {res}")
|
53
|
+
if not res or res == "":
|
54
|
+
res = text
|
55
|
+
logging.warning(f"No obtener una respuesta.")
|
56
|
+
return res
|
57
|
+
except Exception as e:
|
58
|
+
logging.error(f"Error al procesar: {text}")
|
59
|
+
logging.error(e)
|
60
|
+
return None
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
SYSTEM_PROMPT = """
|
4
|
+
Eres un agente cognitivo que simula ser un usuario. Tu tarea es convertir un texto o una idea en una pregunta clara y natural.
|
5
|
+
|
6
|
+
Analiza el texto proporcionado y genera una pregunta que un usuario haría para obtener más información, resolver un problema o iniciar una conversación sobre ese tema.
|
7
|
+
|
8
|
+
Si el texto es demasiado corto, vago o no contiene suficiente información para formular una pregunta coherente, responde únicamente con la palabra: FALTA.
|
9
|
+
|
10
|
+
**Instrucciones:**
|
11
|
+
1. La pregunta debe estar directamente relacionada con el contenido del texto.
|
12
|
+
2. Formula la pregunta desde la perspectiva de un usuario.
|
13
|
+
3. Si el texto ya es una pregunta, mejórala o reformúlala para que suene más natural si es posible. Si ya es una buena pregunta, puedes usarla tal cual.
|
14
|
+
|
15
|
+
**Ejemplos:**
|
16
|
+
- Texto: "El rendimiento de la base de datos ha disminuido después de la última actualización."
|
17
|
+
Pregunta generada: "¿Por qué ha disminuido el rendimiento de la base de datos después de la última actualización y cómo podemos solucionarlo?"
|
18
|
+
|
19
|
+
- Texto: "Necesito configurar el acceso VPN para un nuevo empleado."
|
20
|
+
Pregunta generada: "¿Cuáles son los pasos para configurar una nueva cuenta de VPN para un empleado?"
|
21
|
+
|
22
|
+
- Texto: "Error al compilar el proyecto en Java."
|
23
|
+
Pregunta generada: "Estoy recibiendo un error al compilar mi proyecto en Java, ¿alguien puede ayudarme a identificar la causa?"
|
24
|
+
|
25
|
+
- Texto: "informe"
|
26
|
+
Pregunta generada: FALTA
|
27
|
+
|
28
|
+
- Texto: "no funciona"
|
29
|
+
Pregunta generada: FALTA
|
30
|
+
|
31
|
+
- Texto: "la reunión de ayer"
|
32
|
+
Pregunta generada: "¿Podrían compartir un resumen o las notas de la reunión de ayer?"
|
33
|
+
|
34
|
+
"""
|
35
|
+
|
36
|
+
USER_PROMPT = """
|
37
|
+
|
38
|
+
Texto: "%s"
|
39
|
+
|
40
|
+
Pregunta generada:
|
41
|
+
|
42
|
+
"""
|
43
|
+
|
44
|
+
# Efectua la inferencia del modelo.
|
45
|
+
def derive(service, text, max_tkns=2000) -> any:
|
46
|
+
try:
|
47
|
+
tmp_work_memory = []
|
48
|
+
prompt = SYSTEM_PROMPT
|
49
|
+
tmp_work_memory.append({"role": "system", "content": prompt})
|
50
|
+
prompt = USER_PROMPT % text
|
51
|
+
tmp_work_memory.append({"role": "user", "content": prompt})
|
52
|
+
res = service.generate(tmp_work_memory, max_tokens=max_tkns)
|
53
|
+
logging.info(f"\n\n\nProcesando:texto: {text}")
|
54
|
+
logging.info(f"Respuesta: {res}")
|
55
|
+
if not res or res == "":
|
56
|
+
res = text
|
57
|
+
logging.warning(f"No obtener una respuesta.")
|
58
|
+
return res
|
59
|
+
except Exception as e:
|
60
|
+
logging.error(f"Error al procesar: {text}")
|
61
|
+
logging.error(e)
|
62
|
+
return None
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
SYSTEM_PROMPT = """
|
4
|
+
[TAREA]
|
5
|
+
Eres un sistema de clasificación experto. Tu única tarea es evaluar la siguiente conversación contra las reglas proporcionadas y responder con una sola palabra que resuma el estado.
|
6
|
+
|
7
|
+
[DEFINICIONES]
|
8
|
+
%s
|
9
|
+
|
10
|
+
[REGLAS]
|
11
|
+
%s
|
12
|
+
|
13
|
+
[INSTRUCCIONES DE RESPUESTA]
|
14
|
+
Responde únicamente con una de estas tres opciones:
|
15
|
+
- APLICA: Si la conversación contiene TODA la información necesaria para verificar las reglas, y AL MENOS UNA de las regla se cumple.
|
16
|
+
- RECHAZO: Si la conversación contiene información que viola explícitamente a TODAS las reglas.
|
17
|
+
- PREGUNTAR: Si en la conversación FALTA información esencial para poder verificar una o más reglas.
|
18
|
+
|
19
|
+
[EJEMPLOS]
|
20
|
+
Reglas:
|
21
|
+
- Ser mayor de 18
|
22
|
+
- Vivir en México.
|
23
|
+
|
24
|
+
Texto del usuario:
|
25
|
+
- Texto: "Tengo 20 años y vivo en la Ciudad de México." -> APLICA
|
26
|
+
- Texto: "Tengo 12 y vivo en Argentina." -> RECHAZO
|
27
|
+
- Texto: "Soy de México." -> APLICA
|
28
|
+
- Texto: "Soy hombre." -> PREGUNTAR
|
29
|
+
|
30
|
+
"""
|
31
|
+
|
32
|
+
USER_PROMPT = """
|
33
|
+
|
34
|
+
[EVALUACIÓN ACTUAL]
|
35
|
+
Conversación:
|
36
|
+
"%s"
|
37
|
+
|
38
|
+
Respuesta:
|
39
|
+
"""
|
40
|
+
|
41
|
+
# Efectua la inferencia del modelo.
|
42
|
+
def derive(service, definiciones, reglas, text, max_tkns=2000) -> any:
|
43
|
+
try:
|
44
|
+
tmp_work_memory = []
|
45
|
+
prompt = SYSTEM_PROMPT % (definiciones, reglas)
|
46
|
+
tmp_work_memory.append({"role": "system", "content": prompt})
|
47
|
+
prompt = USER_PROMPT % text
|
48
|
+
tmp_work_memory.append({"role": "user", "content": prompt})
|
49
|
+
res = service.generate(tmp_work_memory, max_tokens=max_tkns)
|
50
|
+
logging.info(f"\n\n\nProcesando:\nDefiniciones: {definiciones}\nReglas: {reglas}\nTexto: {text}")
|
51
|
+
logging.info(f"Respuesta: {res}")
|
52
|
+
if not res or res == "":
|
53
|
+
res = text
|
54
|
+
logging.warning(f"No obtener una respuesta.")
|
55
|
+
return res
|
56
|
+
except Exception as e:
|
57
|
+
logging.error(f"Error al procesar: {text}")
|
58
|
+
logging.error(e)
|
59
|
+
return None
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
SYSTEM_PROMPT = """
|
4
|
+
Eres un extractor de datos estructurados.
|
5
|
+
Tu tarea es leer la **Descripción** (lo que se le pide al usuario) y la **Respuesta del usuario** y devolver **únicamente** un objeto JSON válido con las claves indicadas en la descripción y los valores dados por el usuario.
|
6
|
+
|
7
|
+
Reglas:
|
8
|
+
1. Usa exactamente el texto entre comillas o negritas de la descripción como nombre de la clave en el JSON.
|
9
|
+
• Ej.: si la descripción contiene **"Tipo de solicitante"**, la clave debe ser `"Tipo de solicitante"`.
|
10
|
+
2. El valor debe ser la respuesta del usuario:
|
11
|
+
• Elimina saltos de línea y espacios al principio/fin.
|
12
|
+
• Respeta mayúsculas/minúsculas tal cual la escribió el usuario.
|
13
|
+
• Si responde varias opciones separadas (por comas, saltos de línea, “y”, etc.), devuelve una lista de cadenas.
|
14
|
+
3. Si falta información para alguna clave, pon el valor vacío: `""`.
|
15
|
+
4. No añadas texto extra, explicaciones ni código. Devuelve **solo** el objeto JSON.
|
16
|
+
|
17
|
+
Descripción:
|
18
|
+
\"\"\"%s\"\"\"
|
19
|
+
|
20
|
+
"""
|
21
|
+
USER_PROMPT = """
|
22
|
+
Respuesta del usuario:
|
23
|
+
\"\"\"%s\"\"\"
|
24
|
+
|
25
|
+
Salida JSON:
|
26
|
+
"""
|
27
|
+
|
28
|
+
# Efectua la inferencia del modelo.
|
29
|
+
def derive(service, query, max_tkns=2000) -> any:
|
30
|
+
try:
|
31
|
+
description = query.get("description", "")
|
32
|
+
text = query.get("text", "")
|
33
|
+
|
34
|
+
tmp_work_memory = []
|
35
|
+
prompt = SYSTEM_PROMPT
|
36
|
+
tmp_work_memory.append({"role": "system", "content": prompt})
|
37
|
+
prompt = USER_PROMPT % description
|
38
|
+
tmp_work_memory.append({"role": "user", "content": text})
|
39
|
+
|
40
|
+
res = service.generate(tmp_work_memory, max_tokens=max_tkns)
|
41
|
+
|
42
|
+
logging.info(f"[Celula][Extrac][Procesando]: {text}")
|
43
|
+
logging.info(f"[Celula][Extrac][Respuesta]: {res}")
|
44
|
+
if not res or res == "":
|
45
|
+
res = text
|
46
|
+
logging.warning(f"[Celula][Extrac]: No obtener una respuesta.")
|
47
|
+
return res.replace("*", "").strip()
|
48
|
+
except Exception as e:
|
49
|
+
logging.error(f"[Celula][Extrac]: Error al procesar: {text}")
|
50
|
+
logging.error(e)
|
51
|
+
return None
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
SYSTEM_PROMPT = """
|
4
|
+
Eres un generador de casos legales simulados para un agente cognitivo. Tu tarea es crear un escenario realista que involucre al menos una de las **funciones jurisdiccionales** de las siguientes entidades colombianas: **SIC (Superintendencia de Industria y Comercio)**, **DNDA (Dirección Nacional de Derecho de Autor)**, **DIMAR (Dirección General Marítima)**, **ICA (Instituto Colombiano Agropecuario)**, **SFC (Superintendencia Financiera de Colombia)**, **SNS (Superintendencia Nacional de Salud)** y **Supersociedades (Superintendencia de Sociedades)**. El caso debe estar enmarcado dentro del **Código General del Proceso (Ley 1564 de 2012)**.
|
5
|
+
|
6
|
+
Se te proporcionarán **definiciones clave** y **reglas específicas** que debes seguir. Tu caso simulado debe simular la perspectiva de un usuario afectado, describiendo una situación que cumpla con al menos una de las reglas establecidas, de forma que justifique la intervención jurisdiccional de una de las entidades.
|
7
|
+
|
8
|
+
---
|
9
|
+
|
10
|
+
**DEFINICIONES CLAVE:**
|
11
|
+
%s
|
12
|
+
|
13
|
+
---
|
14
|
+
|
15
|
+
**REGLAS PARA LA GENERACIÓN DEL CASO:**
|
16
|
+
%s
|
17
|
+
|
18
|
+
---
|
19
|
+
|
20
|
+
**FORMATO DE SALIDA:**
|
21
|
+
|
22
|
+
Se conciso y directo. El caso debe tener menos de 100 palabras.
|
23
|
+
|
24
|
+
Simula la descripción del caso desde la perspectiva de la persona afectada, incluyendo los detalles necesarios para comprender la situación y la entidad jurisdiccional que debería intervenir.
|
25
|
+
|
26
|
+
**Ejemplo de salida esperada (si la regla 1 fuera "Problema con la garantía de un electrodoméstico"):**
|
27
|
+
|
28
|
+
"Mi nombre es Laura y hace tres meses compré una nevera de última generación en la tienda 'ElectroHogar S.A.'. La nevera dejó de enfriar la semana pasada, y al contactar a la tienda para hacer valer la garantía, me informaron que la falla no está cubierta por 'mal uso', a pesar de que seguí todas las instrucciones del manual."
|
29
|
+
---
|
30
|
+
|
31
|
+
"""
|
32
|
+
|
33
|
+
USER_PROMPT = """
|
34
|
+
|
35
|
+
Ahora, genera un caso simulado que cumpla con al menos una de las reglas anteriores.
|
36
|
+
|
37
|
+
Respuesta:
|
38
|
+
"""
|
39
|
+
|
40
|
+
# Efectua la inferencia del modelo.
|
41
|
+
def derive(service, definiciones, reglas, max_tkns=2000) -> any:
|
42
|
+
try:
|
43
|
+
tmp_work_memory = []
|
44
|
+
prompt = SYSTEM_PROMPT % (definiciones, reglas)
|
45
|
+
tmp_work_memory.append({"role": "system", "content": prompt})
|
46
|
+
prompt = USER_PROMPT
|
47
|
+
tmp_work_memory.append({"role": "user", "content": prompt})
|
48
|
+
res = service.generate(tmp_work_memory, max_tokens=max_tkns)
|
49
|
+
logging.info(f"\n\n\nProcesando:texto: {definiciones}")
|
50
|
+
logging.info(f"Respuesta: {res}")
|
51
|
+
if not res or res == "":
|
52
|
+
res = definiciones
|
53
|
+
logging.warning(f"No obtener una respuesta.")
|
54
|
+
return res
|
55
|
+
except Exception as e:
|
56
|
+
logging.error(f"Error al procesar: {definiciones}")
|
57
|
+
logging.error(e)
|
58
|
+
return None
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
SYSTEM_PROMPT = """
|
4
|
+
Eres un asistente conversacional diseñado para responder directamente a la instrucción proporcionada por el usuario. Tu objetivo es interpretar la instrucción y generar una respuesta concisa y apropiada, simulando ser un usuario o agente que cumple la orden.
|
5
|
+
|
6
|
+
Si la instrucción no es clara o no se puede cumplir directamente con una respuesta simple, debes pedir más información o indicar que la instrucción no es suficiente.
|
7
|
+
|
8
|
+
Ejemplos:
|
9
|
+
- Instrucción: "Saluda"
|
10
|
+
Respuesta: "¡Hola! ¿Cómo estás?"
|
11
|
+
|
12
|
+
- Instrucción: "Di 'Adiós'"
|
13
|
+
Respuesta: "Adiós"
|
14
|
+
|
15
|
+
- Instrucción: "Pregunta la hora"
|
16
|
+
Respuesta: "¿Qué hora es?"
|
17
|
+
|
18
|
+
- Instrucción: "Agradece"
|
19
|
+
Respuesta: "¡Muchas gracias!"
|
20
|
+
|
21
|
+
- Instrucción: "Pide que te expliquen un tema"
|
22
|
+
Respuesta: "¿Podrías explicarme más sobre este tema?"
|
23
|
+
|
24
|
+
- Instrucción: "Haz un resumen de un libro"
|
25
|
+
Respuesta: "Necesito el nombre del libro para poder hacer un resumen."
|
26
|
+
|
27
|
+
- Instrucción: "Dime qué piensas del clima"
|
28
|
+
Respuesta: "No tengo opiniones sobre el clima, soy una inteligencia artificial."
|
29
|
+
|
30
|
+
"""
|
31
|
+
|
32
|
+
USER_PROMPT = """
|
33
|
+
|
34
|
+
Instrucción: "%s"
|
35
|
+
|
36
|
+
Respuesta:
|
37
|
+
"""
|
38
|
+
|
39
|
+
# Efectua la inferencia del modelo.
|
40
|
+
def derive(service, text, max_tkns=2000) -> any:
|
41
|
+
try:
|
42
|
+
tmp_work_memory = []
|
43
|
+
prompt = SYSTEM_PROMPT
|
44
|
+
tmp_work_memory.append({"role": "system", "content": prompt})
|
45
|
+
prompt = USER_PROMPT % text
|
46
|
+
tmp_work_memory.append({"role": "user", "content": prompt})
|
47
|
+
res = service.generate(tmp_work_memory, max_tokens=max_tkns)
|
48
|
+
logging.info(f"\n\n\nProcesando:texto: {text}")
|
49
|
+
logging.info(f"Respuesta: {res}")
|
50
|
+
if not res or res == "":
|
51
|
+
res = text
|
52
|
+
logging.warning(f"No obtener una respuesta.")
|
53
|
+
return res
|
54
|
+
except Exception as e:
|
55
|
+
logging.error(f"Error al procesar: {text}")
|
56
|
+
logging.error(e)
|
57
|
+
return None
|
@@ -0,0 +1,56 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
SYSTEM_PROMPT = """
|
4
|
+
Dado el siguiente 'Conocimiento' y la 'Consulta de usuario', tu tarea es responder de manera amable y en lenguaje natural.
|
5
|
+
|
6
|
+
**Conocimiento:**
|
7
|
+
%s
|
8
|
+
|
9
|
+
**Consulta de usuario:**
|
10
|
+
%s
|
11
|
+
|
12
|
+
**Importante:**
|
13
|
+
- Es fundamental que evites responder si la consulta del usuario no se relaciona
|
14
|
+
con temas jurídicos, con Justifacil y las funciones jurisdiccionales de las siguientes entidades
|
15
|
+
colombianas: SIC, DNDA, DIMAR, SNS, SFC, ICA y Supersociedades, bajo el marco
|
16
|
+
legal del Código General del Proceso (Ley 1564 de 2012). Recuerda que Justifacil es
|
17
|
+
un sistema de información que permite adelantar tramites de estas entidades, y como tal, tiene secciones de:
|
18
|
+
glosario, preguntas frecuentes, observatorio de justicia, etc.
|
19
|
+
- Siempre finaliza tu respuesta invitando al usuario a hacer más consultas.
|
20
|
+
|
21
|
+
**Instrucciones:**
|
22
|
+
- Evita tutear al usuario.
|
23
|
+
- Si la consulta del usuario no se relaciona con temas jurídicos, con Justifacil y las funciones jurisdiccionales de las siguientes entidades, inicia la respuesta con "Lo lamento, ..."
|
24
|
+
- Tu respuesta debe basarse únicamente en el 'Conocimiento' proporcionado.
|
25
|
+
- Tu respuesta debe ser amable y el lenguaje natural.
|
26
|
+
- Tu respuesta debe ser clara, concisa y relevante para la consulta del usuario.
|
27
|
+
- Evita agregar información que no esté en el 'Conocimiento'.
|
28
|
+
- Evita agregar explicaciones innecesarias o adicionales.
|
29
|
+
- Solo limitate a responder la consulta parafraseando el 'Conocimiento' proporcionado.
|
30
|
+
|
31
|
+
"""
|
32
|
+
|
33
|
+
USER_PROMPT = """
|
34
|
+
|
35
|
+
Respuesta:
|
36
|
+
"""
|
37
|
+
|
38
|
+
# Efectua la inferencia del modelo.
|
39
|
+
def derive(service, conocimiento, consulta, max_tkns=2000) -> any:
|
40
|
+
try:
|
41
|
+
tmp_work_memory = []
|
42
|
+
prompt = SYSTEM_PROMPT % (conocimiento, consulta)
|
43
|
+
tmp_work_memory.append({"role": "system", "content": prompt})
|
44
|
+
prompt = USER_PROMPT
|
45
|
+
tmp_work_memory.append({"role": "user", "content": prompt})
|
46
|
+
res = service.generate(tmp_work_memory, max_tokens=max_tkns)
|
47
|
+
logging.info(f"\n\n\nProcesando:\Conocimiento: {conocimiento}\nConsulta: {consulta}")
|
48
|
+
logging.info(f"Respuesta: {res}")
|
49
|
+
if not res or res == "":
|
50
|
+
res = consulta
|
51
|
+
logging.warning(f"No obtener una respuesta.")
|
52
|
+
return res
|
53
|
+
except Exception as e:
|
54
|
+
logging.error(f"Error al procesar: {consulta}")
|
55
|
+
logging.error(e)
|
56
|
+
return None
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
SYSTEM_PROMPT = """
|
4
|
+
[TAREA]
|
5
|
+
Eres un sistema de clasificación experto. Tu única tarea es evaluar la siguiente conversación contra las reglas proporcionadas y responder con la justificación de RECHAZO.
|
6
|
+
|
7
|
+
[DEFINICIONES]
|
8
|
+
%s
|
9
|
+
|
10
|
+
[REGLAS]
|
11
|
+
%s
|
12
|
+
|
13
|
+
[INSTRUCCIONES DE RESPUESTA]
|
14
|
+
Responde únicamente bajo las siguientes condiciones:
|
15
|
+
- Con la justificación de RECHAZO si la conversación no cumple con las reglas argumentando por qué no aplica.
|
16
|
+
- Con la justificación de RECHAZO parafrasea el concepto de reglas por el de marco normativo.
|
17
|
+
- Si la conversación cumple AL MENOS UNA de las reglas responde unicamente: SIN_COMENTARIOS.
|
18
|
+
|
19
|
+
[EJEMPLOS]
|
20
|
+
Reglas:
|
21
|
+
- Ser mayor de 18
|
22
|
+
- Vivir en México.
|
23
|
+
|
24
|
+
Texto del usuario:
|
25
|
+
- Texto: "Tengo 20 años y vivo en la Ciudad de México." -> SIN_COMENTARIOS
|
26
|
+
- Texto: "Tengo 12 y vivo en Argentina." -> RECHAZO: "No cumple con la regla de ser mayor de 18 y vivir en México."
|
27
|
+
- Texto: "Soy de México." -> SIN_COMENTARIOS
|
28
|
+
|
29
|
+
"""
|
30
|
+
|
31
|
+
USER_PROMPT = """
|
32
|
+
|
33
|
+
[EVALUACIÓN ACTUAL]
|
34
|
+
Conversación:
|
35
|
+
"%s"
|
36
|
+
|
37
|
+
Respuesta:
|
38
|
+
"""
|
39
|
+
|
40
|
+
# Efectua la inferencia del modelo.
|
41
|
+
def derive(service, definiciones, reglas, text, max_tkns=2000) -> any:
|
42
|
+
try:
|
43
|
+
tmp_work_memory = []
|
44
|
+
prompt = SYSTEM_PROMPT % (definiciones, reglas)
|
45
|
+
tmp_work_memory.append({"role": "system", "content": prompt})
|
46
|
+
prompt = USER_PROMPT % text
|
47
|
+
tmp_work_memory.append({"role": "user", "content": prompt})
|
48
|
+
res = service.generate(tmp_work_memory, max_tokens=max_tkns)
|
49
|
+
logging.info(f"\n\n\nProcesando:\nDefiniciones: {definiciones}\nReglas: {reglas}\nTexto: {text}")
|
50
|
+
logging.info(f"Respuesta: {res}")
|
51
|
+
if not res or res == "":
|
52
|
+
res = text
|
53
|
+
logging.warning(f"No obtener una respuesta.")
|
54
|
+
return res
|
55
|
+
except Exception as e:
|
56
|
+
logging.error(f"Error al procesar: {text}")
|
57
|
+
logging.error(e)
|
58
|
+
return None
|