Skip to content

Commit ca9468a

Browse files
authored
Merge branch 'main' into check_samples
2 parents 8b2fe9b + 5d355ac commit ca9468a

File tree

122 files changed

+1114
-793
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

122 files changed

+1114
-793
lines changed

dotnet/samples/GettingStarted/AgentProviders/Agent_With_CustomImplementation/Program.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ internal sealed class UpperCaseParrotAgent : AIAgent
2828
{
2929
public override string? Name => "UpperCaseParrotAgent";
3030

31-
public override ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default)
31+
protected override ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default)
3232
=> new(new CustomAgentSession());
3333

34-
public override JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
34+
protected override JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
3535
{
3636
if (session is not CustomAgentSession typedSession)
3737
{
@@ -41,7 +41,7 @@ public override JsonElement SerializeSession(AgentSession session, JsonSerialize
4141
return typedSession.Serialize(jsonSerializerOptions);
4242
}
4343

44-
public override ValueTask<AgentSession> DeserializeSessionAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
44+
protected override ValueTask<AgentSession> DeserializeSessionCoreAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
4545
=> new(new CustomAgentSession(serializedState, jsonSerializerOptions));
4646

4747
protected override async Task<AgentResponse> RunCoreAsync(IEnumerable<ChatMessage> messages, AgentSession? session = null, AgentRunOptions? options = null, CancellationToken cancellationToken = default)

dotnet/src/Microsoft.Agents.AI.A2A/A2AAgent.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public A2AAgent(A2AClient a2aClient, string? id = null, string? name = null, str
5454
}
5555

5656
/// <inheritdoc/>
57-
public sealed override ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default)
57+
protected sealed override ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default)
5858
=> new(new A2AAgentSession());
5959

6060
/// <summary>
@@ -66,7 +66,7 @@ public ValueTask<AgentSession> CreateSessionAsync(string contextId)
6666
=> new(new A2AAgentSession() { ContextId = contextId });
6767

6868
/// <inheritdoc/>
69-
public override JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
69+
protected override JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
7070
{
7171
_ = Throw.IfNull(session);
7272

@@ -79,7 +79,7 @@ public override JsonElement SerializeSession(AgentSession session, JsonSerialize
7979
}
8080

8181
/// <inheritdoc/>
82-
public override ValueTask<AgentSession> DeserializeSessionAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
82+
protected override ValueTask<AgentSession> DeserializeSessionCoreAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
8383
=> new(new A2AAgentSession(serializedState, jsonSerializerOptions));
8484

8585
/// <inheritdoc/>

dotnet/src/Microsoft.Agents.AI.Abstractions/AIAgent.cs

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,18 @@ public static AgentRunContext? CurrentRunContext
139139
/// may be deferred until first use to optimize performance.
140140
/// </para>
141141
/// </remarks>
142-
public abstract ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default);
142+
public ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default)
143+
=> this.CreateSessionCoreAsync(cancellationToken);
144+
145+
/// <summary>
146+
/// Core implementation of session creation logic.
147+
/// </summary>
148+
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
149+
/// <returns>A value task that represents the asynchronous operation. The task result contains a new <see cref="AgentSession"/> instance ready for use with this agent.</returns>
150+
/// <remarks>
151+
/// This is the primary session creation method that implementations must override.
152+
/// </remarks>
153+
protected abstract ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default);
143154

144155
/// <summary>
145156
/// Serializes an agent session to its JSON representation.
@@ -154,7 +165,19 @@ public static AgentRunContext? CurrentRunContext
154165
/// allowing conversations to resume across application restarts or be migrated between
155166
/// different agent instances. Use <see cref="DeserializeSessionAsync"/> to restore the session.
156167
/// </remarks>
157-
public abstract JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null);
168+
public JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
169+
=> this.SerializeSessionCore(session, jsonSerializerOptions);
170+
171+
/// <summary>
172+
/// Core implementation of session serialization logic.
173+
/// </summary>
174+
/// <param name="session">The <see cref="AgentSession"/> to serialize.</param>
175+
/// <param name="jsonSerializerOptions">Optional settings to customize the serialization process.</param>
176+
/// <returns>A <see cref="JsonElement"/> containing the serialized session state.</returns>
177+
/// <remarks>
178+
/// This is the primary session serialization method that implementations must override.
179+
/// </remarks>
180+
protected abstract JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null);
158181

159182
/// <summary>
160183
/// Deserializes an agent session from its JSON serialized representation.
@@ -170,7 +193,20 @@ public static AgentRunContext? CurrentRunContext
170193
/// allowing conversations to resume across application restarts or be migrated between
171194
/// different agent instances.
172195
/// </remarks>
173-
public abstract ValueTask<AgentSession> DeserializeSessionAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default);
196+
public ValueTask<AgentSession> DeserializeSessionAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
197+
=> this.DeserializeSessionCoreAsync(serializedState, jsonSerializerOptions, cancellationToken);
198+
199+
/// <summary>
200+
/// Core implementation of session deserialization logic.
201+
/// </summary>
202+
/// <param name="serializedState">A <see cref="JsonElement"/> containing the serialized session state.</param>
203+
/// <param name="jsonSerializerOptions">Optional settings to customize the deserialization process.</param>
204+
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
205+
/// <returns>A value task that represents the asynchronous operation. The task result contains a restored <see cref="AgentSession"/> instance with the state from <paramref name="serializedState"/>.</returns>
206+
/// <remarks>
207+
/// This is the primary session deserialization method that implementations must override.
208+
/// </remarks>
209+
protected abstract ValueTask<AgentSession> DeserializeSessionCoreAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default);
174210

175211
/// <summary>
176212
/// Run the agent with no message assuming that all required instructions are already provided to the agent or on the session.

dotnet/src/Microsoft.Agents.AI.Abstractions/DelegatingAIAgent.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,14 @@ protected DelegatingAIAgent(AIAgent innerAgent)
7474
}
7575

7676
/// <inheritdoc />
77-
public override ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default) => this.InnerAgent.CreateSessionAsync(cancellationToken);
77+
protected override ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default) => this.InnerAgent.CreateSessionAsync(cancellationToken);
7878

7979
/// <inheritdoc />
80-
public override JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
80+
protected override JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
8181
=> this.InnerAgent.SerializeSession(session, jsonSerializerOptions);
8282

8383
/// <inheritdoc />
84-
public override ValueTask<AgentSession> DeserializeSessionAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
84+
protected override ValueTask<AgentSession> DeserializeSessionCoreAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
8585
=> this.InnerAgent.DeserializeSessionAsync(serializedState, jsonSerializerOptions, cancellationToken);
8686

8787
/// <inheritdoc />

dotnet/src/Microsoft.Agents.AI.CopilotStudio/CopilotStudioAgent.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public CopilotStudioAgent(CopilotClient client, ILoggerFactory? loggerFactory =
4242
}
4343

4444
/// <inheritdoc/>
45-
public sealed override ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default)
45+
protected sealed override ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default)
4646
=> new(new CopilotStudioAgentSession());
4747

4848
/// <summary>
@@ -54,7 +54,7 @@ public ValueTask<AgentSession> CreateSessionAsync(string conversationId)
5454
=> new(new CopilotStudioAgentSession() { ConversationId = conversationId });
5555

5656
/// <inheritdoc/>
57-
public override JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
57+
protected override JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
5858
{
5959
Throw.IfNull(session);
6060

@@ -67,7 +67,7 @@ public override JsonElement SerializeSession(AgentSession session, JsonSerialize
6767
}
6868

6969
/// <inheritdoc/>
70-
public override ValueTask<AgentSession> DeserializeSessionAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
70+
protected override ValueTask<AgentSession> DeserializeSessionCoreAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
7171
=> new(new CopilotStudioAgentSession(serializedState, jsonSerializerOptions));
7272

7373
/// <inheritdoc/>

dotnet/src/Microsoft.Agents.AI.DurableTask/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
- Renamed AgentThread to AgentSession ([#3430](https://github.com/microsoft/agent-framework/pull/3430))
1111
- Moved AgentSession.Serialize to AIAgent.SerializeSession ([#3650](https://github.com/microsoft/agent-framework/pull/3650))
1212
- Renamed serializedSession parameter to serializedState on DeserializeSessionAsync for consistency ([#3681](https://github.com/microsoft/agent-framework/pull/3681))
13+
- Introduce Core method pattern for Session management methods on AIAgent ([#3699](https://github.com/microsoft/agent-framework/pull/3699))
1314

1415
## v1.0.0-preview.251204.1
1516

dotnet/src/Microsoft.Agents.AI.DurableTask/DurableAIAgent.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ internal DurableAIAgent(TaskOrchestrationContext context, string agentName)
3434
/// </summary>
3535
/// <param name="cancellationToken">The cancellation token.</param>
3636
/// <returns>A value task that represents the asynchronous operation. The task result contains a new agent session.</returns>
37-
public override ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default)
37+
protected override ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default)
3838
{
3939
AgentSessionId sessionId = this._context.NewAgentSessionId(this._agentName);
4040
return ValueTask.FromResult<AgentSession>(new DurableAgentSession(sessionId));
@@ -46,7 +46,7 @@ public override ValueTask<AgentSession> CreateSessionAsync(CancellationToken can
4646
/// <param name="session">The session to serialize.</param>
4747
/// <param name="jsonSerializerOptions">Optional JSON serializer options.</param>
4848
/// <returns>A <see cref="JsonElement"/> containing the serialized session state.</returns>
49-
public override JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
49+
protected override JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
5050
{
5151
if (session is null)
5252
{
@@ -68,7 +68,7 @@ public override JsonElement SerializeSession(AgentSession session, JsonSerialize
6868
/// <param name="jsonSerializerOptions">Optional JSON serializer options.</param>
6969
/// <param name="cancellationToken">The cancellation token.</param>
7070
/// <returns>A value task that represents the asynchronous operation. The task result contains the deserialized agent session.</returns>
71-
public override ValueTask<AgentSession> DeserializeSessionAsync(
71+
protected override ValueTask<AgentSession> DeserializeSessionCoreAsync(
7272
JsonElement serializedState,
7373
JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
7474
{

dotnet/src/Microsoft.Agents.AI.DurableTask/DurableAIAgentProxy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ internal class DurableAIAgentProxy(string name, IDurableAgentClient agentClient)
1111

1212
public override string? Name { get; } = name;
1313

14-
public override JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
14+
protected override JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
1515
{
1616
if (session is null)
1717
{
@@ -26,14 +26,14 @@ public override JsonElement SerializeSession(AgentSession session, JsonSerialize
2626
return durableSession.Serialize(jsonSerializerOptions);
2727
}
2828

29-
public override ValueTask<AgentSession> DeserializeSessionAsync(
29+
protected override ValueTask<AgentSession> DeserializeSessionCoreAsync(
3030
JsonElement serializedState,
3131
JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
3232
{
3333
return ValueTask.FromResult<AgentSession>(DurableAgentSession.Deserialize(serializedState, jsonSerializerOptions));
3434
}
3535

36-
public override ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default)
36+
protected override ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default)
3737
{
3838
return ValueTask.FromResult<AgentSession>(new DurableAgentSession(AgentSessionId.WithRandomKey(this.Name!)));
3939
}

dotnet/src/Microsoft.Agents.AI.GitHub.Copilot/GitHubCopilotAgent.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public GitHubCopilotAgent(
8686
}
8787

8888
/// <inheritdoc/>
89-
public sealed override ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default)
89+
protected sealed override ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default)
9090
=> new(new GitHubCopilotAgentSession());
9191

9292
/// <summary>
@@ -98,7 +98,7 @@ public ValueTask<AgentSession> CreateSessionAsync(string sessionId)
9898
=> new(new GitHubCopilotAgentSession() { SessionId = sessionId });
9999

100100
/// <inheritdoc/>
101-
public override JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
101+
protected override JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
102102
{
103103
_ = Throw.IfNull(session);
104104

@@ -111,7 +111,7 @@ public override JsonElement SerializeSession(AgentSession session, JsonSerialize
111111
}
112112

113113
/// <inheritdoc/>
114-
public override ValueTask<AgentSession> DeserializeSessionAsync(
114+
protected override ValueTask<AgentSession> DeserializeSessionCoreAsync(
115115
JsonElement serializedState,
116116
JsonSerializerOptions? jsonSerializerOptions = null,
117117
CancellationToken cancellationToken = default)

dotnet/src/Microsoft.Agents.AI.Purview/PurviewAgent.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,19 @@ public PurviewAgent(AIAgent innerAgent, PurviewWrapper purviewWrapper)
3030
}
3131

3232
/// <inheritdoc/>
33-
public override JsonElement SerializeSession(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
33+
protected override JsonElement SerializeSessionCore(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null)
3434
{
3535
return this._innerAgent.SerializeSession(session, jsonSerializerOptions);
3636
}
3737

3838
/// <inheritdoc/>
39-
public override ValueTask<AgentSession> DeserializeSessionAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
39+
protected override ValueTask<AgentSession> DeserializeSessionCoreAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default)
4040
{
4141
return this._innerAgent.DeserializeSessionAsync(serializedState, jsonSerializerOptions, cancellationToken);
4242
}
4343

4444
/// <inheritdoc/>
45-
public override ValueTask<AgentSession> CreateSessionAsync(CancellationToken cancellationToken = default)
45+
protected override ValueTask<AgentSession> CreateSessionCoreAsync(CancellationToken cancellationToken = default)
4646
{
4747
return this._innerAgent.CreateSessionAsync(cancellationToken);
4848
}

0 commit comments

Comments
 (0)