docs(customizer): align guides with current APIs and workflows#834
Conversation
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughChangesCustomizer documentation and tutorial updates
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docs/customizer/tutorials/format-training-dataset.mdx (1)
333-338: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winMove this Next Steps section to the end of the page.
The page continues with
## Completion Modelsat Line 342, so this block prematurely ends the tutorial. Move it below the completion-model content or rename it as a transition section.As per coding guidelines: “Include 'Next Steps' section at the end with cross-links to related documentation content.”
🤖 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 `@docs/customizer/tutorials/format-training-dataset.mdx` around lines 333 - 338, Move the “## Next Steps” section from its current position before “## Completion Models” to the end of the page, preserving its existing customization-job links and wording.Source: Coding guidelines
docs/customizer/tutorials/embedding-customization-job.mdx (1)
38-47: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winMove prerequisites before the tutorial content.
The page presents About and Dataset Format before
## Prerequisites. Move the prerequisites block near the top so users see environment requirements before following the tutorial.As per coding guidelines: “Always list prerequisites at the top of documentation pages before other content.”
🤖 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 `@docs/customizer/tutorials/embedding-customization-job.mdx` around lines 38 - 47, The tutorial’s “## Prerequisites” section currently appears after introductory content such as About and Dataset Format. Move the entire prerequisites block, including its requirements and model-token note, near the top of the page before all other tutorial content while preserving its existing wording and formatting.Source: Coding guidelines
🤖 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/customizer/manage-customization-jobs/hyperparameters.mdx`:
- Around line 239-243: Update the output.save_method documentation to cover
all_weights runs: specify the valid save_method value and/or default for
full-weight training, or explicitly state that the field is ignored for
all_weights. Keep the existing lora and merged_* behavior documented accurately.
In `@docs/customizer/tutorials/distillation-customization-job.mdx`:
- Around line 436-442: The deployment polling logic must honor the configured
timeout by passing the remaining time, rather than a fixed 60 seconds, to
wait_for_gateway in docs/customizer/tutorials/distillation-customization-job.mdx
lines 436-442 and docs/customizer/tutorials/distillation-customization-job.ipynb
lines 515-523. Calculate the remaining timeout from the configured timeout and
elapsed time, use it for the gateway wait, and apply the same change in both
synchronized tutorial representations.
In `@docs/customizer/tutorials/dpo-customization-job.ipynb`:
- Around line 491-500: Update the Conclusion section’s Next steps text to
replace the internal `nemo-customizer` skill reference with the public
`/documentation/customizer-reference/manage-customization-jobs/training-configuration`
documentation link, while preserving the surrounding hyperparameter guidance.
- Around line 216-231: Update the HF_TOKEN setup before create_or_get_secret and
any model FileSet provisioning to fail immediately when HF_TOKEN is absent,
rather than printing a skip message and returning None. Preserve the existing
create-or-retrieve behavior for valid tokens, and ensure provisioning only
proceeds with a token_secret.
In `@docs/customizer/tutorials/embedding-customization-job.mdx`:
- Around line 411-424: Update the HuggingfaceStorageConfigParam construction in
the embedding customization setup to pass the optional token_secret keyword
argument directly in the constructor, using hf_secret.name when available;
remove the subsequent storage mutation while preserving behavior when hf_secret
is absent.
In `@docs/customizer/tutorials/understand-configurations-and-models.mdx`:
- Around line 284-293: The MoE example contradicts the documented
tensor-parallel constraint. Update the example’s parallel-size values and
derived calculations to use tensor_parallel_size=1, or retain
tensor_parallel_size=2 while listing only expert_parallel_size=1 as valid;
ensure the valid and invalid value descriptions remain consistent with the rules
above.
In `@docs/fern/components/notebooks/distillation-customization-job.ts`:
- Around line 98-100: Ensure deployment readiness failures still execute
baseline-resource cleanup by wrapping the workflow around wait_for_deployment in
try/finally or an equivalent failure-cleanup path, while preserving existing
error propagation. Apply the same change to
docs/fern/components/notebooks/distillation-customization-job.ts lines 98-100
and docs/fern/components/notebooks/distillation-customization-job.json lines
93-95, keeping both notebook representations synchronized.
- Around line 98-100: Update wait_for_deployment so the overall timeout is
checked before invoking client.models.wait_for_gateway in the READY branch; if
the deadline has passed, raise the existing TimeoutError immediately. Apply the
equivalent change to
docs/fern/components/notebooks/distillation-customization-job.ts lines 98-100
and docs/fern/components/notebooks/distillation-customization-job.json lines
93-95.
In `@docs/fern/components/notebooks/sft-customization-job.json`:
- Around line 92-95: Update the create_or_get_secret and Hugging Face setup flow
so HF_TOKEN is optional: only create hf_secret and access hf_secret.name when
HF_TOKEN is set, and otherwise leave token_secret unset or omitted for public
models. Ensure downstream configuration does not unconditionally reference
hf_secret.name.
In `@docs/fern/README.md`:
- Line 117: Update the CI workflow description in the documentation table to
accurately reflect fern-docs-ci.yaml: remove npm run broken-links unless that
step is added to the workflow, while preserving the existing npm run check
description.
In `@docs/fern/scripts/validate-notebook-viewer.mjs`:
- Around line 88-108: The notebook validation flow must also cover the
NotebookViewer TypeScript artifact, not just the JSON artifact. Update the
validation logic around the sourceCells/artifactCells comparison to verify the
corresponding .ts file re-exports or reflects the same JSON content, ensuring
stale TypeScript artifacts cause validation failure while preserving the
existing stale-JSON check.
---
Outside diff comments:
In `@docs/customizer/tutorials/embedding-customization-job.mdx`:
- Around line 38-47: The tutorial’s “## Prerequisites” section currently appears
after introductory content such as About and Dataset Format. Move the entire
prerequisites block, including its requirements and model-token note, near the
top of the page before all other tutorial content while preserving its existing
wording and formatting.
In `@docs/customizer/tutorials/format-training-dataset.mdx`:
- Around line 333-338: Move the “## Next Steps” section from its current
position before “## Completion Models” to the end of the page, preserving its
existing customization-job links and wording.
🪄 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: 85cee324-e32c-476c-a2b1-9551945eac20
📒 Files selected for processing (67)
docs/AGENTS.mddocs/customizer/about.mdxdocs/customizer/index.mdxdocs/customizer/manage-customization-jobs/create-job.mdxdocs/customizer/manage-customization-jobs/get-job-status.mdxdocs/customizer/manage-customization-jobs/hyperparameters.mdxdocs/customizer/manage-customization-jobs/index.mdxdocs/customizer/manage-customization-jobs/list-active-jobs.mdxdocs/customizer/manage-model-entities/create-fileset.mdxdocs/customizer/manage-model-entities/create-model-entity.mdxdocs/customizer/manage-model-entities/index.mdxdocs/customizer/models/data-format.mdxdocs/customizer/models/embedding.mdxdocs/customizer/models/gpt-oss.mdxdocs/customizer/models/index.mdxdocs/customizer/models/llama-nemotron.mdxdocs/customizer/models/llama.mdxdocs/customizer/models/mistral.mdxdocs/customizer/models/phi.mdxdocs/customizer/models/qwen.mdxdocs/customizer/tutorials/_snippets/output/chat-basic-format-example.jsonldocs/customizer/tutorials/_snippets/output/chat-expanded-format-example.jsondocs/customizer/tutorials/_snippets/output/chat-thinking-off-example.jsonldocs/customizer/tutorials/_snippets/output/chat-thinking-on-example.jsonldocs/customizer/tutorials/_snippets/output/chat-tool-calling-basic-example.jsonldocs/customizer/tutorials/_snippets/output/chat-tool-calling-expanded-example.jsondocs/customizer/tutorials/_snippets/output/completion-format-example.jsonldocs/customizer/tutorials/_snippets/output/config-list-example.jsondocs/customizer/tutorials/_snippets/output/job-creation-response.jsondocs/customizer/tutorials/_snippets/output/lora-hyperparameters-example.jsondocs/customizer/tutorials/_snippets/output/lora-training-data-example.jsonldocs/customizer/tutorials/_snippets/output/version-error-example.jsondocs/customizer/tutorials/distillation-customization-job.ipynbdocs/customizer/tutorials/distillation-customization-job.mdxdocs/customizer/tutorials/dpo-customization-job.ipynbdocs/customizer/tutorials/embedding-customization-job.ipynbdocs/customizer/tutorials/embedding-customization-job.mdxdocs/customizer/tutorials/format-training-dataset.mdxdocs/customizer/tutorials/import-hf-model.mdxdocs/customizer/tutorials/lora-customization-job.ipynbdocs/customizer/tutorials/lora-customization-job.mdxdocs/customizer/tutorials/metrics.mdxdocs/customizer/tutorials/optimize-throughput.ipynbdocs/customizer/tutorials/optimize-throughput.mdxdocs/customizer/tutorials/sft-customization-job.ipynbdocs/customizer/tutorials/sft-customization-job.mdxdocs/customizer/tutorials/understand-configurations-and-models.mdxdocs/fern/README.mddocs/fern/components/notebooks/distillation-customization-job.jsondocs/fern/components/notebooks/distillation-customization-job.tsdocs/fern/components/notebooks/dpo-customization-job.jsondocs/fern/components/notebooks/dpo-customization-job.tsdocs/fern/components/notebooks/embedding-customization-job.jsondocs/fern/components/notebooks/embedding-customization-job.tsdocs/fern/components/notebooks/lora-customization-job.jsondocs/fern/components/notebooks/lora-customization-job.tsdocs/fern/components/notebooks/optimize-throughput.jsondocs/fern/components/notebooks/optimize-throughput.tsdocs/fern/components/notebooks/sft-customization-job.jsondocs/fern/components/notebooks/sft-customization-job.tsdocs/fern/package.jsondocs/fern/scripts/README.mddocs/fern/scripts/ipynb-to-mdx.pydocs/fern/scripts/validate-notebook-viewer.mjsdocs/requirements.mdxdocs/support-matrix.mdxdocs/troubleshooting/customizer.mdx
💤 Files with no reviewable changes (12)
- docs/customizer/tutorials/_snippets/output/chat-thinking-on-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-basic-format-example.jsonl
- docs/customizer/tutorials/_snippets/output/completion-format-example.jsonl
- docs/customizer/tutorials/_snippets/output/lora-hyperparameters-example.json
- docs/customizer/tutorials/_snippets/output/chat-thinking-off-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-expanded-format-example.json
- docs/customizer/tutorials/_snippets/output/chat-tool-calling-basic-example.jsonl
- docs/customizer/tutorials/_snippets/output/lora-training-data-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-tool-calling-expanded-example.json
- docs/customizer/tutorials/_snippets/output/job-creation-response.json
- docs/customizer/tutorials/_snippets/output/version-error-example.json
- docs/customizer/tutorials/_snippets/output/config-list-example.json
|
38b6280 to
6c24fe9
Compare
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/customizer/tutorials/metrics.mdx (1)
61-66: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winRead metrics from
status_details.metrics.
detailsis alreadytask.status_details;train_lossandval_lossare nested underdetails["metrics"], so the current example printsNone. Apply the same nested lookup to both loss lines.Proposed fix
details = task.status_details or {} + metrics = details.get("metrics") or {} print(f"Training Phase: {details.get('phase')}") print(f"Step: {details.get('step')}/{details.get('max_steps')}") print(f"Epoch: {details.get('epoch')}/{details.get('num_epochs')}") - print(f"Training Loss: {details.get('train_loss')}") - print(f"Validation Loss: {details.get('val_loss')}") + print(f"Training Loss: {metrics.get('train_loss')}") + print(f"Validation Loss: {metrics.get('val_loss')}")🤖 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 `@docs/customizer/tutorials/metrics.mdx` around lines 61 - 66, Update the metrics example’s two loss print statements to read train_loss and val_loss from the nested status_details.metrics object, while leaving the phase, step, and epoch lookups on details unchanged.
♻️ Duplicate comments (1)
docs/customizer/tutorials/distillation-customization-job.mdx (1)
436-442: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winUse the deployment-aware readiness helper and remaining timeout.
wait_for_gatewayaccepts a provider name, but this passes the deployment name. Use the existingwait_for_status(..., desired_status="READY", check_gateway=True)helper, which accepts deployment names. Also pass only the time remaining; the fixed 60-second wait can exceedtimeout_minutes. The SDK documentswait_for_gatewayas provider-based andwait_for_statusas deployment-based. (docs.nvidia.com)Suggested fix
if dep.status == "READY": print("\nDeployment is ready!") - if not client.models.wait_for_gateway(deployment_name, workspace="default", timeout=60): - raise RuntimeError("Inference gateway did not become ready") + remaining = int(timeout - elapsed) + if remaining <= 0: + raise TimeoutError(f"Deployment timeout after {timeout_minutes} minutes") + if not client.models.wait_for_status( + deployment_name=deployment_name, + desired_status="READY", + workspace="default", + timeout=remaining, + check_gateway=True, + ): + raise TimeoutError("Inference gateway did not become ready") return dep🤖 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 `@docs/customizer/tutorials/distillation-customization-job.mdx` around lines 436 - 442, Replace the deployment-name call to client.models.wait_for_gateway in the deployment polling flow with the deployment-aware wait_for_status helper, passing desired_status="READY", check_gateway=True, and the remaining timeout rather than a fixed 60 seconds. Preserve the existing RuntimeError when readiness is not reached and the surrounding failure and timeout handling.
🤖 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.
Outside diff comments:
In `@docs/customizer/tutorials/metrics.mdx`:
- Around line 61-66: Update the metrics example’s two loss print statements to
read train_loss and val_loss from the nested status_details.metrics object,
while leaving the phase, step, and epoch lookups on details unchanged.
---
Duplicate comments:
In `@docs/customizer/tutorials/distillation-customization-job.mdx`:
- Around line 436-442: Replace the deployment-name call to
client.models.wait_for_gateway in the deployment polling flow with the
deployment-aware wait_for_status helper, passing desired_status="READY",
check_gateway=True, and the remaining timeout rather than a fixed 60 seconds.
Preserve the existing RuntimeError when readiness is not reached and the
surrounding failure and timeout handling.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 7c012928-4c76-4307-be3e-9dd59f8cb476
📒 Files selected for processing (67)
docs/AGENTS.mddocs/customizer/about.mdxdocs/customizer/index.mdxdocs/customizer/manage-customization-jobs/create-job.mdxdocs/customizer/manage-customization-jobs/get-job-status.mdxdocs/customizer/manage-customization-jobs/hyperparameters.mdxdocs/customizer/manage-customization-jobs/index.mdxdocs/customizer/manage-customization-jobs/list-active-jobs.mdxdocs/customizer/manage-model-entities/create-fileset.mdxdocs/customizer/manage-model-entities/create-model-entity.mdxdocs/customizer/manage-model-entities/index.mdxdocs/customizer/models/data-format.mdxdocs/customizer/models/embedding.mdxdocs/customizer/models/gpt-oss.mdxdocs/customizer/models/index.mdxdocs/customizer/models/llama-nemotron.mdxdocs/customizer/models/llama.mdxdocs/customizer/models/mistral.mdxdocs/customizer/models/phi.mdxdocs/customizer/models/qwen.mdxdocs/customizer/tutorials/_snippets/output/chat-basic-format-example.jsonldocs/customizer/tutorials/_snippets/output/chat-expanded-format-example.jsondocs/customizer/tutorials/_snippets/output/chat-thinking-off-example.jsonldocs/customizer/tutorials/_snippets/output/chat-thinking-on-example.jsonldocs/customizer/tutorials/_snippets/output/chat-tool-calling-basic-example.jsonldocs/customizer/tutorials/_snippets/output/chat-tool-calling-expanded-example.jsondocs/customizer/tutorials/_snippets/output/completion-format-example.jsonldocs/customizer/tutorials/_snippets/output/config-list-example.jsondocs/customizer/tutorials/_snippets/output/job-creation-response.jsondocs/customizer/tutorials/_snippets/output/lora-hyperparameters-example.jsondocs/customizer/tutorials/_snippets/output/lora-training-data-example.jsonldocs/customizer/tutorials/_snippets/output/version-error-example.jsondocs/customizer/tutorials/distillation-customization-job.ipynbdocs/customizer/tutorials/distillation-customization-job.mdxdocs/customizer/tutorials/dpo-customization-job.ipynbdocs/customizer/tutorials/embedding-customization-job.ipynbdocs/customizer/tutorials/embedding-customization-job.mdxdocs/customizer/tutorials/format-training-dataset.mdxdocs/customizer/tutorials/import-hf-model.mdxdocs/customizer/tutorials/lora-customization-job.ipynbdocs/customizer/tutorials/lora-customization-job.mdxdocs/customizer/tutorials/metrics.mdxdocs/customizer/tutorials/optimize-throughput.ipynbdocs/customizer/tutorials/optimize-throughput.mdxdocs/customizer/tutorials/sft-customization-job.ipynbdocs/customizer/tutorials/sft-customization-job.mdxdocs/customizer/tutorials/understand-configurations-and-models.mdxdocs/fern/README.mddocs/fern/components/notebooks/distillation-customization-job.jsondocs/fern/components/notebooks/distillation-customization-job.tsdocs/fern/components/notebooks/dpo-customization-job.jsondocs/fern/components/notebooks/dpo-customization-job.tsdocs/fern/components/notebooks/embedding-customization-job.jsondocs/fern/components/notebooks/embedding-customization-job.tsdocs/fern/components/notebooks/lora-customization-job.jsondocs/fern/components/notebooks/lora-customization-job.tsdocs/fern/components/notebooks/optimize-throughput.jsondocs/fern/components/notebooks/optimize-throughput.tsdocs/fern/components/notebooks/sft-customization-job.jsondocs/fern/components/notebooks/sft-customization-job.tsdocs/fern/package.jsondocs/fern/scripts/README.mddocs/fern/scripts/ipynb-to-mdx.pydocs/fern/scripts/validate-notebook-viewer.mjsdocs/requirements.mdxdocs/support-matrix.mdxdocs/troubleshooting/customizer.mdx
💤 Files with no reviewable changes (12)
- docs/customizer/tutorials/_snippets/output/job-creation-response.json
- docs/customizer/tutorials/_snippets/output/completion-format-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-expanded-format-example.json
- docs/customizer/tutorials/_snippets/output/chat-thinking-on-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-tool-calling-basic-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-tool-calling-expanded-example.json
- docs/customizer/tutorials/_snippets/output/config-list-example.json
- docs/customizer/tutorials/_snippets/output/chat-thinking-off-example.jsonl
- docs/customizer/tutorials/_snippets/output/lora-hyperparameters-example.json
- docs/customizer/tutorials/_snippets/output/version-error-example.json
- docs/customizer/tutorials/_snippets/output/lora-training-data-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-basic-format-example.jsonl
🚧 Files skipped from review as they are similar to previous changes (49)
- docs/customizer/models/phi.mdx
- docs/customizer/models/qwen.mdx
- docs/support-matrix.mdx
- docs/fern/scripts/README.md
- docs/customizer/models/llama.mdx
- docs/customizer/models/gpt-oss.mdx
- docs/requirements.mdx
- docs/customizer/manage-model-entities/index.mdx
- docs/customizer/index.mdx
- docs/AGENTS.md
- docs/troubleshooting/customizer.mdx
- docs/customizer/models/llama-nemotron.mdx
- docs/customizer/manage-customization-jobs/get-job-status.mdx
- docs/customizer/manage-model-entities/create-model-entity.mdx
- docs/fern/package.json
- docs/customizer/manage-customization-jobs/index.mdx
- docs/customizer/manage-customization-jobs/list-active-jobs.mdx
- docs/customizer/models/index.mdx
- docs/fern/README.md
- docs/customizer/models/embedding.mdx
- docs/fern/scripts/validate-notebook-viewer.mjs
- docs/customizer/tutorials/lora-customization-job.mdx
- docs/customizer/models/mistral.mdx
- docs/customizer/manage-customization-jobs/create-job.mdx
- docs/customizer/tutorials/lora-customization-job.ipynb
- docs/fern/components/notebooks/lora-customization-job.ts
- docs/fern/components/notebooks/dpo-customization-job.ts
- docs/customizer/tutorials/format-training-dataset.mdx
- docs/fern/components/notebooks/lora-customization-job.json
- docs/customizer/models/data-format.mdx
- docs/fern/components/notebooks/distillation-customization-job.json
- docs/fern/components/notebooks/distillation-customization-job.ts
- docs/customizer/tutorials/embedding-customization-job.mdx
- docs/customizer/manage-customization-jobs/hyperparameters.mdx
- docs/fern/components/notebooks/dpo-customization-job.json
- docs/customizer/tutorials/import-hf-model.mdx
- docs/fern/scripts/ipynb-to-mdx.py
- docs/fern/components/notebooks/embedding-customization-job.json
- docs/customizer/tutorials/understand-configurations-and-models.mdx
- docs/customizer/tutorials/sft-customization-job.ipynb
- docs/customizer/tutorials/dpo-customization-job.ipynb
- docs/fern/components/notebooks/optimize-throughput.json
- docs/fern/components/notebooks/optimize-throughput.ts
- docs/fern/components/notebooks/sft-customization-job.json
- docs/customizer/tutorials/distillation-customization-job.ipynb
- docs/fern/components/notebooks/sft-customization-job.ts
- docs/fern/components/notebooks/embedding-customization-job.ts
- docs/customizer/tutorials/optimize-throughput.ipynb
- docs/customizer/tutorials/embedding-customization-job.ipynb
2a18865 to
d8fa9a1
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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/customizer/about.mdx`:
- Around line 248-256: Remove the TP sizing, multi-node, and performance
guidance from the Pipeline Parallelism section in the documentation. Relocate
that content under the Tensor Parallelism section, or replace it with guidance
describing actual PP constraints while keeping TP-specific details out of the PP
section.
In `@docs/customizer/tutorials/distillation-customization-job.mdx`:
- Around line 461-462: Update the cleanup sequence around
client.inference.deployments.delete and
client.inference.deployment_configs.delete to wait until the deployment reaches
the DELETED state before deleting BASELINE_DEPLOYMENT_CONFIG. Reuse the
tutorial’s existing deployment-deletion polling or wait mechanism, preserving
the current names and workspace.
In `@docs/customizer/tutorials/sft-customization-job.mdx`:
- Around line 243-248: Remove all direct hyperlinks to the gated
meta-llama/Llama-3.2-1B-Instruct checkpoint in the tutorial, including the
introductory reference and authentication example. Keep the model ID as plain
text and retain instructions telling users to request access and accept the
model terms.
🪄 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: 8832ffc6-fdfb-44b0-aa8f-97ee5d6cf94e
📒 Files selected for processing (67)
docs/AGENTS.mddocs/customizer/about.mdxdocs/customizer/index.mdxdocs/customizer/manage-customization-jobs/create-job.mdxdocs/customizer/manage-customization-jobs/get-job-status.mdxdocs/customizer/manage-customization-jobs/hyperparameters.mdxdocs/customizer/manage-customization-jobs/index.mdxdocs/customizer/manage-customization-jobs/list-active-jobs.mdxdocs/customizer/manage-model-entities/create-fileset.mdxdocs/customizer/manage-model-entities/create-model-entity.mdxdocs/customizer/manage-model-entities/index.mdxdocs/customizer/models/data-format.mdxdocs/customizer/models/embedding.mdxdocs/customizer/models/gpt-oss.mdxdocs/customizer/models/index.mdxdocs/customizer/models/llama-nemotron.mdxdocs/customizer/models/llama.mdxdocs/customizer/models/mistral.mdxdocs/customizer/models/phi.mdxdocs/customizer/models/qwen.mdxdocs/customizer/tutorials/_snippets/output/chat-basic-format-example.jsonldocs/customizer/tutorials/_snippets/output/chat-expanded-format-example.jsondocs/customizer/tutorials/_snippets/output/chat-thinking-off-example.jsonldocs/customizer/tutorials/_snippets/output/chat-thinking-on-example.jsonldocs/customizer/tutorials/_snippets/output/chat-tool-calling-basic-example.jsonldocs/customizer/tutorials/_snippets/output/chat-tool-calling-expanded-example.jsondocs/customizer/tutorials/_snippets/output/completion-format-example.jsonldocs/customizer/tutorials/_snippets/output/config-list-example.jsondocs/customizer/tutorials/_snippets/output/job-creation-response.jsondocs/customizer/tutorials/_snippets/output/lora-hyperparameters-example.jsondocs/customizer/tutorials/_snippets/output/lora-training-data-example.jsonldocs/customizer/tutorials/_snippets/output/version-error-example.jsondocs/customizer/tutorials/distillation-customization-job.ipynbdocs/customizer/tutorials/distillation-customization-job.mdxdocs/customizer/tutorials/dpo-customization-job.ipynbdocs/customizer/tutorials/embedding-customization-job.ipynbdocs/customizer/tutorials/embedding-customization-job.mdxdocs/customizer/tutorials/format-training-dataset.mdxdocs/customizer/tutorials/import-hf-model.mdxdocs/customizer/tutorials/lora-customization-job.ipynbdocs/customizer/tutorials/lora-customization-job.mdxdocs/customizer/tutorials/metrics.mdxdocs/customizer/tutorials/optimize-throughput.ipynbdocs/customizer/tutorials/optimize-throughput.mdxdocs/customizer/tutorials/sft-customization-job.ipynbdocs/customizer/tutorials/sft-customization-job.mdxdocs/customizer/tutorials/understand-configurations-and-models.mdxdocs/fern/README.mddocs/fern/components/notebooks/distillation-customization-job.jsondocs/fern/components/notebooks/distillation-customization-job.tsdocs/fern/components/notebooks/dpo-customization-job.jsondocs/fern/components/notebooks/dpo-customization-job.tsdocs/fern/components/notebooks/embedding-customization-job.jsondocs/fern/components/notebooks/embedding-customization-job.tsdocs/fern/components/notebooks/lora-customization-job.jsondocs/fern/components/notebooks/lora-customization-job.tsdocs/fern/components/notebooks/optimize-throughput.jsondocs/fern/components/notebooks/optimize-throughput.tsdocs/fern/components/notebooks/sft-customization-job.jsondocs/fern/components/notebooks/sft-customization-job.tsdocs/fern/package.jsondocs/fern/scripts/README.mddocs/fern/scripts/ipynb-to-mdx.pydocs/fern/scripts/validate-notebook-viewer.mjsdocs/requirements.mdxdocs/support-matrix.mdxdocs/troubleshooting/customizer.mdx
💤 Files with no reviewable changes (12)
- docs/customizer/tutorials/_snippets/output/chat-thinking-off-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-expanded-format-example.json
- docs/customizer/tutorials/_snippets/output/completion-format-example.jsonl
- docs/customizer/tutorials/_snippets/output/lora-training-data-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-basic-format-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-tool-calling-expanded-example.json
- docs/customizer/tutorials/_snippets/output/lora-hyperparameters-example.json
- docs/customizer/tutorials/_snippets/output/config-list-example.json
- docs/customizer/tutorials/_snippets/output/version-error-example.json
- docs/customizer/tutorials/_snippets/output/chat-thinking-on-example.jsonl
- docs/customizer/tutorials/_snippets/output/job-creation-response.json
- docs/customizer/tutorials/_snippets/output/chat-tool-calling-basic-example.jsonl
🚧 Files skipped from review as they are similar to previous changes (46)
- docs/customizer/models/phi.mdx
- docs/AGENTS.md
- docs/customizer/models/llama.mdx
- docs/support-matrix.mdx
- docs/customizer/manage-customization-jobs/index.mdx
- docs/requirements.mdx
- docs/customizer/models/mistral.mdx
- docs/fern/scripts/README.md
- docs/customizer/manage-customization-jobs/get-job-status.mdx
- docs/customizer/models/embedding.mdx
- docs/customizer/manage-customization-jobs/list-active-jobs.mdx
- docs/fern/README.md
- docs/customizer/models/qwen.mdx
- docs/fern/package.json
- docs/customizer/models/llama-nemotron.mdx
- docs/fern/components/notebooks/lora-customization-job.json
- docs/customizer/models/gpt-oss.mdx
- docs/troubleshooting/customizer.mdx
- docs/customizer/index.mdx
- docs/fern/scripts/ipynb-to-mdx.py
- docs/fern/scripts/validate-notebook-viewer.mjs
- docs/customizer/manage-model-entities/create-model-entity.mdx
- docs/fern/components/notebooks/lora-customization-job.ts
- docs/customizer/tutorials/import-hf-model.mdx
- docs/customizer/tutorials/lora-customization-job.ipynb
- docs/fern/components/notebooks/distillation-customization-job.ts
- docs/customizer/tutorials/lora-customization-job.mdx
- docs/customizer/manage-model-entities/index.mdx
- docs/customizer/tutorials/format-training-dataset.mdx
- docs/customizer/tutorials/distillation-customization-job.ipynb
- docs/fern/components/notebooks/dpo-customization-job.json
- docs/customizer/tutorials/metrics.mdx
- docs/customizer/manage-customization-jobs/hyperparameters.mdx
- docs/customizer/tutorials/dpo-customization-job.ipynb
- docs/customizer/manage-customization-jobs/create-job.mdx
- docs/fern/components/notebooks/embedding-customization-job.json
- docs/fern/components/notebooks/sft-customization-job.ts
- docs/customizer/tutorials/embedding-customization-job.mdx
- docs/customizer/tutorials/optimize-throughput.ipynb
- docs/fern/components/notebooks/dpo-customization-job.ts
- docs/fern/components/notebooks/embedding-customization-job.ts
- docs/customizer/tutorials/understand-configurations-and-models.mdx
- docs/customizer/tutorials/embedding-customization-job.ipynb
- docs/fern/components/notebooks/distillation-customization-job.json
- docs/fern/components/notebooks/optimize-throughput.ts
- docs/fern/components/notebooks/optimize-throughput.json
Resolve accumulated Customizer documentation drift across API examples, tutorials, model references, and Fern rendering. - align FileSet, ModelSpec, job, metrics, and inference examples with current schemas - add tutorial failure guards and correct deployment readiness handling - update GPT-OSS, storage, Hugging Face, Unsloth, and CUDA 13 guidance - fix internal links, terminology, JSON examples, titles, and stale snippets - synchronize source notebooks and generated Fern artifacts - add validation for missing NotebookViewer artifacts Validation: - make docs-check - npm run broken-links Signed-off-by: Sam Oluwalana <[email protected]>
Co-authored-by: Albert Cui <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
Signed-off-by: Sam Oluwalana <[email protected]>
Signed-off-by: Sam Oluwalana <[email protected]>
* tests(auditor): E2E tests for Auditor Signed-off-by: Paul A. Parkanzky <[email protected]> * link async submit Signed-off-by: Paul A. Parkanzky <[email protected]> * re-add garak install to docker file Signed-off-by: Paul A. Parkanzky <[email protected]> * rm superfluous uv sync Signed-off-by: Paul A. Parkanzky <[email protected]> * switch back to default cpu/cpu provider/profile Signed-off-by: Paul A. Parkanzky <[email protected]> * skip tests that depend on future image Signed-off-by: Paul A. Parkanzky <[email protected]> --------- Signed-off-by: Paul A. Parkanzky <[email protected]> Co-authored-by: Paul A. Parkanzky <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
Extracts the local services process lifecycle out of the CLI into a standalone SDK module (local.services, local.process, local.transport) so that Python callers can programmatically start, stop, connect to, and manage NeMo Platform service instances without importing CLI internals. The key addition is first-class Unix domain socket (UDS) transport support across the entire stack — from the platform runner and uvicorn server binding, through inter-service HTTP clients (auth, health checks, SDK factory), to the jobs-launcher Go sidecar. Signed-off-by: Ryan S <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* feat(studio): Dedicated Agent Details Page Signed-off-by: Sean Teramae <[email protected]> * fix agent suggestions route Signed-off-by: Sean Teramae <[email protected]> * Remove unused tabs Signed-off-by: Sean Teramae <[email protected]> * fix overflow Signed-off-by: Sean Teramae <[email protected]> * fix type error Signed-off-by: Sean Teramae <[email protected]> --------- Signed-off-by: Sean Teramae <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* fix(studio): Use RHF for render performance Signed-off-by: Sean Teramae <[email protected]> * controlled components Signed-off-by: Sean Teramae <[email protected]> * more controller fixes Signed-off-by: Sean Teramae <[email protected]> * fix width in toolbar Signed-off-by: Sean Teramae <[email protected]> * fix logs/add test Signed-off-by: Sean Teramae <[email protected]> --------- Signed-off-by: Sean Teramae <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* chore: enable volume extra test * Also fix nss test Signed-off-by: Matt Kornfield <[email protected]> * chore: attempt to fix a flake in eval test Signed-off-by: Matt Kornfield <[email protected]> --------- Signed-off-by: Matt Kornfield <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
…nt groups (#759) * feat(entities): add $contains array-membership filter operator Adds a CONTAINS ("$contains") comparison operator to the entity-store filter engine so callers can query "value is an element of a JSON array field" — the prerequisite for modeling an experiment's group membership as a list (ASE-559). - filter_ops.py: new FilterOperator.CONTAINS, a default contains() on the FilterRepository ABC (additive — existing repos need not implement it), and dispatch in ComparisonOperation.apply. The JSON filter parser is generic over the enum, so $contains parses with no parser change. - SQLAlchemyFilterRepository.contains: portable across SQLite (JSON) and PostgreSQL (JSONB) via a quote-delimited match on the serialized array text; wildcard-escaped and prefix-collision-safe ("g1" never matches ["g10"]). - InMemoryFilterRepository.contains: native membership, matching SQL semantics. - Parity harness extended with $contains cases incl. a prefix near-miss. Validated: 32 parity cases pass (SQLite + in-memory agree); 113 entities + 167 plugin filter tests pass; ruff + ty clean. The Postgres path is portable by design; Docker-backed integration tests confirm it in CI. Signed-off-by: shanaiabuggy <[email protected]> * feat(intake): allow an evaluation to belong to multiple groups [ASE-559] Relax the one-group-per-evaluation constraint to many-to-many. An evaluation's single experiment_group_id becomes an experiment_ids list (>=1); everything that renders a group's runs (list view, rollups, sort) now spans the membership set. - Entity: Experiment.experiment_group_id -> experiment_ids: list[str] (min 1), with a model_validator(mode="before") coercing legacy single-id rows to [id] on read (no data migration). parent_experiment_id (lineage) untouched. - Create/update API: EvaluationRequest accepts experiment_ids (>=1); experiment_group_id kept as a deprecated coalesced alias. EvaluationResponse exposes experiment_ids with experiment_group_id as a deprecated computed alias (= experiment_ids[0]). Each group id is validated to exist + be live. - Membership queries: a shared _group_membership_filter() matches "$contains experiment_ids OR legacy scalar experiment_group_id", used by the list filter (rewriting the exposed experiment_group_id param), both count helpers, and the delete cascade — so un-migrated rows stay queryable. - Delete cascade is now reference-counted: a member whose sole membership was the deleted group is soft-deleted; a member shared with another group just drops that membership and survives there. Tests: multi-group create appears in both leaderboards; empty experiment_ids rejected; reference-counted cascade (shared member survives, sole member gone); existing single-group + deprecated-alias paths still pass. Full intake experiment/evaluation suite green (SQLite). Signed-off-by: shanaiabuggy <[email protected]> * fix(intake): make experiment_ids additive, keep experiment_group_id [ASE-559] Address review: the create request should not force the new field on clients. - EvaluationRequest.experiment_ids is now optional (default_factory=list) rather than required, so the request stays purely additive; experiment_group_id remains an accepted (deprecated) field. A model_validator requires at least one of the two and coalesces the deprecated single id into experiment_ids. - experiment_group_id is unchanged in the response body (a deprecated computed alias = experiment_ids[0]), consistent with the existing parent_experiment_id deprecation pattern. Signed-off-by: shanaiabuggy <[email protected]> * feat(intake): add evaluation-to-group membership endpoints [ASE-559] Curate existing runs into comparison groups (e.g. an all-benchmarks board) after creation: - POST /evaluations/{name}/groups/{group_id} — add a membership. Validates the group exists + is live; idempotent when already a member. - DELETE /evaluations/{name}/groups/{group_id} — remove a membership. Rejects removing the evaluation's last group with 409 (>=1-group invariant; delete the evaluation instead); idempotent when not a member. Modeled on the pin/unpin endpoints. Tests cover add (idempotent + appears on the target board), add-to-unknown-group (400), remove (drops the membership), and remove-last-group (409). Signed-off-by: shanaiabuggy <[email protected]> * chore(intake): regenerate OpenAPI spec for experiment_ids + membership [ASE-559] Regenerated via `make refresh-openapi` after the many-to-many API changes: - EvaluationRequest/EvaluationResponse gain experiment_ids; experiment_group_id retained as a deprecated field/alias. - New POST/DELETE /evaluations/{name}/groups/{group_id} membership endpoints. Signed-off-by: shanaiabuggy <[email protected]> * feat(studio): add "Add to group" action to the evaluations list [ASE-559] A per-row "Add to group" action (FolderPlus, next to the pin toggle) in the ExperimentGroupDataView opens a modal with a searchable list of the workspace's experiment groups — excluding the ones the evaluation already belongs to — and adds the run to the selected group so it appears on that board too. Mirrors the pin action's mutation + scoped query invalidation, with success/error toasts. Lets users assemble a cross-benchmark ("all-benchmarks") board from existing runs. Uses the generated useAddEvaluationToGroup / useListExperimentGroups hooks. - AddToGroupModal.tsx (+ .test.tsx, 4 cases: lists/excludes members, filters by search, calls the add hook, empty state) - ExperimentGroupDataView: row-action button + modal wiring (pin logic unchanged) typecheck + component test + eslint clean. Signed-off-by: shanaiabuggy <[email protected]> * FE & endpoint renames Signed-off-by: shanaiabuggy <[email protected]> * pretty Signed-off-by: shanaiabuggy <[email protected]> * lint Signed-off-by: shanaiabuggy <[email protected]> * helper Signed-off-by: shanaiabuggy <[email protected]> * review comments Signed-off-by: shanaiabuggy <[email protected]> * invalidate query Signed-off-by: shanaiabuggy <[email protected]> * bunny Signed-off-by: shanaiabuggy <[email protected]> --------- Signed-off-by: shanaiabuggy <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* Fix RadioCard clicks Signed-off-by: Henrique Tolentino <[email protected]> * Small fixes Signed-off-by: Henrique Tolentino <[email protected]> --------- Signed-off-by: Henrique Tolentino <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* Use LogViewer on Customizer Job Details Signed-off-by: Henrique Tolentino <[email protected]> * Add a loading check Signed-off-by: Henrique Tolentino <[email protected]> --------- Signed-off-by: Henrique Tolentino <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* fix(guardrails): Fix type errors in plugins Signed-off-by: Jash Gulabrai <[email protected]> * Address CodeRabbit Signed-off-by: Jash Gulabrai <[email protected]> --------- Signed-off-by: Jash Gulabrai <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
…813) * fix(guardrails): Propagate mutated text to proxied request/response Signed-off-by: Jash Gulabrai <[email protected]> * Minor fix Signed-off-by: Jash Gulabrai <[email protected]> * remove redundant resolver Signed-off-by: Jash Gulabrai <[email protected]> * Remove redundant param in test helper Signed-off-by: Jash Gulabrai <[email protected]> * fix lint Signed-off-by: Jash Gulabrai <[email protected]> --------- Signed-off-by: Jash Gulabrai <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* sanitize Jobs and Auditor API error responses Signed-off-by: anastasia-nesterenko <[email protected]> * fb Signed-off-by: anastasia-nesterenko <[email protected]> * update test Signed-off-by: anastasia-nesterenko <[email protected]> * fb Signed-off-by: anastasia-nesterenko <[email protected]> --------- Signed-off-by: anastasia-nesterenko <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
…#842) * fix(models): redirect LoRA sidecar XDG_DATA_HOME to a writable volume Follow-up to #798, which redirected only $XDG_STATE_HOME. The adapters sidecar's `nemo services run` also resolves its local data dir (SQLite DB, encryption key) via nmp_user_data_dir(), which honors $XDG_DATA_HOME (default ~/.local/share/nemo) -- a distinct XDG home from $XDG_STATE_HOME (default ~/.local/state). The pod runs the sidecar as the vLLM uid (2000), which does not own the nmp-api image's baked $HOME (/home/nvs, uid 1000), so startup still crash-looped with `PermissionError: [Errno 13] Permission denied: '/home/nvs/.local'` when mkdir'ing ~/.local/share/nemo. Point both XDG homes at a single writable scratch base (/scratch/.local), named for the ~/.local these homes normally live under. State lands under .../nmp/ and data under .../nemo/, so one base holds both without collision, and it stays outside the /scratch/loras subtree the adapters controller GCs. Covered by the deployments_plugin compiler unit test. Signed-off-by: Albert Cui <[email protected]> * Make comments less verbose Signed-off-by: Albert Cui <[email protected]> --------- Signed-off-by: Albert Cui <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
Signed-off-by: Matt Kornfield <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
…sponse (#827) * fix(guardrails): Ensure input rail logs are not dropped from final response Signed-off-by: Jash Gulabrai <[email protected]> * Address MR comment Signed-off-by: Jash Gulabrai <[email protected]> --------- Signed-off-by: Jash Gulabrai <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
…d agents (#838) * adding fabric[runtime] dep Signed-off-by: Manjesh Mogallapalli <[email protected]> * adding cli/api support for new agent config formats Signed-off-by: Manjesh Mogallapalli <[email protected]> * adding deploy support and tests for fabric configs Signed-off-by: Manjesh Mogallapalli <[email protected]> * add one-shot fabric invocation for agent configs Signed-off-by: Manjesh Mogallapalli <[email protected]> * scope creep Signed-off-by: Manjesh Mogallapalli <[email protected]> * add workspace creation Signed-off-by: Manjesh Mogallapalli <[email protected]> * undo fabric-runtime dep Signed-off-by: Manjesh Mogallapalli <[email protected]> * lint Signed-off-by: Manjesh Mogallapalli <[email protected]> * nits Signed-off-by: Manjesh Mogallapalli <[email protected]> * fix e2e test Signed-off-by: Manjesh Mogallapalli <[email protected]> * update wording Signed-off-by: Manjesh Mogallapalli <[email protected]> * e2e test patch Signed-off-by: Manjesh Mogallapalli <[email protected]> * addressing feedback Signed-off-by: Manjesh Mogallapalli <[email protected]> --------- Signed-off-by: Manjesh Mogallapalli <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* feat(studio): add experiment trace comparison view [ASE-186] Side-by-side comparison of the same test case across two sibling experiments on the experiment trace detail page. - "Compare to..." selector in the page header lists same-dataset sibling experiments; picking one adds ?compareWith=<name> to the URL (preserving any active ?spanId= deep link) and splits into a two-column comparison - Each column: heading row (experiment name, expand/collapse/close), a metrics card (Correctness, Latency, Tkns In/Out, Cached Tkns), and the trace in list mode; missing sessions show "Test case not available" - TraceSpanAccordions is now controlled: single view binds selection to the URL, each compare column owns selection in local state keyed by traceId; expand/collapse surface to the column header via SlotHeaderRenderProp - Refresh invalidation scoped to the specific trace's query key Signed-off-by: Nathan Walston <[email protected]> * feat(studio): compare test-case runs across a group [ASE-186] Address Shanaia's review — the comparison axis is now runs of the same test case, not experiments: - Compare selector lists every run (session) of the test case across the group's evaluations (FE fan-out per evaluation via useTestCaseRuns), labeled '<evaluation-name> · Trial <session_id last 5>'; ?compareWith= now carries the selected run's trace_id - Label above the selector: 'Compare against another run of this test case' - Page header: 'Test case comparison — Test case <test_case_id>'; subheader: 'See how this test case performed across different runs' - Metrics card is now per-session (not experiment rollups): cost, latency, tokens in/out, cached tokens, and all evaluator scores - Removed the per-column close buttons (kept the header Clear link) Signed-off-by: Nathan Walston <[email protected]> * feat(studio): grouped run selector for trace comparison [ASE-186] Refine the compare selector per design feedback (Rob/Shanaia): - Replace the flat single-select with a grouped Dropdown menu: a panel title, each evaluation run as a section heading, its trials listed as 'Trial XXXXX' rows (no repeated evaluation name per row) - Descriptive text lives in the trigger ('Compare against evaluation run'); removed the separate label above the control - Picking a trial swaps the comparison column (cap stays 1 compare run for now); the primary run is a fixed anchor and never an option - Add a test covering open -> grouped runs -> select -> enters comparison Signed-off-by: Nathan Walston <[email protected]> * fix(studio): correct compare run selector styling and loading state [ASE-186] - Rebuild the selector on the Select control (nv-input styling) instead of the Dropdown menu, keeping grouped runs via DropdownSection/DropdownHeading inside the listbox — matches the mockup and other grouped selects - Fixed trigger label via renderValue + placeholder (does not echo the selected run) - Loading now shows a disabled control with 'Loading other runs' across the whole group->evaluations->trace->runs chain; 'No runs to compare to' only once loaded with no siblings - Add CompareRunSelect state tests (loading/empty/ready) Signed-off-by: Nathan Walston <[email protected]> * fix(studio): tighten compare run dropdown to match mockup [ASE-186] - Drop DropdownSection (the source of the divider rules between runs) and use compact listbox density for a tighter list - Show hierarchy the way the mockup does: bold evaluation-run heading with its trials indented beneath as 'Trial XXXXX' - a11y: each option carries an aria-label of the full '<evaluation> · Trial XXXXX' so screen readers get self-describing options rather than relying on visual weight/indent alone Signed-off-by: Nathan Walston <[email protected]> * fix(studio): unclip run headings and collapse single-trial evals [ASE-186] - Fix vertically clipped evaluation headings: the scroll container was a flex Stack, so overflowing children were shrunk and clipped; use a block div with overflow-y-auto so rows keep their height - Collapse evaluations with a single trial onto one selectable line ('<evaluation> · Trial XXXXX'); evaluations with multiple trials keep the nested heading + indented trials (per Shanaia) - Cover both paths in CompareRunSelect tests Signed-off-by: Nathan Walston <[email protected]> * fix(studio): center loading spinner in compare run trigger [ASE-186] TextInputSpinner forces className=h-full, which stretched its wrapper and pinned the fixed-size spinner to the top of the trigger. Use a plain size=small Spinner so the trigger's centered slot aligns it vertically. Signed-off-by: Nathan Walston <[email protected]> * fix(studio): drop off-center loading spinner from compare trigger [ASE-186] The loading affordance is the disabled control + 'Loading other runs' placeholder; the extra slotEnd spinner sat off-center next to the chevron and added nothing over the disabled state. Signed-off-by: Nathan Walston <[email protected]> * fix(studio): compare dropdown hierarchy — bold options, subdued labels, real indent [ASE-186] - Clickable rows (collapsed lines + nested trials) are now bold; labels (panel title + evaluation group headings) are secondary/subdued, so weight reads as 'bold = actionable' - Panel title gets extra bottom spacing to separate it from the list - Fix trial indentation: SelectItem's own padding overrode a className on the item, so indent the content (inner Text) instead Signed-off-by: Nathan Walston <[email protected]> * fix(studio): use valid text-color-* utilities in compare dropdown [ASE-186] text-content-*/text-status-* aren't produced by the Foundations tailwind plugin (it namespaces semantic text colors as text-color-*), so those class names were silent no-ops and never subdued anything. - Group headings -> text-color-subtle (most muted, per feedback) - Panel title + Clear link + not-found body -> text-color-secondary - Not-found heading -> text-color-primary; warning icon -> text-color-feedback-warning Signed-off-by: Nathan Walston <[email protected]> * style(studio): compare group headings use text-color-secondary [ASE-186] Signed-off-by: Nathan Walston <[email protected]> * fix(studio): use real short-form text color utilities in compare view [ASE-186] text-color-* is the CSS variable name (--text-color-*), not the generated utility; Tailwind emits the short form (text-secondary, text-primary, text-feedback-warning). Swap all compare-view text colors to those so they actually apply — group headings + title + Clear link now text-secondary, not-found heading text-primary, warning icon text-feedback-warning. Signed-off-by: Nathan Walston <[email protected]> * style(studio): add child marker to nested trial rows [ASE-186] Prefix nested trial options with a muted, decorative (aria-hidden) '↳' so their child relationship to the evaluation heading reads at a glance. The option's aria-label still carries the full '<evaluation> · Trial XXXXX'. Signed-off-by: Nathan Walston <[email protected]> * test(studio): stabilize not-available compare test for slow CI [ASE-186] The 'test case not available' branch is the terminal state, shown only after the full group->evals->trace->run-fanout chain settles — the slowest path. Anchor on the mounted compare view, then wait for the terminal text with CI headroom, instead of relying on findByText's 1s default. Signed-off-by: Nathan Walston <[email protected]> --------- Signed-off-by: Nathan Walston <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
* Replace hand rolled types in customizer Signed-off-by: Henrique Tolentino <[email protected]> * Comment cleanup Signed-off-by: Henrique Tolentino <[email protected]> * More comments cleanup Signed-off-by: Henrique Tolentino <[email protected]> * Fix CI issues Signed-off-by: Henrique Tolentino <[email protected]> --------- Signed-off-by: Henrique Tolentino <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
Add VITE_PLATFORM_PROXY_DOMAIN to route same-origin /apis requests through the Vite dev server. When VITE_PLATFORM_BASE_URL is empty and the proxy domain is set, the browser only talks to the HTTPS dev server and Vite forwards to the plain-HTTP platform server-side. This avoids Safari's mixed-content block on an HTTPS (mkcert) page calling http://localhost. Document the new var in the sample env file. Signed-off-by: Alex Ray <[email protected]> Signed-off-by: Sam Oluwalana <[email protected]>
5a94ceb to
1bc79f0
Compare
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
docs/customizer/tutorials/optimize-throughput.mdx (1)
208-245: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy liftAdd CLI equivalents in tab sets.
docs/customizer/tutorials/optimize-throughput.mdx#L208-L245: provide CLI alternatives for secret and Hugging Face FileSet creation.docs/customizer/tutorials/sft-customization-job.mdx#L273-L318: provide CLI alternatives for conditional authentication and FileSet creation.As per coding guidelines, “Provide both Python SDK and CLI examples in tab-sets for consistency and to support multiple user workflows.”
🤖 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 `@docs/customizer/tutorials/optimize-throughput.mdx` around lines 208 - 245, Add tab-set alternatives at docs/customizer/tutorials/optimize-throughput.mdx lines 208-245 for the Hugging Face and optional NGC secret creation plus Hugging Face FileSet creation, retaining the existing Python SDK examples and adding equivalent CLI commands. Also update docs/customizer/tutorials/sft-customization-job.mdx lines 273-318 with CLI tabs for conditional authentication and FileSet creation, ensuring both tutorials consistently provide Python and CLI workflows.Source: Coding guidelines
docs/customizer/tutorials/distillation-customization-job.mdx (1)
421-474: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy liftAdd a CLI alternative for this workflow.
This updated deployment path is Python-only. Add equivalent CLI commands in a Fern tab set for creation, readiness checks, and cleanup.
As per coding guidelines, “Provide both Python SDK and CLI examples in tab-sets for consistency and to support multiple user workflows.”
🤖 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 `@docs/customizer/tutorials/distillation-customization-job.mdx` around lines 421 - 474, Add a Fern CLI tab set alongside the Python deployment workflow covering deployment creation, polling until the deployment and gateway are READY, and cleanup on readiness failure. Use CLI equivalents for the existing symbols and operations—BASELINE_DEPLOYMENT_NAME, BASELINE_DEPLOYMENT_CONFIG, deployment retrieval/deletion, and status waits—while preserving the same timeout, failure-status handling, and GPU cleanup behavior.Source: Coding guidelines
🤖 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/customizer/about.mdx`:
- Around line 239-263: Append a “Next Steps” section after the Parallelism
content in docs/customizer/about.mdx at lines 239-263, linking to the training
configuration and customization tutorials. Also append a “Next Steps” section
after the result comparisons in
docs/customizer/tutorials/optimize-throughput.mdx at lines 814-819, linking to
metrics and related customization tutorials.
In `@docs/customizer/tutorials/sft-customization-job.ipynb`:
- Around line 361-368: Update the notebook’s default model flow so the gated
meta-llama/Llama-3.2-1B-Instruct path requires HF_TOKEN: fail fast before
creating the job when HF_TOKEN is absent, ensuring token_secret is always
provided. Alternatively, change the default model to a public model and keep the
optional-token behavior consistent with that choice.
In `@docs/customizer/tutorials/sft-customization-job.mdx`:
- Around line 273-280: Update the HF_TOKEN handling around create_or_get_secret
so the tutorial’s default gated Llama model cannot proceed without a
token_secret. Require HF_TOKEN and fail clearly when it is unset, or change the
documented default model to an explicitly public model before retaining the
optional-secret path.
In `@docs/fern/scripts/validate-notebook-viewer.mjs`:
- Around line 67-68: Update the validation flow around the imported and
registered name collection to detect every imported notebook absent from the
registry and fail explicitly before artifact checks. Keep the registry-derived
names for subsequent validation, but do not use a union that allows unregistered
imports to pass.
---
Outside diff comments:
In `@docs/customizer/tutorials/distillation-customization-job.mdx`:
- Around line 421-474: Add a Fern CLI tab set alongside the Python deployment
workflow covering deployment creation, polling until the deployment and gateway
are READY, and cleanup on readiness failure. Use CLI equivalents for the
existing symbols and operations—BASELINE_DEPLOYMENT_NAME,
BASELINE_DEPLOYMENT_CONFIG, deployment retrieval/deletion, and status
waits—while preserving the same timeout, failure-status handling, and GPU
cleanup behavior.
In `@docs/customizer/tutorials/optimize-throughput.mdx`:
- Around line 208-245: Add tab-set alternatives at
docs/customizer/tutorials/optimize-throughput.mdx lines 208-245 for the Hugging
Face and optional NGC secret creation plus Hugging Face FileSet creation,
retaining the existing Python SDK examples and adding equivalent CLI commands.
Also update docs/customizer/tutorials/sft-customization-job.mdx lines 273-318
with CLI tabs for conditional authentication and FileSet creation, ensuring both
tutorials consistently provide Python and CLI workflows.
🪄 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: 6e0114cb-6c5f-4947-82d0-1104e304f30e
📒 Files selected for processing (67)
docs/AGENTS.mddocs/customizer/about.mdxdocs/customizer/index.mdxdocs/customizer/manage-customization-jobs/create-job.mdxdocs/customizer/manage-customization-jobs/get-job-status.mdxdocs/customizer/manage-customization-jobs/hyperparameters.mdxdocs/customizer/manage-customization-jobs/index.mdxdocs/customizer/manage-customization-jobs/list-active-jobs.mdxdocs/customizer/manage-model-entities/create-fileset.mdxdocs/customizer/manage-model-entities/create-model-entity.mdxdocs/customizer/manage-model-entities/index.mdxdocs/customizer/models/data-format.mdxdocs/customizer/models/embedding.mdxdocs/customizer/models/gpt-oss.mdxdocs/customizer/models/index.mdxdocs/customizer/models/llama-nemotron.mdxdocs/customizer/models/llama.mdxdocs/customizer/models/mistral.mdxdocs/customizer/models/phi.mdxdocs/customizer/models/qwen.mdxdocs/customizer/tutorials/_snippets/output/chat-basic-format-example.jsonldocs/customizer/tutorials/_snippets/output/chat-expanded-format-example.jsondocs/customizer/tutorials/_snippets/output/chat-thinking-off-example.jsonldocs/customizer/tutorials/_snippets/output/chat-thinking-on-example.jsonldocs/customizer/tutorials/_snippets/output/chat-tool-calling-basic-example.jsonldocs/customizer/tutorials/_snippets/output/chat-tool-calling-expanded-example.jsondocs/customizer/tutorials/_snippets/output/completion-format-example.jsonldocs/customizer/tutorials/_snippets/output/config-list-example.jsondocs/customizer/tutorials/_snippets/output/job-creation-response.jsondocs/customizer/tutorials/_snippets/output/lora-hyperparameters-example.jsondocs/customizer/tutorials/_snippets/output/lora-training-data-example.jsonldocs/customizer/tutorials/_snippets/output/version-error-example.jsondocs/customizer/tutorials/distillation-customization-job.ipynbdocs/customizer/tutorials/distillation-customization-job.mdxdocs/customizer/tutorials/dpo-customization-job.ipynbdocs/customizer/tutorials/embedding-customization-job.ipynbdocs/customizer/tutorials/embedding-customization-job.mdxdocs/customizer/tutorials/format-training-dataset.mdxdocs/customizer/tutorials/import-hf-model.mdxdocs/customizer/tutorials/lora-customization-job.ipynbdocs/customizer/tutorials/lora-customization-job.mdxdocs/customizer/tutorials/metrics.mdxdocs/customizer/tutorials/optimize-throughput.ipynbdocs/customizer/tutorials/optimize-throughput.mdxdocs/customizer/tutorials/sft-customization-job.ipynbdocs/customizer/tutorials/sft-customization-job.mdxdocs/customizer/tutorials/understand-configurations-and-models.mdxdocs/fern/README.mddocs/fern/components/notebooks/distillation-customization-job.jsondocs/fern/components/notebooks/distillation-customization-job.tsdocs/fern/components/notebooks/dpo-customization-job.jsondocs/fern/components/notebooks/dpo-customization-job.tsdocs/fern/components/notebooks/embedding-customization-job.jsondocs/fern/components/notebooks/embedding-customization-job.tsdocs/fern/components/notebooks/lora-customization-job.jsondocs/fern/components/notebooks/lora-customization-job.tsdocs/fern/components/notebooks/optimize-throughput.jsondocs/fern/components/notebooks/optimize-throughput.tsdocs/fern/components/notebooks/sft-customization-job.jsondocs/fern/components/notebooks/sft-customization-job.tsdocs/fern/package.jsondocs/fern/scripts/README.mddocs/fern/scripts/ipynb-to-mdx.pydocs/fern/scripts/validate-notebook-viewer.mjsdocs/requirements.mdxdocs/support-matrix.mdxdocs/troubleshooting/customizer.mdx
💤 Files with no reviewable changes (12)
- docs/customizer/tutorials/_snippets/output/chat-thinking-off-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-expanded-format-example.json
- docs/customizer/tutorials/_snippets/output/completion-format-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-tool-calling-basic-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-basic-format-example.jsonl
- docs/customizer/tutorials/_snippets/output/lora-training-data-example.jsonl
- docs/customizer/tutorials/_snippets/output/version-error-example.json
- docs/customizer/tutorials/_snippets/output/chat-thinking-on-example.jsonl
- docs/customizer/tutorials/_snippets/output/chat-tool-calling-expanded-example.json
- docs/customizer/tutorials/_snippets/output/config-list-example.json
- docs/customizer/tutorials/_snippets/output/lora-hyperparameters-example.json
- docs/customizer/tutorials/_snippets/output/job-creation-response.json
🚧 Files skipped from review as they are similar to previous changes (42)
- docs/customizer/models/mistral.mdx
- docs/requirements.mdx
- docs/customizer/models/qwen.mdx
- docs/customizer/manage-customization-jobs/get-job-status.mdx
- docs/fern/scripts/README.md
- docs/customizer/models/phi.mdx
- docs/fern/package.json
- docs/customizer/models/llama.mdx
- docs/customizer/manage-model-entities/index.mdx
- docs/customizer/manage-customization-jobs/index.mdx
- docs/customizer/manage-model-entities/create-model-entity.mdx
- docs/customizer/tutorials/metrics.mdx
- docs/customizer/models/llama-nemotron.mdx
- docs/fern/scripts/ipynb-to-mdx.py
- docs/troubleshooting/customizer.mdx
- docs/fern/README.md
- docs/customizer/index.mdx
- docs/customizer/manage-customization-jobs/list-active-jobs.mdx
- docs/fern/components/notebooks/lora-customization-job.ts
- docs/customizer/models/embedding.mdx
- docs/customizer/tutorials/lora-customization-job.ipynb
- docs/customizer/models/index.mdx
- docs/fern/components/notebooks/lora-customization-job.json
- docs/customizer/tutorials/format-training-dataset.mdx
- docs/customizer/models/data-format.mdx
- docs/fern/components/notebooks/sft-customization-job.ts
- docs/fern/components/notebooks/distillation-customization-job.ts
- docs/customizer/tutorials/embedding-customization-job.mdx
- docs/customizer/tutorials/lora-customization-job.mdx
- docs/fern/components/notebooks/dpo-customization-job.json
- docs/fern/components/notebooks/dpo-customization-job.ts
- docs/customizer/tutorials/optimize-throughput.ipynb
- docs/customizer/tutorials/dpo-customization-job.ipynb
- docs/customizer/tutorials/import-hf-model.mdx
- docs/fern/components/notebooks/sft-customization-job.json
- docs/customizer/tutorials/embedding-customization-job.ipynb
- docs/fern/components/notebooks/distillation-customization-job.json
- docs/customizer/tutorials/understand-configurations-and-models.mdx
- docs/fern/components/notebooks/optimize-throughput.ts
- docs/customizer/manage-customization-jobs/hyperparameters.mdx
- docs/fern/components/notebooks/optimize-throughput.json
- docs/fern/components/notebooks/embedding-customization-job.json
Signed-off-by: Sam Oluwalana <[email protected]>
Signed-off-by: Sam Oluwalana <[email protected]>
Resolve accumulated Customizer documentation drift across API examples, tutorials, model references, and Fern rendering.
Summary by CodeRabbit
train_loss.