evolutia 0.1.2__tar.gz → 0.1.4__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.4/MANIFEST.in +3 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/PKG-INFO +1 -1
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/exercise_analyzer.py +74 -54
- evolutia-0.1.4/evolutia/schemas/config.schema.json +210 -0
- evolutia-0.1.4/evolutia/validation/__init__.py +2 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia.egg-info/PKG-INFO +1 -1
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia.egg-info/SOURCES.txt +2 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/setup.py +2 -1
- evolutia-0.1.2/evolutia/validation/__init__.py +0 -1
- {evolutia-0.1.2 → evolutia-0.1.4}/LICENSE +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/README.md +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/__init__.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/async_llm_providers.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/cache/__init__.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/cache/exercise_cache.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/cache/llm_cache.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/complexity_validator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/config_manager.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/evolutia_engine.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/exam_generator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/exceptions.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/imports.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/llm_providers.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/material_extractor.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/rag/__init__.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/rag/consistency_validator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/rag/context_enricher.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/rag/enhanced_variation_generator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/rag/rag_indexer.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/rag/rag_manager.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/rag/rag_retriever.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/retry_utils.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/utils/__init__.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/utils/json_parser.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/utils/markdown_parser.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/utils/math_extractor.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/validation/args_validator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/validation/config_validator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia/variation_generator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia.egg-info/dependency_links.txt +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia.egg-info/entry_points.txt +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia.egg-info/requires.txt +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia.egg-info/top_level.txt +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/evolutia_cli.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/setup.cfg +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_args_validator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_cache.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_complexity_validator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_config_discovery.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_config_validator.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_exercise_analyzer.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_exercise_analyzer_cache.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_json_robustness.py +0 -0
- {evolutia-0.1.2 → evolutia-0.1.4}/tests/test_math_extractor.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: evolutia
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Sistema automatizado para generar preguntas de examen desafiantes basadas en materiales didácticos existentes
|
|
5
5
|
Home-page: https://github.com/glacy/evolutIA
|
|
6
6
|
Author: Gerardo Lacy-Mora
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Analizador de complejidad de ejercicios.
|
|
3
|
-
Identifica tipo, pasos, conceptos y variables de ejercicios.
|
|
4
|
-
"""
|
|
5
|
-
import re
|
|
6
|
-
import logging
|
|
7
|
-
from typing import Dict, List, Set, Optional, TYPE_CHECKING
|
|
8
|
-
from collections import Counter
|
|
9
|
-
|
|
10
|
-
if TYPE_CHECKING:
|
|
11
|
-
from evolutia.cache.exercise_cache import ExerciseAnalysisCache
|
|
12
|
-
|
|
13
|
-
logger = logging.getLogger(__name__)
|
|
1
|
+
"""
|
|
2
|
+
Analizador de complejidad de ejercicios.
|
|
3
|
+
Identifica tipo, pasos, conceptos y variables de ejercicios.
|
|
4
|
+
"""
|
|
5
|
+
import re
|
|
6
|
+
import logging
|
|
7
|
+
from typing import Dict, List, Set, Optional, TYPE_CHECKING
|
|
8
|
+
from collections import Counter
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from evolutia.cache.exercise_cache import ExerciseAnalysisCache
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
15
15
|
try:
|
|
16
16
|
from utils.math_extractor import (
|
|
@@ -28,19 +28,39 @@ except ImportError:
|
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
class ExerciseAnalyzer:
|
|
32
|
-
"""Analiza la complejidad y estructura de ejercicios."""
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
31
|
+
class ExerciseAnalyzer:
|
|
32
|
+
"""Analiza la complejidad y estructura de ejercicios."""
|
|
33
|
+
|
|
34
|
+
TYPE_PATTERNS = {
|
|
35
|
+
'demostracion': re.compile(r'(?i)(demuestre|pruebe|verifique|muestre|justifique|demostraci[oó]n)'),
|
|
36
|
+
'calculo': re.compile(r'(?i)(calcule|halle|encuentre|resuelva|eval[uú]e|calcular|obtenga|determinar)'),
|
|
37
|
+
'aplicacion': re.compile(r'(?i)(aplicaci[oó]n|problema|vida real|modelo|f[íi]sic[ao]|ingenier[íi]a|econom[íi]a|contexto)')
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
STEP_KEYWORDS_PATTERN = re.compile(
|
|
41
|
+
r'(?i)(primero|luego|despu[ée]s|finalmente|entonces|por lo tanto|conclusi[oó]n|paso|seguidamente)',
|
|
42
|
+
re.MULTILINE
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
CONCEPT_PATTERNS = {
|
|
46
|
+
'integrals': [r'(?i)integral', r'\\int', r'\\iint', r'\\iiint', r'\\oint'],
|
|
47
|
+
'derivatives': [r'(?i)derivada', r'\\frac{d}{d', r'\\[dp]artial', r'\''],
|
|
48
|
+
'limits': [r'(?i)l[íi]mite', r'\\lim'],
|
|
49
|
+
'series': [r'(?i)serie', r'(?i)sucesi[oó]n', r'\\sum', r'convergencia'],
|
|
50
|
+
'vectors': [r'(?i)vector', r'\\vec', r'\\mathbf', r'producto punto', r'producto cruz'],
|
|
51
|
+
'matrices': [r'(?i)matriz', r'(?i)determinante', r'\\begin{pmatrix}', r'\\begin{bmatrix}', r'autovalor'],
|
|
52
|
+
'coordinate_systems': [r'(?i)coordenadas', r'(?i)polares', r'(?i)esf[ée]ricas', r'(?i)cil[íi]ndricas', r'jacobian[oa]'],
|
|
53
|
+
'vector_operations': [r'(?i)gradiente', r'(?i)divergencia', r'(?i)rotacional', r'\\nabla', r'teorema de stokes', r'teorema de green', r'teorema de la divergencia']
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
def __init__(self, cache: Optional['ExerciseAnalysisCache'] = None):
|
|
57
|
+
"""
|
|
58
|
+
Inicializa el analizador.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
cache: Instancia opcional de ExerciseAnalysisCache para cachear análisis
|
|
62
|
+
"""
|
|
63
|
+
self.cache = cache
|
|
44
64
|
|
|
45
65
|
def identify_exercise_type(self, content: str) -> str:
|
|
46
66
|
"""
|
|
@@ -135,34 +155,34 @@ class ExerciseAnalyzer:
|
|
|
135
155
|
|
|
136
156
|
return concepts
|
|
137
157
|
|
|
138
|
-
def analyze(self, exercise: Dict[str, Optional[str]]) -> Dict[str, Optional[str | int | float | List[str]]]:
|
|
139
|
-
"""
|
|
140
|
-
Analiza un ejercicio completo y retorna metadatos de complejidad.
|
|
141
|
-
|
|
142
|
-
Args:
|
|
143
|
-
exercise: Diccionario con información del ejercicio
|
|
144
|
-
- 'content': Contenido del ejercicio
|
|
145
|
-
- 'solution': Contenido de la solución (opcional)
|
|
146
|
-
|
|
147
|
-
Returns:
|
|
148
|
-
Diccionario con análisis de complejidad
|
|
149
|
-
"""
|
|
150
|
-
content = exercise.get('content', '')
|
|
151
|
-
solution = exercise.get('solution', '')
|
|
152
|
-
|
|
153
|
-
# Intentar caché primero
|
|
154
|
-
if self.cache:
|
|
155
|
-
cached_analysis = self.cache.get(exercise)
|
|
156
|
-
if cached_analysis:
|
|
157
|
-
logger.info(f"[ExerciseAnalyzer] Análisis obtenido del caché para exercise={exercise.get('label', 'unknown')}")
|
|
158
|
-
return cached_analysis['analysis']
|
|
159
|
-
|
|
160
|
-
# Análisis normal (cache miss)
|
|
161
|
-
if not content:
|
|
162
|
-
return {}
|
|
163
|
-
|
|
164
|
-
# Extraer expresiones matemáticas
|
|
165
|
-
math_expressions = extract_math_expressions(content)
|
|
158
|
+
def analyze(self, exercise: Dict[str, Optional[str]]) -> Dict[str, Optional[str | int | float | List[str]]]:
|
|
159
|
+
"""
|
|
160
|
+
Analiza un ejercicio completo y retorna metadatos de complejidad.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
exercise: Diccionario con información del ejercicio
|
|
164
|
+
- 'content': Contenido del ejercicio
|
|
165
|
+
- 'solution': Contenido de la solución (opcional)
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
Diccionario con análisis de complejidad
|
|
169
|
+
"""
|
|
170
|
+
content = exercise.get('content', '')
|
|
171
|
+
solution = exercise.get('solution', '')
|
|
172
|
+
|
|
173
|
+
# Intentar caché primero
|
|
174
|
+
if self.cache:
|
|
175
|
+
cached_analysis = self.cache.get(exercise)
|
|
176
|
+
if cached_analysis:
|
|
177
|
+
logger.info(f"[ExerciseAnalyzer] Análisis obtenido del caché para exercise={exercise.get('label', 'unknown')}")
|
|
178
|
+
return cached_analysis['analysis']
|
|
179
|
+
|
|
180
|
+
# Análisis normal (cache miss)
|
|
181
|
+
if not content:
|
|
182
|
+
return {}
|
|
183
|
+
|
|
184
|
+
# Extraer expresiones matemáticas
|
|
185
|
+
math_expressions = extract_math_expressions(content)
|
|
166
186
|
if solution:
|
|
167
187
|
math_expressions.extend(extract_math_expressions(solution))
|
|
168
188
|
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Evolutia Configuration",
|
|
4
|
+
"description": "Configuration schema for Evolutia AI tool",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"api": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"default_provider": {
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
"openai": {
|
|
14
|
+
"$ref": "#/definitions/modelConfig"
|
|
15
|
+
},
|
|
16
|
+
"anthropic": {
|
|
17
|
+
"$ref": "#/definitions/modelConfig"
|
|
18
|
+
},
|
|
19
|
+
"gemini": {
|
|
20
|
+
"$ref": "#/definitions/modelConfig"
|
|
21
|
+
},
|
|
22
|
+
"local": {
|
|
23
|
+
"allOf": [
|
|
24
|
+
{
|
|
25
|
+
"$ref": "#/definitions/modelConfig"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"properties": {
|
|
29
|
+
"base_url": {
|
|
30
|
+
"type": "string"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"required": [
|
|
38
|
+
"default_provider"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"paths": {
|
|
42
|
+
"type": "object",
|
|
43
|
+
"properties": {
|
|
44
|
+
"base_path": {
|
|
45
|
+
"type": "string"
|
|
46
|
+
},
|
|
47
|
+
"materials_directories": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "string"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"required": [
|
|
55
|
+
"materials_directories"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"complexity": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"properties": {
|
|
61
|
+
"min_complexity_increase": {
|
|
62
|
+
"type": "number"
|
|
63
|
+
},
|
|
64
|
+
"min_improvements": {
|
|
65
|
+
"type": "integer"
|
|
66
|
+
},
|
|
67
|
+
"weights": {
|
|
68
|
+
"type": "object",
|
|
69
|
+
"patternProperties": {
|
|
70
|
+
"^.*$": {
|
|
71
|
+
"type": "number"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"exam": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"properties": {
|
|
80
|
+
"default": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"properties": {
|
|
83
|
+
"subject": {
|
|
84
|
+
"type": "string"
|
|
85
|
+
},
|
|
86
|
+
"points_per_exercise": {
|
|
87
|
+
"type": "integer"
|
|
88
|
+
},
|
|
89
|
+
"duration_hours": {
|
|
90
|
+
"type": "number"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"keywords": {
|
|
95
|
+
"type": "object",
|
|
96
|
+
"patternProperties": {
|
|
97
|
+
"^.*$": {
|
|
98
|
+
"type": "array",
|
|
99
|
+
"items": {
|
|
100
|
+
"type": "string"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"logging": {
|
|
108
|
+
"type": "object",
|
|
109
|
+
"properties": {
|
|
110
|
+
"level": {
|
|
111
|
+
"type": "string"
|
|
112
|
+
},
|
|
113
|
+
"format": {
|
|
114
|
+
"type": "string"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"rag": {
|
|
119
|
+
"type": "object",
|
|
120
|
+
"properties": {
|
|
121
|
+
"vector_store": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"properties": {
|
|
124
|
+
"type": {
|
|
125
|
+
"type": "string"
|
|
126
|
+
},
|
|
127
|
+
"persist_directory": {
|
|
128
|
+
"type": "string"
|
|
129
|
+
},
|
|
130
|
+
"collection_name": {
|
|
131
|
+
"type": "string"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"required": [
|
|
135
|
+
"type"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
"embeddings": {
|
|
139
|
+
"type": "object",
|
|
140
|
+
"properties": {
|
|
141
|
+
"provider": {
|
|
142
|
+
"type": "string"
|
|
143
|
+
},
|
|
144
|
+
"model": {
|
|
145
|
+
"type": "string"
|
|
146
|
+
},
|
|
147
|
+
"batch_size": {
|
|
148
|
+
"type": "integer"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"required": [
|
|
152
|
+
"provider",
|
|
153
|
+
"model"
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
"retrieval": {
|
|
157
|
+
"type": "object",
|
|
158
|
+
"properties": {
|
|
159
|
+
"top_k": {
|
|
160
|
+
"type": "integer"
|
|
161
|
+
},
|
|
162
|
+
"similarity_threshold": {
|
|
163
|
+
"type": "number"
|
|
164
|
+
},
|
|
165
|
+
"use_metadata_filters": {
|
|
166
|
+
"type": "boolean"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
"chunking": {
|
|
171
|
+
"type": "object",
|
|
172
|
+
"properties": {
|
|
173
|
+
"chunk_size": {
|
|
174
|
+
"type": "integer"
|
|
175
|
+
},
|
|
176
|
+
"chunk_overlap": {
|
|
177
|
+
"type": "integer"
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
"required": [
|
|
185
|
+
"api",
|
|
186
|
+
"paths"
|
|
187
|
+
],
|
|
188
|
+
"definitions": {
|
|
189
|
+
"modelConfig": {
|
|
190
|
+
"type": "object",
|
|
191
|
+
"properties": {
|
|
192
|
+
"model": {
|
|
193
|
+
"type": "string"
|
|
194
|
+
},
|
|
195
|
+
"temperature": {
|
|
196
|
+
"type": "number"
|
|
197
|
+
},
|
|
198
|
+
"max_tokens": {
|
|
199
|
+
"type": "integer"
|
|
200
|
+
},
|
|
201
|
+
"api_key": {
|
|
202
|
+
"type": "string"
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"required": [
|
|
206
|
+
"model"
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: evolutia
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Sistema automatizado para generar preguntas de examen desafiantes basadas en materiales didácticos existentes
|
|
5
5
|
Home-page: https://github.com/glacy/evolutIA
|
|
6
6
|
Author: Gerardo Lacy-Mora
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
2
3
|
README.md
|
|
3
4
|
evolutia_cli.py
|
|
4
5
|
setup.py
|
|
@@ -31,6 +32,7 @@ evolutia/rag/enhanced_variation_generator.py
|
|
|
31
32
|
evolutia/rag/rag_indexer.py
|
|
32
33
|
evolutia/rag/rag_manager.py
|
|
33
34
|
evolutia/rag/rag_retriever.py
|
|
35
|
+
evolutia/schemas/config.schema.json
|
|
34
36
|
evolutia/utils/__init__.py
|
|
35
37
|
evolutia/utils/json_parser.py
|
|
36
38
|
evolutia/utils/markdown_parser.py
|
|
@@ -6,7 +6,8 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|
|
6
6
|
|
|
7
7
|
setup(
|
|
8
8
|
name="evolutia",
|
|
9
|
-
version="0.1.
|
|
9
|
+
version="0.1.4",
|
|
10
|
+
include_package_data=True,
|
|
10
11
|
author="Gerardo Lacy-Mora",
|
|
11
12
|
author_email="gerardolacymora@gmail.com",
|
|
12
13
|
description="Sistema automatizado para generar preguntas de examen desafiantes basadas en materiales didácticos existentes",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# Tests package for EvolutIA validation
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|