17 casos: helpers de tokenizacion/mapeo, schema basico con head_pos/tail_pos,
fallback por head_text, threshold, max_pairs, self-loops, ImportError, cache,
device='auto'.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- glirel_load_model: cache por (model_name, device); device='auto' resuelve via torch
- extract_relations_glirel: tokeniza por whitespace, mapea spans char->token,
llama predict_relations y devuelve RelationCandidate; fallback text.find si la
entidad llega sin offsets; max_pairs=N -> top-N por score
- pyproject.toml: glirel en extra nlp
Closes#0039
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
11 tests sin necesidad de descargar el modelo (200 MB):
- StubModel duck-typed que valida el contrato de predict_entities
- Threshold y flat_ner se propagan al modelo
- Schema vacio lanza ValueError; schema sin labels validos warning + []
- Excepcion del modelo se captura
- Label desconocido se descarta
- gliner_load_model: ImportError simulado, cache hit, _resolve_device
auto cae a cpu si torch no esta presente
Refs #0038
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Funciones nuevas en python/functions/datascience/:
- gliner_load_model: carga + cachea modelo GLiNER por (name, device).
device='auto' resuelve a cuda/cpu segun torch.cuda.is_available, sin
fallar si torch no esta instalado. ImportError claro si falta gliner.
- extract_entities_gliner: contrato drop-in de extract_entities_llm
(mismo entity_schema, mismo list[EntityCandidate]). El caller inyecta
el modelo (cargado UNA vez por proceso). Anota offsets start/end en
attributes para reconciliar con extract_iocs (issue 0040).
Diferencias vs LLM extractor:
- 50-200x mas rapido en GPU, 0 USD/token.
- Malo con IoCs tecnicos (lo cubre 0037).
- Threshold y flat_ner ajustables por dominio.
pyproject.toml: gliner como extra opcional `[nlp]` para no inflar el
.venv de quien no use NER. Instalacion: `uv pip install -e '.[nlp]'`.
Refs #0038 — Desbloquea 0039 (GLiREL) y 0040 (pipeline hibrido).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Añade campos params y output al frontmatter YAML de las 506 funciones del registry.
Cada parámetro tiene descripción semántica (qué representa, unidades, rango típico)
y cada función describe qué produce su output. Permite a agentes razonar sobre
cadenas de composición (ej: prices → log_return → sharpe_ratio) sin leer código.
Conversión de operations.db a triples RDF y formato sigma.js, más
renderizado HTML standalone con dark theme y ForceAtlas2 layout.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>