Skip to content

fix: Refresh Fabric authentication during AI Functions retries - #2685

Open
Rana Singh (ranadeepsingh) wants to merge 9 commits into
microsoft:masterfrom
ranadeepsingh:ai-functions-fabric-auth-refresh
Open

fix: Refresh Fabric authentication during AI Functions retries#2685
Rana Singh (ranadeepsingh) wants to merge 9 commits into
microsoft:masterfrom
ranadeepsingh:ai-functions-fabric-auth-refresh

Conversation

@ranadeepsingh

@ranadeepsingh Rana Singh (ranadeepsingh) commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Related Issues/PRs

What changes are proposed in this pull request?

Refresh Fabric authentication safely during long-running AI Functions requests:

  • Mark only implicit default Fabric OpenAI requests with a true-valued internal marker and MWC authorization as eligible for auth-aware retry; strip the marker before network transmission.
  • Reconstruct requests from buffered bodies and original headers so a trusted 401 refreshes and replays once without losing caller state or duplicating authorization.
  • Reacquire current Fabric authorization across bounded 429 retries while preserving readable unknown-length and partially inspected responses plus non-retryable capacity errors.
  • Add workspace-scoped single-flight refresh, current-runtime token cache invalidation with short-circuiting runtime reflection, and null-safe, locale-stable Fabric OpenAI endpoint validation resistant to repeated percent encoding.
  • Preserve explicit API keys, AAD/custom authorization, feature, taxonomy, service-tier, and user headers.

How is this patch tested?

  • I have written tests and confirmed the proposed bug fix works.

Current-head local validation:

  • VerifySendWithRetries: 23 passed
  • VerifyResponseBodyInspection: 2 passed
  • VerifyTokenInvalidation: 5 passed
  • OpenAIFabricHeadersSuite: 7 passed
  • OpenAIFabricAuthRetrySuite: 1 passed
  • AzureSearchAuthSuite: 48 passed
  • AddDocumentsHeaderPersistenceSuite: 1 passed
  • Core/cognitive compile and test-compile passed with JDK 11
  • Core/cognitive production and test scalastyle: 0 errors
  • sbt codegen and sbt packagePython passed; generated OpenAI wrappers compiled and were present in the wheel
  • Pinned Black 22.3.0: 201 files unchanged

Does this PR change any dependencies?

  • No. You can skip this section.
  • Yes. Make sure the dependencies are resolved correctly, and list changes here.

Does this PR add a new feature? If so, have you added samples on website?

  • No. This is a reliability fix for existing Fabric AI Functions behavior.
  • Yes. Make sure you have added samples following below steps.

Current integration evidence

  • Rebased onto upstream/master 1db3c40b1a7397f4801ab6077dfa282da9781ac4; final head dea4a52d6037d0a1bdbb87277ade71a348d81642 is 9 ahead and 0 behind.
  • Complete pre/post PR patches and all nine commit messages are identical.
  • Target-only CodeQL/Scorecards workflow updates parse successfully.
  • Current-head Copilot review reports Findings: None; all review threads are resolved.
  • Exact-head Azure build 234219169 ran as a pull-request build against merge commit 5b75adab673d8de2d0b4af525c3aae2549ca06a7; all 65 jobs completed with 51 succeeded and 14 failed.
  • Scheduled target build 234237842 ran on the exact base commit 1db3c40b1a7397f4801ab6077dfa282da9781ac4 and failed the same 14 job names as PR build 234219169.
  • The changed OpenAI surface has the identical baseline failure: OpenAIPromptSuite.scala:155 receives the same AI Foundry HTTP 403 and reports 0 did not equal 3.
  • Other failures are baseline external-service 401/403 responses, the same Face website sample and Databricks notebook failures, or an infrastructure dependency-resolution failure before Face tests ran.
  • PythonTests lightgbm and Databricks GPU E2E passed in build 234219169, clearing the previous run's infrastructure-only LightGBM cleanup failure.
  • Target CI repair PR 2691 passed all 65 jobs in exact-head build 234253942; after it merges, this PR must be rebased and rerun against the repaired target.

Copilot AI lite review requested due to automatic review settings September 1, 2026 23:19
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

Hey Rana Singh (@ranadeepsingh) 👋!
Thank you so much for contributing to our repository 🙌.
Someone from SynapseML Team will be reviewing this pull request soon.

We use semantic commit messages to streamline the release process.
Before your pull request can be merged, you should make sure your first commit and PR title start with a semantic prefix.
This helps us to create release messages and credit you for your hard work!

Examples of commit messages with semantic prefixes:

  • fix: Fix LightGBM crashes with empty partitions
  • feat: Make HTTP on Spark back-offs configurable
  • docs: Update Spark Serving usage
  • build: Add codecov support
  • perf: improve LightGBM memory usage
  • refactor: make python code generation rely on classes
  • style: Remove nulls from CNTKModel
  • test: Add test coverage for CNTKModel

To test your commit locally, please follow our guild on building from source.
Check out the developer guide for additional guidance on testing your change.

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.

Copilot review overview

🟡 Changes recommended

The current marker-trust logic can allow a spoofed implicit-auth marker to trigger auth-switching/refresh behavior on trusted endpoints, and endpoint-path normalization has a null/locale edge case that can break validation.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review tier: Lite
Findings: 1 High severity · 1 Medium severity

New issues introduced by this change (2)
Severity Finding
High severity core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​io/​http/​HTTPClients.scalausesTrustedFabricAuth currently trusts the presence of X-SynapseML-Implicit-Fabric-Auth alone.…
Medium severity core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​fabric/​FabricClient.scalatrustedPath calls rawPath.toLowerCase and later rawPath.replaceAll(...) without guarding…
What changed in this PR

This PR improves reliability of Fabric-hosted OpenAI (AI Functions) calls by enabling a safe, replayable auth refresh on trusted 401s, while preserving explicit caller auth and maintaining existing 429 backoff behavior. It introduces an internal marker header to opt only implicit Fabric-default OpenAI requests into auth-aware retries, adds endpoint validation, and adds token-cache invalidation + refresh single-flight.

Changes:

  • Add sendWithFabricAuthRetries and route only trusted implicit Fabric OpenAI requests through auth-refresh-aware retry logic.
  • Add an internal Fabric auth marker header that is stripped before transmission and used to decide eligibility for replay/refresh.
  • Add Fabric token cache invalidation helpers + workspace/artifact single-flight refresh lock, plus targeted Scala tests.
File Description
core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​io/​http/​HTTPClients.scala Adds Fabric-auth-aware retry path and routes eligible requests through it.
core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​io/​http/​HTTPSchema.scala Adds Fabric auth marker constant/helpers; strips marker from outgoing headers.
core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​fabric/​FabricClient.scala Adds trusted endpoint validation and synchronized token refresh logic.
core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​fabric/​TokenLibrary.scala Adds runtime/NFS/in-memory token cache invalidation plumbing.
cognitive/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​services/​CognitiveServiceBase.scala Tracks whether Fabric fallback auth was used and conditionally sets marker header.
cognitive/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​services/​openai/​OpenAI.scala Limits Fabric fallback auth + retry eligibility to implicit default Fabric OpenAI endpoint.
cognitive/​src/​test/​scala/​com/​microsoft/​azure/​synapse/​ml/​services/​openai/​OpenAIFabricHeadersSuite.scala Verifies marker is set only for implicit Fabric auth and is stripped before sending.
core/​src/​test/​scala/​com/​microsoft/​azure/​synapse/​ml/​io/​split1/​VerifySendWithRetries.scala Adds tests for 401 replay/refresh, 429 reacquisition, and endpoint validation behavior.
core/​src/​test/​scala/​com/​microsoft/​azure/​synapse/​ml/​fabric/​VerifyTokenInvalidation.scala Adds unit test for encoded NFS cache key invalidation flow.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ranadeepsingh Rana Singh (ranadeepsingh) changed the title Refresh Fabric authentication during AI Functions retries fix: Refresh Fabric authentication during AI Functions retries Sep 2, 2026
Copilot AI review requested due to automatic review settings September 2, 2026 00:48

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.

Copilot review overview

🔵 Needs a closer look

A small but concrete performance/reliability issue remains in TokenLibrary.objectMethod where .toSeq.headOption forces reflection over all candidates instead of short-circuiting on the first match.

Review tier: Lite
Findings: None

Issues resolved since last review (2)
Severity Finding
Medium severity core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​fabric/​FabricClient.scalatrustedPath calls rawPath.toLowerCase and later rawPath.replaceAll(...) without guarding… View resolved comment
High severity core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​io/​http/​HTTPClients.scalausesTrustedFabricAuth currently trusts the presence of X-SynapseML-Implicit-Fabric-Auth alone.… View resolved comment
Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

core/src/main/scala/com/microsoft/azure/synapse/ml/fabric/TokenLibrary.scala:79

  • objectMethod materializes the full iterator with .toSeq.headOption, so it will attempt to load and reflect on all candidate class names even after a match is found. This adds unnecessary classloading/reflection overhead and can also trigger avoidable failures if a later candidate class has initialization/linkage issues. Short-circuit after the first successful match.

Copilot AI review requested due to automatic review settings September 2, 2026 00:54
@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

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.

Copilot review overview

🔵 Needs a closer look

responseBodyForInspection can throw during 429/401 inspection and break retry handling by propagating exceptions and/or partially consuming the response stream.

Review tier: Lite
Findings: None

Issues resolved since last review (2)
Severity Finding
Medium severity core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​fabric/​FabricClient.scalatrustedPath calls rawPath.toLowerCase and later rawPath.replaceAll(...) without guarding… View resolved comment
High severity core/​src/​main/​scala/​com/​microsoft/​azure/​synapse/​ml/​io/​http/​HTTPClients.scalausesTrustedFabricAuth currently trusts the presence of X-SynapseML-Implicit-Fabric-Auth alone.… View resolved comment
Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

core/src/main/scala/com/microsoft/azure/synapse/ml/io/http/HTTPClients.scala:124

  • responseBodyForInspection currently lets exceptions from entity.getContent, IOUtils.copyLarge, and/or stream cleanup propagate. That can abort the retry logic on 429/401 inspection paths, and can also leave the response entity partially consumed. Make inspection best-effort by catching NonFatal and, on failure, replaying any bytes already read back into the response entity before continuing.

Copilot AI review requested due to automatic review settings September 2, 2026 01:07
@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

Addressed the current and previously suppressed automated-review findings in d029d5d: TokenLibrary.objectMethod now short-circuits after the first compatible runtime class, and bounded response inspection catches non-fatal read/cleanup failures, reconstructs any partially consumed entity, and continues retry classification. Added VerifyResponseBodyInspection to prove a partial-read failure does not escape and the body remains readable. Local evidence: VerifySendWithRetries 23/23, VerifyResponseBodyInspection 1/1, VerifyTokenInvalidation 3/3; core/cognitive compile and test-compile; production/test scalastyle; codegen/packagePython; generated-wrapper compilation; pinned Black.

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

Addressed the final head-specific suppressed findings in d029d5d: runtime reflection now short-circuits after the first compatible class, and bounded response inspection is best-effort while replaying partially read bytes after failures. Validation: scalastyle/test:scalastyle; VerifyResponseBodyInspection 1 passed; VerifySendWithRetries 23 passed; VerifyTokenInvalidation 3 passed.

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.

Copilot review overview

🟢 Approval recommended

The retry/auth changes are well-scoped, preserve explicit credentials, and are backed by targeted regression tests; only a minor resource-cleanup improvement remains.

Review tier: Lite
Findings: None

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

core/src/main/scala/com/microsoft/azure/synapse/ml/io/http/HTTPClients.scala:390

  • advanced builds a preview message by reading r.getEntity.getContent but never closes that InputStream. Even with ByteArrayEntity this is best-effort resource cleanup, and it becomes a leak if a different streaming entity type is ever used in HTTPRequestData.toHTTPCore or downstream callers. Wrap the read in a try/finally that closes the stream, and ensure previewRequest.releaseConnection() runs in a finally as well.

Copilot AI review requested due to automatic review settings September 2, 2026 01:13
@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

Addressed the final current-head suppressed cleanup finding in 28ae704: request previewing now closes the entity stream in finally and always releases the preview request. VerifyResponseBodyInspection proves both cleanup actions. Current local result: 2/2 in the focused suite; core production/test scalastyle remains clean.

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

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.

Copilot review overview

🔵 Needs a closer look

TokenLibrary’s new reflection-based cache invalidation path can throw on unexpected runtime behaviors (instead of safely degrading), which risks breaking auth refresh/retry in production.

Review tier: Lite
Findings: None

Suppressed comments (2)

Previously missed (2) — in code that hasn't changed since the last review.

core/src/main/scala/com/microsoft/azure/synapse/ml/fabric/TokenLibrary.scala:77

  • objectMethod only catches ClassNotFoundException/NoSuchFieldException. Other reflective failures (e.g., IllegalAccessException, InvocationTargetException from module lookup, or SecurityException) will currently escape and can break auth refresh/invalidation paths instead of cleanly falling back to the next strategy.
    core/src/main/scala/com/microsoft/azure/synapse/ml/fabric/TokenLibrary.scala:112
  • deleteNfsToken throws an IllegalStateException for an unexpected return type from getNFSTokenFilePath. That exception will abort token invalidation entirely (and prevents the in-memory cache clear from running), which is risky in a best-effort refresh path. Prefer treating unknown types as "can't delete" and continuing so other invalidation mechanisms can still succeed.

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

Addressed the eager preview finding in d4e7293: request reconstruction and POST body reads now remain inside the by-name debug log expression, so normal execution does not allocate or consume a preview. Existing preview cleanup coverage remains green.

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.

Copilot review overview

🔵 Needs a closer look

It changes core HTTP/auth retry behavior (including token invalidation and endpoint trust validation), which is high impact and merits final human review despite strong targeted tests.

Review tier: Lite
Findings: None

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

Current exact-head CI evidence (not a readiness claim): Azure build 234078853 validates merge d18f13d9 for head d4e7293b. Changed-path gates are green: UnitTests io1, Style, and Release Branch Compatibility Check spark4.1; the OpenAI job ran OpenAIFabricHeadersSuite and OpenAIFabricAuthRetrySuite successfully, then failed only the pre-existing OpenAIPromptSuite AI Foundry expectation. Current target build 234063227 at 98196110 reproduces that OpenAI failure and the same broad service-test failures. Additional current-build failures are proven infrastructure: lightgbm4 unit tests passed before Azure coverage publishing hit a TLS certificate-name mismatch, and Databricks CPU-2 authentication hit the same mismatch before E2E ran. Databricks GPU E2E is still in progress, so the PR remains blocked on CI/baseline health.

Copilot AI review requested due to automatic review settings September 2, 2026 03:46
@ranadeepsingh
Rana Singh (ranadeepsingh) force-pushed the ai-functions-fabric-auth-refresh branch from d4e7293 to d778d98 Compare September 2, 2026 03:46
@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

Rebased without conflicts onto master 2fb7e72. The complete patch and commit messages are unchanged; post-rebase local gates are green. New pushed head: d778d98.

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

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.

Copilot review overview

🔵 Needs a closer look

It changes security- and reliability-critical authentication and retry behavior (including reflection-based runtime invalidation), so it warrants final human review despite strong targeted test coverage.

Review tier: Lite
Findings: None

AB#3582121

## Summary
Add Fabric authentication provenance to implicit OpenAI requests, reconstruct requests for retry-safe replay, refresh authorization once after a trusted 401, and reacquire current authorization across 429 retries. Add bounded endpoint validation, runtime cache invalidation compatibility, and targeted Scala coverage.

## Prompting Intent
The engineer asked to close the Fabric authentication refresh gap for long-running PySpark AI Functions calls, preserve request behavior across retries, review the implementation, and prepare it for an upstream pull request.

## Linked Sources
- Work item: https://dev.azure.com/msdata/A365/_workitems/edit/3582121
- Requirements: engineer request captured in Copilot session 98752775-8e28-43eb-9609-2249dd586f80
- Related source change: companion SynapseML-Internal pandas pull request, linked from the PR description

## Rationale
Use internal provenance rather than inferring authentication from user headers, strip that marker before transmission, and refresh only requests constrained to the trusted Fabric OpenAI endpoint. Reconstruct requests from buffered bodies and original headers so a single 401 replay and existing 429 retries preserve payloads and caller intent without extending Fabric refresh behavior to custom endpoints.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
AB#3380998

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
AB#3582121

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
Short-circuit Fabric runtime reflection after the first compatible class and make bounded response inspection best-effort while replaying partially read bytes.

AB#3582121

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
Close preview entity streams and always release preview requests, with focused cleanup coverage.

AB#3582121

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
Continue through broken reflection candidates and unsupported NFS path types so compatible cache invalidation mechanisms can still run.

AB#3582121

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
Move auth provenance coverage into a focused test file so the master patch replays cleanly onto the spark4.1 release branch.

AB#3582121

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
Avoid inaccessible reflective methods, tolerate supported reflection fallback failures, and continue past NFS deletion errors so in-memory invalidation can still run.

AB#3582121

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
Keep preview body reconstruction lazy so normal request execution does not read and allocate a duplicate POST body solely for disabled debug logging.

AB#3582121

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 98752775-8e28-43eb-9609-2249dd586f80
@ranadeepsingh
Rana Singh (ranadeepsingh) force-pushed the ai-functions-fabric-auth-refresh branch from d778d98 to dea4a52 Compare September 2, 2026 07:38
Copilot AI review requested due to automatic review settings September 2, 2026 07:38

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.

Copilot review overview

🔵 Needs a closer look

It modifies authentication, retry, and request/response replay behavior in core HTTP handling, which is high-impact and warrants final human review despite strong targeted test coverage.

Review tier: Lite
Findings: None

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 80.68966% with 28 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.85%. Comparing base (1db3c40) to head (dea4a52).

Files with missing lines Patch % Lines
...crosoft/azure/synapse/ml/io/http/HTTPClients.scala 78.57% 24 Missing ⚠️
...soft/azure/synapse/ml/services/openai/OpenAI.scala 25.00% 3 Missing ⚠️
...ure/synapse/ml/services/CognitiveServiceBase.scala 94.73% 1 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #2685      +/-   ##
==========================================
- Coverage   86.89%   86.85%   -0.04%     
==========================================
  Files         341      341              
  Lines       20742    20871     +129     
  Branches     2166     2231      +65     
==========================================
+ Hits        18023    18127     +104     
- Misses       2719     2744      +25     
Files with missing lines Coverage Δ
...icrosoft/azure/synapse/ml/io/http/HTTPSchema.scala 93.33% <100.00%> (+3.26%) ⬆️
...ure/synapse/ml/services/CognitiveServiceBase.scala 94.16% <94.73%> (-0.10%) ⬇️
...soft/azure/synapse/ml/services/openai/OpenAI.scala 90.29% <25.00%> (-1.13%) ⬇️
...crosoft/azure/synapse/ml/io/http/HTTPClients.scala 83.91% <78.57%> (-6.71%) ⬇️

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants