Add AI Agents and Projects Python SDK parity - #50520
Open
Mike Guo (guotuofeng) wants to merge 1 commit into
Open
Mike Guo (guotuofeng) wants to merge 1 commit into
Mike Guo (guotuofeng) wants to merge 1 commit into
Conversation
Mike Guo (guotuofeng)
requested review from
a team,
Darren Cohen (dargilco),
Gerardo Lecaros (glecaros),
Glenn Harper (glharper),
Jose Alvarez (jpalvarezl),
Kaylie (kaylieee) and
Ryan Hurey (rhurey)
as code owners
September 18, 2026 11:37
3 tasks
|
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. |
Mike Guo (guotuofeng)
added this pull request to stack #50521
September 18, 2026 11:40
Mike Guo (guotuofeng)
force-pushed
the
myguo/ai-python-parity-split
branch
from
September 18, 2026 13:55
c2ed9c1 to
5f09c9a
Compare
Contributor
There was a problem hiding this comment.
🟡 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; | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Splits the non-voice Python SDK parity work from #50408 into a focused top PR based on #50519.
Azure AI Agents
Azure AI Projects
Stack
Validation