-
Notifications
You must be signed in to change notification settings - Fork 20
feat(eval-author)!: replace the CLI with skills for Harbor eval discovery #1411
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
228829d
71ed103
2d5c272
30b0d72
435341f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,26 +1,45 @@ | ||
| <!-- SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. --> | ||
| <!-- SPDX-License-Identifier: Apache-2.0 --> | ||
|
|
||
| # NeMo Eval Author Plugin | ||
| # NeMo Eval Author | ||
|
|
||
| Owns the `nemo agents eval-author` command group, registered under `nemo.cli.agents` and | ||
| mounted by the agents plugin. `discover` is implemented; `audit`, `propose`, `run`, and | ||
| `doctor` are placeholders. | ||
| Two skills that an agent reads to work on the evaluation suites in a user's own | ||
| repository. There is no CLI and no service. A customer points their agent at | ||
| `skills/` and nothing gets installed. | ||
|
|
||
| Use `discover` only with a trusted repository, because importing an agent runs | ||
| module top-level code. | ||
| | Skill | Role | | ||
| | --- | --- | | ||
| | [`eval-author`](src/nemo_eval_author_plugin/skills/eval-author/SKILL.md) | Core. Owns the standard every sub-flow follows and routes to one. | | ||
| | [`eval-author-discover`](src/nemo_eval_author_plugin/skills/eval-author-discover/SKILL.md) | Sub-flow. Records whether a repository's Harbor evals are ready to run. | | ||
|
|
||
| The Eval Author agent moved into the Experimentalist plugin, at | ||
| [`nemo_experimentalist_plugin.eval_author`](../nemo-experimentalist/src/nemo_experimentalist_plugin/eval_author/README.md). | ||
| Experimentalist insight mode is its only caller, so the agent sits beside the evaluator, | ||
| staging, and trace helpers it depends on. | ||
| ## Where findings go | ||
|
|
||
| ## Direction of travel | ||
| `eval-author-discover` leaves a report at `.eval-author/discovery.md`, carrying the | ||
| JSON as front matter so a later model reads the verdict without Harbor. It is | ||
| visible and worth committing: a teammate who reads it skips the discovery pass. | ||
|
|
||
| The dependency is one arrow. `discovery/run.py` borrows `make_client` from Experimentalist, | ||
| and Experimentalist imports nothing from here, so there is no package cycle for `uv` to | ||
| resolve. Install both plugins with: | ||
| The scripts write no files. They report to stdout and the skill tells the agent | ||
| where to save, because that is a judgement about someone's repository. | ||
|
|
||
| ```bash | ||
| uv sync --group experimentalist | ||
| ``` | ||
| ## Why skills instead of an agent | ||
|
|
||
| Harbor tasks live in the customer's repository, so an agent that proposes changes | ||
| has to write to that repository. Customers were unwilling to grant that, sandboxed | ||
| or not. A skill inverts the arrangement: the customer's own agent does the work, | ||
| and this package only supplies the instructions and the deterministic scripts. | ||
|
|
||
| The Eval Author agent that Experimentalist insight mode still uses lives in | ||
| [the Experimentalist plugin](../nemo-experimentalist/src/nemo_experimentalist_plugin/eval_author/README.md). | ||
|
|
||
| ## Dependencies | ||
|
|
||
| The scripts under `skills/*/scripts/` import the standard library only, so they run | ||
| on whatever Python the customer already has. Where a real answer needs a provider, | ||
| the skill defers to the provider's own validators rather than guessing from file | ||
| layout, which is why `eval-author-discover` probes for an installed Harbor and asks | ||
| Harbor to judge each config. | ||
|
|
||
| The two declared dependencies serve `tests/test_skill_contract.py`, which reads the | ||
| skills with `pyyaml` and checks them against the platform's check helpers. Adding a | ||
| runtime dependency to a bundled script is a breaking change for anyone who copied | ||
| the skill, so the contract test guards against it. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,22 +4,16 @@ | |
| [project] | ||
| name = "nemo-eval-author-plugin" | ||
| version = "0.1.0" | ||
| description = "Eval Author commands for NeMo Platform (borrows the Experimentalist platform client)." | ||
| description = "Eval Author skills that an agent reads to discover a repository's Harbor eval setup." | ||
| requires-python = ">=3.12,<3.14" | ||
| # The bundled skill scripts run on the standard library alone, so a customer needs | ||
| # no install to use them. These two are for the contract test: it reads the skill | ||
| # with pyyaml and checks it against the platform's own check helpers. | ||
|
Comment on lines
+9
to
+11
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win Move test-only dependencies out of the runtime dependency list. The comment says 🤖 Prompt for AI Agents |
||
| dependencies = [ | ||
| "pydantic>=2", | ||
| # Harbor 0.18 provides the discovery APIs used by this plugin. | ||
| "harbor>=0.18", | ||
| "nemo-experimentalist-plugin", | ||
| "nemo-insights-plugin", | ||
| "nemo-platform", | ||
| "nemo-platform-plugin", | ||
| "pyyaml>=6.0.3", | ||
| ] | ||
|
|
||
| [project.entry-points."nemo.cli.agents"] | ||
| eval-author = "nemo_eval_author_plugin.cli:EvalAuthorCLI" | ||
|
|
||
| [build-system] | ||
| requires = ["hatchling"] | ||
| build-backend = "hatchling.build" | ||
|
|
@@ -28,6 +22,5 @@ build-backend = "hatchling.build" | |
| packages = ["src/nemo_eval_author_plugin"] | ||
|
|
||
| [tool.pytest.ini_options] | ||
| asyncio_mode = "auto" | ||
| pythonpath = ["src"] | ||
| testpaths = ["tests"] | ||
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Narrow the standalone-runtime claim.
“Standard library only” and “whatever Python the customer already has” overstate the contract.
eval-author-discovercan use optional Harbor, as documented byplugins/nemo-eval-author/tests/test_skill_contract.py, Lines [4-30]. The package metadata supports only Python 3.12 and 3.13 atplugins/nemo-eval-author/pyproject.toml, Line [8]. State that copied scripts have no mandatory third-party dependency on supported Python versions and may use Harbor when available.🤖 Prompt for AI Agents