Metadata-Version: 2.4
Name: nemo-platform-plugin
Version: 0.1.1
Summary: Public plugin contract for the NeMo Platform - the only package plugin authors need.
License-Expression: Apache-2.0
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: MacOS
Classifier: Operating System :: OS Independent
Classifier: Operating System :: POSIX
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: <3.14,>=3.11
Requires-Dist: anthropic>=0.88.0
Requires-Dist: fastapi>=0.115.4
Requires-Dist: lark>=1.1.0
Requires-Dist: nemo-platform-plugin[nemo-platform-sdk]
Requires-Dist: openai>=1.109.1
Requires-Dist: pydantic-settings>=2.8.1
Requires-Dist: pydantic>=2.10.3
Requires-Dist: pyyaml>=6.0.2
Requires-Dist: typer<0.26,>=0.20.0
Provides-Extra: nemo-platform-sdk
Requires-Dist: anyio<5,>=4.0.0; extra == 'nemo-platform-sdk'
Requires-Dist: distro<2,>=1.7.0; extra == 'nemo-platform-sdk'
Requires-Dist: docker>=7.0.0; extra == 'nemo-platform-sdk'
Requires-Dist: fsspec>=2023.1.0; extra == 'nemo-platform-sdk'
Requires-Dist: httpx<1,>=0.23.0; extra == 'nemo-platform-sdk'
Requires-Dist: ngcsdk>=4.8.2; extra == 'nemo-platform-sdk'
Requires-Dist: nvidia-ml-py>=13.0.0; extra == 'nemo-platform-sdk'
Requires-Dist: openai; extra == 'nemo-platform-sdk'
Requires-Dist: prompt-toolkit>=3.0.0; extra == 'nemo-platform-sdk'
Requires-Dist: psutil>=5.9.0; extra == 'nemo-platform-sdk'
Requires-Dist: pydantic<3,>=2.0.0; extra == 'nemo-platform-sdk'
Requires-Dist: pyyaml>=6.0.0; extra == 'nemo-platform-sdk'
Requires-Dist: requests>=2.31.0; extra == 'nemo-platform-sdk'
Requires-Dist: rich>=13.7.1; extra == 'nemo-platform-sdk'
Requires-Dist: sniffio; extra == 'nemo-platform-sdk'
Requires-Dist: typer>=0.20.0; extra == 'nemo-platform-sdk'
Requires-Dist: typing-extensions<5,>=4.14; extra == 'nemo-platform-sdk'
Description-Content-Type: text/markdown

# nemo-platform-plugin

`nemo-platform-plugin` is the only package NeMo Platform plugin authors install. It re-exports all base classes, schemas, and utilities needed to build fully-featured NeMo Platform plugins.

## Surfaces

| Surface | Base class | Entry-point group | Purpose |
|---|---|---|---|
| HTTP service | `NemoService` | `nemo.services` | Contributes FastAPI routers mounted at `/apis/<name>/...` |
| CLI | `NemoCLI` | `nemo.cli` | Contributes `nemo <name> <cmd>` subcommands |
| Job | `NemoJob` | `nemo.jobs` | Contributes schedulable, container-executable jobs. Auto-generates `run` / `submit` / `explain` CLI verbs. |
| Controller | `NemoController` | `nemo.controllers` | Contributes background reconcile-loop controllers |
| Configuration | `NemoConfig` | (none)¹ | Typed plugin configuration with env var / YAML loading |
| Entity | `NemoEntity` | (none)¹ | Entity definitions stored in the NeMo Platform entity store |

¹ Not discovered via entry-points — used directly by plugin code.

## Installation

```bash
uv add nemo-platform-plugin nemo-platform
```

`nemo-platform` is required for entity client injection at runtime.

## How plugins are discovered

Declare surfaces in `pyproject.toml` entry-point groups. Install the package and the platform picks them up at startup — no registration code needed. See [QUICKSTART.md](docs/QUICKSTART.md) for the full template.

## The `name` rule

Every surface class requires a non-empty `name: ClassVar[str]`. Checked at class-definition time — missing raises `TypeError`. Must exactly match the entry-point key; mismatch logs a warning at startup.

## Next steps

- [QUICKSTART.md](https://github.com/NVIDIA-NeMo/nemo-platform/tree/main/packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/QUICKSTART.md) — build your first plugin end-to-end
- [SERVICE.md](https://github.com/NVIDIA-NeMo/nemo-platform/tree/main/packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/SERVICE.md) — HTTP routes, CRUD patterns, testing
- [JOB.md](https://github.com/NVIDIA-NeMo/nemo-platform/tree/main/packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/JOB.md) — jobs, CLI commands, auto-generated job commands
- [CONTROLLER.md](https://github.com/NVIDIA-NeMo/nemo-platform/tree/main/packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/CONTROLLER.md) — reconcile loops, state machines, service principal
- [CONFIG.md](https://github.com/NVIDIA-NeMo/nemo-platform/tree/main/packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/CONFIG.md) — typed configuration, env vars, YAML, test overrides
- [ENTITY.md](https://github.com/NVIDIA-NeMo/nemo-platform/tree/main/packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/ENTITY.md) — entity store, CRUD client, pagination, optimistic locking
- [INFERENCE_MIDDLEWARE.md](https://github.com/NVIDIA-NeMo/nemo-platform/tree/main/packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/INFERENCE_MIDDLEWARE.md) — inference request/response middleware, typed bodies, and response annotations
- [ARCHITECTURE.md](https://github.com/NVIDIA-NeMo/nemo-platform/tree/main/packages/nemo_platform_plugin/src/nemo_platform_plugin/docs/ARCHITECTURE.md) — discovery, startup, all surfaces, SDK surface
