tecuhtli commited on
Commit
1aa136d
·
1 Parent(s): 90c6590

Actualizo base FAISS y metadatos para Mori

Browse files
Mori_Chatbot_SpanishCorrections.py ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+
4
+ import os, sys, warnings, json, joblib, random, re, unicodedata
5
+ import numpy as np
6
+
7
+
8
+ #-------------------------------------------------------------------------
9
+ # Function to correct Spanish sentences' punctuation and missing characters
10
+ #-------------------------------------------------------------------------
11
+
12
+ def polish_spanish(s: str) -> str:
13
+ """Corrects and normalizes Spanish sentences for Mori outputs."""
14
+
15
+ # Normalización NFC para acentos y ñ
16
+ s = unicodedata.normalize("NFC", s).strip()
17
+
18
+ # Remover nombres del modelo filtrados
19
+ s = re.sub(
20
+ r'\s*[\[\(]\s*Mori\s+(?:Social|T[eé]nico|T[eé]cnico)\s*[\]\)]\s*',
21
+ '',
22
+ s,
23
+ flags=re.I
24
+ )
25
+
26
+ # Correcciones de palabras comunes
27
+ fixes = [
28
+ (r'(?i)(^|\W)T\s+puedes(?P<p>[^\w]|$)', r'\1Tú puedes\g<p>'),
29
+ (r'(?i)(^|\W)T\s+(ya|eres|estas|estás|tienes|puedes)\b', r'\1Tú \2'),
30
+ (r'(?i)\bclaro que s(?:i|í)?\b(?P<p>[,.\!?…])?', r'Claro que sí\g<p>'),
31
+ (r'(?i)(^|\s)si,', r'\1Sí,'),
32
+ (r'(?i)(\beso\s+)s(\s+est[áa]\b)', r'\1sí\2'),
33
+ (r'(?i)(^|[\s,;:])s(\s+es\b)', r'\1sí\2'),
34
+ (r'(?i)\btiles\b', 'útiles'),
35
+ (r'(?i)\butiles\b', 'útiles'),
36
+ (r'(?i)\butil\b', 'útil'),
37
+ (r'(?i)\btil\b', 'útil'),
38
+ (r'(?i)\bcategoras\b', 'categorías'),
39
+ (r'(?i)\bcategora\b', 'categoría'),
40
+ (r'(?i)\batpico\b', 'atípico'),
41
+ (r'(?i)\batpicos\b', 'atípico'),
42
+ (r'(?i)\bdesempeo\b', 'desempeño'),
43
+ (r'(?i)\baqui\b', 'aquí'),
44
+ (r'(?i)\balgn\b', 'algún'),
45
+ (r'(?i)\banomala\b', 'anomalía'),
46
+ (r'(?i)\banomalas\b', 'anomalías'),
47
+ (r'(?i)\balgun\b', 'algún'),
48
+ (r'(?i)\bAnimo\b', 'Ánimo'),
49
+ (r'(?i)\bcario\b', 'cariño'),
50
+ (r'(?i)\baprendisaje\b', 'aprendizaje'),
51
+ (r'(?i)\bmanana\b', 'mañana'),
52
+ (r'(?i)\bmaana\b', 'mañana'),
53
+ (r'(?i)\benergia\b', 'energía'),
54
+ (r'(?i)\benerga\b', 'energía'),
55
+ (r'(?i)\bextrano\b', 'extraño'),
56
+ (r'(?i)\bextrana\b', 'extraña'),
57
+ (r'(?i)\bextranar\b', 'extrañar'),
58
+ (r'(?i)\bextranarte\b', 'extrañarte'),
59
+ (r'(?i)\bextranas\b', 'extrañas'),
60
+ (r'(?i)\bextranos\b', 'extraños'),
61
+ (r'(?i)\baqu\b', 'aquí'),
62
+ (r'(?i)\bestare\b', 'estaré'),
63
+ (r'(?i)\bclarn\b', 'clarín'),
64
+ (r'(?i)\bclarin\b', 'clarín'),
65
+ (r'(?i)\bclar[íi]n\s+cornetas\b', 'clarín cornetas'),
66
+ (r'(?i)(^|\s)s([,.;:!?])', r'\1Sí\2'),
67
+ (r'(?i)\bfutbol\b', 'fútbol'),
68
+ (r'(?i)(^|\s)as(\s+se\b)', r'\1Así\2'),
69
+ (r'(?i)(^|\s)s(\s+orientarte\b)', r'\1sí\2'),
70
+ (r'(?i)\bbuen dia\b', 'buen día'),
71
+ (r'(?i)\bgran dia\b', 'gran día'),
72
+ (r'(?i)\bdias\b', 'días'),
73
+ (r'(?i)\bdia\b', 'día'),
74
+ (r'(?i)\bgran da\b', 'gran día'),
75
+ (r'(?i)\bacompa?a(r|rte|do|da|dos|das)?\b', r'acompaña\1'),
76
+ (r'(?i)(^|\s)as([,.;:!?]|\s|$)', r'\1así\2'),
77
+ (r'(?i)(^|\s)S lo se\b', r'\1Sí lo sé'),
78
+ (r'(?i)(^|\s)S lo sé\b', r'\1Sí lo sé'),
79
+ (r'(?i)\bcuidate\b', 'cuídate'),
80
+ (r'(?i)\bcuidese\b', 'cuídese'),
81
+ (r'(?i)\bcuidense\b', 'cuídense'),
82
+ (r'(?i)\bpequeo\b', 'pequeño'),
83
+ (r'(?i)\bpequea\b', 'pequeña'),
84
+ (r'(?i)\bpequeos\b', 'pequeños'),
85
+ (r'(?i)\bpequeas\b', 'pequeñas'),
86
+ (r'(?i)\bunico\b', 'único'),
87
+ (r'(?i)\bunica\b', 'única'),
88
+ (r'(?i)\bunicos\b', 'únicos'),
89
+ (r'(?i)\bunicas\b', 'únicas'),
90
+ (r'(?i)\bnico\b', 'único'),
91
+ (r'(?i)\bnica\b', 'única'),
92
+ (r'(?i)\bnicos\b', 'únicos'),
93
+ (r'(?i)\bnicas\b', 'únicas'),
94
+ (r'(?i)\bestadstico\b', 'estadístico'),
95
+ (r'(?i)\bestadstica\b', 'estadística'),
96
+ (r'(?i)\bestadsticos\b', 'estadísticos'),
97
+ (r'(?i)\bestadsticas\b', 'estadísticas'),
98
+ (r'(?i)\bgracias por confiar en m\b', 'gracias por confiar en mí'),
99
+ (r'(?i)\bcada dia\b', 'cada día'),
100
+ (r'(?i)\bcada da\b', 'cada día'),
101
+ (r'(?i)\bsegun\b', 'según'),
102
+ (r'(?i)\bcaracteristica(s)?\b', r'característica\1'),
103
+ (r'(?i)\bcaracterstica(s)?\b', r'característica\1'),
104
+ (r'(?i)\b([a-záéíóúñ]+)cion\b', r'\1ción'),
105
+ (r'(?i)\bdeterminacio\b', 'determinación'),
106
+ ]
107
+
108
+ for pat, rep in fixes:
109
+ s = re.sub(pat, rep, s)
110
+
111
+ # Corregir "Eso es todo!"
112
+ s = re.sub(
113
+ r'(?i)^eso es todo!(?P<r>(\s|$).*)',
114
+ r'¡Eso es todo!\g<r>',
115
+ s
116
+ )
117
+
118
+ # Añadir signo de apertura de pregunta (¿)
119
+ def add_opening_q(m):
120
+ cuerpo = m.group('qbody')
121
+ if '¿' in cuerpo:
122
+ return m.group(0)
123
+ return f"{m.group('pre')}¿{cuerpo}"
124
+
125
+ s = re.sub(
126
+ r'(?P<pre>(^|[.!…]\s+))(?P<qbody>[^?]*\?)',
127
+ add_opening_q,
128
+ s
129
+ )
130
+
131
+ # Añadir signo de apertura para exclamaciones comunes
132
+ def _open_exclam(m):
133
+ palabra = m.group('w')
134
+ resto = m.group('r') or ''
135
+ return f'¡{palabra}!{resto}'
136
+
137
+ s = re.sub(
138
+ r'(?i)^\s*(?P<w>(hola|gracias|genial|perfecto|claro|por supuesto|con gusto|listo|vaya|wow|tu puedes|tú puedes|clarín|clarin|clarín cornetas))!(?P<r>(\s|$).*)',
139
+ _open_exclam,
140
+ s
141
+ )
142
+
143
+ # Limpieza final
144
+ s = re.sub(r'\s+', ' ', s).strip()
145
+ if s and s[-1] not in ".!?…":
146
+ s += "."
147
+
148
+ return s
Mori_TechnicalPrompts.py ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """Script to create prompt to interact with LLMs for text generation"""
3
+ #=====================================================================================
4
+ # Importing Libraries ===============================================================
5
+ #=====================================================================================
6
+ import unicodedata
7
+ import re
8
+ from Mori_Chatbot_SpanishCorrections import polish_spanish
9
+ from Mori_Technical_RAGwithFAISS import retrieve_docs
10
+ import os
11
+ import warnings
12
+ # ************************************************************************
13
+ # Defining default paths for the model to work
14
+ # ************************************************************************
15
+ os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
16
+ warnings.filterwarnings("ignore", category=UserWarning)
17
+ warnings.filterwarnings("ignore", category=FutureWarning)
18
+
19
+ #=====================================================================================
20
+ # Functions =========================================================================
21
+ #=====================================================================================
22
+
23
+
24
+ def normalize_text(text: str) -> str:
25
+
26
+ """Normalize text for correct and similar processing"""
27
+ t = text.lower().strip()
28
+ t = unicodedata.normalize("NFD", t)
29
+ t = "".join(ch for ch in t if unicodedata.category(ch) != "Mn")
30
+ t = t.replace("¿", "").replace("?", "")
31
+ t = re.sub(r"\s+", " ", t)
32
+ return t
33
+
34
+ def classify_question_type_from_text(text: str) -> str:
35
+
36
+ """Determine the type of question"""
37
+
38
+ t = normalize_text(text)
39
+
40
+ if "para que sirve" in t or "para que se usa" in t:
41
+ return "funcionalidad"
42
+ if t.startswith("como ") or "pasos para" in t or "como puedo" in t:
43
+ return "procedimiento"
44
+ if t.startswith("que es ") or "definicion de" in t:
45
+ return "definicion"
46
+ return "definicion"
47
+
48
+
49
+ def build_prompt(qtype: str, question: str) -> str:
50
+ """Generates a base prompt"""
51
+ return (
52
+ f"Tipo: {qtype}\n"
53
+ f"Pregunta: {question}\n"
54
+ "Respuesta:"
55
+ )
56
+
57
+ def build_prompt_inference(question: str):
58
+ """Generates an inference prompt"""
59
+ qtype = classify_question_type_from_text(question)
60
+ return build_prompt(qtype, question)
61
+
62
+ def build_prompt_training(row):
63
+ """Generates a prompt for training"""
64
+ qtype = row["question_type"] # definicion / procedimiento / funcionalidad
65
+ question = row["input"]
66
+ return build_prompt(qtype, question)
67
+
68
+
69
+ def build_prompt_for_mori(user_question: str, question_type: str, top_doc: dict) -> str:
70
+ """
71
+ Prompt one-shot for RAG Mori, relying on question_type (definicion, procedimiento, funcionalidad).
72
+ """
73
+ ejemplo_q = (top_doc.get("input") or "").strip()
74
+ ejemplo_a = (top_doc.get("output") or "").strip()
75
+ contexto = (top_doc.get("context") or "").strip()
76
+ term = (top_doc.get("canonical_term") or "").strip()
77
+
78
+ prompt = (
79
+ "Eres un asistente técnico llamado Mori. Respondes en español, de forma clara y concisa.\n\n"
80
+ f"Contexto del concepto:\n"
81
+ f"- Término: {term}\n"
82
+ f"- Área: {contexto}\n"
83
+ f"- Tipo de pregunta: {question_type}\n\n"
84
+ f"A continuación tienes un ejemplo de pregunta y respuesta del mismo tipo \"{question_type}\":\n"
85
+ f"Pregunta de ejemplo:\n{ejemplo_q}\n\n"
86
+ f"Respuesta de ejemplo:\n{ejemplo_a}\n\n"
87
+ "Usa este estilo y nivel de detalle como guía.\n\n"
88
+ f"Ahora responde la siguiente pregunta del usuario manteniendo el tipo \"{question_type}\" "
89
+ "(sin inventar información que no aparezca en el contexto recuperado, o que contradiga el ejemplo):\n\n"
90
+ f"Pregunta del usuario:\n{user_question}\n\n"
91
+ "Respuesta:"
92
+ )
93
+
94
+ return prompt
95
+
96
+
97
+ def answer_with_mori_rag(tokenizer, model, question: str, modo: str = "exacto", k: int = 5, score_threshold: float = 0.88, verbose=True) -> str:
98
+ """
99
+ Mori RAG answer:
100
+ - Detects question_type
101
+ - Rcover docs
102
+ - Filter by question_type
103
+ - Use threshold to determine the answer to return
104
+ - If threshold is surpass → asnwer from FAISS
105
+ - Otherwise → Generative answer from fine tuned Mori
106
+ - Use polish_spanish to return the best possible gramatically corrected asnwer
107
+ """
108
+
109
+ # 1) Detectar tipo de pregunta
110
+ qtype = classify_question_type_from_text(question)
111
+ print(f"[Tipo detectado] {qtype}")
112
+
113
+ # 2) Recuperar documentos desde FAISS
114
+ docs = retrieve_docs(question, k=k, verbose=False)
115
+
116
+ if not docs:
117
+ print("[RAG] No se encontraron documentos, usando prompt simple.")
118
+ prompt = build_prompt_inference(question)
119
+ else:
120
+ # 3) Filtrar por question_type primero
121
+ same_type = [d for d in docs if d.get("question_type") == qtype]
122
+
123
+ if same_type:
124
+ top_doc = same_type[0]
125
+ else:
126
+ print("[RAG] No hay docs del mismo question_type, usando top-1 general.")
127
+ top_doc = docs[0]
128
+
129
+ if verbose:
130
+ # Debug bonito
131
+ print("\n[RAG] Documento usado como ejemplo:")
132
+ print(" score:", top_doc["score"])
133
+ print(" term :", top_doc.get("canonical_term", ""))
134
+ print(" ctx :", top_doc.get("context", ""))
135
+ print(" qtype:", top_doc.get("question_type", ""))
136
+ print(" Qej :", top_doc.get("input", ""))
137
+ print(" Aej :", top_doc.get("output", ""))
138
+
139
+ # 4) Threshold SOLO sobre ese top_doc (idealmente del mismo tipo)
140
+ if top_doc.get("question_type") == qtype and top_doc["score"] >= score_threshold:
141
+ if verbose:
142
+ print(f"[RAG] Coincidencia fuerte (>={score_threshold}) para tipo '{qtype}'. "
143
+ "Usando output directo del dataset.")
144
+ return polish_spanish(top_doc["output"]), build_prompt_for_mori(question, qtype, top_doc)
145
+
146
+ # 5) Si no pasa el threshold → usamos prompt generativo con RAG
147
+ prompt = build_prompt_for_mori(question, qtype, top_doc)
148
+
149
+ # 6) Generar con Mori usando el prompt
150
+ inputs = tokenizer(
151
+ prompt,
152
+ return_tensors="pt",
153
+ truncation=True,
154
+ max_length=256,
155
+ ).to(model.device)
156
+
157
+ gen_kwargs = get_gen_kwargs(modo)
158
+
159
+ output_ids = model.generate(
160
+ **inputs,
161
+ **gen_kwargs
162
+ )
163
+ raw_answer = tokenizer.decode(output_ids[0], skip_special_tokens=True)
164
+
165
+ # 7) Pulir la salida
166
+
167
+ return polish_spanish(raw_answer), prompt
168
+
169
+
170
+
171
+ def answer_with_mori_plain(tokenizer, model, question: str, modo: str = "exacto") -> str:
172
+ """
173
+ Mori answer without RAG: jsut suing inference prompt with fine tuned model
174
+ - Use polish_spanish to return the best possible gramatically corrected asnwer
175
+ """
176
+
177
+
178
+
179
+ prompt = build_prompt_inference(question)
180
+
181
+ inputs = tokenizer(
182
+ prompt,
183
+ return_tensors="pt",
184
+ truncation=True,
185
+ max_length=64
186
+ ).to(model.device)
187
+
188
+ gen_kwargs = get_gen_kwargs(modo)
189
+
190
+ output_ids = model.generate(
191
+ **inputs,
192
+ **gen_kwargs
193
+ )
194
+
195
+ raw_answer = tokenizer.decode(output_ids[0], skip_special_tokens=True)
196
+ return polish_spanish(raw_answer), prompt
197
+
198
+
199
+ def get_gen_kwargs(modo="exacto"):
200
+
201
+ """Selecting the Mori personaliuty by using different hyperparameters settigns"""
202
+
203
+ modo = modo.lower().strip()
204
+
205
+ presets = {
206
+ "exacto": dict(
207
+ max_new_tokens=64,
208
+ num_beams=4,
209
+ do_sample=False,
210
+ no_repeat_ngram_size=3,
211
+ repetition_penalty=1.05,
212
+ early_stopping=True,
213
+ ),
214
+
215
+ "superexacto": dict( # más estricto, menor creatividad
216
+ max_new_tokens=48,
217
+ num_beams=6,
218
+ do_sample=False,
219
+ no_repeat_ngram_size=4,
220
+ repetition_penalty=1.2,
221
+ early_stopping=True,
222
+ ),
223
+
224
+ "creativo": dict(
225
+ max_new_tokens=64,
226
+ num_beams=1,
227
+ do_sample=True,
228
+ temperature=0.4,
229
+ top_p=0.9,
230
+ no_repeat_ngram_size=3,
231
+ repetition_penalty=1.05,
232
+ early_stopping=True,
233
+ ),
234
+
235
+ "suave": dict( # sampling más libre
236
+ max_new_tokens=80,
237
+ num_beams=1,
238
+ do_sample=True,
239
+ temperature=0.7,
240
+ top_p=0.95,
241
+ no_repeat_ngram_size=2,
242
+ repetition_penalty=1.0,
243
+ early_stopping=True,
244
+ ),
245
+
246
+ "agresivo": dict( # máximo sampling creativo
247
+ max_new_tokens=120,
248
+ num_beams=1,
249
+ do_sample=True,
250
+ temperature=1.1,
251
+ top_p=0.95,
252
+ no_repeat_ngram_size=1,
253
+ repetition_penalty=0.9,
254
+ early_stopping=False,
255
+ ),
256
+
257
+ "beams_altos": dict( # modo generativo más estable
258
+ max_new_tokens=80,
259
+ num_beams=8,
260
+ do_sample=False,
261
+ no_repeat_ngram_size=4,
262
+ repetition_penalty=1.1,
263
+ early_stopping=True,
264
+ ),
265
+ }
266
+
267
+ return presets.get(modo, presets["exacto"])
268
+
269
+
270
+ #=====================================================================================
271
+ # FIN ===============================================================================
272
+ #=====================================================================================
Mori_Technical_RAGwithFAISS.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Inferencia RAG para Mori usando FAISS + E5 (multilingual).
4
+
5
+ Este módulo asume que:
6
+ - Ya existe un índice FAISS guardado (mori.faiss)
7
+ - Ya existe un archivo de metadatos (mori_metas.json)
8
+
9
+ Solo expone la función:
10
+ retrieve_docs(query: str, k: int = 3) -> list[dict]
11
+ """
12
+
13
+ import json
14
+ from pathlib import Path
15
+
16
+ import faiss
17
+ import numpy as np
18
+ import torch
19
+ from sentence_transformers import SentenceTransformer
20
+
21
+ # ************************************************************************
22
+ # Configuración básica
23
+ # ************************************************************************
24
+ output_dir = Path("Vec_DataBase") # mismo directorio que usaste al construir
25
+ model_name = "intfloat/multilingual-e5-base"
26
+ index_basename = "mori"
27
+ DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
28
+
29
+ RAG_BASE_DIR = output_dir
30
+ RAG_INDEX_PATH = RAG_BASE_DIR / f"{index_basename}.faiss"
31
+ RAG_METAS_PATH = RAG_BASE_DIR / f"{index_basename}_metas.json"
32
+
33
+ # Lazy loading (solo en la primera llamada a retrieve_docs)
34
+ _rag_model = None
35
+ _rag_index = None
36
+ _rag_metas = None
37
+
38
+
39
+ def _ensure_rag_loaded(verbose: bool = False):
40
+ """
41
+ Carga perezosa (lazy) del modelo de embeddings, índice FAISS y metadatos.
42
+ Solo se ejecuta la primera vez.
43
+ """
44
+ global _rag_model, _rag_index, _rag_metas
45
+
46
+ if _rag_model is None:
47
+ if verbose:
48
+ print(f"[*] Cargando modelo RAG ({model_name}) en {DEVICE}…")
49
+ _rag_model = SentenceTransformer(model_name, device=DEVICE)
50
+
51
+ if _rag_index is None:
52
+ if verbose:
53
+ print(f"[*] Cargando índice FAISS desde {RAG_INDEX_PATH}…")
54
+ assert RAG_INDEX_PATH.exists(), f"No se encontró el índice FAISS: {RAG_INDEX_PATH}"
55
+ _rag_index = faiss.read_index(str(RAG_INDEX_PATH))
56
+
57
+ if _rag_metas is None:
58
+ if verbose:
59
+ print(f"[*] Cargando metadatos desde {RAG_METAS_PATH}…")
60
+ assert RAG_METAS_PATH.exists(), f"No se encontró el archivo de metadatos: {RAG_METAS_PATH}"
61
+ with open(RAG_METAS_PATH, "r", encoding="utf-8") as f:
62
+ _rag_metas = json.load(f)
63
+
64
+
65
+ def retrieve_docs(query: str, k: int = 3, verbose: bool = False):
66
+ """
67
+ Recupera los k documentos más cercanos para una query dada.
68
+
69
+ Devuelve una lista de dicts con:
70
+ - score
71
+ - id
72
+ - canonical_term
73
+ - context
74
+ - input
75
+ - output
76
+ - question_type
77
+ - version
78
+ - encoder
79
+ """
80
+ _ensure_rag_loaded(verbose)
81
+
82
+ # E5 usa el prefijo "query: " para consultas
83
+ qtext = f"query: {query}"
84
+ q_emb = _rag_model.encode(
85
+ [qtext],
86
+ normalize_embeddings=True,
87
+ convert_to_numpy=True
88
+ ).astype("float32")
89
+
90
+ scores, idxs = _rag_index.search(q_emb, k)
91
+
92
+ results = []
93
+ for s, i in zip(scores[0], idxs[0]):
94
+ if i == -1:
95
+ continue
96
+ m = _rag_metas[i]
97
+ results.append({
98
+ "score": float(s),
99
+ **m
100
+ })
101
+ return results
102
+
103
+
104
+ if __name__ == "__main__":
105
+ # Pequeña prueba manual
106
+ qs = "¿Para qué sirve un isolation forest?"
107
+ docs = retrieve_docs(qs, k=3, verbose=True)
108
+ for d in docs:
109
+ print(f"[score={d['score']:.3f}] {d['input']} -> {d['output']}")
Prompts/prompts_social.json DELETED
@@ -1,56 +0,0 @@
1
- {
2
- "meta": {
3
- "task": "social_response",
4
- "version": "1.0"
5
- },
6
- "modes": {
7
- "zero_shot": {
8
- "instruction": "Responder de forma amigable y cercana al usuario.",
9
- "rules": [
10
- "Responde de forma natural y amistosa, con un toque reflexivo; agrega ejemplos sencillos o analogías cortas. ",
11
- "Evita sonar formal y permite algo de color humano."
12
- ],
13
- "output_format": "1–2 oraciones relajadas y naturales.",
14
- "tone": "Amigable y entusiasta.",
15
- "examples": []
16
- },
17
- "one_shot": {
18
- "instruction": "Responder de forma amigable y cercana al usuario.",
19
- "rules": [
20
- "Responde de forma natural y amistosa, con un toque reflexivo; agrega ejemplos sencillos o analogías cortas. ",
21
- "Evita sonar formal y permite algo de color humano."
22
- ],
23
- "output_format": "1–2 oraciones relajadas y naturales.",
24
- "tone": "Amigable y entusiasta.",
25
- "examples": [
26
- {
27
- "input": "¿Puedo hacerte una pregunta?",
28
- "output": "¡Claro! Dime cuál es tu duda y lo resolvemos juntos."
29
- }
30
- ]
31
- },
32
- "few_shot_3": {
33
- "instruction": "Responder de forma amigable y cercana al usuario.",
34
- "rules": [
35
- "Responde de forma natural y amistosa, con un toque reflexivo; agrega ejemplos sencillos o analogías cortas. ",
36
- "Evita sonar formal y permite algo de color humano."
37
- ],
38
- "output_format": "1–2 oraciones relajadas y naturales.",
39
- "tone": "Amigable y entusiasta.",
40
- "examples": [
41
- {
42
- "input": "¿Cuál es el significado de la vida?",
43
- "output": "Pregunta enorme; por ahora enfoquémonos en tus metas de hoy. ¿Qué te gustaría avanzar?"
44
- },
45
- {
46
- "input": "No entiendo nada 😩",
47
- "output": "Tranquilo/a, aprender toma tiempo. Dime qué parte se atoró y la vemos paso a paso."
48
- },
49
- {
50
- "input": "¿Qué opinas del clima?",
51
- "output": "No tengo sensores, pero si el clima ayuda, nos aventamos otro tema 😄."
52
- }
53
- ]
54
- }
55
- }
56
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prompts/prompts_technical.json DELETED
@@ -1,56 +0,0 @@
1
- {
2
- "meta": {
3
- "task": "technical_definition",
4
- "version": "1.0"
5
- },
6
- "modes": {
7
- "zero_shot": {
8
- "instruction": "Define con precisión.",
9
- "rules": [
10
- "Identifica correctamente el concepto principal mencionado en la pregunta.",
11
- "Proporciona una definición canónica, exacta y concisa del concepto."
12
- ],
13
- "output_format": "Respuesta corta y concisa.",
14
- "tone": "Directo, técnico y formal.",
15
- "examples": []
16
- },
17
- "one_shot": {
18
- "instruction": "Define con precisión.",
19
- "rules": [
20
- "Identifica correctamente el concepto principal mencionado en la pregunta.",
21
- "Proporciona una definición canónica, exacta y concisa del concepto."
22
- ],
23
- "output_format": "Respuesta corta y concisa.",
24
- "tone": "Directo, técnico y formal.",
25
- "examples": [
26
- {
27
- "input": "¿Que es la tecnologia?",
28
- "output": "Conjunto de teorías y de técnicas que permiten el aprovechamiento práctico del conocimiento científico."
29
- }
30
- ]
31
- },
32
- "few_shot_3": {
33
- "instruction": "Define con precisión.",
34
- "rules": [
35
- "Identifica correctamente el concepto principal mencionado en la pregunta.",
36
- "Proporciona una definición canónica, exacta y concisa del concepto."
37
- ],
38
- "output_format": "Respuesta corta y concisa.",
39
- "tone": "Directo, técnico y formal.",
40
- "examples": [
41
- {
42
- "input": "¿Qué es un algoritmo?",
43
- "output": "Conjunto ordenado de pasos o instrucciones que permiten resolver un problema o realizar una tarea de forma sistemática."
44
- },
45
- {
46
- "input": "¿Cómo se define la inteligencia artificial?",
47
- "output": "Campo de la informática que busca crear sistemas capaces de realizar tareas que requieren inteligencia humana, como razonar, aprender o reconocer patrones."
48
- },
49
- {
50
- "input": "Define el término base de datos.",
51
- "output": "Conjunto organizado de información que se almacena y gestiona electrónicamente para facilitar su acceso, consulta y actualización."
52
- }
53
- ]
54
- }
55
- }
56
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Statistics/conversaciones_log.csv CHANGED
@@ -1,40 +1,24 @@
1
- timestamp,user_id,tipo,pregunta,respuesta
2
- 2025-03-31T16:28:17.368963,cf87d3ce,Social,Hola Mori,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
3
- 2025-03-31T16:28:24.028333,cf87d3ce,Social,Como estas?,🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?
4
- 2025-03-31T16:28:55.260462,cf87d3ce,Social,adios,🤝 [Mori Social] Qué tal si aprendemos algo nuevo juntos? Tengo muchas ideas.
5
- 2025-03-31T16:30:21.418012,55f58750,Social,Que pex!,"🤝 [Mori Social] Hola, que puedo hacer por ti hoy? !"
6
- 2025-03-31T16:31:32.713328,42387ade,Social,Kiubo,"🤝 [Mori Social] Kiubo, unassumingly, was a naive man, bringing the humor to bear with him. Kiubo was a good teacher and a good soccer player, but he hasn'"
7
- 2025-03-31T16:33:22.549415,e8c2a10c,Social,Hola Mori,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
8
- 2025-03-31T16:36:22.123926,17a640e3,Social,Hola!,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
9
- 2025-03-31T16:38:52.069727,ac12720e,Social,Hola!,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
10
- 2025-03-31T16:39:07.845789,ac12720e,Social,Como estas?,🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?
11
- 2025-03-31T16:40:51.799872,a32b6f62,Social,Que pex!,"🤝 [Mori Social] Hola, que puedo hacer por ti hoy? !"
12
- 2025-03-31T16:41:34.537810,f6137fc4,Social,Hola!,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
13
- 2025-03-31T16:41:42.157033,f6137fc4,Social,Como estas?,🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?
14
- 2025-03-31T16:41:52.608217,f6137fc4,Técnica,Que es auc,🧠 [Mori Técnico] Es una técnica que se utiliza para evaluar si una predicción sobre una variable depende de una predicción correcta o predicción correcta.
15
- 2025-03-31T16:42:02.848731,f6137fc4,Técnica,Que es area under the curve,🧠 [Mori Técnico] Es la superficie de la red neuronal que se entrena para el pre-entrenamiento de un modelo de lenguaje grande.
16
- 2025-03-31T16:42:15.602768,f6137fc4,Técnica,Que es la roc curve,🧠 [Mori Técnico] Relaciona el recall con el ratio de falsos positivos. Es una medida de la scadencia de la probabilidad de que ocurra un error.
17
- 2025-03-31T17:17:08.276847,4e07ab74,Social,Hola Mori,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
18
- 2025-03-31T17:17:15.413028,4e07ab74,Social,Como estas?,🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?
19
- 2025-03-31T17:17:22.034776,4e07ab74,Social,Me ayudas?,🤝 [Mori Social] Claro! En qué te puedo ayudar?
20
- 2025-03-31T17:17:37.773793,4e07ab74,Técnica,Que es clasificacion?,🧠 [Mori Técnico] Es el proceso de aprendizaje automático que clasifica los datos en grupos o clases.
21
- 2025-03-31T17:17:51.623283,4e07ab74,Técnica,Que es estadistica?,"🧠 [Mori Técnico] Es el proceso estadstico, como la determinación de la etiqueta, la determinación de la salida, la determinación de la etiqueta, la determinación de la salida, la determinación"
22
- 2025-03-31T17:18:01.442976,4e07ab74,Técnica,Define matriz,🧠 [Mori Técnico] Una matriz en una colección de datos que se utiliza para matrizar una colección de datos.
23
- 2025-03-31T17:21:01.027598,67ba31b1,Social,Hola!,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
24
- 2025-03-31T17:21:16.283109,67ba31b1,Social,Que haces?,🤝 [Mori Social] Estoy diseado para responder preguntas técnicas sobre ciencia de datos y aprendizaje automático.
25
- 2025-03-31T17:21:33.640908,67ba31b1,Técnica,QUe es la media?,"🧠 [Mori Técnico] Es la suma de todos los elementos de un conjunto, que se calcula sumando todos los valores de los valores."
26
- 2025-03-31T17:21:43.997955,67ba31b1,Técnica,QUe es la moda?,🧠 [Mori Técnico] Es la suma de todas las diferencias existentes entre los valores predichos y los valores reales.
27
- 2025-03-31T17:21:59.428604,67ba31b1,Técnica,Que es moda en estadistica?,"🧠 [Mori Técnico] Es una técnica que se utiliza para mejorar la calidad de las respuestas de un modelo. Se basa en la lectura de las ciencias, la lectura de las ciencias y la lectur"
28
- 2025-03-31T17:47:22.713161,5e6ee205,Social,Hola Mori!,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
29
- 2025-03-31T17:47:31.893520,5e6ee205,Social,Como estas?,🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?
30
- 2025-03-31T17:48:48.753589,5e6ee205,Técnica,Me explicas que es pandas,🧠 [Mori Técnico] Es un grupo de péndas donde las tasas de datos son similares a los tasas de datos. Pandas se pueden utilizar para el análisis de datos.
31
- 2025-03-31T17:49:45.764205,e1939321,Social,Hola Mori!,🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?
32
- 2025-03-31T17:53:54.509862,8058821c,Social,Que pex!,"🤝 [Mori Social] Hola, que puedo hacer por ti hoy? !"
33
- 2025-03-31T17:54:07.576373,8058821c,Técnica,Me explicas precission,🧠 [Mori Técnico] Es una técnica que precisión suele ampliar la eficiencia de una operación o componente al precisión de un modelo.
34
- 2025-03-31T17:54:15.268164,8058821c,Técnica,Me explicas accuracy,🧠 [Mori Técnico] Una propiedad que predice si un modelo predice cuántas predicciones son correctas y precisas para un objeto.
35
- 2025-03-31T17:54:23.471874,8058821c,Técnica,Que es accuracy,🧠 [Mori Técnico] Es una métrica que mide la precisión de los datos de entrenamiento. Se utiliza para medir la precisión de los datos.
36
- 2025-03-31T17:54:32.696201,8058821c,Técnica,Que es precision,"🧠 [Mori Técnico] Es una métrica que mide la precisión de un modelo en datos, lo que refleja la precisión de los datos. Se utiliza para evaluar si los datos son exactos, precisos o precisos"
37
- 2025-03-31T17:54:41.358049,8058821c,Técnica,Que es precission,🧠 [Mori Técnico] Es una técnica que precisión suele generar una estructura adicional y una estructura adicional.
38
- 2025-03-31T17:54:48.398258,8058821c,Técnica,Que es recall,🧠 [Mori Técnico] Se refiere a la capacidad de un modelo para retenir y reajustar datos en forma comprimida y recomendar los datos más relevantes.
39
- 2025-03-31T17:56:30.761211,bdad959c,Técnica,Que onda,🧠 [Mori Técnico] Es una técnica que se utiliza para evaluar la calidad de la aplicación de un modelo de lenguaje grande.
40
- 2025-03-31T17:56:39.323924,bdad959c,Social,Tengo Hambre,🤝 [Mori Social] Eso significa que tu cuerpo está procesando bien. Pero tu cuerpo está procesando bien.
 
1
+ timestamp,user_id,pregunta,respuesta,rag,personality
2
+ 2025-11-23T21:14:45.856296,a34683e1,"Que es machine learning?
3
+ ",Es una rama de la inteligencia artificial que permite a los sistemas aprender de datos y mejorar su desempeño de forma automática a través de modelos estadísticos.,Con RAG,Mori Exacto
4
+ 2025-11-23T21:14:53.551138,a34683e1,"Como limpiar datos?
5
+ ","Se puede hacer mediante: identificar valores nulos, corregir datos inconsistentes, eliminar duplicados, detectar atípicos y estandarizar formatos.",Con RAG,Mori Exacto
6
+ 2025-11-23T21:15:07.449649,a34683e1,"Para que sirve un autoencoder?
7
+ ","Sirve para aprender representaciones comprimidas de los datos y reconstruirlos, útil para reducción de dimensionalidad y detección de anomalías.",Con RAG,Mori Exacto
8
+ 2025-11-23T21:15:16.998515,a34683e1,"Para que sirve un autoencoder?
9
+ ","Sirve para aprender representaciones comprimidas de los datos y reconstruirlos, útil para reducción de dimensionalidad y detección de anomalías.",Sin RAG,Mori Exacto
10
+ 2025-11-23T21:15:25.730844,a34683e1,"Para que sirve un autoencoder?
11
+ ","Sirve para aprender representaciones comprimidas de los datos y reconstruirlos, útil para reducción de dimensionalidad y detección de anomalías.",Sin RAG,creativo
12
+ 2025-11-23T21:15:37.784763,a34683e1,"Que es machine learning?
13
+ ",Es una rama de la inteligencia artificial que permite a los sistemas aprender de datos y mejorar su desempeño de forma automática a través de modelos estadísticos.,Sin RAG,creativo
14
+ 2025-11-23T21:15:44.419135,a34683e1,"Que es machine learning?
15
+ ",Es una rama de la inteligencia artificial que permite a los sistemas aprender de datos y mejorar su desempeño de forma automática a través de modelos estadísticos.,Sin RAG,exacto
16
+ 2025-11-23T21:15:55.738209,a34683e1,"Que es CNN?
17
+ ",Es un modelo de aprendizaje automático que imita la forma en que se ejecuta por conexiones de datos.,Sin RAG,exacto
18
+ 2025-11-23T21:16:01.193517,a34683e1,"Que es CNN?
19
+ ",Es un modelo de aprendizaje automático que imita la forma en que se ejecuta por conexiones de datos.,Sin RAG,creativo
20
+ 2025-11-23T21:16:05.149295,a34683e1,"Que es CNN?
21
+ ",Una red neuronal en la que al menos una capa es una capa convolucional.,Con RAG,creativo
22
+ 2025-11-23T21:16:22.504877,a34683e1,Para que sirve big data?,"Sirve para procesar, almacenar y analizar grandes volúmenes de datos imposibles de manejar con herramientas tradicionales.",Con RAG,creativo
23
+ 2025-11-23T21:16:27.914520,a34683e1,Para que sirve big data?,"Sirve para descubrir patrones, tendencias y relaciones que apoyan la toma de decisiones grandes.",Sin RAG,creativo
24
+ 2025-11-23T21:16:35.944643,a34683e1,Para que sirve big data?,"Sirve para almacenar, procesar y analizar grandes volmenes de datos con el fin de descubrir patrones, tendencias y relaciones que apoyan la toma de decisiones.",Sin RAG,exacto
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Statistics/conversaciones_log.jsonl CHANGED
@@ -1,39 +1,13 @@
1
- {"timestamp": "2025-03-31T16:28:17.368963", "user_id": "cf87d3ce", "tipo": "Social", "pregunta": "Hola Mori", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
2
- {"timestamp": "2025-03-31T16:28:24.028333", "user_id": "cf87d3ce", "tipo": "Social", "pregunta": "Como estas?", "respuesta": "🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?"}
3
- {"timestamp": "2025-03-31T16:28:55.260462", "user_id": "cf87d3ce", "tipo": "Social", "pregunta": "adios", "respuesta": "🤝 [Mori Social] Qué tal si aprendemos algo nuevo juntos? Tengo muchas ideas."}
4
- {"timestamp": "2025-03-31T16:30:21.418012", "user_id": "55f58750", "tipo": "Social", "pregunta": "Que pex!", "respuesta": "🤝 [Mori Social] Hola, que puedo hacer por ti hoy? !"}
5
- {"timestamp": "2025-03-31T16:31:32.713328", "user_id": "42387ade", "tipo": "Social", "pregunta": "Kiubo", "respuesta": "🤝 [Mori Social] Kiubo, unassumingly, was a naive man, bringing the humor to bear with him. Kiubo was a good teacher and a good soccer player, but he hasn'"}
6
- {"timestamp": "2025-03-31T16:33:22.549415", "user_id": "e8c2a10c", "tipo": "Social", "pregunta": "Hola Mori", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
7
- {"timestamp": "2025-03-31T16:36:22.123926", "user_id": "17a640e3", "tipo": "Social", "pregunta": "Hola!", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
8
- {"timestamp": "2025-03-31T16:38:52.069727", "user_id": "ac12720e", "tipo": "Social", "pregunta": "Hola!", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
9
- {"timestamp": "2025-03-31T16:39:07.845789", "user_id": "ac12720e", "tipo": "Social", "pregunta": "Como estas?", "respuesta": "🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?"}
10
- {"timestamp": "2025-03-31T16:40:51.799872", "user_id": "a32b6f62", "tipo": "Social", "pregunta": "Que pex!", "respuesta": "🤝 [Mori Social] Hola, que puedo hacer por ti hoy? !"}
11
- {"timestamp": "2025-03-31T16:41:34.537810", "user_id": "f6137fc4", "tipo": "Social", "pregunta": "Hola!", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
12
- {"timestamp": "2025-03-31T16:41:42.157033", "user_id": "f6137fc4", "tipo": "Social", "pregunta": "Como estas?", "respuesta": "🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?"}
13
- {"timestamp": "2025-03-31T16:41:52.608217", "user_id": "f6137fc4", "tipo": "Técnica", "pregunta": "Que es auc", "respuesta": "🧠 [Mori Técnico] Es una técnica que se utiliza para evaluar si una predicción sobre una variable depende de una predicción correcta o predicción correcta."}
14
- {"timestamp": "2025-03-31T16:42:02.848731", "user_id": "f6137fc4", "tipo": "Técnica", "pregunta": "Que es area under the curve", "respuesta": "🧠 [Mori Técnico] Es la superficie de la red neuronal que se entrena para el pre-entrenamiento de un modelo de lenguaje grande."}
15
- {"timestamp": "2025-03-31T16:42:15.602768", "user_id": "f6137fc4", "tipo": "Técnica", "pregunta": "Que es la roc curve", "respuesta": "🧠 [Mori Técnico] Relaciona el recall con el ratio de falsos positivos. Es una medida de la scadencia de la probabilidad de que ocurra un error."}
16
- {"timestamp": "2025-03-31T17:17:08.276847", "user_id": "4e07ab74", "tipo": "Social", "pregunta": "Hola Mori", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
17
- {"timestamp": "2025-03-31T17:17:15.413028", "user_id": "4e07ab74", "tipo": "Social", "pregunta": "Como estas?", "respuesta": "🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?"}
18
- {"timestamp": "2025-03-31T17:17:22.034776", "user_id": "4e07ab74", "tipo": "Social", "pregunta": "Me ayudas?", "respuesta": "🤝 [Mori Social] Claro! En qué te puedo ayudar?"}
19
- {"timestamp": "2025-03-31T17:17:37.773793", "user_id": "4e07ab74", "tipo": "Técnica", "pregunta": "Que es clasificacion?", "respuesta": "🧠 [Mori Técnico] Es el proceso de aprendizaje automático que clasifica los datos en grupos o clases."}
20
- {"timestamp": "2025-03-31T17:17:51.623283", "user_id": "4e07ab74", "tipo": "Técnica", "pregunta": "Que es estadistica?", "respuesta": "🧠 [Mori Técnico] Es el proceso estadstico, como la determinación de la etiqueta, la determinación de la salida, la determinación de la etiqueta, la determinación de la salida, la determinación"}
21
- {"timestamp": "2025-03-31T17:18:01.442976", "user_id": "4e07ab74", "tipo": "Técnica", "pregunta": "Define matriz", "respuesta": "🧠 [Mori Técnico] Una matriz en una colección de datos que se utiliza para matrizar una colección de datos."}
22
- {"timestamp": "2025-03-31T17:21:01.027598", "user_id": "67ba31b1", "tipo": "Social", "pregunta": "Hola!", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
23
- {"timestamp": "2025-03-31T17:21:16.283109", "user_id": "67ba31b1", "tipo": "Social", "pregunta": "Que haces?", "respuesta": "🤝 [Mori Social] Estoy diseado para responder preguntas técnicas sobre ciencia de datos y aprendizaje automático."}
24
- {"timestamp": "2025-03-31T17:21:33.640908", "user_id": "67ba31b1", "tipo": "Técnica", "pregunta": "QUe es la media?", "respuesta": "🧠 [Mori Técnico] Es la suma de todos los elementos de un conjunto, que se calcula sumando todos los valores de los valores."}
25
- {"timestamp": "2025-03-31T17:21:43.997955", "user_id": "67ba31b1", "tipo": "Técnica", "pregunta": "QUe es la moda?", "respuesta": "🧠 [Mori Técnico] Es la suma de todas las diferencias existentes entre los valores predichos y los valores reales."}
26
- {"timestamp": "2025-03-31T17:21:59.428604", "user_id": "67ba31b1", "tipo": "Técnica", "pregunta": "Que es moda en estadistica?", "respuesta": "🧠 [Mori Técnico] Es una técnica que se utiliza para mejorar la calidad de las respuestas de un modelo. Se basa en la lectura de las ciencias, la lectura de las ciencias y la lectur"}
27
- {"timestamp": "2025-03-31T17:47:22.713161", "user_id": "5e6ee205", "tipo": "Social", "pregunta": "Hola Mori!", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
28
- {"timestamp": "2025-03-31T17:47:31.893520", "user_id": "5e6ee205", "tipo": "Social", "pregunta": "Como estas?", "respuesta": "🤝 [Mori Social] Estoy genial y listo para ayudarte! Qué quieres aprender hoy?"}
29
- {"timestamp": "2025-03-31T17:48:48.753589", "user_id": "5e6ee205", "tipo": "Técnica", "pregunta": "Me explicas que es pandas", "respuesta": "🧠 [Mori Técnico] Es un grupo de péndas donde las tasas de datos son similares a los tasas de datos. Pandas se pueden utilizar para el análisis de datos."}
30
- {"timestamp": "2025-03-31T17:49:45.764205", "user_id": "e1939321", "tipo": "Social", "pregunta": "Hola Mori!", "respuesta": "🤝 [Mori Social] Hola! Qué gusto saludarte. Con qué tema de ciencia de datos necesitas ayuda?"}
31
- {"timestamp": "2025-03-31T17:53:54.509862", "user_id": "8058821c", "tipo": "Social", "pregunta": "Que pex!", "respuesta": "🤝 [Mori Social] Hola, que puedo hacer por ti hoy? !"}
32
- {"timestamp": "2025-03-31T17:54:07.576373", "user_id": "8058821c", "tipo": "Técnica", "pregunta": "Me explicas precission", "respuesta": "🧠 [Mori Técnico] Es una técnica que precisión suele ampliar la eficiencia de una operación o componente al precisión de un modelo."}
33
- {"timestamp": "2025-03-31T17:54:15.268164", "user_id": "8058821c", "tipo": "Técnica", "pregunta": "Me explicas accuracy", "respuesta": "🧠 [Mori Técnico] Una propiedad que predice si un modelo predice cuántas predicciones son correctas y precisas para un objeto."}
34
- {"timestamp": "2025-03-31T17:54:23.471874", "user_id": "8058821c", "tipo": "Técnica", "pregunta": "Que es accuracy", "respuesta": "🧠 [Mori Técnico] Es una métrica que mide la precisión de los datos de entrenamiento. Se utiliza para medir la precisión de los datos."}
35
- {"timestamp": "2025-03-31T17:54:32.696201", "user_id": "8058821c", "tipo": "Técnica", "pregunta": "Que es precision", "respuesta": "🧠 [Mori Técnico] Es una métrica que mide la precisión de un modelo en datos, lo que refleja la precisión de los datos. Se utiliza para evaluar si los datos son exactos, precisos o precisos"}
36
- {"timestamp": "2025-03-31T17:54:41.358049", "user_id": "8058821c", "tipo": "Técnica", "pregunta": "Que es precission", "respuesta": "🧠 [Mori Técnico] Es una técnica que precisión suele generar una estructura adicional y una estructura adicional."}
37
- {"timestamp": "2025-03-31T17:54:48.398258", "user_id": "8058821c", "tipo": "Técnica", "pregunta": "Que es recall", "respuesta": "🧠 [Mori Técnico] Se refiere a la capacidad de un modelo para retenir y reajustar datos en forma comprimida y recomendar los datos más relevantes."}
38
- {"timestamp": "2025-03-31T17:56:30.761211", "user_id": "bdad959c", "tipo": "Técnica", "pregunta": "Que onda", "respuesta": "🧠 [Mori Técnico] Es una técnica que se utiliza para evaluar la calidad de la aplicación de un modelo de lenguaje grande."}
39
- {"timestamp": "2025-03-31T17:56:39.323924", "user_id": "bdad959c", "tipo": "Social", "pregunta": "Tengo Hambre", "respuesta": "🤝 [Mori Social] Eso significa que tu cuerpo está procesando bien. Pero tu cuerpo está procesando bien."}
 
1
+ {"timestamp": "2025-11-23T21:14:45.856296", "user_id": "a34683e1", "pregunta": "Que es machine learning?\n", "respuesta": "Es una rama de la inteligencia artificial que permite a los sistemas aprender de datos y mejorar su desempeño de forma automática a través de modelos estadísticos.", "uso_rag": "Con RAG", "personality": "Mori Exacto"}
2
+ {"timestamp": "2025-11-23T21:14:53.551138", "user_id": "a34683e1", "pregunta": "Como limpiar datos?\n", "respuesta": "Se puede hacer mediante: identificar valores nulos, corregir datos inconsistentes, eliminar duplicados, detectar atípicos y estandarizar formatos.", "uso_rag": "Con RAG", "personality": "Mori Exacto"}
3
+ {"timestamp": "2025-11-23T21:15:07.449649", "user_id": "a34683e1", "pregunta": "Para que sirve un autoencoder?\n", "respuesta": "Sirve para aprender representaciones comprimidas de los datos y reconstruirlos, útil para reducción de dimensionalidad y detección de anomalías.", "uso_rag": "Con RAG", "personality": "Mori Exacto"}
4
+ {"timestamp": "2025-11-23T21:15:16.998515", "user_id": "a34683e1", "pregunta": "Para que sirve un autoencoder?\n", "respuesta": "Sirve para aprender representaciones comprimidas de los datos y reconstruirlos, útil para reducción de dimensionalidad y detección de anomalías.", "uso_rag": "Sin RAG", "personality": "Mori Exacto"}
5
+ {"timestamp": "2025-11-23T21:15:25.730844", "user_id": "a34683e1", "pregunta": "Para que sirve un autoencoder?\n", "respuesta": "Sirve para aprender representaciones comprimidas de los datos y reconstruirlos, útil para reducción de dimensionalidad y detección de anomalías.", "uso_rag": "Sin RAG", "personality": "creativo"}
6
+ {"timestamp": "2025-11-23T21:15:37.784763", "user_id": "a34683e1", "pregunta": "Que es machine learning?\n", "respuesta": "Es una rama de la inteligencia artificial que permite a los sistemas aprender de datos y mejorar su desempeño de forma automática a través de modelos estadísticos.", "uso_rag": "Sin RAG", "personality": "creativo"}
7
+ {"timestamp": "2025-11-23T21:15:44.419135", "user_id": "a34683e1", "pregunta": "Que es machine learning?\n", "respuesta": "Es una rama de la inteligencia artificial que permite a los sistemas aprender de datos y mejorar su desempeño de forma automática a través de modelos estadísticos.", "uso_rag": "Sin RAG", "personality": "exacto"}
8
+ {"timestamp": "2025-11-23T21:15:55.738209", "user_id": "a34683e1", "pregunta": "Que es CNN?\n", "respuesta": "Es un modelo de aprendizaje automático que imita la forma en que se ejecuta por conexiones de datos.", "uso_rag": "Sin RAG", "personality": "exacto"}
9
+ {"timestamp": "2025-11-23T21:16:01.193517", "user_id": "a34683e1", "pregunta": "Que es CNN?\n", "respuesta": "Es un modelo de aprendizaje automático que imita la forma en que se ejecuta por conexiones de datos.", "uso_rag": "Sin RAG", "personality": "creativo"}
10
+ {"timestamp": "2025-11-23T21:16:05.149295", "user_id": "a34683e1", "pregunta": "Que es CNN?\n", "respuesta": "Una red neuronal en la que al menos una capa es una capa convolucional.", "uso_rag": "Con RAG", "personality": "creativo"}
11
+ {"timestamp": "2025-11-23T21:16:22.504877", "user_id": "a34683e1", "pregunta": "Para que sirve big data?", "respuesta": "Sirve para procesar, almacenar y analizar grandes volúmenes de datos imposibles de manejar con herramientas tradicionales.", "uso_rag": "Con RAG", "personality": "creativo"}
12
+ {"timestamp": "2025-11-23T21:16:27.914520", "user_id": "a34683e1", "pregunta": "Para que sirve big data?", "respuesta": "Sirve para descubrir patrones, tendencias y relaciones que apoyan la toma de decisiones grandes.", "uso_rag": "Sin RAG", "personality": "creativo"}
13
+ {"timestamp": "2025-11-23T21:16:35.944643", "user_id": "a34683e1", "pregunta": "Para que sirve big data?", "respuesta": "Sirve para almacenar, procesar y analizar grandes volmenes de datos con el fin de descubrir patrones, tendencias y relaciones que apoyan la toma de decisiones.", "uso_rag": "Sin RAG", "personality": "exacto"}