Experimental API Changes
Now Stable
IChatReducerinterface — graduated from experimental to stable. The interface is now stable; concrete implementations (MessageCountingChatReducer,SummarizingChatReducer,ReducingChatClient) remain experimental. #7235 by @jeffhandleyFunctionCallContentandFunctionResultContentunsealed — changed fromsealed classtoclass, enabling derivation. #7229 by @stephentoub (co-authored by @Copilot)
Breaking Changes to Experimental APIs
- Experimental diagnostic ID reorganization — the blanket
MEAI001diagnostic ID was split into feature-specific constants. OpenAI-specific experimental APIs now useOPENAI001,OPENAI002, orSCME0001instead ofMEAI001. Consumers who suppressedMEAI001for OpenAI APIs may need to suppressOPENAI001/OPENAI002instead. #7116 by @jeffhandley (co-authored by @Copilot), #7235 by @jeffhandley
New Experimental APIs
- Chat reduction implementations —
MessageCountingChatReducer,SummarizingChatReducer,ReducingChatClient, andUseChatReducerbuilder extension. #7235 by @jeffhandley - OpenAI Responses/Assistants/Realtime/Image/Audio integrations — assigned feature-specific experimental diagnostic IDs (
OPENAI001,OPENAI002). #7235 by @jeffhandley ImageGenerationToolCallContentandImageGenerationToolResultContent— added to JSON serialization infrastructure. #7275 by @stephentoub (co-authored by @Copilot)
What's Changed
AI
- Add ReasoningOptions to ChatOptions #7252 by @stephentoub (co-authored by @Copilot)
- Add LoadFromAsync and SaveToAsync helper methods to DataContent #7159 by @stephentoub (co-authored by @Copilot)
- Add FunctionCallContent.InformationalOnly property #7126, #7262 by @stephentoub (co-authored by @Copilot)
- Add server tool call support to OpenTelemetryChatClient per semantic conventions #7240 by @stephentoub (co-authored by @Copilot)
- Add ImageGenerationToolCallContent and ImageGenerationToolResultContent to JSON serialization infrastructure #7275 by @stephentoub (co-authored by @Copilot)
- Add logging to FunctionInvokingChatClient for approval flow, error handling, and loop control #7228 by @stephentoub (co-authored by @Copilot)
- Allow FunctionResultContent pass-through when CallId matches #7229 by @stephentoub (co-authored by @Copilot)
- Remove AIFunctionDeclaration tools on last iteration in FunctionInvokingChatClient #7207 by @stephentoub (co-authored by @Copilot)
- Propagate CachedInputTokenCount in OpenTelemetry telemetry #7234 by @stephentoub (co-authored by @Copilot)
- Categorize MEAI001 experimental APIs #7116 by @jeffhandley (co-authored by @Copilot)
- MEAI: Update Experimental / Preview Features #7235 by @jeffhandley
- ToChatResponse: Merge AdditionalProperties into ChatMessage instead of ChatResponse #7194 by @stephentoub (co-authored by @Copilot)
- Fix FunctionInvokingChatClient to respect ChatOptions.Tools modifications by function tools #7218 by @stephentoub (co-authored by @Copilot)
- Fix FunctionInvokingChatClient invoke_agent span detection with exact match or space delimiter #7224 by @stephentoub (co-authored by @Copilot)
- Fix approval request/response correlation in FunctionInvokingChatClient #7261 by @stephentoub (co-authored by @Copilot)
- Fix DataUriParser to default to text/plain;charset=US-ASCII per RFC 2397 #7247 by @stephentoub (co-authored by @Copilot)
- Fix NRT resolution for AIFunction parameters #7200 by @eiriktsarpalis
- Preserve extra JSON schema properties in ToolJson serialization #7250 by @stephentoub (co-authored by @Copilot)
- Fix token metric unit to use UCUM format {token} #7241 by @stephentoub
- Fix OpenAI responses streaming to preserve encrypted reasoning content #7266 by @stephentoub
- Update OpenAIResponsesChatClient to handle streaming code interpreter content #7267 by @stephentoub
Diagnostics, Health Checks, and Resource Monitoring
- [5752] FakeLogCollector waiting capabilities #6228 by @Demo30
- Bring new cpu.requests formula from Kubernetes #7239 by @amadeuszl
Service Discovery
- Fix deadlock in ServiceEndpointWatcher when disposing change token registration #7255 by @ReubenBond
Compliance, Redaction, and Data Classification
- Add Ordinal into ordering #7225 by @cincuranet
AI Evaluation
- Escape the JSON data before embedding in Evaluation reports #7238 by @peterwald
Documentation Updates
- Update AI changelogs #7206 by @stephentoub
- Remove unnecessary description tags #7226 by @gewarren
- Update M.E.AI changelogs with recent changes #7242 by @stephentoub
- Update OpenTelemetry semantic convention version references from 1.38 to 1.39 #7274 by @tarekgh (co-authored by @Copilot)
Test Improvements
- Fix race condition in UnreliableL2Tests.WriteFailureInvisible #7075 by @stephentoub (co-authored by @Copilot)
Repository Infrastructure Updates
- Add .npmrc next to package.json and add lockfile for PublishAIEvaluationReport #7108 by @akoeplinger
- Set Microsoft.McpServer.ProjectTemplates version to align with MCP packages #7170 by @jeffhandley
- Enable package validation for M.E.AmbientMetadata.Build #7213 by @evgenyfedorov2
- Set network isolation policy for extensions-ci #7221 by @wtgodbe
- Update mcpserver template to ModelContextProtocol 0.7.0-preview.1 #7236 by @jeffhandley (co-authored by @Copilot)
- Update aiagent-webapi template to Agent Framework 1.0.0-preview.260127.1 #7237 by @jeffhandley (co-authored by @Copilot)
- Bump js-yaml from 4.1.0 to 4.1.1 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript #7054
- Bump validator from 13.15.20 to 13.15.23 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript #7103
- Bump qs from 6.14.0 to 6.14.1 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript #7189
- Bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript #7198
- Bump lodash from 4.17.21 to 4.17.23 in /src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript #7227
Acknowledgements
- @cincuranet made their first contribution in #7225
- @ReubenBond made their first contribution in #7255
- @Demo30 submitted issue #5752 (resolved by #6228)
- @peterwald submitted a fix for evaluation report XSS vulnerability in #7238
- @amadeuszl submitted a fix for Kubernetes cpu.requests formula in #7239
- @rainsxng submitted issue #7231 (note: merged after this release)
- @eiriktsarpalis @tarekgh @gewarren @akoeplinger @evgenyfedorov2 @wtgodbe reviewed pull requests
Full Changelog: v10.2.0...v10.3.0