|
1305 | 1305 | "reference it in the **separate `skills=` list** with `ToolboxSkillReference(name, version)`. Omit\n", |
1306 | 1306 | "`version` to track the skill's **default** version; pin it to freeze on an immutable version.\n", |
1307 | 1307 | "\n", |
1308 | | - "> Skills CRUD (`project.beta.skills.*` create / update-default) is the **only** flow that needs a\n", |
1309 | | - "> preview feature flag, and the `beta.skills` SDK sends it for you. Reading skills as MCP resources\n", |
1310 | | - "> (section 10b) and regular toolbox/tool calls need **no** preview header.\n", |
| 1308 | + "> Two flows need the **Skills preview flag** (`Foundry-Features: Skills=V1Preview`): skills CRUD\n", |
| 1309 | + "> (`project.beta.skills.*` create / update-default), where the `beta.skills` SDK sends it for you,\n", |
| 1310 | + "> **and** creating a toolbox version that references a skill. Stable `toolboxes.create_version`\n", |
| 1311 | + "> does **not** inject it, so section 4m sets it explicitly whenever `skills` is non-empty. Reading\n", |
| 1312 | + "> skills as MCP resources (section 10b) and regular toolbox/tool calls need **no** preview header.\n", |
1311 | 1313 | "\n", |
1312 | 1314 | "**Key parameters** (`ToolboxSkillReference`):\n", |
1313 | 1315 | "- `name` - **required** `str`; the published skill name.\n", |
|
1402 | 1404 | ], |
1403 | 1405 | "source": [ |
1404 | 1406 | "# create_version(name, *, tools, description=None, metadata=None, skills=None, policies=None)\n", |
| 1407 | + "# Stable toolboxes.create_version does NOT auto-inject the Skills preview flag, so send it\n", |
| 1408 | + "# ourselves whenever this version references a skill (empty kwargs when there are no skills).\n", |
| 1409 | + "skill_kwargs = {\"headers\": {\"Foundry-Features\": \"Skills=V1Preview\"}} if skills else {}\n", |
1405 | 1410 | "version = project.toolboxes.create_version(\n", |
1406 | 1411 | " name=TOOLBOX_NAME,\n", |
1407 | 1412 | " description=\"Diverse demo toolbox: search, code, knowledge, and connection-backed tools.\",\n", |
1408 | 1413 | " tools=tools,\n", |
1409 | 1414 | " skills=skills or None,\n", |
| 1415 | + " **skill_kwargs,\n", |
1410 | 1416 | ")\n", |
1411 | 1417 | "created_resources[\"toolbox\"] = TOOLBOX_NAME\n", |
1412 | 1418 | "created_resources[\"versions\"].append(version.version)\n", |
|
1594 | 1600 | " tool_configs=tool_configs,\n", |
1595 | 1601 | "))\n", |
1596 | 1602 | "\n", |
| 1603 | + "# Same rule as section 4m: only send the Skills preview flag when this version has skills.\n", |
| 1604 | + "skill_kwargs = {\"headers\": {\"Foundry-Features\": \"Skills=V1Preview\"}} if skills else {}\n", |
1597 | 1605 | "search_version = project.toolboxes.create_version(\n", |
1598 | 1606 | " name=TOOLBOX_NAME,\n", |
1599 | 1607 | " tools=search_tools,\n", |
1600 | 1608 | " skills=skills or None,\n", |
| 1609 | + " **skill_kwargs,\n", |
1601 | 1610 | ")\n", |
1602 | 1611 | "created_resources[\"versions\"].append(search_version.version)\n", |
1603 | 1612 | "print(f\"✅ Search-first version {search_version.version} - tools/list will now return tool_search + pinned only\")" |
|
1720 | 1729 | "# RAI policy and Foundry screens tool inputs/outputs for that version.\n", |
1721 | 1730 | "RAI_POLICY_NAME = os.getenv(\"RAI_POLICY_NAME\")\n", |
1722 | 1731 | "if RAI_POLICY_NAME:\n", |
| 1732 | + " # Only send the Skills preview flag when this version references a skill (see 4m).\n", |
| 1733 | + " skill_kwargs = {\"headers\": {\"Foundry-Features\": \"Skills=V1Preview\"}} if skills else {}\n", |
1723 | 1734 | " guarded = project.toolboxes.create_version(\n", |
1724 | 1735 | " name=TOOLBOX_NAME,\n", |
1725 | 1736 | " tools=search_tools,\n", |
1726 | 1737 | " skills=skills or None,\n", |
1727 | 1738 | " policies=ToolboxPolicies(rai_config=RaiConfig(rai_policy_name=RAI_POLICY_NAME)),\n", |
| 1739 | + " **skill_kwargs,\n", |
1728 | 1740 | " )\n", |
1729 | 1741 | " created_resources[\"versions\"].append(guarded.version)\n", |
1730 | 1742 | " project.toolboxes.update(name=TOOLBOX_NAME, default_version=guarded.version)\n", |
|
0 commit comments