Normalization API
LLM-based normalization engine for tabular data.
NormalizationEngine
scinr.newton.tabular.normalization.engine.NormalizationEngine
Motor de normalización post-extracción.
Agrupa instancias por tipo de modelo normalizado, batchea llamadas al LLM con structured output (una llamada por batch), y aplica los resultados mediante mapeo explícito por clave única.
__init__
__init__(
llm: BaseLanguageModel,
batch_size: int = 5,
concurrency: int = _DEFAULT_CONCURRENCY,
) -> None
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
llm
|
BaseLanguageModel
|
Modelo de LangChain para las llamadas de normalización. |
required |
batch_size
|
int
|
Número máximo de entradas por batch LLM. |
5
|
concurrency
|
int
|
Máximo de llamadas LLM en paralelo. |
_DEFAULT_CONCURRENCY
|
apply_cached_to_instance
Apply cached normalization result to a specific instance field.
Returns True if the key was found in cache and applied, False otherwise.
normalize_instances
async
normalize_instances(
instances: list[tuple[type[BaseModel], BaseModel]],
) -> list[tuple[type[BaseModel], BaseModel]]
Normaliza los campos marcados en una lista de instancias.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
instances
|
list[tuple[type[BaseModel], BaseModel]]
|
Lista de (model_class, instance). |
required |
Returns:
| Type | Description |
|---|---|
list[tuple[type[BaseModel], BaseModel]]
|
Lista de instancias con campos normalizados rellenados. |
process_key_batch
async
process_key_batch(
entries: list[NormalizationEntry], retry_count: int = 0
) -> dict[str, BaseModel]
Process a batch of unique normalization keys via LLM.
Returns {unique_key: normalized_result} for successfully processed keys. Results are cached in self.result_cache for reuse across batches.
Utility Functions
scinr.newton.tabular.normalization.run_normalization_hook
async
run_normalization_hook(
instances: list[tuple[type[BaseModel], BaseModel]],
engine: NormalizationEngine | None = None,
) -> list[tuple[type[BaseModel], BaseModel]]
Hook a insertar en el pipeline tabular entre instanciación y escritura.
Si engine es None, retorna las instancias sin modificar (no-op).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
instances
|
list[tuple[type[BaseModel], BaseModel]]
|
Lista de (model_class, instance) recién instanciadas. |
required |
engine
|
NormalizationEngine | None
|
Motor de normalización configurado. |
None
|
Returns:
| Type | Description |
|---|---|
list[tuple[type[BaseModel], BaseModel]]
|
Lista de instancias con campos normalizados rellenados. |
scinr.newton.tabular.normalization.get_normalization_specs
Dada una clase Pydantic, retorna los campos marcados para normalización.
Un campo se considera marcable si:
- Su json_schema_extra contiene normalization_model: True
- Su tipo es (o contiene) un modelo Pydantic (no str, int, etc.)
Si normalization_source_fields no se especifica o está vacío,
se usan TODOS los campos del modelo como fuente de datos.
scinr.newton.tabular.normalization.instance_has_normalizable_fields
Retorna True si el modelo tiene al menos un campo normalizable.
scinr.newton.tabular.normalization.extract_source_values
Extrae los valores de los campos fuente de una instancia.
Si spec.source_fields es None, usa TODOS los campos del modelo (excepto los que ya son modelos normalizados o el propio campo).