Skip to content

Python: Add on_intermediate_message callback to the Agent abstraction #11321

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

TaoChenOSU
Copy link
Contributor

@TaoChenOSU TaoChenOSU commented Apr 1, 2025

Motivation and Context

Currently, our agents' invoke and invoke_stream have inconsistent behavior where the responses may contain different contents. For example, the chat completion agent (invoke) may return all content types generated by the agent including function call/result contents that are meant to be internal only, while the assistant agent doesn't return those contents. This creates confusion both for users and developers of SK of what an agent should return when working with agents.

Description

This PR standardizes the behavior of agents by adding an on_intermediate_message parameter to the invoke and invoke_stream methods in the Agent abstraction. This parameter accepts a callback function that will be called whenever a new message is generated by the agent, except the last one that gets returned to the caller. This allows the caller to inspect what the agent did after a response is returned. In addition, this PR also converges on the behavior of the invoke and invoke_stream methods (respectively) to return the same content types from all agents, making it easier for users to work with agents

Contribution Checklist

@TaoChenOSU TaoChenOSU added python Pull requests for the Python Semantic Kernel agents labels Apr 1, 2025
@TaoChenOSU TaoChenOSU self-assigned this Apr 1, 2025
@TaoChenOSU TaoChenOSU requested a review from a team as a code owner April 1, 2025 19:30
@github-actions github-actions bot changed the title Add on_new_message to the Agent abstraction Python: Add on_new_message to the Agent abstraction Apr 1, 2025
@TaoChenOSU TaoChenOSU marked this pull request as draft April 1, 2025 19:31
@TaoChenOSU TaoChenOSU marked this pull request as ready for review April 1, 2025 22:41
@markwallace-microsoft
Copy link
Member

markwallace-microsoft commented Apr 1, 2025

Python Unit Test Overview

Tests Skipped Failures Errors Time
3405 5 💤 0 ❌ 0 🔥 1m 33s ⏱️

moonbox3
moonbox3 previously approved these changes Apr 1, 2025
alliscode
alliscode previously approved these changes Apr 2, 2025
moonbox3
moonbox3 previously approved these changes Apr 2, 2025
@moonbox3 moonbox3 changed the title Python: Add on_new_message to the Agent abstraction Python: Add on_intermediate_message callback to the Agent abstraction Apr 3, 2025
@TaoChenOSU TaoChenOSU requested review from moonbox3 and alliscode April 3, 2025 15:57
alliscode
alliscode previously approved these changes Apr 3, 2025
moonbox3
moonbox3 previously approved these changes Apr 3, 2025
@TaoChenOSU TaoChenOSU added this pull request to the merge queue Apr 3, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Apr 3, 2025
@TaoChenOSU TaoChenOSU added this pull request to the merge queue Apr 3, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Apr 3, 2025
@TaoChenOSU TaoChenOSU dismissed stale reviews from moonbox3 and alliscode via 99ed8c5 April 3, 2025 21:23
@TaoChenOSU TaoChenOSU enabled auto-merge April 3, 2025 21:48
@TaoChenOSU TaoChenOSU added this pull request to the merge queue Apr 3, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Apr 3, 2025
@moonbox3 moonbox3 added this pull request to the merge queue Apr 3, 2025
Merged via the queue into microsoft:main with commit 94a78d1 Apr 3, 2025
28 checks passed
@github-project-automation github-project-automation bot moved this to Sprint: Done in Semantic Kernel Apr 3, 2025
glorious-beard pushed a commit to glorious-beard/semantic-kernel that referenced this pull request Apr 6, 2025
…microsoft#11321)

### 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.
-->
Currently, our agents' `invoke` and `invoke_stream` have inconsistent
behavior where the responses may contain different contents. For
example, the chat completion agent (`invoke`) may return all content
types generated by the agent including function call/result contents
that are meant to be internal only, while the assistant agent doesn't
return those contents. This creates confusion both for users and
developers of SK of what an agent should return when working with
agents.

### Description

<!-- Describe your changes, the overall approach, the underlying design.
These notes will help understanding how your code works. Thanks! -->
This PR standardizes the behavior of agents by adding an
`on_intermediate_message ` parameter to the `invoke` and `invoke_stream`
methods in the `Agent` abstraction. This parameter accepts a callback
function that will be called whenever a new message is generated by the
agent, except the last one that gets returned to the caller. This allows
the caller to inspect what the agent did after a response is returned.
In addition, this PR also converges on the behavior of the `invoke` and
`invoke_stream` methods (respectively) to return the same content types
from all agents, making it easier for users to work with agents

### 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
- [ ] I didn't break anyone 😄
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
agents documentation python Pull requests for the Python Semantic Kernel
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

4 participants