CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

serving-openmed-rest-api

Stand up OpenMed's FastAPI REST service for clinical NER, PII extraction, and de-identification, with health checks, model keep-alive/unload, optional dynamic batching, and no-PHI logging. Use when the user wants to serve OpenMed over HTTP, deploy a de-id/NER REST API, run an inference endpoint for clinical text, add a /analyze or /pii/deidentify route, or containerize OpenMed as a service. Covers the service extra, launching create_app with uvicorn, the real endpoints (/health, /analyze, /pii/extract, /pii/deidentify, /models/loaded, /models/unload), request/response shapes, ServiceRuntime env-var configuration, and self-hosted auth/CORS/TLS notes.

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

SKILL.md
Quality
Evals
Security

Quality

Content

82%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A strong, dense deployment skill: every command is runnable as written, endpoint/request/env-var documentation is exact and source-anchored, and the workflow is clearly sequenced with a health-check checkpoint and thoughtful operational gotchas (no-PHI logging, keep_mapping sensitivity, cold-start tuning). Its weaknesses are minor — duplicated auth guidance across sections, recovery guidance detached from the workflow steps, and reference-grade schema detail inlined in the main file.

Suggestions

State the no-built-in-auth/CORS/TLS guidance once (keep the Edge cases entry, which is the more detailed of the two) and have Workflow step 3 cross-reference it, removing the duplicated reverse-proxy advice and the repeated launch command.

Add an explicit feedback loop to the workflow: after the health-check step, note what to do when /health fails or a request returns 504/422 (e.g., check profile timeout, reduce input size, fix the rejected field per the error envelope), pulling that recovery guidance out of Edge cases and into the sequence.

Move the full request-field enumerations for AnalyzeRequest/PIIExtractRequest/PIIDeidentifyRequest (with defaults and enum values) into a references/ file (e.g. API.md), keeping a compact endpoints table in SKILL.md, and include one concrete success-response example alongside the error envelope.

DimensionReasoningScore

Conciseness

The body is efficient and assumes competence — no explanation of what FastAPI/REST/uvicorn are, and everything is carried by tables and runnable commands. Minor trimmable duplication keeps it below anchor 5: the auth/TLS advice appears in both Workflow step 3 ("Place a reverse proxy or gateway (API keys/mTLS, CORS allow-list) ahead of the app — it has none built in") and again nearly verbatim in Edge cases ("No built-in auth/CORS/TLS... Put it behind your own reverse proxy / API gateway"), and the launch command appears four times across Quick start, env-var example, Workflow, and Dockerfile.

4 / 5

Actionability

Fully executable, copy-paste-ready guidance throughout: `pip install "openmed[service]"`, `python -m openmed.service.logging --host 127.0.0.1 --port 8000`, an in-process `create_app()` snippet, working curl examples for /health, /analyze, and /pii/deidentify, a complete env-var table with defaults, exact enum values and defaults for every request field, a stable error envelope with status codes, and a full Dockerfile. The common deployment cases are all covered concretely; the only elided detail is the success-response shape, which is minor.

5 / 5

Workflow Clarity

The six-step workflow is clearly sequenced (install+launch → configure env → front with auth/TLS → health-check+warm → call endpoints → manage memory) and includes a validation checkpoint ("Poll GET /health; preloaded models warm during the lifespan startup"). It falls short of anchor 5 because the recovery guidance (504 → larger profile/pre-chunking, 422 → field-level reasons) lives in Edge cases rather than being an explicit feedback loop inside the workflow steps, so checkpoints are present but error-recovery is not integrated.

4 / 5

Progressive Disclosure

The body is a single well-organized file with clean, scannable sections (When to use, Quick start, Endpoints, Config, Workflow, Containerizing, Hand-off, Edge cases, Standards) and only one-level-deep pointers (source files like `openmed/service/app.py` and external URLs — no nested reference chains, and no bundle files exist to bury anything). It sits between anchors 4 and 5: at ~170 lines it exceeds the 'simple skill' threshold, and reference-grade material (the full request-field enumerations for three schemas) is inlined where a references/ file could keep SKILL.md leaner, which is a minor organization gap rather than a structural problem.

4 / 5

Total

17

/

20

Passed

Description

100%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

An exemplary description: third-person voice, dense with concrete capabilities, an explicit 'Use when the user wants to...' clause covering five natural trigger scenarios with synonyms, and a clearly scoped niche (self-hosted REST serving of OpenMed). It is long but every clause carries trigger-relevant or capability-relevant information with no fluff.

DimensionReasoningScore

Specificity

The description lists multiple concrete actions with comprehensive coverage: "Stand up OpenMed's FastAPI REST service for clinical NER, PII extraction, and de-identification, with health checks, model keep-alive/unload, optional dynamic batching, and no-PHI logging", plus "launching create_app with uvicorn" and concrete endpoint names. This matches the anchor 'Lists multiple specific concrete actions; comprehensive coverage' — nothing is vague or generic.

5 / 5

Completeness

Both 'what' and 'when' are explicit: the what is the concrete capability list (NER, PII extraction, de-identification, health checks, keep-alive/unload, batching, no-PHI logging), and the when is a full "Use when the user wants to..." clause with five concrete trigger scenarios. This exactly matches the anchor-5 exemplar pattern.

5 / 5

Trigger Term Quality

Natural user phrasings are comprehensively covered with synonyms: "serve OpenMed over HTTP", "deploy a de-id/NER REST API", "run an inference endpoint for clinical text", "add a /analyze or /pii/deidentify route", "containerize OpenMed as a service". Users would naturally say these exact things; no common variation is missing for this domain (route names stand in for file extensions as literal trigger strings).

5 / 5

Distinctiveness Conflict Risk

The niche is clear — serving OpenMed over HTTP/REST — and every trigger is service-flavored (REST API, endpoint, route, containerize, serve over HTTP), which does not overlap with the sibling MCP-server or batch-processing skills. Only OpenMed-specific artifacts are named, so conflict risk with unrelated skills is minimal.

5 / 5

Total

20

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

maziyarpanahi/openmed

Path

skills/serving-openmed-rest-api/SKILL.md

Reviewed

Table of Contents

Is this your skill?

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.