evolutia 0.1.0__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.
- {evolutia-0.1.0 → evolutia-0.1.2}/LICENSE +1 -1
- evolutia-0.1.2/PKG-INFO +536 -0
- evolutia-0.1.2/README.md +500 -0
- evolutia-0.1.2/evolutia/__init__.py +14 -0
- evolutia-0.1.2/evolutia/async_llm_providers.py +157 -0
- evolutia-0.1.2/evolutia/cache/__init__.py +9 -0
- evolutia-0.1.2/evolutia/cache/exercise_cache.py +226 -0
- evolutia-0.1.2/evolutia/cache/llm_cache.py +487 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/complexity_validator.py +33 -31
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/config_manager.py +60 -41
- evolutia-0.1.2/evolutia/evolutia_engine.py +559 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/exam_generator.py +44 -43
- evolutia-0.1.2/evolutia/exceptions.py +38 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/exercise_analyzer.py +54 -91
- evolutia-0.1.2/evolutia/imports.py +175 -0
- evolutia-0.1.2/evolutia/llm_providers.py +381 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/material_extractor.py +166 -88
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/rag/rag_indexer.py +107 -90
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/rag/rag_retriever.py +130 -103
- evolutia-0.1.2/evolutia/retry_utils.py +280 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/utils/json_parser.py +29 -19
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/utils/markdown_parser.py +185 -159
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/utils/math_extractor.py +153 -144
- evolutia-0.1.2/evolutia/validation/__init__.py +1 -0
- evolutia-0.1.2/evolutia/validation/args_validator.py +253 -0
- evolutia-0.1.2/evolutia/validation/config_validator.py +502 -0
- evolutia-0.1.2/evolutia/variation_generator.py +299 -0
- evolutia-0.1.2/evolutia.egg-info/PKG-INFO +536 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia.egg-info/SOURCES.txt +15 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia.egg-info/requires.txt +5 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia_cli.py +30 -7
- {evolutia-0.1.0 → evolutia-0.1.2}/setup.py +9 -2
- evolutia-0.1.2/tests/test_args_validator.py +265 -0
- evolutia-0.1.2/tests/test_cache.py +221 -0
- evolutia-0.1.2/tests/test_config_discovery.py +85 -0
- evolutia-0.1.2/tests/test_config_validator.py +375 -0
- evolutia-0.1.2/tests/test_exercise_analyzer_cache.py +154 -0
- evolutia-0.1.0/PKG-INFO +0 -723
- evolutia-0.1.0/README.md +0 -692
- evolutia-0.1.0/evolutia/__init__.py +0 -5
- evolutia-0.1.0/evolutia/evolutia_engine.py +0 -284
- evolutia-0.1.0/evolutia/llm_providers.py +0 -217
- evolutia-0.1.0/evolutia/variation_generator.py +0 -97
- evolutia-0.1.0/evolutia.egg-info/PKG-INFO +0 -723
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/rag/__init__.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/rag/consistency_validator.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/rag/context_enricher.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/rag/enhanced_variation_generator.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/rag/rag_manager.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia/utils/__init__.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia.egg-info/dependency_links.txt +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia.egg-info/entry_points.txt +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/evolutia.egg-info/top_level.txt +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/setup.cfg +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/tests/test_complexity_validator.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/tests/test_exercise_analyzer.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/tests/test_json_robustness.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.2}/tests/test_math_extractor.py +0 -0
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright
|
|
189
|
+
Copyright 2026 glacy (gerardolacymora@gmail.com)
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
evolutia-0.1.2/PKG-INFO
ADDED
|
@@ -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
|