Discover and pick the right OpenMed model for a clinical or biomedical task, domain, or language. Use when the user asks which OpenMed model to use, wants to list model categories, find a Disease vs Oncology vs Privacy/PII model, get a PII model for a specific language, search models by size or task, or inspect a model's labels and metadata before loading. Covers list_model_categories, get_models_by_category, get_pii_models_by_language, get_default_pii_model, search_models(ModelQuery(...)), get_model_info, and the openmed models CLI. Pairs with loading-openmed-models.
74
93%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
OpenMed ships a registry of clinical and biomedical NER models grouped into 12 categories. Never hardcode a model list — query the registry at runtime so your code stays correct as models are added. This skill helps you go from "I need to find diseases in Spanish discharge notes" to a concrete model key.
Once you have a key, hand off to loading-openmed-models to load it.
pip install openmed # registry queries work without the [hf] extraimport openmed
# 1) The 12 categories
openmed.list_model_categories()
# ['Medical', 'Privacy', 'Anatomy', 'Hematology', 'Chemical', 'Disease',
# 'Genomics', 'Oncology', 'Species', 'Pathology', 'Pharmaceutical', 'Protein']
# 2) Models in a category -> list[ModelInfo]
for m in openmed.get_models_by_category("Disease"):
print(m.model_id, "|", m.size_category, "|", m.entity_types)
# 3) Inspect one model before loading
info = openmed.get_model_info("OpenMed/OpenMed-NER-DiseaseDetect-BigMed-278M")
print(info.display_name, info.task, info.param_count, info.license)get_models_by_category and get_all_models return ModelInfo objects.
get_all_models() returns a dict[str, ModelInfo] keyed by registry key.
ModelInfo tells youEvery model exposes (real attributes):
model_id # HF repo id, e.g. "OpenMed/OpenMed-NER-DiseaseDetect-BigMed-278M"
display_name # human-friendly name
category # one of the 12 categories
specialization # e.g. "disease entity detection"
entity_types # list[str] of labels the model emits, e.g. ["DISEASE", ...]
size_category # "Tiny" | "Small" | "Medium" | "Large" | "XLarge"
recommended_confidence # suggested confidence_threshold for this model
family # "NER" | "PII" | ...
task # "token-classification"
languages # e.g. ["en"], ["es"]
param_count # e.g. 278000000
license # e.g. "apache-2.0"Use entity_types to confirm the model emits the labels you need, and
recommended_confidence as a sensible default confidence_threshold.
import openmed
# Disease conditions in a general clinical note:
disease = openmed.get_models_by_category("Disease")
# e.g. "OpenMed/OpenMed-NER-DiseaseDetect-BigMed-278M"
# "OpenMed/OpenMed-NER-DiseaseDetect-BioClinical-108M" (smaller/faster)
# Tumors, staging, oncologic findings -> Oncology, not Disease:
onco = openmed.get_models_by_category("Oncology")
# e.g. "OpenMed/OpenMed-NER-OncologyDetect-BigMed-278M"
# PHI / PII detection -> Privacy category:
privacy = openmed.get_models_by_category("Privacy")Rule of thumb: bigger (278M/560M) = more accurate, slower; smaller (108M, "Small"/"Tiny") = faster, edge-friendly. Start with a mid-size model and size up only if recall is short.
import openmed
# All PII models for Spanish -> dict[str, ModelInfo]
es_models = openmed.get_pii_models_by_language("es")
# The recommended default PII model id for a language:
default_es = openmed.get_default_pii_model("es")
print(default_es) # HF repo id, or None if unsupporteddeidentify(..., lang="es") and extract_pii(..., lang="es") already select an
appropriate default — use these helpers when you need to override or to confirm
coverage. Supported de-id languages live in
openmed.SUPPORTED_LANGUAGES (en es pt fr de it nl hi te ar tr ja).
ModelQueryFor filtering by task, language, size, or tier, use the typed search:
from openmed import search_models, ModelQuery
results = search_models(ModelQuery(
task="token-classification",
language="en",
max_params=200_000_000, # keep it small for on-device
license="apache-2.0",
))
for r in results:
print(r.repo_id, r.param_count, r.languages, r.formats)Each result is a ModelSearchResult with fields like repo_id, family, task,
languages, tier, param_count, architecture, base_model, formats,
canonical_labels, license, and released. ModelQuery filters include
task, language, tier, max_params, min_params, format, license, and a
free-text query.
import openmed
for key, info, reason in openmed.get_model_suggestions(
"Stage III adenocarcinoma with metastasis to regional lymph nodes."
):
print(key, "->", reason)get_model_suggestions(text) returns (registry_key, ModelInfo, reason) tuples —
handy when the domain is unclear from the request.
openmed models list # registry keys (add --include-remote to query the Hub)
openmed models info <registry-key> # max sequence length for a key
openmed analyze --text "Stage III adenocarcinoma." --model oncology_detection_bigmed_278mloading-openmed-models: pass the chosen model_id/registry key as
model_name= to ModelLoader.load_model(...) or openmed.analyze_text(...).extracting-clinical-entities: use the model's recommended_confidence
as your confidence_threshold and verify entity_types matches your schema.get_default_pii_model(lang) into
openmed.deidentify(model_name=..., lang=...).import openmed
key = "oncology_detection_bigmed_278m"
info = openmed.get_model_info(key)
result = openmed.analyze_text(
"Stage III adenocarcinoma with nodal metastasis.",
model_name=key,
confidence_threshold=info.recommended_confidence,
)entity_types if unsure which fits.get_default_pii_model(lang) can return None for an unsupported language —
fall back to a supported one and warn, do not silently use English on non-English
text.search_models reads a committed manifest, so it only returns models that
have been catalogued — combine with get_all_models() for the full registry.entity_types / canonical_labels.openmed.CANONICAL_LABELS (see
extracting-pii-entities).maziyarpanahi/openmed
00e9efd
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.