Skip to content

Add AI Agents and Projects Python SDK parity - #50520

Open
Mike Guo (guotuofeng) wants to merge 1 commit into
mainfrom
myguo/ai-python-parity-split
Open

Mike Guo (guotuofeng) wants to merge 1 commit into
mainfrom
myguo/ai-python-parity-split

Conversation

@guotuofeng

Copy link
Copy Markdown
Member

Description

Splits the non-voice Python SDK parity work from #50408 into a focused top PR based on #50519.

Azure AI Agents

  • Adds polling resumption and completed-result handling for memory and optimization jobs.
  • Preserves async Azure token acquisition, custom OpenAI transports/pipelines, headers, user agents, API versions, and logging behavior.
  • Adds preview opt-in guidance and multipart/SSE logging safeguards.

Azure AI Projects

  • Adds evaluation data-source factories and upload workflows for datasets and models.
  • Adds beta telemetry clients and job polling resumption.
  • Preserves async authentication, preview guidance, custom pipeline behavior, and multipart/SSE logging safeguards.

Stack

Validation

  • Azure AI Agents: 531 tests, 503 passed, 28 expected skips, 0 failures/errors. The single transient polling timeout from an earlier full run passed 2/2 in isolation; the final full rerun passed.
  • Azure AI Projects: 148 tests, 124 passed, 24 expected skips, 0 failures/errors.
  • Checkstyle, Revapi, and Javadoc passed for both modules.
  • Java 8/25 main, test, and sample compilation passed.
  • Git whitespace checks passed.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
36 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@guotuofeng
Mike Guo (guotuofeng) added this pull request to stack #50521 September 18, 2026 11:40
Base automatically changed from myguo/voice-agents-websocket-split to main September 18, 2026 13:55
Copilot AI lite review requested due to automatic review settings September 18, 2026 13:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Confirmed security-sensitive edge cases remain (root-path folder uploads and multipart Content-Type normalization), which could lead to unsafe filesystem traversal or unintended body logging.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

This pull request advances the Azure AI Agents and Azure AI Projects Java SDKs toward Python parity by expanding job polling resumption, upload workflows, evaluation helpers, OpenAI client factory behavior (including async auth), and logging safeguards, with accompanying tests, samples, and documentation updates.

Changes:

  • Added “resume existing job via GET-only polling” support for multiple Projects and Agents job types, plus supporting polling utilities and tests.
  • Added Projects upload and evaluation conveniences (local model upload + dataset filtering/upload options + Azure evaluation data-source factories) with test coverage and README samples.
  • Hardened OpenAI bridge behavior (async token acquisition, optional SSE chunk logging, multipart body logging avoidance, preview-required error guidance) and validated behavior via focused tests.
File summaries
File Description
sdk/ai/azure-ai-projects/src/test/java/com/azure/ai/projects/JobPollingTests.java New tests validating GET-only job resumption and failure behavior.
sdk/ai/azure-ai-projects/src/test/java/com/azure/ai/projects/implementation/http/HttpClientHelperTests.java Expanded tests for SSE wrapping, multipart logging safeguards, UTF-8 chunk handling.
sdk/ai/azure-ai-projects/src/test/java/com/azure/ai/projects/FoundryFeaturesHeaderVerificationTest.java Added coverage for async auth, preview-required error guidance, OpenAI override preservation, and logging defaults.
sdk/ai/azure-ai-projects/src/test/java/com/azure/ai/projects/FileUploadTests.java New tests for dataset/model upload workflows, metadata, and waiting behavior.
sdk/ai/azure-ai-projects/src/test/java/com/azure/ai/projects/EvaluationsHelperTests.java Added tests ensuring Azure evaluation data sources preserve wire shape after conversion.
sdk/ai/azure-ai-projects/src/test/java/com/azure/ai/projects/DatasetsClientTest.java Added tests for rejecting empty selections and rejecting root-path file uploads.
sdk/ai/azure-ai-projects/src/test/java/com/azure/ai/projects/BetaTelemetryClientTest.java New tests validating connection string caching and error handling.
sdk/ai/azure-ai-projects/src/samples/java/com/azure/ai/projects/ReadmeSamples.java Added README snippet samples for uploads, job resumption, and evaluation sources.
sdk/ai/azure-ai-projects/src/samples/java/com/azure/ai/projects/IndexesSample.java Fixed snippet tag names to match class/sample identifiers.
sdk/ai/azure-ai-projects/src/main/java/module-info.java Made storage-blob a transitive requirement to support new public upload option types.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/models/ModelUploadOptions.java New model upload options (metadata + wait/poll settings).
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/models/FileUploadOptions.java New upload options for filename filtering and blob client/upload configuration.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/models/AzureAIEvaluationDataSource.java New Azure-specific evaluation data source factories with JSON preservation.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/implementation/TokenUtils.java Added async OpenAI authentication adapter (token resolution at transport boundary).
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/implementation/ProjectsServicePollUtils.java New polling utilities for resuming Projects jobs with Azure Core pollers.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/implementation/http/HttpClientHelper.java Added multipart-aware logging policy and optional SSE body logging; preserved UA overrides via context.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/implementation/http/FoundryPolicyHelper.java Added preview-required error guidance policy; preserved explicitly empty Foundry-Features.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/implementation/http/AzureHttpResponseAdapter.java Added lazy SSE chunk logging with UTF-8 boundary preservation.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/implementation/FileUploadHelper.java New shared validation and blob upload helpers for datasets/models.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/EvaluationsHelper.java Added native OpenAI conversion helpers and schema config helper for Azure evaluation sources.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/DatasetsClient.java Added overloads supporting FileUploadOptions; switched to streaming upload options; improved validation.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/DatasetsAsyncClient.java Added async overloads supporting FileUploadOptions; moved file IO onto boundedElastic; refactored uploads.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaTelemetryClient.java New beta client for retrieving/caching App Insights connection string.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaTelemetryAsyncClient.java Async counterpart for retrieving/caching App Insights connection string.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaModelsClient.java Added local model upload + registration + optional availability polling.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaModelsAsyncClient.java Async model upload + registration + optional availability polling.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaEvaluatorsClient.java Added evaluator job resumption poller.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaEvaluatorsAsyncClient.java Added async evaluator job resumption poller.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaDatasetsClient.java Added data generation job resumption poller.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaDatasetsAsyncClient.java Added async data generation job resumption poller.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaAgentInsightMonitorsClient.java Added agent-insight run resumption poller.
sdk/ai/azure-ai-projects/src/main/java/com/azure/ai/projects/BetaAgentInsightMonitorsAsyncClient.java Added async agent-insight run resumption poller.
sdk/ai/azure-ai-projects/README.md Documented new OpenAI overrides, async auth, telemetry client, logging defaults, uploads, and resumption.
sdk/ai/azure-ai-projects/customizations/src/main/java/ProjectsCustomizations.java Updated generation customizations for builder/pipeline behavior, preview policy, and logging policy usage.
sdk/ai/azure-ai-projects/CHANGELOG.md Recorded new features and fixes for Projects parity work.
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/ReasoningDedupSerializationTests.java Removed voice round-trip tests from this suite.
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/models/PromptAgentDefinitionSerializationTests.java Removed harness/skills round-trip test from this suite.
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/implementation/http/HttpClientHelperTests.java Added tests for SSE wrapping, multipart logging safeguards, UTF-8 chunk handling.
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/implementation/FileUtilsTest.java Added tests for root-path rejection and SHA-256 streaming/preservation behavior.
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/implementation/AgentsServicePollUtilsTest.java Added tests for resumption polling + missing/empty final result handling.
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/ConversationsTests.java Made item extraction robust by selecting a message item rather than assuming index 0.
sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/ConversationsAsyncTests.java Same as sync: robustly select a message item.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/models/CodeFileDetails.java Added root-path validation for uploads to ensure file name exists.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/utils/FileUtils.java Updated SHA-256 hashing to stream replayable content without materializing bytes.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/TokenUtils.java Added async OpenAI authentication adapter (token resolution at transport boundary).
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/SyncOperationLocationPollingStrategy.java Routed final-result extraction through shared helper for better completion handling.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/OperationLocationPollingStrategy.java Same as sync: centralized final-result extraction behavior.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/http/HttpClientHelper.java Added multipart-aware logging policy and optional SSE body logging; preserved UA overrides via context.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/http/FoundryPolicyHelper.java Added preview-required error guidance policy; preserved explicitly empty Foundry-Features.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/http/AzureHttpResponseAdapter.java Added lazy SSE chunk logging with UTF-8 boundary preservation.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/AgentsServicePollUtils.java Added resume pollers + status mapping + safe final-result extraction for memory updates.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/BetaMemoryStoresClient.java Added memory update resumption API returning a SyncPoller.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/BetaMemoryStoresAsyncClient.java Added async memory update resumption API returning a PollerFlux.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/BetaAgentsClient.java Added optimization job resumption API returning a SyncPoller.
sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/BetaAgentsAsyncClient.java Added async optimization job resumption API returning a PollerFlux.
sdk/ai/azure-ai-agents/README.md Documented OpenAI overrides, logging defaults, and additional samples/links.
sdk/ai/azure-ai-agents/customizations/src/main/java/AgentsCustomizations.java Updated generation customizations for builder/pipeline behavior, preview policy, and logging policy usage.
sdk/ai/azure-ai-agents/CHANGELOG.md Recorded new features and fixes for Agents parity work.
Review details
  • Files reviewed: 61/61 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +99 to +103
public static List<Path> getFiles(Path folder, FileUploadOptions options) {
if (folder == null || !Files.isDirectory(folder)) {
throw new IllegalArgumentException("The provided path is not a folder: " + folder);
}
try (Stream<Path> paths = Files.walk(folder)) {
Comment on lines +77 to +81
String contentType = context.getHttpRequest().getHeaders().getValue(HttpHeaderName.CONTENT_TYPE);
return options.getLogLevel().shouldLogBody()
&& contentType != null
&& contentType.toLowerCase(java.util.Locale.ROOT).startsWith("multipart/") ? headers : normal;
}
Comment on lines +75 to +79
String contentType = context.getHttpRequest().getHeaders().getValue(HttpHeaderName.CONTENT_TYPE);
return options.getLogLevel().shouldLogBody()
&& contentType != null
&& contentType.toLowerCase(java.util.Locale.ROOT).startsWith("multipart/") ? headers : normal;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants