-
Notifications
You must be signed in to change notification settings - Fork 3.4k
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
Python: Bug: Kernel Function plugin not working with AzureAssistantAgent #10141
Comments
Hi @vslepakov, it looks like one of the tool calls may be failing and we're not sending back a result for that particular tool call? Are you able to enable logging so we can get some more information about the number of tool calls being made, and what else could be going on? |
Hi @moonbox3, sure here you go. Let me know if you need anything else: https://gist.github.com/vslepakov/715e7eb0a85688564da987d1633ccbf6 |
Thanks for sending, @vslepakov. I'm not able to reproduce the tool calling issue with an AzureAssistantAgent. Are you able to share some code that I'd be able to use to reproduce it? As a baseline, could you run this sample, please? https://github.com/microsoft/semantic-kernel/blob/main/python/samples/getting_started_with_agents/step7_assistant.py. It makes several tool calls. I'd like to know if you can run that sample, as well, or if you experience failures. Thanks. As a note, I have the |
Thanks @moonbox3. Just add you to my private repo playground. Using the same Not sure if it makes a difference but I am using |
Thanks, @vslepakov. I will take a look at your repo soon. I just adjusted the I see in your logs, though, that right when you send a message to the AzureChatCompletion agent, after first running the AzureAssistantAgent it is failing with the 400. This is puzzling. |
Hi @vslepakov, I've been looking into this more, and was playing around with your code that you gave me access to. I'm not sure if you're running the same code that is in your GitHub repo? I had to make several changes in some files to make things work, based on your agent selection criteria (for example, I have not been able to make it fail in the same way that your logging has showed. I've attached some redacted logs here, so you can see the flow. I see we're making the grading tool call, and then including that tool call response to the formatter (Azure Chat Completion Agent), and I'm not getting the 400 that you previously showed. https://gist.github.com/moonbox3/b0e90068273ec816cc4b42cafe73eb02 Do you have any other tips or code changes I would need to make to get it to fail? Are you able to have it fail 100% of the time? Note: I tested both with gpt-4o and gpt-4o-mini. |
Hi @moonbox3, thanks for your time and your help, really appreciate it! I can repro this on my machine 100% of the time when the plugin is invoked (sometimes it isn't). |
Thanks for your reply. I completely overlooked that you were on that separate branch. Let me try that tomorrow morning. |
@vslepakov I can repro this issue now -- not 100% of the time, but mostly. I'll work on investigating what is going on. Somehow the order of messages from the OpenAI assistant is causing the issue. The order should be:
This causes an issue:
I need to track down where this race condition is happening. :) |
thanks for the heads up @moonbox3! sounds great, let me know if I can help. |
This was a fun one to track down. Here's my analysis: I found that, at times, when the (Azure) OpenAI Assistant Agent makes a tool call, that tool call's creation timestamp is coming after the message creation timestamp (the message creation being the text that the assistant responds with -- it's textual analysis of the poem). Currently in our code, if we have a tool call ( Right now we sort the completed steps in this way: completed_steps_to_process: list[RunStep] = sorted(
[s for s in steps if s.completed_at is not None and s.id not in processed_step_ids],
key=lambda s: s.created_at,
) When there are no failures, it's because the tool call was created before the final message content (as has been since this assistant was first coded). However, it appears that processing on the server-side can cause fluctuations in when the steps are created/processed. When we have a failure, we now have the message_creation (
As I've mentioned the 400 isn't 100% repeatable because of server-side processing, so we will get the correct ordering:
I've tested changing the ordering of how we sort of the completed steps -- if we have a step_type == "tool_calls" and "message_creation", we sort to allow for "tool_calls" to come first, and any ties are broken by the step.completed_at timestamp. This works, and I don't get any incorrect ordering anymore. Let me continue to test, and I should have a fix out soon. |
Describe the bug
Testing the setup described here with a bugfix released in 1.18.0
To Reproduce
See the setup here.
Expected behavior
AzureAssistantAgent
with a kernel function plugin works as part ofAgentGroupChat
Platform
Additional context
ERROR:
semantic_kernel.exceptions.service_exceptions.ServiceResponseException: ("<class 'semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion.AzureChatCompletion'> service failed to complete the prompt", BadRequestError('Error code: 400 - {\'error\': {\'message\': "An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. The following tool_call_ids did not have response messages: call_74vVFw3smVjsnsoCwcbrUNaN", \'type\': \'invalid_request_error\', \'param\': \'messages.[3].role\', \'code\': None}}'))
According to this, the tool_call_id should be included in messages with
AuthorRole.TOOL
. I believe this should be handled in semantic kernelPart of the stack trace:
The text was updated successfully, but these errors were encountered: