SystemOneSharp.Extensions.AI
0.2.0-preview.1
See the version list below for details.
dotnet add package SystemOneSharp.Extensions.AI --version 0.2.0-preview.1
NuGet\Install-Package SystemOneSharp.Extensions.AI -Version 0.2.0-preview.1
<PackageReference Include="SystemOneSharp.Extensions.AI" Version="0.2.0-preview.1" />
<PackageVersion Include="SystemOneSharp.Extensions.AI" Version="0.2.0-preview.1" />
<PackageReference Include="SystemOneSharp.Extensions.AI" />
paket add SystemOneSharp.Extensions.AI --version 0.2.0-preview.1
#r "nuget: SystemOneSharp.Extensions.AI, 0.2.0-preview.1"
#:package SystemOneSharp.Extensions.AI@0.2.0-preview.1
#addin nuget:?package=SystemOneSharp.Extensions.AI&version=0.2.0-preview.1&prerelease
#tool nuget:?package=SystemOneSharp.Extensions.AI&version=0.2.0-preview.1&prerelease
SystemOneSharp.Extensions.AI
Turns a Microsoft.Extensions.AI conversation into System One state. It is the one projection the evaluation and Agent Framework packages also use, so a conversation looks the same to System One wherever it comes from.
dotnet add package SystemOneSharp.Extensions.AI --prerelease
It depends on SystemOneSharp and Microsoft.Extensions.AI.Abstractions only.
Use
using SystemOneSharp;
using SystemOneSharp.Extensions.AI;
var request = new SystemOneRequestBuilder()
.WithConversation(messages) // IEnumerable<ChatMessage>
.AddNoul("answered", "Did the assistant answer the user's question?")
.Build();
var response = await client.DecideAsync(request);
messages.ToSystemOneState() and SystemOneAiState.Create(messages, options) return the same state as a JsonObject.
The builder method is WithConversation, not WithState: SystemOneRequestBuilder.WithState<T>(T) would otherwise bind first and serialize every property of every ChatMessage.
The state schema
The schema belongs to SystemOneSharp, and it stays the same when ChatMessage gains properties:
{
"messages": [
{ "role": "user", "contents": [ { "type": "text", "text": "Weather in Paris?" } ] },
{ "role": "assistant", "contents": [
{ "type": "function_call", "call_id": "call-1", "name": "get_weather", "arguments": { "city": "Paris" } } ] },
{ "role": "tool", "contents": [
{ "type": "function_result", "call_id": "call-1", "result": "Sunny, 21 °C" } ] }
]
}
Only TextContent, FunctionCallContent and FunctionResultContent are projected. Other types will be added once it is clear what they mean to System One. Reasoning, images, data, usage and tool-approval content are left out by default. A message whose contents are all left out keeps its turn with an empty contents array. Set SystemOneAiStateOptions.ThrowOnUnsupportedContent to get a NotSupportedException instead.
RawRepresentation, AdditionalProperties, author names and message IDs are never included.
Function arguments and results are serialized with AIJsonUtilities.DefaultOptions unless you set SystemOneAiStateOptions.SerializerOptions.
What this package does not do
It has no IChatClient and no decision-client abstraction. Microsoft's proposed provider-neutral decision API (dotnet/extensions#7764) has not shipped. When it does, an adapter from it to ISystemOneClient belongs in this package.
See also: evaluation, Agent Framework, core client.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.AI.Abstractions (>= 10.10.1)
- SystemOneSharp (>= 0.2.0-preview.1)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on SystemOneSharp.Extensions.AI:
| Package | Downloads |
|---|---|
|
SystemOneSharp.Extensions.AI.Evaluation
A Microsoft.Extensions.AI.Evaluation evaluator that turns one System One request into several metrics. |
|
|
SystemOneSharp.AgentFramework
System One completion loop evaluator and function-call gating middleware for Microsoft Agent Framework. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 0.2.0 | 140 | 9/26/2026 | |
| 0.2.0-preview.1 | 78 | 9/25/2026 |