evolutia 0.1.0__tar.gz → 0.1.1__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.1}/LICENSE +1 -1
- evolutia-0.1.1/PKG-INFO +221 -0
- evolutia-0.1.1/README.md +190 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/__init__.py +1 -1
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/config_manager.py +11 -5
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/llm_providers.py +2 -0
- evolutia-0.1.1/evolutia/variation_generator.py +287 -0
- evolutia-0.1.1/evolutia.egg-info/PKG-INFO +221 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia.egg-info/SOURCES.txt +1 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia_cli.py +10 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/setup.py +2 -2
- evolutia-0.1.1/tests/test_config_discovery.py +85 -0
- evolutia-0.1.0/PKG-INFO +0 -723
- evolutia-0.1.0/README.md +0 -692
- 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.1}/evolutia/complexity_validator.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/evolutia_engine.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/exam_generator.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/exercise_analyzer.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/material_extractor.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/rag/__init__.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/rag/consistency_validator.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/rag/context_enricher.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/rag/enhanced_variation_generator.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/rag/rag_indexer.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/rag/rag_manager.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/rag/rag_retriever.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/utils/__init__.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/utils/json_parser.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/utils/markdown_parser.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia/utils/math_extractor.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia.egg-info/dependency_links.txt +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia.egg-info/entry_points.txt +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia.egg-info/requires.txt +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/evolutia.egg-info/top_level.txt +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/setup.cfg +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/tests/test_complexity_validator.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/tests/test_exercise_analyzer.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/tests/test_json_robustness.py +0 -0
- {evolutia-0.1.0 → evolutia-0.1.1}/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.1/PKG-INFO
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: evolutia
|
|
3
|
+
Version: 0.1.1
|
|
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
|
+
Dynamic: author
|
|
22
|
+
Dynamic: author-email
|
|
23
|
+
Dynamic: classifier
|
|
24
|
+
Dynamic: description
|
|
25
|
+
Dynamic: description-content-type
|
|
26
|
+
Dynamic: home-page
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
Dynamic: requires-dist
|
|
29
|
+
Dynamic: requires-python
|
|
30
|
+
Dynamic: summary
|
|
31
|
+
|
|
32
|
+
# EvolutIA: Generador de preguntas de examen
|
|
33
|
+
|
|
34
|
+
Sistema automatizado para generar preguntas de examen desafiantes basadas en materiales didácticos existentes (lecturas, prácticas, tareas). El sistema aumenta la complejidad matemática de los ejercicios mientras mantiene el formato y estructura familiar.
|
|
35
|
+
|
|
36
|
+
## Características Principales
|
|
37
|
+
|
|
38
|
+
- **Multi-Modo**:
|
|
39
|
+
- **Variación**: Incrementa la complejidad de ejercicios existentes.
|
|
40
|
+
- **Creación**: Genera ejercicios nuevos desde cero basados en temas y tags.
|
|
41
|
+
- **RAG (Retrieval-Augmented Generation)**: Usa tus propios apuntes y ejercicios previos como contexto para generar contenido más alineado al curso.
|
|
42
|
+
- **Multi-Proveedor**: Soporte nativo para OpenAI (GPT-4), Anthropic (Claude 3), Google (Gemini 1.5) y Modelos Locales (via Ollama/LM Studio).
|
|
43
|
+
- **Análisis de Complejidad**: Valida automáticamente que las nuevas preguntas sean matemáticamente más exigentes.
|
|
44
|
+
- **Formato MyST**: Salida compatible con Curvenote y Jupyter Book.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Instalación
|
|
49
|
+
|
|
50
|
+
### Requisitos Previos
|
|
51
|
+
- Python 3.8 o superior
|
|
52
|
+
- API Key de tu proveedor preferido (OpenAI, Anthropic, Google) o un servidor local (Ollama).
|
|
53
|
+
|
|
54
|
+
### Opción 1: Instalación desde PyPI (Recomendada)
|
|
55
|
+
Para uso general, instala directamente el paquete:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Crear entorno virtual (Recomendado)
|
|
59
|
+
python -m venv venv
|
|
60
|
+
source venv/bin/activate # Windows: venv\Scripts\activate
|
|
61
|
+
|
|
62
|
+
# Instalar
|
|
63
|
+
pip install evolutia
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Opción 2: Instalación desde Fuente (Desarrollo)
|
|
67
|
+
Si deseas modificar el código o contribuir:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git clone https://github.com/glacy/evolutIA.git
|
|
71
|
+
cd evolutia
|
|
72
|
+
pip install -e .
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Configuración Inicial
|
|
76
|
+
Crea un archivo `.env` en la raíz de tu proyecto con tus credenciales:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
OPENAI_API_KEY=sk-...
|
|
80
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
81
|
+
GOOGLE_API_KEY=...
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Guía de Uso Rápido
|
|
87
|
+
|
|
88
|
+
El comando principal es `evolutia`. Aquí tienes los casos de uso más comunes:
|
|
89
|
+
|
|
90
|
+
### 1. Generar Variaciones (Modo Clásico)
|
|
91
|
+
Toma ejercicios existentes de un tema y crea versiones más complejas.
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Generar 3 variaciones del tema 'analisis_vectorial'
|
|
95
|
+
evolutia --tema analisis_vectorial --num_ejercicios 3 --output examenes/parcial1
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
O variar ejercicios específicos por su etiqueta (Label):
|
|
99
|
+
```bash
|
|
100
|
+
evolutia --tema analisis_vectorial --label ex1-s1 ex2-s1 --output examenes/recuperacion
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 2. Crear Nuevos Ejercicios (Modo Creación)
|
|
104
|
+
Genera ejercicios desde cero sin necesitar un "ejercicio semilla".
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Crear 3 ejercicios nuevos sobre 'numeros_complejos'
|
|
108
|
+
evolutia --mode creation --tema numeros_complejos --num_ejercicios 3 --output examenes/quiz1
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 3. Usar RAG (Contexto del Curso)
|
|
112
|
+
Enriquece la generación indexando tus lecturas y prácticas.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# La primera vez, usa --reindex para leer tus materiales
|
|
116
|
+
evolutia --tema matrices --num_ejercicios 3 --use_rag --reindex --output examenes/final
|
|
117
|
+
|
|
118
|
+
# Consultas posteriores (usa el índice ya creado)
|
|
119
|
+
evolutia --tema matrices --num_ejercicios 3 --use_rag --output examenes/final
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 4. Consultar tu Base de Conocimiento
|
|
123
|
+
Pregúntale al sistema qué sabe sobre un concepto (útil para verificar RAG):
|
|
124
|
+
```bash
|
|
125
|
+
evolutia --query "Teorema de Stokes"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Configuración Avanzada
|
|
131
|
+
|
|
132
|
+
EvolutIA es altamente configurable a través del archivo `evolutia_config.yaml` o argumentos CLI.
|
|
133
|
+
|
|
134
|
+
### Archivo de Configuración
|
|
135
|
+
Puedes colocar un `evolutia_config.yaml` en la raíz de tu carpeta de curso. Si no existe, puedes generarlo o ver el estado actual con:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# Analiza tu estructura de carpetas y genera/actualiza la config
|
|
139
|
+
evolutia --analyze
|
|
140
|
+
# O explícitamente usando el script auxiliar
|
|
141
|
+
python evolutia/config_manager.py
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Argumentos CLI Disponibles
|
|
145
|
+
|
|
146
|
+
| Argumento | Descripción | Default |
|
|
147
|
+
|-----------|-------------|---------|
|
|
148
|
+
| `--tema` | Identificador del tema (carpeta) | **Requerido** |
|
|
149
|
+
| `--output` | Carpeta de salida | **Requerido** |
|
|
150
|
+
| `--num_ejercicios` | Cantidad a generar | 1 |
|
|
151
|
+
| `--complejidad` | Nivel objetivo (`media`, `alta`, `muy_alta`) | `alta` |
|
|
152
|
+
| `--api` | Proveedor (`openai`, `anthropic`, `gemini`, `local`) | `openai` |
|
|
153
|
+
| `--type` | Tipo de pregunta (`problem`, `multiple_choice`) | `problem` |
|
|
154
|
+
| `--no_generar_soluciones` | Omite la creación de archivos de solución | False |
|
|
155
|
+
|
|
156
|
+
### Uso con Modelos Locales (Offline)
|
|
157
|
+
Para usar modelos como Llama 3 o Mistral sin costo de API:
|
|
158
|
+
|
|
159
|
+
1. Ejecuta tu servidor (ej. `ollama serve`).
|
|
160
|
+
2. Configura `evolutia_config.yaml` (opcional, si usas defaults de Ollama no es necesario):
|
|
161
|
+
```yaml
|
|
162
|
+
local:
|
|
163
|
+
base_url: "http://localhost:11434/v1"
|
|
164
|
+
model: "llama3"
|
|
165
|
+
```
|
|
166
|
+
3. Ejecuta con el flag local:
|
|
167
|
+
```bash
|
|
168
|
+
evolutia --tema basicos --api local --output prueba_local
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Gestión de Materiales (Cómo "ve" los ejercicios EvolutIA)
|
|
174
|
+
|
|
175
|
+
Para que el sistema encuentre tus ejercicios y lecturas, utiliza una estrategia de descubrimiento basada en carpetas y metadatos.
|
|
176
|
+
|
|
177
|
+
1. **Escaneo de Carpetas**: Busca archivos `.md` dentro de la carpeta del tema (ej: `./analisis_vectorial/`).
|
|
178
|
+
2. **Tags y Metadatos**: Para archivos fuera de esa carpeta (ej. en `tareas/`), el sistema lee el *frontmatter* YAML. Incluye el tag del tema para hacerlo visible:
|
|
179
|
+
|
|
180
|
+
```yaml
|
|
181
|
+
---
|
|
182
|
+
title: Tarea 1
|
|
183
|
+
tags:
|
|
184
|
+
- analisis_vectorial # <--- Este tag permite que evolutia encuentre el archivo
|
|
185
|
+
- stokes
|
|
186
|
+
---
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Trazabilidad
|
|
190
|
+
Los ejercicios generados heredan los tags de sus "padres". El archivo final del examen (`examenX.md`) resume todos los temas cubiertos.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Estructura del Proyecto
|
|
195
|
+
|
|
196
|
+
Se recomienda la siguiente estructura para tus cursos:
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
MiCurso/
|
|
200
|
+
├── evolutia_config.yaml # Configuración específica del curso
|
|
201
|
+
├── analisis_vectorial/ # Materiales del tema 1
|
|
202
|
+
│ ├── lectura.md
|
|
203
|
+
│ └── practica.md
|
|
204
|
+
├── matrices/ # Materiales del tema 2
|
|
205
|
+
├── examenes/ # Salida generada por EvolutIA
|
|
206
|
+
└── .env # API Keys (no subir a git)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
> **Nota para usuarios antiguos**: Anteriormente se recomendaba usar Git Submodules. Ese método ha sido archivado. Si lo necesitas, consulta [docs/legacy/GUIDE_SUBMODULES.md](docs/legacy/GUIDE_SUBMODULES.md).
|
|
210
|
+
|
|
211
|
+
## Contribuciones y Desarrollo
|
|
212
|
+
|
|
213
|
+
El código fuente está organizado modularmente en `evolutia/`:
|
|
214
|
+
- `evolutia_engine.py`: Orquestador principal.
|
|
215
|
+
- `variation_generator.py`: Lógica de prompts y llamadas a LLMs.
|
|
216
|
+
- `rag/`: Subsistema de indexación y recuperación.
|
|
217
|
+
|
|
218
|
+
Para reportar bugs o mejoras, por favor visita el repositorio en GitHub.
|
|
219
|
+
|
|
220
|
+
## Licencia
|
|
221
|
+
Apache 2.0
|
evolutia-0.1.1/README.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# EvolutIA: Generador de preguntas de examen
|
|
2
|
+
|
|
3
|
+
Sistema automatizado para generar preguntas de examen desafiantes basadas en materiales didácticos existentes (lecturas, prácticas, tareas). El sistema aumenta la complejidad matemática de los ejercicios mientras mantiene el formato y estructura familiar.
|
|
4
|
+
|
|
5
|
+
## Características Principales
|
|
6
|
+
|
|
7
|
+
- **Multi-Modo**:
|
|
8
|
+
- **Variación**: Incrementa la complejidad de ejercicios existentes.
|
|
9
|
+
- **Creación**: Genera ejercicios nuevos desde cero basados en temas y tags.
|
|
10
|
+
- **RAG (Retrieval-Augmented Generation)**: Usa tus propios apuntes y ejercicios previos como contexto para generar contenido más alineado al curso.
|
|
11
|
+
- **Multi-Proveedor**: Soporte nativo para OpenAI (GPT-4), Anthropic (Claude 3), Google (Gemini 1.5) y Modelos Locales (via Ollama/LM Studio).
|
|
12
|
+
- **Análisis de Complejidad**: Valida automáticamente que las nuevas preguntas sean matemáticamente más exigentes.
|
|
13
|
+
- **Formato MyST**: Salida compatible con Curvenote y Jupyter Book.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Instalación
|
|
18
|
+
|
|
19
|
+
### Requisitos Previos
|
|
20
|
+
- Python 3.8 o superior
|
|
21
|
+
- API Key de tu proveedor preferido (OpenAI, Anthropic, Google) o un servidor local (Ollama).
|
|
22
|
+
|
|
23
|
+
### Opción 1: Instalación desde PyPI (Recomendada)
|
|
24
|
+
Para uso general, instala directamente el paquete:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Crear entorno virtual (Recomendado)
|
|
28
|
+
python -m venv venv
|
|
29
|
+
source venv/bin/activate # Windows: venv\Scripts\activate
|
|
30
|
+
|
|
31
|
+
# Instalar
|
|
32
|
+
pip install evolutia
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Opción 2: Instalación desde Fuente (Desarrollo)
|
|
36
|
+
Si deseas modificar el código o contribuir:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
git clone https://github.com/glacy/evolutIA.git
|
|
40
|
+
cd evolutia
|
|
41
|
+
pip install -e .
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Configuración Inicial
|
|
45
|
+
Crea un archivo `.env` en la raíz de tu proyecto con tus credenciales:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
OPENAI_API_KEY=sk-...
|
|
49
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
50
|
+
GOOGLE_API_KEY=...
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Guía de Uso Rápido
|
|
56
|
+
|
|
57
|
+
El comando principal es `evolutia`. Aquí tienes los casos de uso más comunes:
|
|
58
|
+
|
|
59
|
+
### 1. Generar Variaciones (Modo Clásico)
|
|
60
|
+
Toma ejercicios existentes de un tema y crea versiones más complejas.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Generar 3 variaciones del tema 'analisis_vectorial'
|
|
64
|
+
evolutia --tema analisis_vectorial --num_ejercicios 3 --output examenes/parcial1
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
O variar ejercicios específicos por su etiqueta (Label):
|
|
68
|
+
```bash
|
|
69
|
+
evolutia --tema analisis_vectorial --label ex1-s1 ex2-s1 --output examenes/recuperacion
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 2. Crear Nuevos Ejercicios (Modo Creación)
|
|
73
|
+
Genera ejercicios desde cero sin necesitar un "ejercicio semilla".
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Crear 3 ejercicios nuevos sobre 'numeros_complejos'
|
|
77
|
+
evolutia --mode creation --tema numeros_complejos --num_ejercicios 3 --output examenes/quiz1
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 3. Usar RAG (Contexto del Curso)
|
|
81
|
+
Enriquece la generación indexando tus lecturas y prácticas.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# La primera vez, usa --reindex para leer tus materiales
|
|
85
|
+
evolutia --tema matrices --num_ejercicios 3 --use_rag --reindex --output examenes/final
|
|
86
|
+
|
|
87
|
+
# Consultas posteriores (usa el índice ya creado)
|
|
88
|
+
evolutia --tema matrices --num_ejercicios 3 --use_rag --output examenes/final
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 4. Consultar tu Base de Conocimiento
|
|
92
|
+
Pregúntale al sistema qué sabe sobre un concepto (útil para verificar RAG):
|
|
93
|
+
```bash
|
|
94
|
+
evolutia --query "Teorema de Stokes"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Configuración Avanzada
|
|
100
|
+
|
|
101
|
+
EvolutIA es altamente configurable a través del archivo `evolutia_config.yaml` o argumentos CLI.
|
|
102
|
+
|
|
103
|
+
### Archivo de Configuración
|
|
104
|
+
Puedes colocar un `evolutia_config.yaml` en la raíz de tu carpeta de curso. Si no existe, puedes generarlo o ver el estado actual con:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Analiza tu estructura de carpetas y genera/actualiza la config
|
|
108
|
+
evolutia --analyze
|
|
109
|
+
# O explícitamente usando el script auxiliar
|
|
110
|
+
python evolutia/config_manager.py
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Argumentos CLI Disponibles
|
|
114
|
+
|
|
115
|
+
| Argumento | Descripción | Default |
|
|
116
|
+
|-----------|-------------|---------|
|
|
117
|
+
| `--tema` | Identificador del tema (carpeta) | **Requerido** |
|
|
118
|
+
| `--output` | Carpeta de salida | **Requerido** |
|
|
119
|
+
| `--num_ejercicios` | Cantidad a generar | 1 |
|
|
120
|
+
| `--complejidad` | Nivel objetivo (`media`, `alta`, `muy_alta`) | `alta` |
|
|
121
|
+
| `--api` | Proveedor (`openai`, `anthropic`, `gemini`, `local`) | `openai` |
|
|
122
|
+
| `--type` | Tipo de pregunta (`problem`, `multiple_choice`) | `problem` |
|
|
123
|
+
| `--no_generar_soluciones` | Omite la creación de archivos de solución | False |
|
|
124
|
+
|
|
125
|
+
### Uso con Modelos Locales (Offline)
|
|
126
|
+
Para usar modelos como Llama 3 o Mistral sin costo de API:
|
|
127
|
+
|
|
128
|
+
1. Ejecuta tu servidor (ej. `ollama serve`).
|
|
129
|
+
2. Configura `evolutia_config.yaml` (opcional, si usas defaults de Ollama no es necesario):
|
|
130
|
+
```yaml
|
|
131
|
+
local:
|
|
132
|
+
base_url: "http://localhost:11434/v1"
|
|
133
|
+
model: "llama3"
|
|
134
|
+
```
|
|
135
|
+
3. Ejecuta con el flag local:
|
|
136
|
+
```bash
|
|
137
|
+
evolutia --tema basicos --api local --output prueba_local
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Gestión de Materiales (Cómo "ve" los ejercicios EvolutIA)
|
|
143
|
+
|
|
144
|
+
Para que el sistema encuentre tus ejercicios y lecturas, utiliza una estrategia de descubrimiento basada en carpetas y metadatos.
|
|
145
|
+
|
|
146
|
+
1. **Escaneo de Carpetas**: Busca archivos `.md` dentro de la carpeta del tema (ej: `./analisis_vectorial/`).
|
|
147
|
+
2. **Tags y Metadatos**: Para archivos fuera de esa carpeta (ej. en `tareas/`), el sistema lee el *frontmatter* YAML. Incluye el tag del tema para hacerlo visible:
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
---
|
|
151
|
+
title: Tarea 1
|
|
152
|
+
tags:
|
|
153
|
+
- analisis_vectorial # <--- Este tag permite que evolutia encuentre el archivo
|
|
154
|
+
- stokes
|
|
155
|
+
---
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Trazabilidad
|
|
159
|
+
Los ejercicios generados heredan los tags de sus "padres". El archivo final del examen (`examenX.md`) resume todos los temas cubiertos.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Estructura del Proyecto
|
|
164
|
+
|
|
165
|
+
Se recomienda la siguiente estructura para tus cursos:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
MiCurso/
|
|
169
|
+
├── evolutia_config.yaml # Configuración específica del curso
|
|
170
|
+
├── analisis_vectorial/ # Materiales del tema 1
|
|
171
|
+
│ ├── lectura.md
|
|
172
|
+
│ └── practica.md
|
|
173
|
+
├── matrices/ # Materiales del tema 2
|
|
174
|
+
├── examenes/ # Salida generada por EvolutIA
|
|
175
|
+
└── .env # API Keys (no subir a git)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
> **Nota para usuarios antiguos**: Anteriormente se recomendaba usar Git Submodules. Ese método ha sido archivado. Si lo necesitas, consulta [docs/legacy/GUIDE_SUBMODULES.md](docs/legacy/GUIDE_SUBMODULES.md).
|
|
179
|
+
|
|
180
|
+
## Contribuciones y Desarrollo
|
|
181
|
+
|
|
182
|
+
El código fuente está organizado modularmente en `evolutia/`:
|
|
183
|
+
- `evolutia_engine.py`: Orquestador principal.
|
|
184
|
+
- `variation_generator.py`: Lógica de prompts y llamadas a LLMs.
|
|
185
|
+
- `rag/`: Subsistema de indexación y recuperación.
|
|
186
|
+
|
|
187
|
+
Para reportar bugs o mejoras, por favor visita el repositorio en GitHub.
|
|
188
|
+
|
|
189
|
+
## Licencia
|
|
190
|
+
Apache 2.0
|
|
@@ -51,12 +51,14 @@ class ConfigManager:
|
|
|
51
51
|
if root_config.exists():
|
|
52
52
|
self.config_path = root_config
|
|
53
53
|
else:
|
|
54
|
-
# Default interno:
|
|
55
|
-
#
|
|
56
|
-
|
|
57
|
-
self.config_path = self.base_path / 'evolutia' / 'config' / 'config.yaml'
|
|
54
|
+
# Default interno: ubicado en el paquete instalado
|
|
55
|
+
# Obtenemos la ruta de este archivo (config_manager.py) -> parent (evolutia/) -> config -> config.yaml
|
|
56
|
+
self.config_path = Path(__file__).parent / 'config' / 'config.yaml'
|
|
58
57
|
|
|
59
|
-
|
|
58
|
+
if self.config_path.exists():
|
|
59
|
+
logger.info(f"Usando archivo de configuración: {self.config_path}")
|
|
60
|
+
else:
|
|
61
|
+
logger.info(f"Archivo de configuración no encontrado en {self.config_path}. Usando configuración por defecto.")
|
|
60
62
|
|
|
61
63
|
def validate_config(self, config_data: Dict[str, Any]) -> bool:
|
|
62
64
|
"""Valida la configuración contra el esquema JSON."""
|
|
@@ -187,6 +189,10 @@ class ConfigManager:
|
|
|
187
189
|
|
|
188
190
|
logger.info(f"Configuración actualizada en {self.config_path}")
|
|
189
191
|
|
|
192
|
+
def update_config_from_structure(self):
|
|
193
|
+
"""Alias para update_config, usado por compatibilidad."""
|
|
194
|
+
return self.update_config()
|
|
195
|
+
|
|
190
196
|
def main():
|
|
191
197
|
import argparse
|
|
192
198
|
parser = argparse.ArgumentParser(description='Gestor de configuración automática de Evolutia')
|