What's Changed
✨ New Features
- feat: add customizer as a plugin - AALGO-215 by @soluwalana in #13
- feat(studio): Add Column toggling to GroupExperimentDataView by @nakolean in #269
- feat(studio): v0 experiment detail page by @walston in #260
- feat(studio): Skill management for Code Agent by @htolentino-nvidia in #261
- feat(experiments): Require experiments to be associated with an experiment group by @shanaiabuggy in #268
- feat(plat): Add Python 3.14 support by @matthewgrossman in #237
- feat: endpoint to group spans by trace_id and session_id by @BrianNewsom in #272
- feat(studio): client-side dataset quality checks on JSONL upload (ASTD-73) by @aray12 in #244
- feat(studio): Support CSV/Parquet in dataset schema detection by @steramae-nvidia in #238
- feat(experiments): Roll up agent_names/agent_versions; Span attribute cleanup by @shanaiabuggy in #294
- feat(studio): Add input and tools for multiple chat interactions with Code Agent by @htolentino-nvidia in #257
- feat(studio): add column visibility and filters to test cases table by @walston in #316
- feat(studio): Add CLI/agent instructions to experiment group empty state by @walston in #279
- feat(studio): bulk delete agents from the table by @marcusds in #320
- feat(experiments): Experiments UI misc QA by @shanaiabuggy in #296
- feat(models): Add prompt entity by @steramae-nvidia in #249
- feat: prepare helm chart for kubernetes deployment options by @crookedstorm in #319
- feat(studio): Model Compare route, metrics, input toggle, dataset picker by @nv-odrulea in #204
- feat(studio): Add search/filter to experiment group list by @nakolean in #329
- feat(studio): choose model when creating an example agent by @marcusds in #317
- feat(studio): clone an agent with a new name and model (ASTD-240) by @marcusds in #343
- feat(studio): Improve prompting on the Studio Code Agent by @htolentino-nvidia in #347
- feat(studio): Coding agents assets panel by @dmariali in #333
- feat(unsloth): support Nemotron-H hybrid MoE fine-tuning on DGX Spark by @albcui in #338
- feat(evaluator): add agent-eval SDK domain model value types by @arpitsardhana in #339
- feat(evaluator): add agent-eval engine (AgentEvaluator) by @arpitsardhana in #369
- feat(jobs): auth e2e testing and http_client DI by @ironcommit in #377
- feat(studio): Support images in chat by @steramae-nvidia in #364
- feat(experiments): Add BE for new Experiment pinned_at field by @shanaiabuggy in #349
- feat(studio): link experiment test cases to trace detail view by @walston in #353
- feat(evaluator): persist metrics as entities with CRUD, SDK, and job refs by @SandyChapman in #379
- feat(evaluator): add Runtimes and ProfBench agent-eval examples by @arpitsardhana in #380
- feat(sdk): Add a generic
NemoClientby @matthewgrossman in #370 - feat(deployments): scaffold plugin API and registry (AIRCORE-755) by @tylersbray in #280
- feat(models): use nmp-api image as the model-weights puller by @benmccown in #358
- feat(evaluator): promote generic agentic runtimes into the Agent-Eval SDK by @arpitsardhana in #383
- feat(sdk): ParamSpec-based typed HTTP endpoints with method() convenience layer by @matthewgrossman in #397
- ci(release): declare publishable container images for release by @a2bondar in #318
- feat(studio): Coding agent split selection by @dmariali in #435
- feat(jobs): add controller diagnostics and per-module E2E config pooling by @ironcommit in #440
- feat(models): vllm k8s support by @benmccown in #305
- feat(experiments): sort the experiments list by rollup metrics by @shanaiabuggy in #448
- feat(evaluator): inline + hybrid metric bundlers; built-ins skip cloudpickle by @SandyChapman in #438
- feat(evaluator): add Trial→Intake boundary mapping module (D8) by @SandyChapman in #443
- feat(studio): add chat history naming by @dmariali in #457
- feat(deployments): reconcile controller and prerequisite DAG (AIRCORE-758) by @tylersbray in #315
- feat(client): add pagination, retry, and client-side options to NemoClient by @matthewgrossman in #454
- feat(evaluator): AgentEvalTaskset and filesystem evidence handle by @arpitsardhana in #447
- feat(deployments): move prerequisites to Deployment and harden reconcile lifecycle by @tylersbray in #469
- feat(customizer): expand skill to help evaluate lift on adapters trained by @soluwalana in #362
- feat(studio): Implement designs for intake trace and span views by @rrhyne in #460
- feat(nemo-agents-plugin): add codex adapter to nemo-agents plugin by @mmogallapalli in #472
- feat(evaluator): publish_to_intake entrypoint (D9) by @SandyChapman in #456
- feat(nemo-agents-plugin): add cursor adapter to nemo-agents plugin by @mmogallapalli in #487
- feat(studio): intake trace/span view tweaks by @rrhyne in #489
🔧 Improvements
- refactor(intake): Add trace_index MV to efficiently query trace and s… by @BrianNewsom in #282
- refactor(studio): move getTextWithCount to common by @aray12 in #267
- refactor(studio): Remove old files by @steramae-nvidia in #330
- refactor(studio): decompose 11 large components into focused modules (ASTD-229) by @marcusds in #381
- refactor(studio): split routes/index into per-domain route groups by @marcusds in #355
🐛 Bug Fixes
- fix(auditor): garak api upgrade to v0.15.1 by @parkanzky in #241
- fix(studio): SDK fix for guardrails by @steramae-nvidia in #273
- fix(e2e): Respect nemo envvars during e2e tests by @matthewgrossman in #276
- fix: add safe-synthesizer auth/authz by @mckornfield in #224
- fix: Data Designer UX improvements by @mikeknep in #278
- fix(anonymizer): Update tutorial by @anastasia-nesterenko in #240
- fix(lint): Include nmp-common check in standard lint, move authz to nmp-common by @matthewgrossman in #284
- fix(studio): Guardrails types by @steramae-nvidia in #285
- fix(studio): match empty state for fileset table to header by @aray12 in #266
- fix: disable auth by default for local env by @marcusds in #289
- fix: default agents list commands to table output by @drazvan in #297
- fix: add agents service authz by @mckornfield in #300
- fix: Add missing PDP authorization contributions for plugins by @mckornfield in #301
- fix(studio): Experiment Session, expand scores into unique columns by @nakolean in #299
- fix(studio): ExperimentGroupsDataView expand score columns by @nakolean in #298
- fix(customizer): update skill to explain how to operate with and without auth by @soluwalana in #304
- fix: correct a context issue with the automodel build by @crookedstorm in #309
- fix(studio): Code agent skill cards small fixes by @htolentino-nvidia in #310
- fix(studio): only onboard on the first example agent by @marcusds in #307
- fix(jobs): resolve default task image from platform config on K8s by @matthewgrossman in #302
- fix(guardrails): update jailbreak-detect model deployment to match ne… by @albcui in #287
- fix(docs): align Fern url basepath with custom-domain for multi-source by @lbliii in #275
- fix(studio): EvaluationResultsDataView by @steramae-nvidia in #283
- fix(studio): Consolidate StatusBadge logic by @steramae-nvidia in #326
- fix: bearer token validate when auth enabled, resolve nat_runner by @mckornfield in #328
- fix(models): hardcoded adapters sidecar img by @benmccown in #325
- fix(studio): refresh agents table immediately after creating an agent by @marcusds in #323
- fix(tests): Mock HF in integration tests by @matthewgrossman in #259
- fix: adjust imagepullsecret handling by @crookedstorm in #344
- fix(k8s): Move scripts and values over into
nemo-platformby @matthewgrossman in #342 - fix(intake): Do not read unneeded trace input/output for list view by @BrianNewsom in #334
- fix(studio): stabilize query cache key for telemetry fetch by @aray12 in #340
- fix(studio): Align on a single test suffix pattern by @steramae-nvidia in #327
- fix: set permissions for nat_runner folders by @mckornfield in #350
- fix: docs platform-all install instructions, remove compose/helm ref by @mckornfield in #351
- fix(customizer): set correct flag for full-sft using Unsloth backend by @anubhutivyas in #346
- fix: correct fallback responses for AUT by @mckornfield in #352
- fix: helm chart KEK secret management must accept ready-made secret by @crookedstorm in #354
- fix(studio): Delete StudioDataGrid by @steramae-nvidia in #357
- fix: remove evaluate this model button by @mckornfield in #363
- fix: correct customizer values in the helm chart by @crookedstorm in #365
- fix(cli): Fix startup banner display by @anastasia-nesterenko in #374
- fix(studio): Test models context menu option is not behind a FF by @htolentino-nvidia in #372
- fix(studio): Add base models to Studio docs by @htolentino-nvidia in #373
- fix: show why modal disabled in studio by @mckornfield in #378
- fix(models): eagerly register LoRA adapters with vLLM by @albcui in #382
- fix(studio): Consolidate Studio console by @steramae-nvidia in #308
- fix: remove tokens from local file on logout by @mckornfield in #388
- fix: keep RC bundles off GitHub Releases by @svvarom in #386
- fix(auth): Fix expired JWT check by @anastasia-nesterenko in #389
- fix(studio): replace missing MetricBundleInput type by @nv-odrulea in #392
- fix(e2e): fix local minikube scripts and switch CLI health checks to /status by @matthewgrossman in #393
- fix(studio): Remove title for group experiments dataview by @nakolean in #404
- fix(intake): Fix POST /evaluator-results idempotentcy by @shanaiabuggy in #410
- fix(intake): Derive evaluator_results name from Harbor reward keys by @shanaiabuggy in #416
- fix: ASTD-254: only upload files for local storage filesets by @marcusds in #418
- fix(studio): Reenable or delete skipped tests by @steramae-nvidia in #400
- fix(docs): update IGW target to be consistent with other docs by @parkanzky in #421
- fix: upgrade all opentelemetry packages to 0.64b0 by @marcusds in #449
- fix(docker): add fastembed-cache-empty placeholder so default bake builds by @SandyChapman in #409
- fix: fix nat crash in nvbug 6336437 by @gabwow in #417
- fix: various docs updates, including hiding intake by @mckornfield in #455
- fix(customizer): CVE remediation by @soluwalana in #452
- fix(customizer): unsloth image CVE resolution by @soluwalana in #464
- fix(studio): Flashing on chat components when Code Agents is thinking by @htolentino-nvidia in #459
- fix: nss image, remove ffmpeg, force wandb version by @mckornfield in #463
- fix(auditor): use async SDK to rewrite IGW when necessary by @parkanzky in #477
- fix(studio): Fix simultaneous user requests not being shown on the Code Agent by @htolentino-nvidia in #473
- fix(studio): Fileset panel animations by @steramae-nvidia in #441
- fix(studio): enforce single-select without callback and apply attributes prop by @marcusds in #486
- fix(studio): tooltip for mean metric columns by @nakolean in #484
- fix(studio): experiment detail view UI polish (ASE-365/366/367) by @walston in #466
- fix(studio): Fix input size on Studio Code Agent and hide artifact panel on landing by @htolentino-nvidia in #485
- fix(a11y): reduce jsx-a11y warnings — common 18→4, studio 45→20 by @marcusds in #446
- fix(customizer): address CVEs in unsloth and automodel by @soluwalana in #474
📝 Documentation
- docs: Cursor Cloud dev environment instructions by @drazvan in #208
- docs: bootstrap first version of customizer plugin docs by @gabwow in #313
- docs(auth): restructure auth docs into Fern navigation and fix rendering issues by @ironcommit in #368
- docs(studio): fix agents.mdx Agent List actions table by @marcusds in #375
- docs(evaluator): fix submit() packager, FilesetRef import, and leaked titles by @SandyChapman in #406
- docs(customizer): update documentation and notebooks for customizer by @soluwalana in #414
🧰 Maintenance
- ci: add advisory Docker build status check for PRs by @svvarom in #200
- ci: pin all versions for third party actions by @crookedstorm in #271
- ci: correct dependencies and logic around dispatch job by @crookedstorm in #274
- chore: Data Designer e2e tests by @mikeknep in #247
- chore(packaging): remove legacy evaluator wiring by @SandyChapman in #230
- ci: scope CodeQL to security queries by @svvarom in #292
- chore: consolidate docker files into a single location and more services by @crookedstorm in #288
- chore: remove ultimately unused docker build elements by @crookedstorm in #293
- chore: improve reliablity of container build by increasing timeout by @crookedstorm in #303
- chore(models): re-enable deployment docs by @benmccown in #306
- ci: replace ytanikin PR labeler with release-drafter autolabeler by @svvarom in #312
- test(intake): derive chat-completions fixture
createdfrom now by @svvarom in #321 - chore(customizer): refactor code for unsloth and automodel plugins+services by @anubhutivyas in #242
- chore: upgrade high and med vulns for go and js by @mckornfield in #336
- ci: add docker build in the pipeline to use with a basic k8s install test by @crookedstorm in #345
- chore: add a job to clear the PR cache on merge/close by @crookedstorm in #367
- chore(customizer): automodel plugin - add missing CLI hyperparams by @anubhutivyas in #360
- chore: update readme links to docs page by @mckornfield in #361
- chore: remove more out of date safe-synthesizer docs by @mckornfield in #376
- ci: cache the embed model for the k8s smoke tests by @crookedstorm in #384
- chore: add license URL to csv format, allow output by @mckornfield in #337
- ci: establish workflow to clean up image artifacts by @crookedstorm in #390
- chore: web vulns fixes, remove overrides by @mckornfield in #387
- ci: adjust the behavior of the dependency caching for uv by @crookedstorm in #394
- chore: add documentation for OIDC seed setup by @mckornfield in #402
- ci: use action-semantic-pull-requests directly to update as needed by @crookedstorm in #408
- chore: prepare release notes and version bump by @mckornfield in #403
- chore: more CVE python updates by @mckornfield in #411
- ci: add test builds for the auditor and safe synthesizer containers by @crookedstorm in #423
- ci(release): add manual nightly notification toggle by @svvarom in #442
- chore: update base images in case that helps with anything by @crookedstorm in #445
- chore: update badge for repo to public badge by @mckornfield in #461
- chore: Ensure run_nemo_local uses isolated config by @mikeknep in #458
- test(auth): add integration tests for group-based role binding enforcement by @ironcommit in #468
- chore: bump automodel base to grab wandb upgrade by @mckornfield in #475
- chore(studio): remove 11 unused TSX components by @marcusds in #481
Other Changes
- chore(release): begin 0.1.3 development cycle by @matthewgrossman in #194
- feat(studio): Improve Code assistant's tables by @htolentino-nvidia in #186
- fix(models): extend provider discovery timeout and reduce log noise by @tylersbray in #164
- docs(evaluator): add custom Python metrics tutorial by @SandyChapman in #106
- fix(studio): debounce filter text inputs by @nakolean in #192
- fix: set HF_TOKEN during integration and unit tests by @mckornfield in #202
- docs: Fix NemoGuard casing in Models docs by @JashG in #201
- fix(studio): Docs clarification by @steramae-nvidia in #203
- feat(skills): nemo-model-selection skill with live benchmark cache by @walston in #130
- fix(studio): dataset schema and file browser polish by @nv-odrulea in #181
- feat(guardrails): custom NemoGuard JailbreakDetection model implementation by @albcui in #134
- fix(web): remove pnpm devDependency to unblock Volta users by @yamini in #193
- feat(studio): Experiments list page (FP-182) by @walston in #206
- fix: move nss jobs into plugin, update docs by @mckornfield in #195
- feat(e2e): Add jobs e2e tests w/ fixes, mock inference provider by @matthewgrossman in #179
- feat(intake): Expand filter support on GET /experiments by @shanaiabuggy in #207
- chore(plugin): move image helpers to plugin package by @SandyChapman in #211
- feat(cli): add nemo services rm/prune for ghost instance cleanup by @tylersbray in #172
- feat(auditor): add filtering to target and config list endpoints (AIRCORE-387) by @maxdubrinsky in #182
- feat(studio): Data sample panel by @steramae-nvidia in #187
- docs: Drop Anonymizer quickstart page by @mikeknep in #216
- feat(studio): API to expose test case row level data in experiments by @shanaiabuggy in #198
- feat(agents): typed AgentSpec + explore-first onboarding chain (FP-161) by @aleckhoury in #94
- feat(agents): submit agent evaluate + optimize as jobs (AIRCORE-656) by @marcusds in #66
- feat(studio): Action menu on fileset detail route by @steramae-nvidia in #185
- ci: run nightly releases on weekdays by @svvarom in #214
- fix: generate subtype routes with distinct names by @mckornfield in #219
- fix(studio): Regen SDK schema without duplicate operations by @steramae-nvidia in #220
- test(evaluator): generate cloudpickle example fixtures by @SandyChapman in #212
- fix(packaging): align evaluator SDK extra name by @SandyChapman in #225
- chore(platform-seed): remove evaluator seed dependency by @SandyChapman in #227
- feat(e2e): Add files external provider tests by @matthewgrossman in #217
- fix(studio): improve client-side validation for fileset creation by @aray12 in #213
- feat(filter): support nested-namespace map_entity_field; expose evaluator labels by @maxdubrinsky in #196
- fix(plat): Bind to 127.0.0.1 rather than 0.0.0.0 by @matthewgrossman in #234
- feat(studio): Add ExperimentGroup detail page. by @nakolean in #229
- feat(plugin): Decouple nemo-platform-plugin from nmp-common by @matthewgrossman in #145
- fix(safe-synthesizer): move to 0.1.2 pin fix, update TS generation by @mckornfield in #226
- chore(platform-runner): stop registering legacy evaluator service by @SandyChapman in #228
- feat(studio): experiment group creation modal by @walston in #235
- feat(filter): add InMemoryFilterRepository and use it for jobs status filtering by @maxdubrinsky in #191
- ci: publish RC/stable release bundles as GitHub Release assets by @svvarom in #223
- ci: add an aggregation layer to CI to allow blocking merge more dynamically by @crookedstorm in #239
- ci: move the studio CI tests into ci.yaml so that they can be required by @crookedstorm in #250
- docs: fern docs by @lbliii in #26
- feat(experiments): Create new experiments data seed script by @shanaiabuggy in #248
- fix(sdk): pin InferenceParams to $shared in stainless config by @benmccown in #246
- ci: do not require DCO for repository members by @crookedstorm in #253
- ci: update parallelism of unit tests by @crookedstorm in #254
- docs: update Fern custom domain to docs.nvidia.com/nemo-platform by @lbliii in #255
- fix(studio): wire evaluator plugin SDK + migrate eval UI to EvaluateJob API by @marcusds in #251
- feat(models): vllm deployment in docker by @benmccown in #232
- ci(studio): add SDK gen check for OpenAPI spec changes (ASTD-218) by @marcusds in #245
- chore: make e2e inference test more resilient to race conditions by @mckornfield in #258
- feat(filter): add StringFilter type and widen per-field filter types by @maxdubrinsky in #197
- fix(studio): remove references to nim_deployment after backend change by @dmariali in #262
- ci: add label-driven GitHub release notes for RC/stable releases by @svvarom in #252
- feat(studio): Coding agent studio linking by @dmariali in #236
- feat(studio): Filtering for ExperimentGroup DataView by @nakolean in #243
- ci: pin PR labeler to allowlisted 1.3.0 commit by @svvarom in #265
- fix(auditor): Update auditor usages by @anastasia-nesterenko in #221
- ASTD-260: Gate chat playground on valid deployment target by @marcusds in #415
- ASTD-259: Add missing deps to handleInferFromExisting by @marcusds in #419
- ASTD-257: Guard null firstRow and fix expand button a11y by @marcusds in #420
New Contributors
- @yamini made their first contribution in #193
- @a2bondar made their first contribution in #318
- @rrhyne made their first contribution in #460
Full Changelog: 0.1.2...0.2.0