evolutia 0.1.1__tar.gz → 0.1.2__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.
Files changed (57) hide show
  1. evolutia-0.1.2/PKG-INFO +536 -0
  2. evolutia-0.1.2/README.md +500 -0
  3. evolutia-0.1.2/evolutia/__init__.py +14 -0
  4. evolutia-0.1.2/evolutia/async_llm_providers.py +157 -0
  5. evolutia-0.1.2/evolutia/cache/__init__.py +9 -0
  6. evolutia-0.1.2/evolutia/cache/exercise_cache.py +226 -0
  7. evolutia-0.1.2/evolutia/cache/llm_cache.py +487 -0
  8. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/complexity_validator.py +33 -31
  9. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/config_manager.py +53 -40
  10. evolutia-0.1.2/evolutia/evolutia_engine.py +559 -0
  11. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/exam_generator.py +44 -43
  12. evolutia-0.1.2/evolutia/exceptions.py +38 -0
  13. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/exercise_analyzer.py +54 -91
  14. evolutia-0.1.2/evolutia/imports.py +175 -0
  15. evolutia-0.1.2/evolutia/llm_providers.py +381 -0
  16. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/material_extractor.py +166 -88
  17. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/rag/rag_indexer.py +107 -90
  18. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/rag/rag_retriever.py +130 -103
  19. evolutia-0.1.2/evolutia/retry_utils.py +280 -0
  20. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/utils/json_parser.py +29 -19
  21. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/utils/markdown_parser.py +185 -159
  22. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/utils/math_extractor.py +153 -144
  23. evolutia-0.1.2/evolutia/validation/__init__.py +1 -0
  24. evolutia-0.1.2/evolutia/validation/args_validator.py +253 -0
  25. evolutia-0.1.2/evolutia/validation/config_validator.py +502 -0
  26. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/variation_generator.py +82 -70
  27. evolutia-0.1.2/evolutia.egg-info/PKG-INFO +536 -0
  28. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia.egg-info/SOURCES.txt +14 -0
  29. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia.egg-info/requires.txt +5 -0
  30. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia_cli.py +22 -9
  31. {evolutia-0.1.1 → evolutia-0.1.2}/setup.py +8 -1
  32. evolutia-0.1.2/tests/test_args_validator.py +265 -0
  33. evolutia-0.1.2/tests/test_cache.py +221 -0
  34. evolutia-0.1.2/tests/test_config_validator.py +375 -0
  35. evolutia-0.1.2/tests/test_exercise_analyzer_cache.py +154 -0
  36. evolutia-0.1.1/PKG-INFO +0 -221
  37. evolutia-0.1.1/README.md +0 -190
  38. evolutia-0.1.1/evolutia/__init__.py +0 -5
  39. evolutia-0.1.1/evolutia/evolutia_engine.py +0 -284
  40. evolutia-0.1.1/evolutia/llm_providers.py +0 -219
  41. evolutia-0.1.1/evolutia.egg-info/PKG-INFO +0 -221
  42. {evolutia-0.1.1 → evolutia-0.1.2}/LICENSE +0 -0
  43. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/rag/__init__.py +0 -0
  44. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/rag/consistency_validator.py +0 -0
  45. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/rag/context_enricher.py +0 -0
  46. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/rag/enhanced_variation_generator.py +0 -0
  47. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/rag/rag_manager.py +0 -0
  48. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia/utils/__init__.py +0 -0
  49. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia.egg-info/dependency_links.txt +0 -0
  50. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia.egg-info/entry_points.txt +0 -0
  51. {evolutia-0.1.1 → evolutia-0.1.2}/evolutia.egg-info/top_level.txt +0 -0
  52. {evolutia-0.1.1 → evolutia-0.1.2}/setup.cfg +0 -0
  53. {evolutia-0.1.1 → evolutia-0.1.2}/tests/test_complexity_validator.py +0 -0
  54. {evolutia-0.1.1 → evolutia-0.1.2}/tests/test_config_discovery.py +0 -0
  55. {evolutia-0.1.1 → evolutia-0.1.2}/tests/test_exercise_analyzer.py +0 -0
  56. {evolutia-0.1.1 → evolutia-0.1.2}/tests/test_json_robustness.py +0 -0
  57. {evolutia-0.1.1 → evolutia-0.1.2}/tests/test_math_extractor.py +0 -0
@@ -0,0 +1,536 @@
1
+ Metadata-Version: 2.4
2
+ Name: evolutia
3
+ Version: 0.1.2
4
+ Summary: Sistema automatizado para generar preguntas de examen desafiantes basadas en materiales didácticos existentes
5
+ Home-page: https://github.com/glacy/evolutIA
6
+ Author: Gerardo Lacy-Mora
7
+ Author-email: gerardolacymora@gmail.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: Apache Software License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.8
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: PyYAML
15
+ Requires-Dist: requests
16
+ Requires-Dist: python-dotenv
17
+ Requires-Dist: openai
18
+ Requires-Dist: anthropic
19
+ Requires-Dist: google-generativeai
20
+ Requires-Dist: tqdm
21
+ Provides-Extra: rag
22
+ Requires-Dist: chromadb; extra == "rag"
23
+ Requires-Dist: tiktoken; extra == "rag"
24
+ Requires-Dist: sentence-transformers; extra == "rag"
25
+ Dynamic: author
26
+ Dynamic: author-email
27
+ Dynamic: classifier
28
+ Dynamic: description
29
+ Dynamic: description-content-type
30
+ Dynamic: home-page
31
+ Dynamic: license-file
32
+ Dynamic: provides-extra
33
+ Dynamic: requires-dist
34
+ Dynamic: requires-python
35
+ Dynamic: summary
36
+
37
+ # EvolutIA: Generador de preguntas de examen
38
+
39
+ Eres profesor de Métodos Matemáticos para Física e Ingeniería. Cada semestre te enfrentas al mismo desafío: crear exámenes desafiantes y justos que evalúen realmente el aprendizaje de tus estudiantes.
40
+
41
+ El problema es real: **los estudiantes memorizan ejercicios de semestres anteriores**. Necesitas crear nuevas variaciones cada vez, lo que toma horas de tu tiempo valioso. Además, quieres mantener la coherencia con los materiales que enseñaste en clase: lecturas, prácticas y tareas.
42
+
43
+ ## ¿Qué es EvolutIA?
44
+
45
+ EvolutIA es tu asistente de IA que transforma este proceso tedioso en algo tan simple como ejecutar un comando.
46
+
47
+ > **En pocas palabras**: EvolutIA toma tus ejercicios existentes y genera versiones más complejas y desafiantes, manteniendo el formato y estructura que tus estudiantes ya conocen. O, si prefieres, puede crear ejercicios nuevos desde cero basados en los temas que impartiste.
48
+
49
+ ### ¿Por qué usar EvolutIA?
50
+
51
+ | **Sin EvolutIA** | **Con EvolutIA** |
52
+ |-----------------|-----------------|
53
+ | 2-3 horas para crear variaciones de ejercicios | 5 minutos ejecutando un comando |
54
+ | Riesgo de crear ejercicios muy simples | Validación automática de complejidad matemática |
55
+ | Ejercicios desconectados de lo que enseñaste | Contexto alineado con tus lecturas y prácticas |
56
+ | Proceso manual repetitivo y propenso a errores | Automatización consistente y confiable |
57
+ | Dificultad para crear múltiples versiones | Generación ilimitada de variaciones únicas |
58
+
59
+ ### Características Principales
60
+
61
+ - **🔄 Variación Inteligente**: Incrementa la complejidad matemática de ejercicios existentes mientras mantiene el formato familiar
62
+ - **✨ Creación desde Cero**: Genera ejercicios nuevos basados en temas y tags que definiste
63
+ - **📚 RAG (Retrieval-Augmented Generation)**: Usa tus propias lecturas y ejercicios previos como contexto para generar contenido perfectamente alineado a tu curso
64
+ - **🤖 Multi-Proveedor**: Soporte nativo para OpenAI (GPT-4), Anthropic (Claude 3), Google (Gemini 1.5), DeepSeek y modelos locales vía Ollama
65
+ - **✅ Validación Automática**: Asegura que las nuevas preguntas sean matemáticamente más exigentes
66
+ - **📝 Formato MyST**: Salida compatible con Curvenote y Jupyter Book, lista para publicar
67
+
68
+ ---
69
+
70
+ ## Cómo Funciona en 3 Pasos
71
+
72
+ ### Paso 1: Prepara tus Materiales
73
+
74
+ Organiza tus materiales en carpetas por tema:
75
+
76
+ ```
77
+ MiCurso/
78
+ ├── analisis_vectorial/ # Tema 1
79
+ │ ├── semana1_practica.md
80
+ │ └── semana2_lectura.md
81
+ ├── matrices/ # Tema 2
82
+ │ ├── semana3_practica.md
83
+ │ └── semana4_lectura.md
84
+ ├── tareas/ # Tareas de evaluación
85
+ │ ├── tarea1/tarea1.md
86
+ │ └── tarea2/tarea2.md
87
+ └── examenes/ # Aquí aparecerán los exámenes generados
88
+ ```
89
+
90
+ ### Paso 2: Configura tu API Key
91
+
92
+ Crea un archivo `.env` en la raíz de tu proyecto:
93
+
94
+ ```bash
95
+ OPENAI_API_KEY=sk-... # O el proveedor que prefieras
96
+ ```
97
+
98
+ ### Paso 3: Genera tu Examen
99
+
100
+ ```bash
101
+ # ¡Un solo comando!
102
+ evolutia --tema analisis_vectorial --num_ejercicios 3 --output examenes/parcial1
103
+ ```
104
+
105
+ En 5 minutos, tendrás 3 ejercicios desafiantes, con sus soluciones, listos para tu examen.
106
+
107
+ ---
108
+
109
+ ## Historias de Uso Reales
110
+
111
+ ### 📖 Historia 1: Creando un Parcial de Análisis Vectorial
112
+
113
+ **El contexto**: Es semana 8 del semestre y necesitas un parcial sobre Análisis Vectorial. Tienes los ejercicios de la práctica del semestre pasado, pero no puedes usarlos tal cual porque los estudiantes ya los conocen.
114
+
115
+ **Con EvolutIA**:
116
+
117
+ ```bash
118
+ evolutia --tema analisis_vectorial --num_ejercicios 5 --complejidad alta --output examenes/parcial1
119
+ ```
120
+
121
+ **Resultado**:
122
+ - ✅ 5 nuevos ejercicios, cada uno más complejo que el original
123
+ - ✅ Soluciones completas paso a paso
124
+ - ✅ Formato MyST listo para Jupyter Book
125
+ - ✅ Archivos individuales por ejercicio para fácil distribución
126
+ - ⏱️ Tiempo total: 5 minutos (en lugar de 2-3 horas manualmente)
127
+
128
+ **Lo que obtienes**:
129
+ ```
130
+ examenes/parcial1/
131
+ ├── examen_parcial1.md # Examen completo
132
+ ├── ej1_parcial1.md # Ejercicio 1 + solución
133
+ ├── ej2_parcial1.md # Ejercicio 2 + solución
134
+ ├── ej3_parcial1.md # Ejercicio 3 + solución
135
+ ├── ej4_parcial1.md # Ejercicio 4 + solución
136
+ └── ej5_parcial1.md # Ejercicio 5 + solución
137
+ ```
138
+
139
+ ---
140
+
141
+ ### 📖 Historia 2: Generando un Quiz Rápido de Repaso
142
+
143
+ **El contexto**: Es semana 12 y quieres un quiz rápido de 3 ejercicios de repaso sobre Matrices. No necesitas ejercicios muy complejos, solo una práctica refrescante.
144
+
145
+ **Con EvolutIA**:
146
+
147
+ ```bash
148
+ evolutia --tema matrices --num_ejercicios 3 --complejidad media --output examenes/quiz_repaso
149
+ ```
150
+
151
+ **Resultado**:
152
+ - ✅ 3 ejercicios de nivel medio, perfectos para un quiz rápido
153
+ - ✅ Soluciones concisas y claras
154
+ - ✅ Todos los ejercicios alineados con lo que enseñaste en clase
155
+ - ⏱️ Tiempo total: 3 minutos
156
+
157
+ ---
158
+
159
+ ### 📖 Historia 3: Usando Contexto del Curso con RAG
160
+
161
+ **El contexto**: Quieres crear un examen final sobre Teorema de Stokes. Enseñaste usando notación específica y ejemplos particulares en tus lecturas. Quieres que el examen refleje exactamente ese enfoque.
162
+
163
+ **Primero, indexa tus materiales** (solo la primera vez):
164
+
165
+ ```bash
166
+ evolutia --tema stokes --use_rag --reindex --output examenes/final
167
+ ```
168
+
169
+ **Luego, genera el examen** (usará el contexto que ya tienes):
170
+
171
+ ```bash
172
+ evolutia --tema stokes --num_ejercicios 4 --use_rag --output examenes/final
173
+ ```
174
+
175
+ **Resultado**:
176
+ - ✅ 4 ejercicios que usan la misma notación que tus lecturas
177
+ - ✅ Ejemplos alineados con lo que enseñaste en clase
178
+ - ✅ Referencias a los materiales específicos del curso
179
+ - ⏱️ Tiempo total: 8 minutos (5 para indexar, 3 para generar)
180
+
181
+ **Nota**: El índice RAG se reutiliza en futuros exámenes, así que el tiempo disminuye drásticamente.
182
+
183
+ ---
184
+
185
+ ## Instalación Rápida
186
+
187
+ ### Requisitos Previos
188
+
189
+ - Python 3.8 o superior
190
+ - API Key de tu proveedor preferido (OpenAI, Anthropic, Google) o un servidor local (Ollama)
191
+
192
+ ### Paso 1: Crear Entorno Virtual (Recomendado)
193
+
194
+ ```bash
195
+ python -m venv venv
196
+ source venv/bin/activate # Windows: venv\Scripts\activate
197
+ ```
198
+
199
+ ### Paso 2: Instalar EvolutIA
200
+
201
+ ```bash
202
+ pip install evolutia
203
+ ```
204
+
205
+ ### Paso 3: Configurar API Keys
206
+
207
+ Crea un archivo `.env` en la raíz de tu proyecto:
208
+
209
+ ```bash
210
+ OPENAI_API_KEY=sk-...
211
+ # O el proveedor que prefieras:
212
+ # ANTHROPIC_API_KEY=sk-ant-...
213
+ # GOOGLE_API_KEY=...
214
+ # DEEPSEEK_API_KEY=sk-...
215
+ ```
216
+
217
+ ### Paso 4: ¡Estás listo!
218
+
219
+ ```bash
220
+ # Verifica que funciona
221
+ evolutia --analyze
222
+ ```
223
+
224
+ ---
225
+
226
+ ## Guía de Uso Completa
227
+
228
+ ### Modos de Operación
229
+
230
+ #### 🔄 Modo Variación (Más Común)
231
+
232
+ Toma ejercicios existentes y crea versiones más complejas.
233
+
234
+ **Uso básico**:
235
+ ```bash
236
+ evolutia --tema <tema> --num_ejercicios <cantidad> --output <directorio>
237
+ ```
238
+
239
+ **Ejemplos**:
240
+
241
+ ```bash
242
+ # Generar 1 variación del tema 'analisis_vectorial'
243
+ evolutia --tema analisis_vectorial --num_ejercicios 1 --output examenes/parcial1
244
+
245
+ # Generar 3 variaciones con alta complejidad
246
+ evolutia --tema matrices --num_ejercicios 3 --complejidad muy_alta --output examenes/dificil
247
+
248
+ # Variar ejercicios específicos por su etiqueta (Label)
249
+ evolutia --tema analisis_vectorial --label ex1-s1 ex2-s1 --output examenes/recuperacion
250
+ ```
251
+
252
+ #### ✨ Modo Creación
253
+
254
+ Genera ejercicios nuevos desde cero basados en temas y tags.
255
+
256
+ **Uso básico**:
257
+ ```bash
258
+ evolutia --mode creation --tema <tema> --num_ejercicios <cantidad> --output <directorio>
259
+ ```
260
+
261
+ **Ejemplos**:
262
+
263
+ ```bash
264
+ # Crear 3 ejercicios nuevos sobre 'numeros_complejos'
265
+ evolutia --mode creation --tema numeros_complejos --num_ejercicios 3 --output examenes/quiz1
266
+
267
+ # Crear ejercicios con tags específicos
268
+ evolutia --mode creation --tema vectores --tags producto --num_ejercicios 2 --output examenes/quiz_producto
269
+ ```
270
+
271
+ #### 📚 Modo RAG (Retrieval-Augmented Generation)
272
+
273
+ Usa tus propias lecturas y prácticas como contexto para generar ejercicios perfectamente alineados a tu curso.
274
+
275
+ **Primer uso (indexar materiales)**:
276
+ ```bash
277
+ evolutia --tema <tema> --use_rag --reindex --num_ejercicios <cantidad> --output <directorio>
278
+ ```
279
+
280
+ **Usos posteriores (usar índice ya creado)**:
281
+ ```bash
282
+ evolutia --tema <tema> --use_rag --num_ejercicios <cantidad> --output <directorio>
283
+ ```
284
+
285
+ **Ejemplo completo**:
286
+ ```bash
287
+ # Primero: Indexar y generar examen final
288
+ evolutia --tema stokes --use_rag --reindex --num_ejercicios 4 --output examenes/final
289
+
290
+ # Después: Generar otro examen con el mismo índice (más rápido)
291
+ evolutia --tema stokes --use_rag --num_ejercicios 3 --output examenes/recuperacion
292
+ ```
293
+
294
+ ### Consultar tu Base de Conocimiento
295
+
296
+ Pregúntale al sistema qué sabe sobre un concepto (útil para verificar que RAG funcionó correctamente):
297
+
298
+ ```bash
299
+ evolutia --query "Teorema de Stokes"
300
+ evolutia --query "Producto vectorial en R^3"
301
+ evolutia --query "Método de integración por partes"
302
+ ```
303
+
304
+ ---
305
+
306
+ ## Configuración Avanzada
307
+
308
+ ### Archivo de Configuración
309
+
310
+ Puedes crear un archivo `evolutia_config.yaml` en la raíz de tu carpeta de curso para personalizar el comportamiento:
311
+
312
+ ```yaml
313
+ api:
314
+ provider: "openai" # openai, anthropic, gemini, deepseek, generic, local
315
+ model: "gpt-4"
316
+
317
+ rag:
318
+ enabled: true
319
+ vector_store:
320
+ persist_directory: "./storage/vector_store"
321
+ collection_name: "ejercicios_mmfi"
322
+ retrieval:
323
+ top_k: 5
324
+ similarity_threshold: 0.7
325
+
326
+ complexity:
327
+ default_level: "alta" # media, alta, muy_alta
328
+ ```
329
+
330
+ ### Generar Configuración Automáticamente
331
+
332
+ EvolutIA puede analizar tu estructura de carpetas y generar una configuración apropiada:
333
+
334
+ ```bash
335
+ evolutia --analyze
336
+ ```
337
+
338
+ ### Argumentos CLI Disponibles
339
+
340
+ | Argumento | Descripción | Default |
341
+ |-----------|-------------|---------|
342
+ | `--tema` | Identificador del tema (carpeta) | **Requerido** |
343
+ | `--output` | Carpeta de salida | **Requerido** |
344
+ | `--num_ejercicios` | Cantidad a generar | 1 |
345
+ | `--complejidad` | Nivel objetivo (`media`, `alta`, `muy_alta`) | `alta` |
346
+ | `--api` | Proveedor (`openai`, `anthropic`, `gemini`, `deepseek`, `generic`, `local`) | `openai` |
347
+ | `--type` | Tipo de pregunta (`problem`, `multiple_choice`) | `problem` |
348
+ | `--no_generar_soluciones` | Omitir la creación de archivos de solución | False |
349
+ | `--model` | Nombre específico del modelo (útil para `generic`) | None |
350
+ | `--base_url` | URL base de la API (útil para `generic` o `local`) | None |
351
+
352
+ ---
353
+
354
+ ## Proveedores de IA Soportados
355
+
356
+ ### OpenAI (GPT-4)
357
+
358
+ ```bash
359
+ evolutia --tema analisis_vectorial --api openai --output examen_openai
360
+ ```
361
+
362
+ ### Anthropic (Claude 3)
363
+
364
+ ```bash
365
+ evolutia --tema analisis_vectorial --api anthropic --output examen_anthropic
366
+ ```
367
+
368
+ ### Google (Gemini 1.5)
369
+
370
+ ```bash
371
+ evolutia --tema analisis_vectorial --api gemini --output examen_gemini
372
+ ```
373
+
374
+ ### DeepSeek (Económico y Poderoso)
375
+
376
+ ```bash
377
+ evolutia --tema analisis_vectorial --api deepseek --output examen_deepseek
378
+ ```
379
+
380
+ ### Modelos Locales (Offline y Gratis)
381
+
382
+ Para usar modelos como Llama 3 o Mistral sin costo de API:
383
+
384
+ 1. Ejecuta tu servidor local:
385
+ ```bash
386
+ ollama serve
387
+ ```
388
+
389
+ 2. Configura (opcional, usa defaults de Ollama):
390
+ ```yaml
391
+ # evolutia_config.yaml
392
+ local:
393
+ base_url: "http://localhost:11434/v1"
394
+ model: "llama3"
395
+ ```
396
+
397
+ 3. Ejecuta:
398
+ ```bash
399
+ evolutia --tema analisis_vectorial --api local --output examen_local
400
+ ```
401
+
402
+ ### Proveedores Genéricos (Groq, Mistral API, etc.)
403
+
404
+ ```bash
405
+ evolutia --tema analisis_vectorial --api generic --base_url https://api.groq.com/openai/v1 --model llama3-70b-8192 --output examen_groq
406
+ ```
407
+
408
+ ---
409
+
410
+ ## Gestión de Materiales
411
+
412
+ ### Cómo "Ve" EvolutIA tus Ejercicios
413
+
414
+ EvolutIA usa una estrategia inteligente para encontrar tus materiales:
415
+
416
+ **1. Escaneo de Carpetas**:
417
+ Busca archivos `.md` dentro de la carpeta del tema:
418
+ ```
419
+ analisis_vectorial/
420
+ ├── semana1_practica.md # ✅ Encontrado automáticamente
421
+ ├── semana2_lectura.md # ✅ Encontrado automáticamente
422
+ ```
423
+
424
+ **2. Tags y Metadatos**:
425
+ Para archivos fuera de la carpeta del tema (ej. en `tareas/`), usa el *frontmatter* YAML:
426
+
427
+ ```yaml
428
+ ---
429
+ title: Tarea 1: Aplicaciones de Stokes
430
+ tags:
431
+ - stokes # <--- ¡Importante! Esto permite encontrarlo
432
+ - analisis_vectorial
433
+ - integrales
434
+ ---
435
+ ```
436
+
437
+ ### Trazabilidad
438
+
439
+ Los ejercicios generados heredan los tags de sus "padres". El archivo final del examen (`examenX.md`) resume todos los temas cubiertos, facilitando la trazabilidad de lo que se evalúa.
440
+
441
+ ---
442
+
443
+ ## Rendimiento y Optimizaciones
444
+
445
+ EvolutIA está optimizado para ser rápido y eficiente, incluso generando múltiples ejercicios:
446
+
447
+ ### ⚡ Caché Inteligente
448
+
449
+ - **Cache de respuestas LLM**: Evita llamar a la API para preguntas repetidas, ahorrando tiempo y dinero
450
+ - **Cache de archivos escaneados**: No reescanea el filesystem si tus archivos no cambiaron
451
+ - **Configuración**: Por defecto, usa 500MB de caché con expiración de 24 horas
452
+
453
+ ### 🚀 Generación Asíncrona
454
+
455
+ - Genera múltiples ejercicios en paralelo usando async/await
456
+ - Reintentos automáticos si la API falla temporalmente
457
+ - Sistema de "Circuit Breaker" para evitar saturar servicios que están fallando
458
+
459
+ ### 📊 RAG Optimizado
460
+
461
+ - **Lazy loading**: Los modelos de embeddings solo se cargan si usas RAG
462
+ - **Paginación**: Queries limitadas para no cargar colecciones enteras en memoria
463
+ - **Result**: Inicio rápido y uso eficiente de recursos
464
+
465
+ ### 💾 Ahorro de Espacio
466
+
467
+ - Eliminado ~12k líneas duplicadas del código base
468
+ - Build/ no versionado en git
469
+ - Estructura limpia y mantenible
470
+
471
+ ---
472
+
473
+ ## Herramienta de IA Asistente: opencode
474
+
475
+ El proceso de optimización de EvolutIA fue asistido por **opencode**, una herramienta de IA especializada en ingeniería de software, utilizando el modelo **GLM-4.7 (zai-coding-plan/glm-4.7)**.
476
+
477
+ ### Optimizaciones Implementadas
478
+
479
+ Gracias a la asistencia de opencode, se implementaron 9 optimizaciones prioritarias:
480
+
481
+ #### Prioridad Alta
482
+ - ✅ Caché LLM: write-behind con debounce para reducir I/O de disco
483
+ - ✅ Eliminación de build/ del control de versiones (reducción de ~12k líneas duplicadas)
484
+
485
+ #### Prioridad Media
486
+ - ✅ Implementación de async/await para llamadas LLM (mayor throughput)
487
+ - ✅ Límite de memoria RAM para caché LLM (evitar saturación)
488
+
489
+ #### Prioridad Baja
490
+ - ✅ Imports centralizados en módulo evolutia/imports.py
491
+ - ✅ Caché de rutas de archivos válidos en MaterialExtractor
492
+ - ✅ Lazy loading de embeddings en RAGIndexer/RAGRetriever
493
+ - ✅ Límite de paginación para queries ChromaDB
494
+ - ✅ Sistema de retry automático con backoff exponencial
495
+
496
+ ### Beneficios Obtenidos
497
+
498
+ - **Menos tiempo de desarrollo**: Las optimizaciones se implementaron de manera eficiente y coordinada
499
+ - **Código más limpio**: Reducción de duplicación y mejora de mantenibilidad
500
+ - **Mejor documentación**: Actualización completa de CHANGELOG y documentación técnica
501
+ - **Tests pasando**: Todas las optimizaciones mantuvieron compatibilidad con tests existentes
502
+ - **Arquitectura consistente**: Todas las optimizaciones siguen las convenciones y patrones del proyecto
503
+
504
+ ---
505
+
506
+ ## Estructura del Proyecto
507
+
508
+ Se recomienda la siguiente estructura para tus cursos:
509
+
510
+ ```
511
+ MiCurso/
512
+ ├── evolutia_config.yaml # Configuración específica del curso
513
+ ├── analisis_vectorial/ # Materiales del tema 1
514
+ │ ├── lectura.md
515
+ │ └── practica.md
516
+ ├── matrices/ # Materiales del tema 2
517
+ ├── examenes/ # Salida generada por EvolutIA
518
+ └── .env # API Keys (no subir a git)
519
+ ```
520
+
521
+ ---
522
+
523
+ ## Contribuciones y Desarrollo
524
+
525
+ El código fuente está organizado modularmente en `evolutia/`:
526
+ - `evolutia_engine.py`: Orquestador principal
527
+ - `variation_generator.py`: Lógica de prompts y llamadas a LLMs
528
+ - `rag/`: Subsistema de indexación y recuperación
529
+
530
+ Para reportar bugs o mejoras, por favor visita el repositorio en GitHub.
531
+
532
+ ---
533
+
534
+ ## Licencia
535
+
536
+ Apache 2.0