Skip to content

Commit a9b20b1

Browse files
authored
.Net Agents - Support role-override for ChatCompletionAgent (#10601)
### Motivation and Context <!-- Thank you for your contribution to the semantic-kernel repo! Please help reviewers and future users, providing the following information: 1. Why is this change required? 2. What problem does it solve? 3. What scenario does it contribute to? 4. If it fixes an open issue, please link to the issue here. --> The "O*" series deep-reasoning models from OpenAI do not support `System` role. For certain versions, support was added for a `Developer` role. ### Description <!-- Describe your changes, the overall approach, the underlying design. These notes will help understanding how your code works. Thanks! --> Allow `ChatCompletionAgent` make use of "O*" series models by supporting `InstructionsRole` that may be optionally overriden. ### Contribution Checklist <!-- Before submitting this PR, please make sure: --> - [X] The code builds clean without any errors or warnings - [X] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [X] All unit tests pass, and I have added new tests where possible - [X] I didn't break anyone 😄
1 parent b6e4e66 commit a9b20b1

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

dotnet/src/Agents/Core/ChatCompletionAgent.cs

+12-1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,17 @@ public ChatCompletionAgent(
4747
this.Template = templateFactory?.Create(templateConfig);
4848
}
4949

50+
/// <summary>
51+
/// Gets the role used for the agent instructions. Defaults to "system".
52+
/// </summary>
53+
/// <remarks>
54+
/// Certain versions of "O*" series (deep reasoning) models require the instructions
55+
/// to be provided as "developer" role. Other versions support neither role and
56+
/// an agent targeting such a model cannot provide instructions. Agent functionality
57+
/// will be dictated entirely by the provided plugins.
58+
/// </remarks>
59+
public AuthorRole InstructionsRole { get; init; } = AuthorRole.System;
60+
5061
/// <inheritdoc/>
5162
public override IAsyncEnumerable<ChatMessageContent> InvokeAsync(
5263
ChatHistory history,
@@ -113,7 +124,7 @@ private async Task<ChatHistory> SetupAgentChatHistoryAsync(
113124

114125
if (!string.IsNullOrWhiteSpace(instructions))
115126
{
116-
chat.Add(new ChatMessageContent(AuthorRole.System, instructions) { AuthorName = this.Name });
127+
chat.Add(new ChatMessageContent(this.InstructionsRole, instructions) { AuthorName = this.Name });
117128
}
118129

119130
chat.AddRange(history);

0 commit comments

Comments
 (0)