openalice-ner
Zero-shot **Named Entity Recognition** as a small HTTP service — pass any entity labels at request time, get back spans + scores. Powered by [gline-rs](https://crates.io/crates/gline-rs) (the Rust port of [GLiNER](https://github.com/urchade/GLiNER)) running multilingual ONNX models.
Architecture rating
Strong substrate adoption — manifest present+valid (100/100), 4 @feature annotations, AGENTS.md + README, drift 90, zero circular deps and zero dead imports; only blemish is one god module and 3 format issues.
Valid manifest (100/100) with clear summary, descriptive README excerpt, AGENTS.md, and 4 @feature annotations; held back by 12 missing docstrings and a declared-but-unused PORT env var (drift).
Clean Rust code (avg complexity 5, max 14, no cycles, 0 bare excepts) and a GET /health endpoint, but no evidence of SIGTERM graceful shutdown, request timeouts, retries, or idempotency on the ONNX inference path — graded conservatively as unverified.
Internal-only inference service (consumed by ml-gateway) with a small attack surface — no DB/shell/URL-fetch so injection/SSRF risk is low, but signals show NO authn/authz, rate-limit, or security headers on POST /v1/ner; graded conservatively as unproven.
Stateless by design — manifest_owns_tables=[] and runtime_deps_count=0, so no schema/migrations/RLS/FK/GDPR surface exists; appropriate for an ONNX inference service but nothing to credit on this axis.
Only a GET /health probe is declared and it is not actually reachable (latest_health: 'no https endpoint in manifest exposes', up=false); no metrics, tracing, or structured-log signals present.
No tests detected — migrations/tests presence section is empty and inspector reports no test suite; the manifest's weakest axis (features 52/100) corroborates absent coverage of the /v1/ner critical path.
source · auto-grader-2026-06-16
Ecosystem manifest
.atlas-deps.ymlZero-shot Named Entity Recognition service — gline-rs (GLiNER ONNX) over HTTP, consumed by openalice-ml-gateway.
- MODELS_DIR
- MODEL_NAME
- PORT
- docker_image: openalice-ner
- http_endpoint: POST /v1/ner
- http_endpoint: GET /v1/models
- http_endpoint: GET /health
Atlas grepped the repo's source for env reads (rust env::var · ts process.env · py os.environ · shell $VAR) and diffed against the manifest's consumes_env. Two lists below: stale declarations and undeclared reads.
- PORT
Roadmap · what's planned next
- ner.gateway.ml-gateway-routingP3planned1%Land openalice-ml-gateway route + JWT auth + per-tenant rate-limit in front of /v1/ner so callers stop hitting the service directly.
- ner.observability.prometheus-metricsP3planned3%Expose /metrics with request count, p95 latency, GLiNER mutex wait time, and input-size histogram.
- ner.models.multi-model-loadP4planned2%Support loading >1 ONNX model at startup and selecting per-request via a 'model' field in POST /v1/ner.
- ner.perf.batch-inferenceP4planned2%Batch concurrent /v1/ner requests into a single GLiNER forward pass to reduce mutex contention under load.
Code composition
tokei · loc- Rust94.6%
- TOML5.4%
- Rust94.6%
- TOML5.4%
- Rust94.6%· 246
- TOML5.4%· 14
| Language | % code | code | comments | blanks | files |
|---|---|---|---|---|---|
| Rust | 94.6% | 246 | 19 | 43 | 1 |
| TOML | 5.4% | 14 | 3 | 3 | 1 |
| Markdown | 0.0% | 0 | 68 | 26 | 2 |
Telemetry ribbon · last 90 days
1 eventner/api
3 features- ner.api.extractsrc/main.rs:155POST /v1/ner — extract named entities from up-to-4000-char text with caller-supplied labels. Zero-shot via GLiNER ONNX. Body capped at 64 KiB.route:POST /v1/nersince 0.1.0
- ner.api.healthsrc/main.rs:113GET /health — liveness probe + model status + uptime seconds. 200 once the GLiNER model is loaded; 503 before.route:GET /healthsince 0.1.0
- ner.api.modelssrc/main.rs:138GET /v1/models — list the ONNX models loaded at startup.route:GET /v1/modelssince 0.1.0
ner/service
1 feature- ner.service.cratesrc/main.rs:11Zero-shot Named Entity Recognition over HTTP — gline-rs + multilingual ONNX. Caller supplies labels at request time; no per-domain training.bin:openalice-nerroute:POST /v1/nerroute:GET /v1/modelsroute:GET /healthsince 0.1.0