--- name: gliner2_load_model kind: function lang: py domain: datascience version: "1.0.0" purity: impure signature: "def gliner2_load_model(model_name: str = 'fastino/gliner2-large-v1', device: str = 'auto') -> Any" description: "Carga (y cachea por (model_name, device)) un modelo GLiNER2 (NER+RE joint). GLiNER2 extrae entidades y relaciones en una sola pasada con schema unificado. ~2x mas rapido que GLiNER + GLiREL separados. LICENSE: Apache 2.0." tags: [gliner2, ner, relation-extraction, nlp, model, huggingface, zero-shot, joint, datascience, python, apache2] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [gliner2] params: - name: model_name desc: "ID del modelo en HuggingFace Hub. Default: fastino/gliner2-large-v1. Alternativas: fastino/gliner2-base-v1 (mas ligero)." - name: device desc: "'auto' usa CUDA si disponible, sino CPU. Valores: 'cpu', 'cuda', 'cuda:0', 'cuda:1'. auto es el default recomendado." output: "Instancia GLiNER2 cacheada por (model_name, device). Tiene metodos .create_schema().entities(...).relations(...) y .extract(text, schema=schema, threshold=0.3)." tested: true tests: - "cache devuelve la misma instancia con los mismos parametros" - "device=auto resuelve a cpu si torch no esta instalado" - "ImportError si gliner2 no esta instalado" test_file_path: "python/functions/datascience/tests/test_gliner2_load_model.py" file_path: "python/functions/datascience/gliner2_load_model.py" notes: | LICENSE: fastino/gliner2-large-v1 es Apache 2.0 — uso comercial OK. Diferencia con gliner_load_model: GLiNER hace solo NER, GLiNER2 hace NER+RE en una sola pasada (joint schema). Para pipelines de grafo usar GLiNER2 cuando se necesiten ambas tareas simultaneamente. impure: descarga red/disco la primera vez, mantiene estado en _MODEL_CACHE. Tamanio: fastino/gliner2-large-v1 ~500 MB. Primera carga 15-30s en CPU. Inferencia CPU: 10-50 KB texto/s con schema tipico (3 entity + 8 relation labels). --- ## Ejemplo ```python from datascience.gliner2_load_model import gliner2_load_model model = gliner2_load_model(device="auto") schema = (model.create_schema() .entities(["person", "organization", "location"]) .relations(["works_at", "ceo_of", "located_in"])) result = model.extract( "Pablo Isla es el CEO de Inditex, empresa con sede en Arteixo.", schema=schema, threshold=0.3, ) # result["entities"] -> {"person": ["Pablo Isla"], "organization": ["Inditex"], ...} # result["relation_extraction"] -> {"ceo_of": [("Pablo Isla", "Inditex")], ...} ``` ## Instalacion ```bash cd python && uv pip install gliner2 # o con el extra NLP completo: cd python && uv pip install -e '.[nlp]' ```