Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
a72aeef
Update version
dargilco Jul 1, 2026
0c5bd80
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 6, 2026
ef83c08
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 7, 2026
166052b
Restore tsp-location.yaml
dargilco Jul 7, 2026
b15ba3d
Update emitter skill for Python to deal with prerequisites (#47878)
dargilco Jul 7, 2026
deb805e
Merge branch 'main' into feature/azure-ai-projects/vnext
howieleung Jul 7, 2026
cf8829f
change log (#47916)
howieleung Jul 7, 2026
64783d8
[azure-ai-projects] Emit SDK from TypeSpec (commit fca510e0) (#47914)
dargilco Jul 8, 2026
eae0318
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 8, 2026
f6a0197
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 9, 2026
939b4c3
Fix TypeSpec paths (#47959)
dargilco Jul 9, 2026
51dbaa7
Merge branch 'main' into feature/azure-ai-projects/vnext
howieleung Jul 16, 2026
747ce0b
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 20, 2026
f2e1cab
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 21, 2026
ae7422f
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 21, 2026
4cad88f
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 22, 2026
1de6714
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 22, 2026
73ca2c6
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 23, 2026
8932768
Remove sample_agent_toolbox_skill.py per bakcned folks and Linda requ…
howieleung Jul 23, 2026
02145d9
Re-emit from latest TypeSpec and do required updates (#48216)
dargilco Jul 24, 2026
a33bfb2
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 24, 2026
ca0aae3
Re-emit, to remove WebIQ tools (#48240)
dargilco Jul 24, 2026
0d65d14
update report
dargilco Jul 24, 2026
695e62b
Updates in prep for a release of 2.4.0 (#48248)
dargilco Jul 24, 2026
ae8d605
Update rename tsp-location.yaml, so it does not break release build
dargilco Jul 24, 2026
350e355
change log (#48246)
howieleung Jul 24, 2026
d68f0da
Add sample toolboxes for synchronous and asynchronous AIProjectClient…
howieleung Jul 24, 2026
2ffb388
Comment out additional sample tests in TestSamples class
howieleung Jul 24, 2026
9714db0
Merge remote-tracking branch 'origin/main' into feature/azure-ai-proj…
dargilco Jul 25, 2026
f169f24
Update to version 2.5.0
dargilco Jul 28, 2026
9f0123f
Howie/sample 35 (#48310)
howieleung Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions sdk/ai/azure-ai-projects/.env.template
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,14 @@ SHAREPOINT_USER_INPUT=
FABRIC_USER_INPUT=
BING_CUSTOM_USER_INPUT=
A2A_USER_INPUT=
A2A_ENDPOINT=
EVALUATOR_NAME=
DATASET_NAME=
DATASET_VERSION=
DATASET_VERSION_1=
DATASET_VERSION_2=
DATA_FOLDER=
DOWNLOAD_FOLDER=
POLL_INTERVAL_SECONDS=
EVAL_MODEL=
OPTIMIZATION_MODEL=
Expand All @@ -57,6 +62,44 @@ WORK_IQ_PROJECT_CONNECTION_ID=
WORK_IQ_USER_INPUT=
FABRIC_IQ_PROJECT_CONNECTION_ID=
FABRIC_IQ_USER_INPUT=
AI_SEARCH_CONNECTION_NAME=
INDEX_NAME=
INDEX_VERSION=
FILE_PATH=
AGENT_ID=
APPINSIGHTS_RESOURCE_ID=
TRACE_LOOKBACK_HOURS=
FOUNDRY_AGENT_VERSION=
FOUNDRY_CONVERSATION_IDS=
FOUNDRY_TRACE_IDS=
FOUNDRY_INSTANT_MODEL_NAME=
FOUNDRY_REFERENCE_DATASET_NAME=
FOUNDRY_REFERENCE_DATASET_VERSION=
FOUNDRY_TRACES_WINDOW_DAYS=
AZURE_AI_PROJECT_ENDPOINT=
AZURE_AI_MODEL_DEPLOYMENT_NAME=
AZURE_AI_MODEL_DEPLOYMENT_NAME_FOR_AUDIO=
ENDPOINT_URL=
ENDPOINT_API_KEY=
ENDPOINT_APP_ID=
AZURE_RESOURCE_GROUP_NAME=
MODEL_PUBLISHER=
MODEL_VERSION=
MODEL_ENDPOINT=
MODEL_API_KEY=
COMPUTER_USE_MODEL_DEPLOYMENT_NAME=
STORAGE_INPUT_QUEUE_NAME=
STORAGE_OUTPUT_QUEUE_NAME=
STORAGE_QUEUE_SERVICE_ENDPOINT=
DELEGATED_USER_IDENTITY=
DELEGATED_USER_IDENTITY_2=
FOUNDRY_HOSTED_AGENT_REMOTE_BUILD=
GITHUB_CONNECTION_NAME=
GITHUB_PAT_TOKEN=
GITHUB_REPOSITORY_NAME=
GITHUB_USERNAME=
TEAMS_CONNECTION_NAME=
TEAMS_CHANNEL_URL=

#######################################################################
#
Expand Down
18 changes: 18 additions & 0 deletions sdk/ai/azure-ai-projects/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Release History

## 2.5.0 (Unreleased)

### Features Added

Placeholder

### Breaking Changes

Placeholder

### Bugs Fixed

Placeholder

### Sample updates

Placeholder

## 2.4.0 (2026-07-24)

### Features Added
Expand Down
2 changes: 1 addition & 1 deletion sdk/ai/azure-ai-projects/azure/ai/projects/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

VERSION = "2.4.0"
VERSION = "2.5.0"
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Tool Classes: Removed Properties (v2.2.0 → v2.3.0)

The following Tool-derived classes had properties **removed** in v2.3.0 compared to v2.2.0. These properties (`name`, `description`, `tool_configs`) now only exist on the corresponding `ToolboxTool` subclasses.

## General Availability Tools

| Class Name | Removed Properties |
|------------|-------------------|
| `AzureAISearchTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `AzureFunctionTool` | `tool_configs: Optional[dict[str, ToolConfig]]` |
| `BingGroundingTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `CaptureStructuredOutputsTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `CodeInterpreterTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `FileSearchTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `FunctionShellToolParam` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `FunctionTool` | *(no changes)* |
| `ImageGenTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `LocalShellToolParam` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `MCPTool` | `tool_configs: Optional[dict[str, ToolConfig]]` |
| `OpenApiTool` | `tool_configs: Optional[dict[str, ToolConfig]]` |
| `WebSearchTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
Comment on lines +3 to +21
v
## Preview Tools

| Class Name | Removed Properties |
|------------|-------------------|
| `A2APreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `BingCustomSearchPreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `BrowserAutomationPreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `ComputerUsePreviewTool` | *(no changes)* |
| `FabricIQPreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `MemorySearchPreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `MicrosoftFabricPreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `SharepointPreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `ToolboxSearchPreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |
| `WebSearchPreviewTool` | *(no changes)* |
| `WorkIQPreviewTool` | `name: Optional[str]`, `description: Optional[str]`, `tool_configs: Optional[dict[str, ToolConfig]]` |

## Summary

- **Total Tool classes analyzed:** 24
- **Classes with removed properties:** 19
- **Common pattern:** `name`, `description`, and `tool_configs` were moved exclusively to `ToolboxTool` subclasses
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

with (
DefaultAzureCredential() as credential,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model = os.environ["FOUNDRY_MODEL_NAME"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
model = os.environ["FOUNDRY_MODEL_NAME"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


async def main():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

with (
DefaultAzureCredential() as credential,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class CalendarEvent(BaseModel):


endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

with (
DefaultAzureCredential() as credential,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
load_dotenv()

agent = None
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

with (
DefaultAzureCredential() as credential,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


tool = AzureAISearchTool(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
agent = None

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


tool = AzureFunctionTool(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


tool = BingCustomSearchPreviewTool(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


tool = BingGroundingTool(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


tool = BrowserAutomationPreviewTool(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

with (
DefaultAzureCredential() as credential,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


async def main() -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ async def main() -> None:

# Create agent with code interpreter tool
agent = await project_client.agents.create_version(
agent_name=os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent"),
agent_name=os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent",
definition=PromptAgentDefinition(
model=os.environ["FOUNDRY_MODEL_NAME"],
instructions="You are a helpful assistant.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

# Initialize state machine
current_state = SearchState.INITIAL
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


async def main():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

tool = MicrosoftFabricPreviewTool(
fabric_dataagent_preview=FabricDataAgentToolParameters(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

tool_payload = FabricIQPreviewTool(
project_connection_id=os.environ["FABRIC_IQ_PROJECT_CONNECTION_ID"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@

# Create agent with file search tool
agent = project_client.agents.create_version(
agent_name=os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent"),
agent_name=os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent",
definition=agent_definition,
description="File search agent for product information queries.",
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@

load_dotenv()

agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


def get_horoscope(sign: str) -> str:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"
image_generation_model = os.environ["IMAGE_GENERATION_MODEL_DEPLOYMENT_NAME"]

tool = ImageGenTool(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@

load_dotenv()
endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"
image_generation_model = os.environ["IMAGE_GENERATION_MODEL_DEPLOYMENT_NAME"]


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

mcp_tool = MCPTool(
server_label="api-specs",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


async def main():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


tool = MCPTool(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
AGENT_NAME = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
AGENT_NAME = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"

credential = DefaultAzureCredential()
project_client = AIProjectClient(endpoint=endpoint, credential=credential)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@

load_dotenv()

AGENT_NAME = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
AGENT_NAME = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"


async def main() -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"
weather_asset_file_path = Path(__file__).resolve().parent / "../assets/weather_openapi.json"
openapi_weather = cast(dict[str, Any], jsonref.loads(weather_asset_file_path.read_text(encoding="utf-8")))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
load_dotenv()

endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "MyAgent")
agent_name = os.environ.get("FOUNDRY_AGENT_NAME") or "MyAgent"
tripadvisor_asset_file_path = Path(__file__).resolve().parent / "../assets/tripadvisor_openapi.json"
openapi_tripadvisor = cast(dict[str, Any], jsonref.loads(tripadvisor_asset_file_path.read_text(encoding="utf-8")))

Expand Down
Loading
Loading