Skip to content

chore(experiments): Rename all child resources of Experiment entity to "Evaluation"#612

Merged
shanaiabuggy merged 13 commits into
mainfrom
sb/ase-512
Jul 15, 2026
Merged

chore(experiments): Rename all child resources of Experiment entity to "Evaluation"#612
shanaiabuggy merged 13 commits into
mainfrom
sb/ase-512

Conversation

@shanaiabuggy

@shanaiabuggy shanaiabuggy commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Rename the child resource everywhere user-facing (API paths/schemas, SDK, CLI, RBAC, docs, Studio) to Evaluation. Keep the stored entity as Experiment (entity_type="experiment", parent_experiment_id); the API layer maps Evaluation ⇄ the Experiment entity so existing rows keep working.

  • No breaking changes to API consumers-- For any legacy API endpoint, we register the same handler under a second path with include_in_schema=False so the old URL keeps working but doesn't clutter the docs
  • Includes UI renames
  • No data migration (deferred to the final migration step)

Summary by CodeRabbit

  • New Features
    • Added Evaluations as a first-class workspace resource (create, view, update, delete), including pin/unpin, advanced sorting/filtering, and pagination.
    • Added Evaluation session browsing with summary vs detailed mode, filtering, and pagination.
  • Improvements
    • Experiment Group UI and API contracts now surface evaluation-focused fields, including evaluation_count, updated descriptions, and evaluation-aware sorting.
    • Studio navigation and detail pages now route and render evaluations (including trace and session views).
  • Bug Fixes
    • Improved behavior when evaluation metric/rollup data is unavailable, returning deterministic errors and maintaining session browsing and sort recovery behavior.

@shanaiabuggy
shanaiabuggy requested review from a team as code owners July 8, 2026 18:58
@github-actions github-actions Bot added the chore label Jul 8, 2026
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 25436/32661 77.9% 62.5%
Integration Tests N/A N/A N/A

@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds workspace-scoped Evaluation CRUD, pinning, session listing, rollup hydration, authorization, OpenAPI contracts, backend coverage, seed tooling, and Studio routes/views while retaining persisted Experiment storage mappings.

Changes

Evaluation platform migration

Layer / File(s) Summary
Evaluation API and schemas
services/intake/src/nmp/intake/api/v2/experiments/*, services/intake/src/nmp/intake/entities/*
Adds evaluation request, response, filtering, sorting, pinning, CRUD, and session-listing behavior while mapping API evaluations to persisted experiments.
ClickHouse telemetry and rollups
services/intake/src/nmp/intake/spans/*
Scopes trace indexes, rollups, and session queries by evaluation_id, including evaluator aggregates and cost/latency metrics.
Authorization, tooling, and validation
services/core/auth/..., services/intake/scripts/spans/*, services/intake/tests/**/*
Adds evaluation permissions, updates telemetry seed flows, and migrates CRUD, ingestion, rollup, session, filter, sort, and repository coverage.
OpenAPI contracts
openapi/*.yaml
Publishes evaluation paths and schemas, session modes, evaluator-result wiring, and evaluation-aligned experiment-group contracts.

Studio evaluation experience

Layer / File(s) Summary
Evaluation data views and hooks
web/packages/studio/src/components/dataViews/*, web/packages/studio/src/components/ExperimentGroupEditModal/*
Uses evaluation APIs for group tables, sessions, sorting, filtering, pinning, query invalidation, and session-mode fallback.
Evaluation routes and labels
web/packages/studio/src/routes/*, web/packages/studio/src/constants/*, web/packages/common/src/*
Adds evaluation detail and trace routes and updates navigation, breadcrumbs, counters, empty states, and context labels.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant Studio
  participant Intake
  participant ClickHouse
  User->>Studio: Open evaluation detail
  Studio->>Intake: List evaluation sessions
  Intake->>ClickHouse: Query evaluation-scoped sessions
  ClickHouse-->>Intake: Return session rows
  Intake-->>Studio: Return evaluation sessions
  Studio-->>User: Render sessions and traces
Loading

Possibly related PRs

  • NVIDIA-NeMo/nemo-platform#653: Extends experiment-group metadata typing and filtering, overlapping with the updated experiment-group OpenAPI contracts.

Suggested reviewers: nakolean, rrhyne, walston

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.23% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: renaming Experiment child resources to Evaluation across the API and related surfaces.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sb/ase-512

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
services/core/auth/src/nmp/core/auth/assets/static-authz.yaml (1)

114-148: 🔒 Security & Privacy | 🔴 Critical | ⚡ Quick win

Add intake.evaluations to the permission registry
services/core/auth/src/nmp/core/auth/assets/static-authz.yaml references intake.evaluations.* in roles and endpoints, but the registry has no intake.evaluations block. That leaves undeclared permissions and breaks authz validation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@services/core/auth/src/nmp/core/auth/assets/static-authz.yaml` around lines
114 - 148, The permission registry is missing the intake.evaluations entry even
though roles and endpoints reference intake.evaluations.*. Update the static
authz registry block in static-authz.yaml by adding an intake.evaluations
section with the needed actions and descriptions, matching the pattern used by
intake.evaluator-results, annotations, experiment-groups, and experiments so
authz validation can resolve the permissions.
web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx (1)

206-208: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Leftover "experiment" wording in evaluation-domain UI.

Aria-labels ("Pin/Unpin experiment") and the error fallback ("Failed to load experiments.") weren't updated even though this view now operates on evaluations.

✏️ Suggested text fix
-              aria-label={isPinned ? 'Unpin experiment' : 'Pin experiment'}
+              aria-label={isPinned ? 'Unpin evaluation' : 'Pin evaluation'}
-    return <ErrorMessage message="Failed to load experiments." />;
+    return <ErrorMessage message="Failed to load evaluations." />;

Also applies to: 409-411

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx`
around lines 206 - 208, Update the leftover experiment-specific copy in
ExperimentGroupDataView so the evaluation-domain UI uses evaluation wording
instead of experiment wording. In the component’s aria-labels around togglePin
and the error fallback around the loading/error state, replace “Pin/Unpin
experiment” and “Failed to load experiments.” with evaluation-appropriate text,
and make the same copy change in both referenced spots so the labels stay
consistent.
🧹 Nitpick comments (1)
web/packages/studio/src/routes/EvaluationTraceDetailRoute/index.test.tsx (1)

31-35: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Stale test description.

Test title still says "renders the experiment context panel" but now asserts 'Evaluation Context'. Update description for consistency.

✏️ Fix
-  it('renders the experiment context panel', async () => {
+  it('renders the evaluation context panel', async () => {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/packages/studio/src/routes/EvaluationTraceDetailRoute/index.test.tsx`
around lines 31 - 35, Update the test name in EvaluationTraceDetailRoute’s test
suite so it matches the current assertion. The spec currently uses the outdated
description “renders the experiment context panel” while asserting for
“Evaluation Context”; rename the test around renderTraceDetail and
screen.findByText to describe the Evaluation Context panel consistently.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/cli/reference.mdx`:
- Line 5524: The filter example in the CLI reference is being mangled by MDX
link-like syntax, causing run_count to disappear from the rendered help text.
Update the CLI help-text generator or escaping logic around the filter examples
used by the reference docs so the run_count numeric-range example is emitted
literally, then regenerate the docs via the CLI reference generation flow. Use
the existing filter example text in the CLI help source and the reference doc
generation path to locate the fix.

In `@openapi/ga/individual/platform.openapi.yaml`:
- Around line 3310-3315: Keep the existing /experiments intake routes available
as deprecated aliases instead of renaming them to /evaluations. Update the
OpenAPI definition around
create_evaluation_apis_intake_v2_workspaces__workspace__evaluations_post so the
new /evaluations path is added without removing the old experiments-based
endpoints, and mark the old routes as deprecated to preserve compatibility for
existing API/SDK clients.

In `@openapi/ga/openapi.yaml`:
- Around line 3671-3687: The list_evaluation_sessions endpoint schema is missing
the documented 400 response for invalid status filter values. Update the
responses block for list_evaluation_sessions in the OpenAPI spec to include a
400 entry alongside the existing 200, 404, 503, and 422 responses, matching the
backend behavior when an invalid status is provided.
- Around line 3310-3313: The OpenAPI rename from the Experiments routes to the
Evaluations routes removed the old
`/apis/intake/v2/workspaces/{workspace}/experiments*` paths without a
compatibility alias. Update the `openapi/ga/openapi.yaml` definitions for the
`Evaluations` endpoints so the existing `/experiments` operations remain
available as deprecated aliases alongside the new `/evaluations` paths,
preserving the same handlers and request/response shapes for backwards
compatibility.

In `@services/intake/scripts/spans/seed_experiment_rollup_data.py`:
- Around line 12-13: The metadata.seeded_by reference points to a nonexistent
script, so update the path in the seeding metadata to the actual script name
used by seed_experiment_rollup_data.py. Locate the seeded_by assignment in the
same area as the docstring reference to seed_evaluations_demo.py, and change
only the bad script path while leaving the separate docstring link untouched.

In `@services/intake/scripts/spans/seed_experiments_demo.py`:
- Around line 32-33: The docstring and seeded_by metadata in
seed_experiments_demo.py still refer to the old script name, so update both
references from seed_evaluations_demo.py to seed_experiments_demo.py. Locate the
docstring near the top of the script and the seeded_by assignment in the
metadata section, and make sure the script name is consistent everywhere in that
file.

In `@services/intake/src/nmp/intake/entities/experiments.py`:
- Around line 62-68: The Evaluation entity type change in
Evaluation.__entity_type__ from the old storage key to "evaluation" will orphan
existing persisted rows that were written as "experiment". Fix this by either
keeping the legacy type in Evaluation or adding backward-compatible lookup
support in the entity loading path so both keys resolve. If you choose
migration, add a backfill for existing rows and ensure the entity lookup logic
in the experiments entities module still returns prior records.

In
`@web/packages/studio/src/components/dataViews/ExperimentGroupDataView/useExperimentGroupEvaluations.ts`:
- Line 162: The toast error text in useExperimentGroupEvaluations is using stale
“experiment” wording even though the hook now works with evaluations. Update the
toast.error messages in the pin and unpin error handlers to reference
“evaluation” instead of “experiment” so the wording stays consistent with the
rest of the hook and the surrounding symbols like onError, pin, and unpin.

In `@web/packages/studio/src/routes/groups/experimentRoutes.tsx`:
- Around line 33-36: The route entry for ROUTES.workspace.experiment is using
the wrong error panel title, since this path renders ExperimentRoute for the
experiment groups listing rather than an evaluation page. Update the
errorElement in experimentRoutes.tsx so the ErrorPanel title stays group-related
(for example, “Experiment Groups”) and does not use “Evaluation”; keep the
change localized to the route config that wires ROUTES.workspace.experiment to
ExperimentRoute.

---

Outside diff comments:
In `@services/core/auth/src/nmp/core/auth/assets/static-authz.yaml`:
- Around line 114-148: The permission registry is missing the intake.evaluations
entry even though roles and endpoints reference intake.evaluations.*. Update the
static authz registry block in static-authz.yaml by adding an intake.evaluations
section with the needed actions and descriptions, matching the pattern used by
intake.evaluator-results, annotations, experiment-groups, and experiments so
authz validation can resolve the permissions.

In
`@web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx`:
- Around line 206-208: Update the leftover experiment-specific copy in
ExperimentGroupDataView so the evaluation-domain UI uses evaluation wording
instead of experiment wording. In the component’s aria-labels around togglePin
and the error fallback around the loading/error state, replace “Pin/Unpin
experiment” and “Failed to load experiments.” with evaluation-appropriate text,
and make the same copy change in both referenced spots so the labels stay
consistent.

---

Nitpick comments:
In `@web/packages/studio/src/routes/EvaluationTraceDetailRoute/index.test.tsx`:
- Around line 31-35: Update the test name in EvaluationTraceDetailRoute’s test
suite so it matches the current assertion. The spec currently uses the outdated
description “renders the experiment context panel” while asserting for
“Evaluation Context”; rename the test around renderTraceDetail and
screen.findByText to describe the Evaluation Context panel consistently.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 8a51b0dd-f5d8-46f0-be69-48f9c46ef8b7

📥 Commits

Reviewing files that changed from the base of the PR and between e18f1a4 and 886c79c.

⛔ Files ignored due to path filters (34)
  • sdk/python/nemo-platform/.nmpcontext/openapi.yaml is excluded by !sdk/**
  • sdk/python/nemo-platform/.nmpcontext/stainless.yaml is excluded by !sdk/**
  • sdk/python/nemo-platform/api.md is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/_client.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/evaluations/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/cli/commands/api/evaluations/sessions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/evaluations/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/evaluations/api.md is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/evaluations/evaluations.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/evaluations/sessions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/experiment_groups/experiment_groups.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/experiments/api.md is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_create_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_filter_param.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_list_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_response.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_responses_page.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_session_filter_param.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_session_response.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_session_responses_page.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_update_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluator_aggregate.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/metric_stat_filters_param.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/number_filter_param.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/session_list_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_create_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_response.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_update_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/api_resources/evaluations/__init__.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/api_resources/evaluations/test_sessions.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/api_resources/test_evaluations.py is excluded by !sdk/**
  • sdk/stainless.yaml is excluded by !sdk/**
📒 Files selected for processing (55)
  • docs/cli/reference.mdx
  • docs/fern/snippets/_snippets/cli-summary.mdx
  • openapi/ga/individual/platform.openapi.yaml
  • openapi/ga/openapi.yaml
  • openapi/openapi.yaml
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/evaluations/__init__.py
  • packages/nemo_platform_ext/src/nemo_platform_ext/cli/commands/api/evaluations/sessions.py
  • services/core/auth/src/nmp/core/auth/assets/static-authz.yaml
  • services/intake/scripts/spans/seed_experiment_rollup_data.py
  • services/intake/scripts/spans/seed_experiments_demo.py
  • services/intake/src/nmp/intake/api/v2/evaluations/endpoints.py
  • services/intake/src/nmp/intake/api/v2/evaluations/schemas.py
  • services/intake/src/nmp/intake/entities/experiments.py
  • services/intake/src/nmp/intake/service.py
  • services/intake/src/nmp/intake/spans/clickhouse_migrations.py
  • services/intake/src/nmp/intake/spans/evaluation_rollup_repository.py
  • services/intake/src/nmp/intake/spans/evaluation_session_repository.py
  • services/intake/src/nmp/intake/spans/ingest/experiment_context_validation.py
  • services/intake/tests/conftest.py
  • services/intake/tests/integration/spans/test_experiment_metric_sort.py
  • services/intake/tests/integration/spans/test_experiment_rollups.py
  • services/intake/tests/integration/spans/test_experiment_sessions.py
  • services/intake/tests/integration/test_experiments_crud.py
  • services/intake/tests/test_experiment_default_sort.py
  • services/intake/tests/test_experiment_metric_filter.py
  • services/intake/tests/test_experiment_optimization_fields.py
  • services/intake/tests/test_experiment_rollup_repository.py
  • services/intake/tests/test_experiment_session_schemas.py
  • services/intake/tests/test_experiment_sort.py
  • services/intake/tests/test_experiment_sort_endpoint.py
  • services/intake/tests/test_spans_clickhouse_migrations.py
  • web/packages/common/src/hooks/useStudioDataViewState/filterFieldMap.integration.test.tsx
  • web/packages/studio/src/components/ExperimentGroupEditModal/index.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/Empty.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/index.test.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/index.tsx
  • web/packages/studio/src/components/dataViews/ExperimentGroupDataView/Empty.tsx
  • web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx
  • web/packages/studio/src/components/dataViews/ExperimentGroupDataView/useExperimentGroupEvaluations.test.ts
  • web/packages/studio/src/components/dataViews/ExperimentGroupDataView/useExperimentGroupEvaluations.ts
  • web/packages/studio/src/components/dataViews/ExperimentGroupDataView/useSortErrorRecovery.test.ts
  • web/packages/studio/src/components/dataViews/ExperimentGroupDataView/useSortErrorRecovery.ts
  • web/packages/studio/src/constants/links.ts
  • web/packages/studio/src/constants/routes.ts
  • web/packages/studio/src/routes/EvaluationDetailRoute/EvaluationDetailMetrics.tsx
  • web/packages/studio/src/routes/EvaluationDetailRoute/index.tsx
  • web/packages/studio/src/routes/EvaluationTraceDetailRoute/index.test.tsx
  • web/packages/studio/src/routes/EvaluationTraceDetailRoute/index.tsx
  • web/packages/studio/src/routes/ExperimentGroupDetailRoute/index.tsx
  • web/packages/studio/src/routes/ExperimentRoute/ExperimentGroupCard.tsx
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
  • web/packages/studio/src/routes/groups/experimentRoutes.tsx
  • web/packages/studio/src/routes/utils.ts
  • web/packages/studio/src/tests/title-change.test.tsx

Comment thread docs/cli/reference.mdx Outdated
Comment thread openapi/ga/individual/platform.openapi.yaml
Comment thread openapi/ga/openapi.yaml
Comment thread openapi/ga/openapi.yaml
Comment thread services/intake/scripts/spans/seed_evaluation_rollup_data.py Outdated
Comment thread services/intake/scripts/spans/seed_evaluations_demo.py Outdated
Comment thread services/intake/src/nmp/intake/entities/experiments.py Outdated
Comment thread web/packages/studio/src/routes/groups/experimentRoutes.tsx
Signed-off-by: shanaiabuggy <[email protected]>
@shanaiabuggy
shanaiabuggy marked this pull request as draft July 13, 2026 17:38
Signed-off-by: shanaiabuggy <[email protected]>

# Conflicts:
#	openapi/ga/individual/platform.openapi.yaml
#	openapi/ga/openapi.yaml
#	openapi/openapi.yaml
#	sdk/python/nemo-platform/.nmpcontext/openapi.yaml
#	services/intake/src/nmp/intake/spans/ingest/evaluation_context_validation.py
#	web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx
#	web/packages/studio/src/constants/routes.ts
#	web/packages/studio/src/tests/title-change.test.tsx
Signed-off-by: shanaiabuggy <[email protected]>
@shanaiabuggy shanaiabuggy changed the title chore(experiments): Entity rename Experiment -> Evaluation chore(experiments): Rename all child resources of Experiment entity to "Evaluation" Jul 13, 2026
@shanaiabuggy
shanaiabuggy marked this pull request as ready for review July 14, 2026 16:02

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
web/packages/studio/src/components/IntakeDetail/IntakeComponents/traceKeyValues.test.tsx (1)

69-75: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Rename the remaining user-facing experiment label.

This test still expects Experiment ID, while the PR renames the child resource to Evaluation. Update the context descriptor/rendered label to Evaluation ID and assert that value here; otherwise the UI will show “Evaluation Context” containing stale Experiment terminology.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@web/packages/studio/src/components/IntakeDetail/IntakeComponents/traceKeyValues.test.tsx`
around lines 69 - 75, Update the context descriptor used by
buildExperimentContextEntries to label the child resource “Evaluation ID”
instead of “Experiment ID,” then change the expected label in the “includes
evaluation context entries when present” test to match. Ensure the rendered
evaluation context no longer exposes stale Experiment terminology.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@services/intake/src/nmp/intake/service.py`:
- Around line 54-58: Remove the router-level tag argument from the Experiments
RouterConfig entry so it no longer adds the duplicate “Experiments” OpenAPI
group; preserve the existing router, description, and route-level tags.

---

Outside diff comments:
In
`@web/packages/studio/src/components/IntakeDetail/IntakeComponents/traceKeyValues.test.tsx`:
- Around line 69-75: Update the context descriptor used by
buildExperimentContextEntries to label the child resource “Evaluation ID”
instead of “Experiment ID,” then change the expected label in the “includes
evaluation context entries when present” test to match. Ensure the rendered
evaluation context no longer exposes stale Experiment terminology.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d888c512-1352-41fc-99b2-7d65834c4063

📥 Commits

Reviewing files that changed from the base of the PR and between 9f396b3 and cb14d9a.

📒 Files selected for processing (22)
  • plugins/nemo-evaluator/tests/integration/test_publish_to_intake.py
  • services/core/auth/src/nmp/core/auth/assets/static-authz.yaml
  • services/intake/scripts/spans/seed_experiment_rollup_data.py
  • services/intake/scripts/spans/seed_experiments_demo.py
  • services/intake/src/nmp/intake/api/v2/experiments/endpoints.py
  • services/intake/src/nmp/intake/api/v2/experiments/schemas.py
  • services/intake/src/nmp/intake/service.py
  • services/intake/tests/conftest.py
  • services/intake/tests/integration/spans/test_atif_ingest.py
  • services/intake/tests/integration/spans/test_chat_completions_ingest.py
  • services/intake/tests/integration/test_experiments_crud.py
  • services/intake/tests/test_experiment_default_sort.py
  • services/intake/tests/test_experiment_metric_filter.py
  • services/intake/tests/test_experiment_session_schemas.py
  • services/intake/tests/test_experiment_sort.py
  • services/intake/tests/test_experiment_sort_endpoint.py
  • web/packages/studio/src/components/IntakeDetail/IntakeComponents/traceKeyValues.test.tsx
  • web/packages/studio/src/components/IntakeDetail/README.md
  • web/packages/studio/src/components/IntakeDetail/TraceDetailView.tsx
  • web/packages/studio/src/routes/EvaluationTraceDetailRoute/index.test.tsx
  • web/packages/studio/src/routes/IntakeTraceDetailRoute/index.test.tsx
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
🚧 Files skipped from review as they are similar to previous changes (8)
  • web/packages/studio/src/routes/WorkspaceLayout/WorkspaceSideNav.tsx
  • web/packages/studio/src/routes/EvaluationTraceDetailRoute/index.test.tsx
  • services/intake/tests/conftest.py
  • services/intake/tests/test_experiment_sort.py
  • services/intake/tests/test_experiment_session_schemas.py
  • services/intake/tests/test_experiment_sort_endpoint.py
  • services/core/auth/src/nmp/core/auth/assets/static-authz.yaml
  • services/intake/tests/integration/test_experiments_crud.py

Comment thread services/intake/src/nmp/intake/service.py
Signed-off-by: shanaiabuggy <[email protected]>

# Conflicts:
#	openapi/ga/individual/platform.openapi.yaml
#	openapi/ga/openapi.yaml
#	openapi/openapi.yaml
#	sdk/python/nemo-platform/.nmpcontext/openapi.yaml
#	sdk/python/nemo-platform/src/nemo_platform/resources/evaluations/evaluations.py
#	sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_list_params.py
#	sdk/python/nemo-platform/tests/api_resources/test_evaluations.py
#	services/intake/src/nmp/intake/api/v2/experiments/schemas.py
#	web/packages/studio/src/routes/EvaluationDetailRoute/EvaluationDetailMetrics.tsx

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx`:
- Around line 217-225: Update the pin button’s accessible label near the Tooltip
in the experiment group data view, replacing “Pin experiment” and “Unpin
experiment” with the corresponding “Pin evaluation” and “Unpin evaluation”
terminology while preserving the existing isPinned behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: e2fa0a69-3572-4f6e-8b24-a937947ba615

📥 Commits

Reviewing files that changed from the base of the PR and between cb14d9a and 6250b59.

⛔ Files ignored due to path filters (12)
  • sdk/python/nemo-platform/.nmpcontext/openapi.yaml is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/evaluations/evaluations.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/experiment_groups/experiment_groups.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_create_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_filter_param.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_list_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_response.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_update_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_create_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_response.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_update_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/api_resources/test_evaluations.py is excluded by !sdk/**
📒 Files selected for processing (12)
  • openapi/ga/individual/platform.openapi.yaml
  • openapi/ga/openapi.yaml
  • openapi/openapi.yaml
  • services/intake/src/nmp/intake/api/v2/experiments/endpoints.py
  • services/intake/src/nmp/intake/api/v2/experiments/schemas.py
  • services/intake/src/nmp/intake/entities/experiments.py
  • services/intake/tests/test_experiment_default_sort.py
  • services/intake/tests/test_experiment_optimization_fields.py
  • web/packages/studio/src/components/IntakeDetail/IntakeComponents/traceKeyValues.test.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/index.tsx
  • web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx
  • web/packages/studio/src/routes/EvaluationDetailRoute/EvaluationDetailMetrics.tsx
🚧 Files skipped from review as they are similar to previous changes (10)
  • web/packages/studio/src/routes/EvaluationDetailRoute/EvaluationDetailMetrics.tsx
  • web/packages/studio/src/components/IntakeDetail/IntakeComponents/traceKeyValues.test.tsx
  • services/intake/tests/test_experiment_optimization_fields.py
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/index.tsx
  • services/intake/tests/test_experiment_default_sort.py
  • services/intake/src/nmp/intake/api/v2/experiments/schemas.py
  • openapi/ga/openapi.yaml
  • openapi/ga/individual/platform.openapi.yaml
  • services/intake/src/nmp/intake/api/v2/experiments/endpoints.py
  • openapi/openapi.yaml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx`:
- Around line 217-225: Update the pin button’s accessible label near the Tooltip
in the experiment group data view, replacing “Pin experiment” and “Unpin
experiment” with the corresponding “Pin evaluation” and “Unpin evaluation”
terminology while preserving the existing isPinned behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: e2fa0a69-3572-4f6e-8b24-a937947ba615

📥 Commits

Reviewing files that changed from the base of the PR and between cb14d9a and 6250b59.

⛔ Files ignored due to path filters (12)
  • sdk/python/nemo-platform/.nmpcontext/openapi.yaml is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/evaluations/evaluations.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/resources/experiment_groups/experiment_groups.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_create_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_filter_param.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_list_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_response.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/evaluations/evaluation_update_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_create_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_response.py is excluded by !sdk/**
  • sdk/python/nemo-platform/src/nemo_platform/types/experiment_groups/experiment_group_update_params.py is excluded by !sdk/**
  • sdk/python/nemo-platform/tests/api_resources/test_evaluations.py is excluded by !sdk/**
📒 Files selected for processing (12)
  • openapi/ga/individual/platform.openapi.yaml
  • openapi/ga/openapi.yaml
  • openapi/openapi.yaml
  • services/intake/src/nmp/intake/api/v2/experiments/endpoints.py
  • services/intake/src/nmp/intake/api/v2/experiments/schemas.py
  • services/intake/src/nmp/intake/entities/experiments.py
  • services/intake/tests/test_experiment_default_sort.py
  • services/intake/tests/test_experiment_optimization_fields.py
  • web/packages/studio/src/components/IntakeDetail/IntakeComponents/traceKeyValues.test.tsx
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/index.tsx
  • web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx
  • web/packages/studio/src/routes/EvaluationDetailRoute/EvaluationDetailMetrics.tsx
🚧 Files skipped from review as they are similar to previous changes (10)
  • web/packages/studio/src/routes/EvaluationDetailRoute/EvaluationDetailMetrics.tsx
  • web/packages/studio/src/components/IntakeDetail/IntakeComponents/traceKeyValues.test.tsx
  • services/intake/tests/test_experiment_optimization_fields.py
  • web/packages/studio/src/components/dataViews/EvaluationSessionsDataView/index.tsx
  • services/intake/tests/test_experiment_default_sort.py
  • services/intake/src/nmp/intake/api/v2/experiments/schemas.py
  • openapi/ga/openapi.yaml
  • openapi/ga/individual/platform.openapi.yaml
  • services/intake/src/nmp/intake/api/v2/experiments/endpoints.py
  • openapi/openapi.yaml
🛑 Comments failed to post (1)
web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx (1)

217-225: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Rename the pin button’s accessible label to Evaluation.

The tooltip now uses Evaluation terminology, but the existing button label still says “Pin experiment” / “Unpin experiment” at Line 230. Update those labels so screen-reader users receive the same terminology as other users.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx`
around lines 217 - 225, Update the pin button’s accessible label near the
Tooltip in the experiment group data view, replacing “Pin experiment” and “Unpin
experiment” with the corresponding “Pin evaluation” and “Unpin evaluation”
terminology while preserving the existing isPinned behavior.

Comment thread sdk/python/nemo-platform/scripts/lint
@shanaiabuggy
shanaiabuggy enabled auto-merge July 15, 2026 17:08
@shanaiabuggy
shanaiabuggy added this pull request to the merge queue Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants