-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Labels
Description
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
Reactions are currently unavailable