Skip to content

Commit bd83f9b

Browse files
pilgd-awskrokoko
andauthored
feat(sagemaker-ai): update skills and bump version to 1.1.0 (#144)
SageMakerAIAgentSkills (mainline ee2105d): - finetuning: add continuous customization reference, EULA fixes, RLVR notebook UX improvements - finetuning-setup: add benchmark-based model selection + 8 benchmark references + model-licenses - model-evaluation: add custom scorer workflow, reward function creation, MLflow support; rename notebook_cells.py -> llmaaj_evaluator.py; add nova/oss reward function templates - model-deployment: EULA and deploy script fixes, model-licenses reference - dataset-transformation: notebook structure/writing guide updates - planning: scope activation to SageMaker model customization domain X-AI-Prompt: Sync SageMakerAIAgentSkills mainline into awslabs/agent-plugins sagemaker-ai plugin and bump version to 1.1.0 X-AI-Tool: Kiro CLI Co-authored-by: Alain Krok <alkrok@amazon.com>
1 parent 83c1771 commit bd83f9b

51 files changed

Lines changed: 2503 additions & 428 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@
161161
"name": "sagemaker-ai",
162162
"source": "./plugins/sagemaker-ai",
163163
"tags": ["aws", "sagemaker", "machine-learning", "generative-ai"],
164-
"version": "1.0.0"
164+
"version": "1.1.0"
165165
}
166166
]
167167
}

plugins/sagemaker-ai/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@
1818
"license": "Apache-2.0",
1919
"name": "sagemaker-ai",
2020
"repository": "https://github.com/awslabs/agent-plugins",
21-
"version": "1.0.0"
21+
"version": "1.1.0"
2222
}

plugins/sagemaker-ai/.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sagemaker-ai",
3-
"version": "1.0.0",
3+
"version": "1.1.0",
44
"description": "Build, train, and deploy AI models with deep AWS AI/ML expertise brought directly into your coding assistants, covering the surface area of Amazon SageMaker AI.",
55
"author": {
66
"name": "Amazon Web Services",

plugins/sagemaker-ai/skills/dataset-transformation/SKILL.md

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@ Transforms a data set provided by the user into their desired format. All transf
2222
3. **Don't read files until you need them.** Only read reference files when you've reached the workflow step that requires them and the user has confirmed the direction. Never read ahead.
2323
4. **No narration.** Don't explain what you're about to do or what you just did. Share outcomes and ask questions. Keep responses short and focused.
2424
5. **No repetition.** If you said something before a tool call, don't repeat it after. Only share new information.
25-
6. **Do not deviate from the Workflow.** The steps listed in the workflow should be followed exactly as described. Progress from Step 1 to Step 10 to complete the task. Do not deviate from the workflow!
25+
6. **Do not deviate from the Workflow.** The steps listed in the workflow should be followed exactly as described. Progress from Step 1 to Step 11 to complete the task. Do not deviate from the workflow!
2626
7. **Always end with a question.** Whenever you pause for user input, acknowledgment, or feedback, your response must end with a question. Never leave the user with a statement and expect them to know they need to respond.
27-
8. **Never overwrite existing files — append instead.** If a target notebook already exists, do NOT overwrite it. Append new cells to the existing file. Notify the user that the file already exists and that you will be appending to it.
28-
9. **Avoid filename collisions.** When creating a new file, check if a file with the same name already exists. If it does, rename the new file by appending a numeric suffix (e.g., `transform_dataset_2.ipynb`) before writing.
29-
10. **Default output format is JSONL.** Unless the user explicitly requests a different file format, the transformed dataset should be written as `.jsonl` (JSON Lines — one JSON object per line).
27+
8. **Default output format is JSONL.** Unless the user explicitly requests a different file format, the transformed dataset should be written as `.jsonl` (JSON Lines — one JSON object per line).
3028

3129
## Known Dataset Formats Reference
3230

@@ -142,7 +140,18 @@ Continue iterating with the user's feedback — update the notebook cell in plac
142140

143141
⏸ Wait for user.
144142

145-
### Step 8: Generate the execution cells in the notebook
143+
### Step 8: Determine notebook target
144+
145+
Check if the project notebook already exists at `<project-dir>/notebooks/<project-name>.ipynb`.
146+
147+
- If it exists → ask: _"Would you like me to append the transformation cells to the existing notebook, or create a new one?"_
148+
- If it doesn't exist → create it
149+
150+
When appending, add a markdown header cell `## Dataset Transformation` as a section divider before the new cells.
151+
152+
⏸ Wait for user.
153+
154+
### Step 9: Generate the execution cells in the notebook
146155

147156
**Before writing the notebook, read:**
148157

@@ -168,7 +177,7 @@ Read the reference guide at `references/dataset_transformation_code.md` and foll
168177

169178
⏸ Wait for user.
170179

171-
### Step 9: Determine and confirm execution mode
180+
### Step 10: Determine and confirm execution mode
172181

173182
Check the size of the input dataset:
174183

@@ -198,20 +207,20 @@ Do not execute until the user approves. If the user rejects the recommendation,
198207

199208
If local execution:
200209

201-
- Add a cell that runs the transformation by importing from the `.py` files already on disk (written by the agent during Steps 7–8): import `transform_dataset` from `transform_fn`, load the dataset, transform, and save output. Scripts are located in `<project-dir>/scripts/`.
210+
- Add a cell that runs the transformation by importing from the `.py` files already on disk (written by the agent during Steps 7 and 9): import `transform_dataset` from `transform_fn`, load the dataset, transform, and save output. Scripts are located in `<project-dir>/scripts/`.
202211

203212
If SageMaker Processing Job:
204213

205214
- Add a cell that submits and monitors the Processing Job inline using the V3 SageMaker SDK directly (FrameworkProcessor, ProcessingInput, ProcessingOutput, etc.). Create a FrameworkProcessor with the SKLearn 1.2-1 image, configure inputs/outputs, and call `processor.run(wait=True, logs=True)` to block the cell and stream logs until the job completes. See `scripts/transformation_tools.py` for reference implementation details.
206215
- Inform the user they can run this cell to kick off and monitor the job.
207216

208-
**Important:** The agent must NOT execute the full dataset transformation itself. The notebook cells are generated for the user to review and run. Only sample data (from Steps 7–8) should be transformed by the agent for validation purposes.
217+
**Important:** The agent must NOT execute the full dataset transformation itself. The notebook cells are generated for the user to review and run. Only sample data (from Steps 7 and 9) should be transformed by the agent for validation purposes.
209218

210219
> "I've added the execution cell to the notebook. You can run it to transform the full dataset. Would you like to review the notebook before running it?"
211220
212221
⏸ Wait for user.
213222

214-
### Step 10: Verify and confirm with the user
223+
### Step 11: Verify and confirm with the user
215224

216225
For this step, you need: **to verify the output looks correct and confirm with the user.**
217226

plugins/sagemaker-ai/skills/dataset-transformation/references/notebook_structure.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Each line of code is a separate string in `source`, ending with `\n` (except the
4141
- Escape quotes inside strings: `\"`
4242
- No trailing commas in arrays or objects
4343
- 2-space indentation
44-
- Use `fs_write` with `command: create` to write the complete notebook JSON
44+
- Write notebooks using your standard file write tool to create the `.ipynb` file with the complete notebook JSON, OR use notebook MCP tools (e.g., `create_notebook`, `add_cell`) if available in the current environment
45+
- **DON'T** use bash commands, shell scripts, or `echo`/`cat` piping to generate notebooks
4546
- Markdown cell 0: `"cell_type": "markdown"`, no `execution_count` or `outputs`
4647
- Wrap all cells in `{"cells": [...], "metadata": {...}, "nbformat": 4, "nbformat_minor": 4}`

plugins/sagemaker-ai/skills/dataset-transformation/references/notebook_writing_guide.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ But in a Jupyter notebook, each line must be a separate string in a JSON array:
2626
}
2727
```
2828

29-
## The Solution: Use fs_write with JSON Structure
30-
31-
**ALWAYS use the `fs_write` tool with `command: create` to write notebooks.**
29+
## The Solution: Write as JSON Structure
3230

3331
### Correct Notebook Structure (Pretty-Print Format)
3432

@@ -82,7 +80,7 @@ Use **2-space indentation** (pretty-print format) for consistent, readable forma
8280
**DON'T** forget to escape quotes in strings
8381
**DON'T** add trailing commas to last array elements
8482

85-
**DO** use fs_write with the complete JSON structure
83+
**DO** use your standard file write tool to write the complete notebook JSON, or notebook MCP tools (e.g., `create_notebook`, `add_cell`) if available
8684
**DO** add `\n` to end of each line in source arrays
8785
**DO** validate JSON structure before writing
8886
**DO** use proper escaping for special characters

plugins/sagemaker-ai/skills/directory-management/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ When working with the agent, all generated files are organized under an project
3030
├── scripts/ # Generated Python scripts
3131
│ ├── <project-name>_transform_fn.py
3232
└── notebooks/ # Generated Jupyter notebooks
33-
├── <project-name>_training.ipynb
33+
├── <project-name>.ipynb
3434
```

plugins/sagemaker-ai/skills/finetuning-setup/SKILL.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,12 @@ Guides the user through selecting a base model and fine-tuning technique based o
4040

4141
### Step 2: Select Base Model
4242

43-
1. Read `use_case_spec.md` to understand the use case and success criteria.
44-
2. Restate the use case in one sentence.
45-
3. Always retrieve the full list of available SageMaker Hub model names by running: `python finetuning-setup/scripts/get_model_names.py <hub-name>` — even if the user has already mentioned a model name or family. Do not skip this step or filter the results.
46-
4. Present all available models to the user, grouped by model family (e.g., Llama, Mistral, Gemma) for readability.
47-
5. Ask the user to pick the exact model ID from the list.
48-
6. Validate the selected model exists in the retrieved list before proceeding.
43+
First, retrieve all available SageMaker Hub model names by running: `python finetuning-setup/scripts/get_model_names.py <hub-name>`.
4944

50-
EXTREMELY IMPORTANT: NEVER recommend or suggest any particular model based on the context you have. YOU ARE ALLOWED ONLY to display the list of models
51-
as given by the script. DO NOT add your own recommendation or suggestion after displaying the list of models to tell which model is correct. Present this
52-
statement to the user: "Which model would you like to use? Please type the exact model name from the above list." and allow the user to select the model.
45+
Present all available models to the user with their licenses before making any recommendations. Cross-reference the model list with `references/model-licenses.md` and display each as `<model name> - [<license>](<url>)`. For example: "Qwen3-4B - [Apache 2.0](https://huggingface.co/Qwen/Qwen3-4B/blob/main/LICENSE)"
46+
47+
If you already know the model the user wants to use (from conversation context or planning files), confirm that it's in the list, display its license, and move on. Otherwise, help the user pick a model following the instructions in `references/model-selection.md`.
48+
**Important:** Make sure to remember this list of available models when helping with model selection. Don't recommend a model that's not available to the user.
5349

5450
### Step 3: Determine Finetuning Technique
5551

@@ -72,4 +68,6 @@ Here's what we've selected:
7268

7369
## References
7470

71+
- `references/model-selection.md` — Model selection instructions and benchmark descriptions
7572
- `references/finetune_technique_selection_guide.md` — Technique guidance
73+
- `references/model-licenses.md` — Model license information for display during model selection
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Agentic Index
2+
3+
AA's composite agentic score: GDPval-AA (real-world tasks, 44 occupations) + τ²-bench Telecom.
4+
5+
**Use this for:** Autonomous agents, workflow automation, tool-using assistants.
6+
7+
**Source:** Artificial Analysis (artificialanalysis.ai), April 2026.
8+
"—" = no data — infer from similar models in the same family, but tell the user you're inferring.
9+
10+
| # | Model | Family | Score |
11+
| -- | ----------------------------------- | ----------- | ----- |
12+
| 1 | GPT-OSS 120B (mode: high) | OpenAI | 37.9 |
13+
| 2 | Nova 2.0 Lite (mode: high) | Amazon Nova | 37.3 |
14+
| 3 | Nova 2.0 Lite (mode: medium) | Amazon Nova | 32.9 |
15+
| 4 | GPT-OSS 120B (mode: low) | OpenAI | 28.0 |
16+
| 5 | Nova 2.0 Lite (mode: low) | Amazon Nova | 27.8 |
17+
| 6 | GPT-OSS 20B (mode: high) | OpenAI | 27.6 |
18+
| 7 | GPT-OSS 20B (mode: low) | OpenAI | 21.9 |
19+
| 8 | Nova 2.0 Lite (mode: non-reasoning) | Amazon Nova | 21.1 |
20+
| 9 | Qwen3 14B (mode: reasoning) | Qwen | 14.4 |
21+
| 10 | Qwen3 14B (mode: non-reasoning) | Qwen | 13.6 |
22+
| 11 | Qwen3 32B (mode: reasoning) | Qwen | 13.4 |
23+
| 12 | Qwen3 8B (mode: reasoning) | Qwen | 12.6 |
24+
| 13 | Qwen3 8B (mode: non-reasoning) | Qwen | 11.6 |
25+
| 14 | Llama 3.3 70B Instruct | Meta Llama | 9.1 |
26+
| 15 | Qwen3 1.7B (mode: reasoning) | Qwen | 8.7 |
27+
| 16 | Qwen3 1.7B (mode: non-reasoning) | Qwen | 7.2 |
28+
| 17 | Qwen3 0.6B (mode: reasoning) | Qwen | 7.0 |
29+
| 18 | Nova Lite | Amazon Nova | 5.8 |
30+
| 19 | Llama 3.1 8B Instruct | Meta Llama | 5.5 |
31+
| 20 | Llama 4 Scout 17B | Meta Llama | 5.2 |
32+
| 21 | Qwen3 0.6B (mode: non-reasoning) | Qwen | 4.9 |
33+
| 22 | Nova Pro | Amazon Nova | 4.7 |
34+
| 23 | Nova Micro | Amazon Nova | 4.7 |
35+
| 24 | Llama 3.2 1B Instruct | Meta Llama | 0.0 |
36+
|| Llama 3.2 3B Instruct | Meta Llama ||
37+
|| Qwen3 32B (mode: non-reasoning) | Qwen ||
38+
|| Qwen3 4B (mode: reasoning) | Qwen ||
39+
|| Qwen3 4B (mode: non-reasoning) | Qwen ||
40+
|| Qwen2.5 72B Instruct | Qwen ||
41+
|| Qwen2.5 32B Instruct | Qwen ||
42+
|| DeepSeek R1 Distill Llama 70B | DeepSeek ||
43+
|| DeepSeek R1 Distill Llama 8B | DeepSeek ||
44+
|| DeepSeek R1 Distill Qwen 32B | DeepSeek ||
45+
|| DeepSeek R1 Distill Qwen 14B | DeepSeek ||
46+
|| DeepSeek R1 Distill Qwen 1.5B | DeepSeek ||
47+
|| Qwen2.5 14B Instruct | Qwen ||
48+
|| Qwen2.5 7B Instruct | Qwen ||
49+
|| DeepSeek R1 Distill Qwen 7B | DeepSeek ||
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Coding Index
2+
3+
AA's composite coding score: Terminal-Bench Hard (agentic SWE/sysadmin) + SciCode (scientific programming).
4+
5+
**Use this for:** Software engineering, scientific computing, system administration, code-heavy tasks.
6+
7+
**Source:** Artificial Analysis (artificialanalysis.ai), April 2026.
8+
"—" = no data — infer from similar models in the same family, but tell the user you're inferring.
9+
10+
| # | Model | Family | Score |
11+
| -- | ----------------------------------- | ----------- | ----- |
12+
| 1 | GPT-OSS 120B (mode: high) | OpenAI | 28.6 |
13+
| 2 | Nova 2.0 Lite (mode: medium) | Amazon Nova | 23.9 |
14+
| 3 | Nova 2.0 Lite (mode: high) | Amazon Nova | 23.4 |
15+
| 4 | GPT-OSS 20B (mode: high) | OpenAI | 18.5 |
16+
| 5 | GPT-OSS 120B (mode: low) | OpenAI | 15.5 |
17+
| 6 | GPT-OSS 20B (mode: low) | OpenAI | 14.4 |
18+
| 7 | Qwen3 32B (mode: reasoning) | Qwen | 13.8 |
19+
| 8 | Nova 2.0 Lite (mode: low) | Amazon Nova | 13.6 |
20+
| 9 | Qwen3 14B (mode: reasoning) | Qwen | 13.1 |
21+
| 10 | Nova 2.0 Lite (mode: non-reasoning) | Amazon Nova | 12.5 |
22+
| 11 | Qwen3 14B (mode: non-reasoning) | Qwen | 12.4 |
23+
| 12 | Qwen2.5 72B Instruct | Qwen | 11.9 |
24+
| 13 | DeepSeek R1 Distill Llama 70B | DeepSeek | 11.4 |
25+
| 14 | Nova Pro | Amazon Nova | 11.0 |
26+
| 15 | Llama 3.3 70B Instruct | Meta Llama | 10.7 |
27+
| 16 | Qwen3 8B (mode: reasoning) | Qwen | 9.0 |
28+
| 17 | Qwen3 8B (mode: non-reasoning) | Qwen | 7.1 |
29+
| 18 | Llama 4 Scout 17B | Meta Llama | 6.7 |
30+
| 19 | Nova Lite | Amazon Nova | 5.1 |
31+
| 20 | Llama 3.1 8B Instruct | Meta Llama | 4.9 |
32+
| 21 | Nova Micro | Amazon Nova | 4.1 |
33+
| 22 | Qwen3 1.7B (mode: non-reasoning) | Qwen | 2.3 |
34+
| 23 | Qwen3 1.7B (mode: reasoning) | Qwen | 1.4 |
35+
| 24 | Qwen3 0.6B (mode: non-reasoning) | Qwen | 1.4 |
36+
| 25 | Qwen3 0.6B (mode: reasoning) | Qwen | 0.9 |
37+
| 26 | Llama 3.2 1B Instruct | Meta Llama | 0.6 |
38+
|| Llama 3.2 3B Instruct | Meta Llama ||
39+
|| Qwen3 32B (mode: non-reasoning) | Qwen ||
40+
|| Qwen3 4B (mode: reasoning) | Qwen ||
41+
|| Qwen3 4B (mode: non-reasoning) | Qwen ||
42+
|| Qwen2.5 32B Instruct | Qwen ||
43+
|| DeepSeek R1 Distill Llama 8B | DeepSeek ||
44+
|| DeepSeek R1 Distill Qwen 32B | DeepSeek ||
45+
|| DeepSeek R1 Distill Qwen 14B | DeepSeek ||
46+
|| DeepSeek R1 Distill Qwen 1.5B | DeepSeek ||
47+
|| Qwen2.5 14B Instruct | Qwen ||
48+
|| Qwen2.5 7B Instruct | Qwen ||
49+
|| DeepSeek R1 Distill Qwen 7B | DeepSeek ||

0 commit comments

Comments
 (0)