Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
61c1299
feat: plugin-contributed authorization policy merge
soluwalana Jun 3, 2026
6397f68
feat: add customizer as a plugin - AIRCORE-350
soluwalana May 21, 2026
e0232ed
feat(customizer): add unsloth backend plugin
anubhutivyas Jun 3, 2026
94139ba
Cleanup and PR comment addressing
soluwalana Jun 3, 2026
bb8e004
Merge branch 'main' into aircore-350/solu
soluwalana Jun 9, 2026
8cad0d8
fix accidental changes
soluwalana Jun 9, 2026
6e85594
lint fix
soluwalana Jun 9, 2026
c125210
Merge branch 'main' into aircore-350/solu
soluwalana Jun 9, 2026
1a61dd5
get_qualified_image moved
soluwalana Jun 9, 2026
4429178
Fix startup for e2e tests
soluwalana Jun 9, 2026
9a1eae6
Don't leak devops configurations
soluwalana Jun 9, 2026
80c6d18
Merge branch 'main' into aircore-350/solu
soluwalana Jun 9, 2026
4a5b4b3
everything is fine
soluwalana Jun 9, 2026
aa78f7a
wait_for_model_entity() is conflating IGW model entity cache and viru…
soluwalana Jun 9, 2026
f97e64a
Resolve discrepancy between unsloth and automodel metric reporting
soluwalana Jun 9, 2026
19a8cc0
Merge remote-tracking branch 'origin/main' into aircore-350/solu
soluwalana Jun 9, 2026
f913c7d
Merge branch 'main' into aircore-350/solu
soluwalana Jun 9, 2026
38c6c56
test fixes
soluwalana Jun 9, 2026
febff03
Merge branch 'main' into aircore-350/solu
soluwalana Jun 9, 2026
666c1d9
PR Comment fixes
soluwalana Jun 9, 2026
246d537
Try to resolve flaky IGW test only occurring under xdist
soluwalana Jun 9, 2026
524bb50
Merge remote-tracking branch 'origin/main' into aircore-350/solu
soluwalana Jun 9, 2026
697777c
Fix tests
soluwalana Jun 10, 2026
bcf7131
Fix tests
soluwalana Jun 10, 2026
421834f
Merge branch 'main' into aircore-350/solu
soluwalana Jun 10, 2026
2324ada
Remove unused bake variable, pin unsloth
soluwalana Jun 10, 2026
3641f60
Merge branch 'main' into aircore-350/solu
soluwalana Jun 10, 2026
2263669
Merge remote-tracking branch 'origin/main' into aircore-350/solu
soluwalana Jun 10, 2026
f162ed1
Fix missing mkdocs.yaml in dockerfile
soluwalana Jun 10, 2026
77f136f
Merge remote-tracking branch 'origin/main' into aircore-350/solu
soluwalana Jun 10, 2026
bc100df
update platform-workspace comments after Fern docs migration
soluwalana Jun 10, 2026
347ef2a
Merge remote-tracking branch 'origin/main' into aircore-350/solu
soluwalana Jun 10, 2026
252098d
Resolve python type merge conflict with VLLM PR
soluwalana Jun 10, 2026
f8d2616
Allow lint-fix to report on whether the fix was successful afterwards…
soluwalana Jun 10, 2026
977a431
Merge branch 'main' into aircore-350/solu
soluwalana Jun 10, 2026
8f8cc09
lint fix
soluwalana Jun 10, 2026
b12824d
Merge branch 'main' into aircore-350/solu
soluwalana Jun 10, 2026
cd32dfe
Remove type hint fixes
soluwalana Jun 10, 2026
6a9b1ca
Address Aaron's comments:
soluwalana Jun 10, 2026
58133e2
Update test cases to supply required sdk contributions
soluwalana Jun 10, 2026
e4b0ad6
Merge branch 'main' into aircore-350/solu
soluwalana Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 1 addition & 2 deletions .cursor/rules/nemo-platform.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,8 @@ User-facing skills in `packages/nemo_platform_ext/src/nemo_platform_ext/skills/`
- `nemo-try-agent`: test a deployed agent or chat with a model.
- `nemo-status`: read-only health dashboard. Run this before assuming the platform is up.
- `nemo-teardown`: guided shutdown with confirmation.
- `nemo-fine-tune`: fine-tuning. Not yet available; the skill tells the user this honestly instead of letting you improvise.

Plugin-owned skills under `plugins/*/src/*/skills/` handle their own routing for guardrails, evaluations, optimization, data designer, anonymizer, and auditor.
Plugin-owned skills under `plugins/*/src/*/skills/` handle their own routing for customization, guardrails, evaluations, optimization, data designer, anonymizer, and auditor.
Comment thread
a2bondar marked this conversation as resolved.

## Sandboxed environments

Expand Down
1 change: 0 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ docker-bake.hcl
.venv
.ruff_cache
Dockerfile.bake
services/customizer/tests
**/Dockerfile*
.dockerignore
**/__pycache__
Expand Down
44 changes: 0 additions & 44 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -36,50 +36,6 @@ third_party/requirements*.txt linguist-generated
docker/locks/**/uv.lock linguist-generated
documentation/docs/audit/_snippets/output/*.jsonl filter=lfs diff=lfs merge=lfs -text
documentation/docs/generate-synthetic-data/images/* filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/workbench/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/comp_coding/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/instruction_following/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/multineedle/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/python_math_exec/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/mcqa/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/comp_coding/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/google_search/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/google_search/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/instruction_following/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/library_judge_math/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/library_judge_math/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/multiverse_math_hard/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/workbench/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/mcqa/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/multineedle/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/multiverse_math_hard/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/grpo/python_math_exec/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/tasks/file_io/data/files_to_upload/nested_2/__0_0.distcp filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/python/training/nemo/data/mp_rank_00_customization.nemo filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/python/training/nemo/data/customization.nemo filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/python/training/nemo/data/gpt2b_tp1_lora.nemo filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/python/training/nemo/data/gpt8b_tp4_lora.nemo filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/python/training/nemo/data/expected_llmservice_peft_lora/model_weights.ckpt filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/python/training/nemo/data/expected_llmservice_peft_lora_tp4/model_weights.ckpt filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/python/data/gpt_126m.nemo filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/e2e-eval/email-composition-train/training/training_file.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/e2e-eval/email-composition-train/validation/validation_file.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/e2e-eval/email-composition-eval/email_eval_ms_test.json filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/e2e-eval/email-composition-eval/email_eval_ms_test_sft.json filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/gpt-sft-chat-dataset/e21a501b3cc14174835d787ced1583e2_tokenizer.model filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/gpt-sft-chat-dataset/llama2_tokenizer.model filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/gpt-sft-chat-dataset/merges.txt filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/gpt-sft-chat-dataset/tokenizer.model filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/gpt-sft-chat-dataset/vocab.json filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/e2e-eval/email-composition-convo/training/training_file.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/e2e-eval/email-composition-convo/validation/validation_file.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/tool-calling/xlam_openai_format.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/tool-calling/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/tool-calling/validation.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/tool-calling/testing.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/embedding/training/training.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/embedding/testing.jsonl filter=lfs diff=lfs merge=lfs -text
services/customizer/tests/testdata/embedding/validation/validation.jsonl filter=lfs diff=lfs merge=lfs -text
# Files maintained by external garak project
packages/garak_api/garakapi/_config.py linguist-generated
packages/garak_api/garakapi/_plugins.py linguist-generated
Expand Down
3 changes: 3 additions & 0 deletions .github/trufflehog-exclude.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Newline-separated regexes for paths TruffleHog should skip.
# uv.lock contains many sha256 hex digests that false-positive as SentryToken.
uv\.lock
1 change: 1 addition & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,7 @@ jobs:
env:
PYTHON_VERSION: ${{ matrix.python-version }}
NMP_DATA_DIR: ${{ runner.temp }}/nemo-data
NMP_AUTH_ENABLED: "false"
_TYPER_FORCE_DISABLE_TERMINAL: "1"
run: |
set -euo pipefail
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/security.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ jobs:
with:
path: ./
version: 3.95.3
extra_args: --exclude-paths=.github/trufflehog-exclude.txt

- name: Scan Results Status
if: ${{ github.event_name != 'merge_group' && steps.trufflehog.outcome == 'failure' }}
Expand Down
1 change: 0 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ repos:
packages/nmp_common/src/nmp_common/api/.*|

# Individual microservices
services/customizer/src/customizer/api/v1/.*|
services/evaluator/src/evaluator/api/.*|
services/guardrails/src/guardrails/api/.*|
services/core/infrastructure/jobs/src/jobs/api/.*|
Expand Down
3 changes: 1 addition & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,8 @@ User-facing skills in `packages/nemo_platform_ext/src/nemo_platform_ext/skills/`
- `nemo-try-agent`: test a deployed agent or chat with a model.
- `nemo-status`: read-only health dashboard.
- `nemo-teardown`: guided shutdown with confirmation.
- `nemo-fine-tune`: fine-tuning. Not yet available; the skill tells the user it's not shipped instead of improvising with another training library.

Plugin-owned skills under `plugins/*/src/*/skills/` handle guardrails, evaluations, optimization, data designer, anonymizer, and auditor.
Plugin-owned skills under `plugins/*/src/*/skills/` handle their own routing for customization, guardrails, evaluations, optimization, data designer, anonymizer, and auditor.

### Working in a sandboxed environment

Expand Down
3 changes: 1 addition & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,8 @@ User-facing skills in `packages/nemo_platform_ext/src/nemo_platform_ext/skills/`
- `nemo-try-agent`: test a deployed agent or chat with a model.
- `nemo-status`: read-only health dashboard. Run this before assuming the platform is up.
- `nemo-teardown`: guided shutdown with confirmation.
- `nemo-fine-tune`: fine-tuning. Not yet available; the skill tells the user it's not shipped instead of letting the agent improvise with another training library.

Plugin-owned skills live under `plugins/*/src/*/skills/` and handle their own routing for guardrails, evaluations, optimization, data designer, anonymizer, and auditor.
Plugin-owned skills live under `plugins/*/src/*/skills/` and handle their own routing for customization, guardrails, evaluations, optimization, data designer, anonymizer, and auditor.

### Working in a sandboxed coding-agent environment

Expand Down
14 changes: 8 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -228,9 +228,11 @@ check-copyright-headers:
lint: ## Run all linters (licenses, openapi, config docs, python style/types/sdk, vendored SDK, CLI, auth config)
bash tools/lint/lint-all.sh

LINT_FIX_VERIFY ?= 0

.PHONY: lint-fix
lint-fix: ## Auto-fix lint issues in dependency order (openapi → stainless → style → cli → vendor → licenses → config-docs)
bash tools/lint/lint-fix.sh
lint-fix: ## Auto-fix lint issues (set LINT_FIX_VERIFY=1 to also run CI lint checks)
LINT_FIX_VERIFY=$(LINT_FIX_VERIFY) bash tools/lint/lint-fix.sh

.PHONY: vendor
vendor: ## Vendor packages into the SDK and generate wrapper metadata
Expand Down Expand Up @@ -477,10 +479,10 @@ test-e2e-kubernetes-gpu: ## Run GPU e2e tests against Kubernetes (requires GPU n
@echo "Running GPU e2e tests with Kubernetes with feature gpu enabled..."
uv run --frozen pytest e2e --kubernetes --feature gpu -v --junitxml=report-kubernetes-gpu.xml

.PHONY: test-e2e-kubernetes-gpu-customizer
test-e2e-kubernetes-gpu-customizer: ## Run GPU customizer e2e tests against Kubernetes (requires GPU nodes; set NMP_E2E_CLUSTER_URL)
@echo "Running GPU customizer e2e tests with Kubernetes..."
uv run --frozen pytest e2e/test_customizer.py --kubernetes --feature gpu --feature customizer --log-cli-level=INFO -v --junitxml=report-kubernetes-gpu-customizer.xml
.PHONY: test-e2e-kubernetes-gpu-automodel
test-e2e-kubernetes-gpu-automodel: ## Run GPU automodel customization e2e tests against Kubernetes (requires GPU nodes; set NMP_E2E_CLUSTER_URL)
@echo "Running GPU automodel customization e2e tests with Kubernetes..."
uv run --frozen pytest tests/agentic-use/customizer-lora-job-cli/tests/test_outputs.py --kubernetes --feature gpu --log-cli-level=INFO -v --junitxml=report-kubernetes-gpu-automodel.xml

.PHONY: benchmark-guardrails
benchmark-guardrails: ## Run nemo-guardrails IGW benchmark sweep (set BENCHMARK_ARGS for extra flags)
Expand Down
5 changes: 2 additions & 3 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,9 +212,8 @@ def pytest_collection_modifyitems(config, items):
"unit",
"e2e",
"smoke_gpu_tasks",
"smoke_customizer_tasks",
"smoke_customizer_automodel",
"smoke_customizer_rl",
"smoke_nmp_automodel_tasks",
"smoke_nmp_automodel_training",
"integration",
"regression",
"canary",
Expand Down
Loading
Loading