8000 Python: [Bug]: Group Chat orchestrator message cleanup issue · Issue #3705 · microsoft/agent-framework · GitHub
[go: up one dir, main page]

Skip to content

Python: [Bug]: Group Chat orchestrator message cleanup issue #3705

@leelakarthik

Description

@leelakarthik

Description

When using groupchatbuilder, messages with empty content are not being cleaned like in the _handoff.py 'clean_conversation_for_handoff'

This breaks the conversation flow
Error message
{'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'messages.11: all messages must have non-empty content except for the optional final assistant message'}, 'request_id': 'req_011CXq5rCQUPFti495Nrvn6f'}

Code Sample

Error Messages / Stack Traces

Traceback (most recent call last):
  File "/Users/karthik/Code bases/Jan/MAF/main.py", line 221, in _interactive_mode
    response = await workflow.run(query)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/codebase_orchestrator_agent/agent/codebase_orchestrator.py", line 203, in run
    async for event in self._run_with_events(query):
  File "/Users/karthik/Code bases/Jan/MAF/codebase_orchestrator_agent/agent/codebase_orchestrator.py", line 296, in _run_with_events
    events = await self.workflow.run(clean_query)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_workflow.py", line 660, in run
    raw_events = [
                 ^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_workflow.py", line 660, in <listcomp>
    raw_events = [
                 ^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_workflow.py", line 346, in _run_workflow_with_tracing
    async for event in self._runner.run_until_convergence():
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_runner.py", line 120, in run_until_convergence
    await iteration_task
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_runner.py", line 189, in _run_iteration
    await asyncio.gather(*tasks)
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_runner.py", line 185, in _deliver_messages
    await asyncio.gather(*tasks)
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_runner.py", line 159, in _deliver_message_inner
    return await edge_runner.send_message(message, self._shared_state, self._ctx)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_edge_runner.py", line 147, in send_message
    await self._execute_on_target(target_id, [source_id], message, shared_state, ctx)
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_edge_runner.py", line 76, in _execute_on_target
    await target_executor.execute(
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_executor.py", line 277, in execute
    await handler(message, context)
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_executor.py", line 567, in wrapper
    return await func(self, message, ctx)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_base_group_chat_orchestrator.py", line 282, in handle_participant_response
    await self._handle_response(response, ctx)
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_group_chat.py", line 369, in _handle_response
    agent_orchestration_output = await self._invoke_agent()
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_group_chat.py", line 432, in _invoke_agent
    return await _invoke_agent_helper(current_conversation)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_workflows/_group_chat.py", line 397, in _invoke_agent_helper
    agent_response = await self._agent.run(
                     ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_middleware.py", line 1253, in middleware_enabled_run
    return await original_run(self, normalized_messages, thread=thread, **kwargs)  # type: ignore[return-value]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/observability.py", line 1348, in trace_run
    return await run_func(self, messages=messages, thread=thread, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_agents.py", line 842, in run
    response = await self.chat_client.get_response(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_tools.py", line 1946, in function_invocation_wrapper
    response = await func(self, messages=prepped_messages, options=options, **filtered_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/observability.py", line 1073, in trace_get_response
    return await func(
           ^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_middleware.py", line 1373, in middleware_enabled_get_response
    return await original_get_response(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework/_clients.py", line 339, in get_response
    return await self._inner_get_response(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/agent_framework_anthropic/_chat_client.py", line 344, in _inner_get_response
    message = await self.anthropic_client.beta.messages.create(**run_options, stream=False)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/anthropic/resources/beta/messages/messages.py", line 2685, in create
    return await self._post(
           ^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/anthropic/_base_client.py", line 1989, in post
    return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/karthik/Code bases/Jan/MAF/.venv/lib/python3.11/site-packages/anthropic/_base_client.py", line 1774, in request
    raise self._make_status_error_from_response(err.response) from None
anthropic.BadRequestError: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'messages.11: all messages must have non-empty content except for the optional final assistant message'}, 'request_id': 'req_011CXq5rCQUPFti495Nrvn6f'}

Package Versions

agent-framework-anthropic==1.0.0b260130 agent-framework-core==1.0.0b260130

Python Version

3.11

Additional Context

I have imported the same clean_conversation_for_handoff from _orchestrator_helpers.py and added in _handle_response functions in the _group_chat.py

messages = self._process_participant_response(response)
        # TODO: PATCHING TO CLEAN MESSAGES FOR GROUPCHAT USING HANDOFF IMPLEMENTATION - REMOVE ONCE WE HAVE A BETTER SOLUTION IN PLACE
        messages = clean_conversation_for_handoff(messages)
        self._append_messages(messages)

This helps cleaning the messages like in handoff

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingpython

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0