mcpbeat

Azure AI Projects Update Changelog

azure/azure-ai-projects-update-changelog

Update CHANGELOG.md by comparing public APIs between the current branch and the latest released version on PyPI. WHEN: \"update changelog\", \"generate changelog\", \"add changelog entry\", \"what changed in this version\". DO NOT USE FOR: other Azure SDK packages. INVOKES: PyPI API, GitHub API (for tags), file operations.

4k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
5584
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/Azure/azure-sdk-for-python --skill azure-ai-projects-update-changelog

The instruction itself

26 sections, as written by the author

Update azure-ai-projects Changelog

This skill guides Copilot through updating the CHANGELOG.md file for the azure-ai-projects package by comparing public APIs between the current branch and the latest released version.

Working directory: sdk/ai/azure-ai-projects


Overview

The skill performs these steps:

  • Read the current version from azure/ai/projects/_version.py
  • Fetch the latest released version from PyPI
  • Compare public classes, methods, and properties between current branch and released version
  • Update CHANGELOG.md with a new section or update the existing "(Unreleased)" section

Step 1: Read the current version

Read the current version from azure/ai/projects/_version.py. The file contains a line like:

VERSION = "X.Y.Z"

Extract this version number and save it as CURRENT_VERSION.


Step 2: Fetch the latest released version from PyPI

Use the PyPI JSON API to get the latest released version:

https://pypi.org/pypi/azure-ai-projects/json

From the JSON response:

  • Extract info.version as LATEST_PYPI_VERSION
  • This is the version we will compare against

Step 3: Determine if CHANGELOG needs updating

Check if CHANGELOG.md already has a section for the current version:

  • If there's a section ## {CURRENT_VERSION} (Unreleased) — we will update it
  • If there's a section ## {CURRENT_VERSION} (YYYY-MM-DD) with an actual date. If the date is in the past, then this version is already released, report this to the user and stop. If it's today's date, we will update it.
  • If there's no section for CURRENT_VERSION — we will create a new one

Step 4: Construct the GitHub tag for the released version

The tag name for a released version follows this pattern:

azure-ai-projects_{VERSION}

For example, for version 2.2.0, the tag is azure-ai-projects_2.2.0.

The source code for that release can be found at:

https://github.com/Azure/azure-sdk-for-python/tree/azure-ai-projects_{VERSION}/sdk/ai/azure-ai-projects

Step 5: Compare public APIs

Compare the public APIs between the current branch and the latest released version. Focus on these locations:

5a. Public classes and enums in azure/ai/projects/models/__init__.py

Compare the __all__ list and imports in both versions to identify:

  • New classes/enums: Present in current branch but not in released version
  • Removed classes/enums: Present in released version but not in current branch
  • Renamed classes/enums: Check if a removed class has a similar new class (likely a rename)

5b. Public operations in azure/ai/projects/operations/__init__.py

Compare the __all__ list to identify new or removed operation classes.

5c. Public methods on sub-clients

For each operations class (like AgentsOperations, BetaOperations, etc.), compare the public methods:

  • Look at files under azure/ai/projects/operations/ and azure/ai/projects/aio/operations/
  • Also check _patch.py files which may define additional public methods
  • Public methods are those that don't start with underscore _

5d. Properties on model classes

For significant model classes, compare public properties (attributes) between versions:

  • Properties are defined in azure/ai/projects/models/_models.py
  • Look for new, removed, or renamed properties
  • Pay attention to required vs optional changes

5e. Beta sub-clients on BetaOperations

The BetaOperations class exposes beta/preview functionality. Check for:

  • New sub-client properties (like .beta.datasets, .beta.models, .beta.routines, etc.)
  • Removed sub-client properties
  • Check both azure/ai/projects/operations/_patch.py and the released version

5f. Sample files in samples/ folder

Compare sample files between the current branch and the released version:

  • List all .py files recursively under samples/ in both versions
  • Identify new samples: Files present in current branch but not in released version
  • Identify removed samples: Files present in released version but not in current branch
  • Ignore async variants: If a sample has both sync and async versions (e.g., sample_foo.py and sample_foo_async.py), only report the sync version
  • Check existing changelog entries: If a sample is already mentioned in the current changelog section, leave it as is
  • Remove stale entries: If a sample mentioned in the changelog has been removed from the codebase, remove it from the changelog

For each new sample, provide a one-line description of what it demonstrates. Read the sample file to understand its purpose — typically the docstring at the top or the if __name__ == "__main__" block explains what it does.


Step 6: Categorize the changes

Organize detected changes into these categories:

Features Added

  • New sub-clients (e.g., "New .beta.routines sub-client with routine operations: create_or_update, get, enable, ...")
  • New methods on existing sub-clients (e.g., "New methods on .beta.agents for optimization jobs: create_optimization_job, get_optimization_job, ...")
  • New model classes that represent significant features (e.g., "Support integration of external Agents. See new ExternalAgentDefinition class.")
  • New properties on existing classes (e.g., "New optional force parameter on agents.delete method.")
  • New tools (e.g., "New Agent tool in preview FabricIQPreviewTool.")

Breaking Changes

List breaking changes in beta methods and classes separately:

  • Renamed methods (e.g., "Method .beta.agents.get_session_files renamed to .beta.agents.list_session_files.")
  • Renamed arguments (e.g., "Argument body in method .beta.skills.create_from_files() renamed to content.")
  • Signature changes (e.g., "Method .beta.skills.create signature changed — now takes name and keyword inline_content: SkillInlineContent; returns SkillVersion.")
  • Renamed classes (e.g., "Renamed class AgentEndpoint to AgentEndpointConfig.")
  • Property changes (e.g., "Required property isolation_key_source removed from class EntraAuthorizationScheme.")
  • Renamed properties (e.g., "Property skill_id renamed to id on class SkillDetails.")

Format for beta changes:

Breaking changes in beta methods:
* ...

Breaking changes in beta classes:
* ...

Bugs Fixed

This section typically contains bug fixes. Leave empty unless you have specific bug fix information to add.

Sample updates

List new sample files that were added, with a one-line description of what they demonstrate:

  • Compare sample files in the samples/ folder between current branch and released version
  • Only report the sync version — do not list async samples separately (files ending with _async.py)
  • If a sample is already mentioned in the existing changelog section, preserve that entry
  • If a sample mentioned in the changelog has been removed from the codebase, remove it from the changelog
  • Group related samples together (e.g., all agent samples, all evaluation samples)
  • Use format: Added \sample_name.py\ demonstrating [brief description].

Step 7: Format the changelog entry

Use this format for the changelog entry:

## {CURRENT_VERSION} (Unreleased)

### Features Added

* [List each feature on its own bullet point]

### Breaking Changes

Breaking changes in beta methods:
* [List method changes]

Breaking changes in beta classes:
* [List class changes]

### Bugs Fixed

* [List bug fixes, if any]

### Sample updates

* [List sample updates, if any]

Guidelines for writing entries:

  • For new methods: mention the sub-client and method name, briefly describe what it does. Only report the sync version — do not list both sync and async versions separately.
  • For new sub-clients: list all the methods it provides (sync versions only)
  • For new tools: just mention the class name
  • For property changes: mention the class name and the affected property
  • For renames: show "X renamed to Y" format
  • Use backticks for code references: .beta.agents, create_version(), AgentDetails

Step 8: Update CHANGELOG.md

Insert or update the changelog entry in CHANGELOG.md:

  • If updating an existing "(Unreleased)" section:
  • Replace the existing section content with the new content
  • Preserve any manually-added entries that aren't API-related (like "Sample updates" written by developers)
  • If creating a new section:
  • Insert the new section immediately after the # Release History header
  • Keep all previous version sections intact

Step 9: Report to user

After updating the changelog, report:

  • The current version and latest PyPI version compared
  • Summary of changes detected:
  • Number of new classes/enums
  • Number of new methods
  • Number of breaking changes
  • Number of removed items
  • Remind the user to:
  • Review the generated changelog for accuracy
  • Add any bug fixes that were made
  • Review sample descriptions for accuracy
  • Verify method descriptions are accurate

Tips for API Comparison

Using git to compare files

You can compare files between the current branch and a tag:

git diff azure-ai-projects_{VERSION} -- azure/ai/projects/models/__init__.py

Using GitHub raw URLs

To fetch files from the released version:

https://raw.githubusercontent.com/Azure/azure-sdk-for-python/azure-ai-projects_{VERSION}/sdk/ai/azure-ai-projects/azure/ai/projects/models/__init__.py

Identifying renames vs additions/removals

If a class was removed and a similar class was added, it's likely a rename. Look for:

  • Similar names (e.g., SkillObjectSkillDetails)
  • Similar structure/properties
  • Check if there's a corresponding note in the TypeSpec changes

Example Output

Here's an example of a well-formatted changelog entry:

## 2.3.0 (Unreleased)

### Features Added

* Support integration of external Agents (in preview). See new `ExternalAgentDefinition` class.
* New Agent tool in preview `FabricIQPreviewTool`.
* New Agent tool in preview `ToolboxSearchPreviewTool`.
* New methods on `.beta.agents` for 
  * Code-based hosted agents: `create_version_from_code`, `download_code`.
  * Optimization jobs: `create_optimization_job`, `get_optimization_job`, `list_optimization_jobs`, `cancel_optimization_job`, `list_optimization_candidates`.
  * Optimization candidate management: `list_optimization_candidates`, `get_optimization_candidate`, `get_optimization_candidate_config`, `get_optimization_candidate_results`, `get_candidate_file`, `promote_candidate`.
  * `stop_session` to stop a running agent session.
* New `.beta.datasets` sub-client with data generation job operations: `create_generation_job`, `get_generation_job`, `list_generation_jobs`, `cancel_generation_job`, `delete_generation_job`.
* New `.beta.models` sub-client to handle AI model weights: `create`, `list_versions`, `list`, `get`, `delete`, `update`, `pending_create_version`, `pending_upload`, `get_credentials`.
* New `.beta.routines` sub-client with routine operations: `create_or_update`, `get`, `enable`, `disable`, `list`, `delete`, `list_runs`, `dispatch`.
* New methods on `.beta.evaluators` for evaluator generation jobs: `create_generation_job`, `get_generation_job`, `list_generation_jobs`, `cancel_generation_job`, `delete_generation_job`.
* New methods on `.beta.memory_stores` to handle individual memory items: `create_memory`, `update_memory`, `list_memories`, `get_memory`, `delete_memory`.
* New methods on `.beta.skills` for versioned skill management: `create`, `list_versions`, `get_version`, `download_version`, `delete_version`.
* New optional string properties `description` and `name` added to Agent tools classes which did not have them before.
* New optional `tool_configs` added to Agent tool classes.
* New read-only property `content_hash` on `CodeConfiguration`, returning the SHA-256 hex digest of the uploaded code zip.
* New optional `force` parameter on `agents.delete` and `agents.delete_version` methods.
* New optional `blueprint_reference` parameters on `agents.create_version` method.


### Breaking Changes

Breaking changes in beta methods:
* Argument `isolation_key` in methods `.beta.agents.create_session()` and `.beta.agents.delete_session()` renamed to `user_isolation_key`.
* Argument `body` in methods `.beta.evaluation_taxonomies.create()` and `.beta.evaluation_taxonomies.update()` renamed to `taxonomy`.
* Argument `body` in method `.beta.skills.create_from_files()` renamed to `content`.
* Method `.beta.agents.get_session_files` renamed to `.beta.agents.list_session_files`.
* Method `.beta.skills.create` signature changed — now takes `name` and keyword `inline_content: SkillInlineContent`; returns `SkillVersion`.
* Method `.beta.skills.create_from_package` renamed to `.beta.skills.create_from_files`.
* Method `.beta.skills.create_from_files` signature changed — now takes `name` and `content: CreateSkillVersionFromFilesBody`; returns `SkillVersion`.
* Method `.beta.skills.update` signature changed — now only accepts keyword `default_version`; returns `SkillDetails`.

Breaking changes in beta classes:
* Required property `isolation_key_source` removed from class `EntraAuthorizationScheme`.
* Renamed class `AgentEndpoint` to `AgentEndpointConfig`.
* Renamed class `DeleteSkillResponse` to `DeleteSkillResult`.
* Renamed class `SessionDirectoryListResponse` to `SessionDirectoryListResult`.
* Renamed class `SessionFileWriteResponse` to `SessionFileWriteResult`.
* Renamed class `SkillObject` to `SkillDetails`. Property `skill_id` renamed to `id`. Properties `has_blob` and `metadata` were removed.
* Renamed class `Target` to `EvaluationTarget`.
* Renamed class `TargetConfig` to `RedTeamTargetConfig`.

### Bugs Fixed

* Fixed telemetry instrumentor to correctly call is_recording() as a method on spans, ensuring non-recording spans are properly skipped (e.g., when sampling is configured) ([GitHub issue 46544](https://github.com/Azure/azure-sdk-for-python/issues/46544)).

### Sample updates

* Added new Agent tool samples `sample_agent_work_iq.py` and `sample_agent_work_iq_async.py` demonstrating use of `WorkIQPreviewTool`.
* Added new Agent tool samples `sample_agent_fabric_iq.py` and `sample_agent_fabric_iq_async.py` demonstrating use of `FabricIQPreviewTool`.
* Hosted Agents:
  * Added Hosted Agent creation samples `sample_create_hosted_agent.py` and `sample_create_hosted_agent_async.py`, demonstrating hosted agent version creation and retrieval with `AIProjectClient`.
  * Added Hosted Agent code-upload samples `sample_create_hosted_agent_from_code.py` and `sample_create_hosted_agent_from_code_async.py`, demonstrating uploading a code package (zip) as a new hosted agent version.
  * The Hosted Agent creation sample also demonstrates assigning the hosted agent managed identity the Azure AI User RBAC role on the backing Azure AI account.
  * Updated the other Hosted Agent samples to reuse an existing Hosted Agent as a prerequisite, instead of creating a new hosted agent version in each sample.
* Added Toolbox tool-search sample `sample_toolboxes_with_search_preview.py` and `sample_toolboxes_with_search_preview_async.py`, demonstrating creating a Toolbox version with `ToolboxSearchPreviewTool` and invoking `MCPTool`.
* Added `.beta.models` samples under `samples/models/`:
  * `sample_models_basic.py` — synchronous end-to-end registration via the `create` helper (uses `azcopy`), followed by `get`, `list_versions`, `list`, `get_credentials`, `update`, and `delete`.
  * `sample_models_create_and_poll.py` — alternative synchronous registration that hand-rolls the spec's three-step flow (`pending_upload` → upload via `azure-storage-blob` → `pending_create_version` + poll), without taking a dependency on `azcopy`.
  * `sample_models_basic_async.py` — asynchronous version of the same three-step flow using `azure.ai.projects.aio.AIProjectClient` and `azure.storage.blob.aio.ContainerClient`.
* Added new evaluation sample `sample_model_evaluation_instant_model.py` demonstrating model evaluation with an instant model.
* Refreshed evaluation samples under `samples/evaluations/` and `samples/evaluations/agentic_evaluators/` (including `sample_agent_evaluation`, `sample_agent_response_evaluation`, `sample_eval_catalog_prompt_based_evaluators`, `sample_evaluations_ai_assisted`, `sample_evaluations_builtin_with_csv`, `sample_evaluations_builtin_with_dataset_id`, `sample_evaluations_builtin_with_inline_data`, `sample_evaluations_builtin_with_inline_data_oai`, `sample_scheduled_evaluations`, `sample_coherence`, `sample_fluency`, `sample_intent_resolution`, `sample_relevance`, `sample_response_completeness`, `sample_tool_call_accuracy`, `sample_tool_call_success`, `sample_tool_input_accuracy`, `sample_tool_output_utilization`, `sample_tool_selection`, and `sample_generic_agentic_evaluator`).
* New sample `sample_dataset_generation_job_simpleqna_with_prompt_source.py` showing an end-to-end flow that generates a QnA dataset via `.beta.datasets.create_generation_job` and runs an OpenAI evaluation.

How to use it

Copy the folder

Take azure/azure-ai-projects-update-changelog from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.