Errors caused by parallel tool calls due to removed tool message that not expected #911

Closed
opened 2026-02-16 10:20:55 -05:00 by yindo · 1 comment
Owner

Originally created by @leslie2046 on GitHub (Dec 30, 2025).

Self Checks

  • This is only for bug report, if you would like to ask a question, please head to Discussions.
  • I have searched for existing issues Dify issues & Dify Official Plugins, including closed ones.
  • I confirm that I am using English to submit this report (我已阅读并同意 Language Policy).
  • [FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)
  • Please do not modify this template :) and fill in all the required fields.

Dify version

1.11.2

Plugin version

0.0.8

Cloud or Self Hosted

Self Hosted (Source)

Steps to reproduce

Image

✔️ Error log


[on_llm_before_invoke]
Model: deepseek-reasoner
Parameters:
	Tools:
		current_time
		lunar_query
		get_weather
Stream: True
User: 9fba3e06-7a71-4e01-8782-981c3acba5cc
Prompt messages:
	role: system
	content: 你是一名助手
	role: user
	content: 同时查询下当前时间和北京天气
	role: assistant
	content: <think>
用户想同时查询当前时间和北京天气。我需要调用两个工具:current_time 和 get_weather。这两个工具可以同时调用。我先来调用它们。
</think>
	name: current_time
	role: tool
	content: 2025-12-31 10:55:15
	name: get_weather
	role: tool
	content: tool response: {"error_code": 0, "reason": "查询成功!", "result": {"city": "北京", "future": [{"date": "2025-12-31", "direct": "北风转西南风", "temperature": "-9/0℃", "weather": "晴", "wid": {"day": "00", "night": "00"}}, {"date": "2026-01-01", "direct": "东北风转北风", "temperature": "-8/1℃", "weather": "多云转晴", "wid": {"day": "01", "night": "00"}}, {"date": "2026-01-02", "direct": "西南风", "temperature": "-8/3℃", "weather": "晴", "wid": {"day": "00", "night": "00"}}, {"date": "2026-01-03", "direct": "西北风转北风", "temperature": "-4/5℃", "weather": "晴转多云", "wid": {"day": "00", "night": "01"}}, {"date": "2026-01-04", "direct": "西风转北风", "temperature": "-6/5℃", "weather": "多云转晴", "wid": {"day": "01", "night": "00"}}], "realtime": {"aqi": "14", "direct": "东北风", "humidity": "23", "info": "晴", "power": "3级", "temperature": "-5", "wid": "00"}}}.

[on_llm_new_chunk]2025-12-31 10:55:17,294 DEBUG [_config.py:82] 98bea4a48e load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,295 DEBUG [_config.py:148] 98bea4a48e load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,315 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,315 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,331 DEBUG [_config.py:82] 98bea4a48e load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,331 DEBUG [_config.py:148] 98bea4a48e load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,355 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,356 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,372 DEBUG [_config.py:82] 98bea4a48e load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,372 DEBUG [_config.py:148] 98bea4a48e load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,394 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,395 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e connect_tcp.started host='192.168.0.188' port=5002 local_address=None timeout=600.0 socket_options=None
2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x746457fb7140>
2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e send_request_headers.started request=<Request [b'POST']>
2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e send_request_headers.complete
2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e send_request_body.started request=<Request [b'POST']>
2025-12-31 10:55:17,416 DEBUG [_trace.py:47] 98bea4a48e send_request_body.complete
2025-12-31 10:55:17,416 DEBUG [_trace.py:47] 98bea4a48e receive_response_headers.started request=<Request [b'POST']>
2025-12-31 10:55:17,429 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.started host='192.168.0.188' port=5002 local_address=None timeout=600.0 socket_options=None
2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x746497b86c90>
2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.started request=<Request [b'GET']>
2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.complete
2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.started request=<Request [b'GET']>
2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.complete
2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.started request=<Request [b'GET']>
2025-12-31 10:55:17,434 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'application/json; charset=utf-8'), (b'Date', b'Wed, 31 Dec 2025 02:55:17 GMT'), (b'Transfer-Encoding', b'chunked')])
2025-12-31 10:55:17,434 INFO [_client.py:1038] 5e2ad19ace HTTP Request: GET http://192.168.0.188:5002/plugin/d8669796-681c-419a-8a68-2fefa954ac92/management/tools?page=1&page_size=256 "HTTP/1.1 200 OK"
2025-12-31 10:55:17,434 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.started request=<Request [b'GET']>
2025-12-31 10:55:17,435 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.complete
2025-12-31 10:55:17,435 DEBUG [_trace.py:47] 5e2ad19ace response_closed.started
2025-12-31 10:55:17,435 DEBUG [_trace.py:47] 5e2ad19ace response_closed.complete
2025-12-31 10:55:17,436 DEBUG [_trace.py:47] 5e2ad19ace close.started
2025-12-31 10:55:17,436 DEBUG [_trace.py:47] 5e2ad19ace close.complete
2025-12-31 10:55:17,456 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,457 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,483 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,484 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,509 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,510 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,515 DEBUG [debug_logging.py:225]  Event: NodeRunAgentLogEvent
2025-12-31 10:55:17,515 DEBUG [debug_logging.py:187]  ?? Stream chunk from 1766146760051: 

2025-12-31 10:55:17,516 DEBUG [debug_logging.py:225]  Event: NodeRunAgentLogEvent
2025-12-31 10:55:17,516 DEBUG [debug_logging.py:225]  Event: NodeRunAgentLogEvent
2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.started host='192.168.0.188' port=5002 local_address=None timeout=600.0 socket_options=None
2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7464c4b591c0>
2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.started request=<Request [b'GET']>
2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.complete
2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.started request=<Request [b'GET']>
2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.complete
2025-12-31 10:55:17,538 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.started request=<Request [b'GET']>
2025-12-31 10:55:17,561 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'application/json; charset=utf-8'), (b'Date', b'Wed, 31 Dec 2025 02:55:17 GMT'), (b'Transfer-Encoding', b'chunked')])
2025-12-31 10:55:17,562 INFO [_client.py:1038] 5e2ad19ace HTTP Request: GET http://192.168.0.188:5002/plugin/d8669796-681c-419a-8a68-2fefa954ac92/management/list?page=1&page_size=256&response_type=paged "HTTP/1.1 200 OK"
2025-12-31 10:55:17,562 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.started request=<Request [b'GET']>
2025-12-31 10:55:17,563 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.complete
2025-12-31 10:55:17,563 DEBUG [_trace.py:47] 5e2ad19ace response_closed.started
2025-12-31 10:55:17,563 DEBUG [_trace.py:47] 5e2ad19ace response_closed.complete
2025-12-31 10:55:17,564 DEBUG [_trace.py:47] 5e2ad19ace close.started
2025-12-31 10:55:17,564 DEBUG [_trace.py:47] 5e2ad19ace close.complete
2025-12-31 10:55:17,671 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,671 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,699 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,699 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,725 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False
2025-12-31 10:55:17,726 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem'
2025-12-31 10:55:17,736 DEBUG [_trace.py:47] 98bea4a48e receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'text/event-stream'), (b'Date', b'Wed, 31 Dec 2025 02:55:17 GMT'), (b'Transfer-Encoding', b'chunked')])
2025-12-31 10:55:17,736 INFO [_client.py:1038] 98bea4a48e HTTP Request: POST http://192.168.0.188:5002/plugin/d8669796-681c-419a-8a68-2fefa954ac92/dispatch/llm/invoke "HTTP/1.1 200 OK"
2025-12-31 10:55:17,737 DEBUG [_trace.py:47] 98bea4a48e receive_response_body.started request=<Request [b'POST']>
2025-12-31 10:55:17,738 ERROR [base.py:277] 98bea4a48e Error in stream response for plugin {'code': -500, 'message': '{"message":"{\\"args\\":{\\"description\\":\\"[models] Error: API request failed with status code 400: {\\\\\\"error\\\\\\":{\\\\\\"message\\\\\\":\\\\\\"An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. (insufficient tool messages following tool_calls message)\\\\\\",\\\\\\"type\\\\\\":\\\\\\"invalid_request_error\\\\\\",\\\\\\"param\\\\\\":null,\\\\\\"code\\\\\\":\\\\\\"invalid_request_error\\\\\\"}}\\"},\\"error_type\\":\\"InvokeError\\",\\"message\\":\\"[models] Error: API request failed with status code 400: {\\\\\\"error\\\\\\":{\\\\\\"message\\\\\\":\\\\\\"An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. (insufficient tool messages following tool_calls message)\\\\\\",\\\\\\"type\\\\\\":\\\\\\"invalid_request_error\\\\\\",\\\\\\"param\\\\\\":null,\\\\\\"code\\\\\\":\\\\\\"invalid_request_error\\\\\\"}}\\"}","error_type":"PluginInvokeError","args":null}', 'data': None}
2025-12-31 10:55:17,738 DEBUG [_trace.py:47] 98bea4a48e receive_response_body.failed exception=GeneratorExit()
2025-12-31 10:55:17,738 DEBUG [_trace.py:47] 98bea4a48e response_closed.started
2025-12-31 10:55:17,738 DEBUG [_trace.py:47] 98bea4a48e response_closed.complete
2025-12-31 10:55:17,740 INFO [_internal.py:97] 98bea4a48e 172.19.0.4 - - [31/Dec/2025 02:55:17] "POST /inner/api/invoke/llm HTTP/1.1" 200 -
2025-12-31 10:55:17,754 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.started host='192.168.0.188' port=5002 local_address=None timeout=600.0 socket_options=None
2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x746457fb76e0>
2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.started request=<Request [b'GET']>
2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.complete
2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.started request=<Request [b'GET']>
2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.complete
2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.started request=<Request [b'GET']>
2025-12-31 10:55:17,759 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'application/json; charset=utf-8'), (b'Date', b'Wed, 31 Dec 2025 02:55:17 GMT'), (b'Transfer-Encoding', b'chunked')])
2025-12-31 10:55:17,760 INFO [_client.py:1038] 5e2ad19ace HTTP Request: GET http://192.168.0.188:5002/plugin/d8669796-681c-419a-8a68-2fefa954ac92/management/tools?page=1&page_size=256 "HTTP/1.1 200 OK"
2025-12-31 10:55:17,760 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.started request=<Request [b'GET']>
2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.complete
2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace response_closed.started
2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace response_closed.complete
2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace close.started
2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace close.complete
2025-12-31 10:55:17,781 DEBUG [debug_logging.py:225]  Event: NodeRunAgentLogEvent
2025-12-31 10:55:17,781 ERROR [base.py:277] 5e2ad19ace Error in stream response for plugin {'code': -500, 'message': '{"message":"{\\"args\\":{},\\"error_type\\":\\"Exception\\",\\"message\\":\\"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\\\\\\"args\\\\\\":{\\\\\\"description\\\\\\":\\\\\\"[models] Error: API request failed with status code 400: {\\\\\\\\\\\\\\"error\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\"message\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. (insufficient tool messages following tool_calls message)\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"type\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"invalid_request_error\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"param\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\"code\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"invalid_request_error\\\\\\\\\\\\\\"}}\\\\\\"},\\\\\\"error_type\\\\\\":\\\\\\"InvokeError\\\\\\",\\\\\\"message\\\\\\":\\\\\\"[models] Error: API request failed with status code 400: {\\\\\\\\\\\\\\"error\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\"message\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. (insufficient tool messages following tool_calls message)\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"type\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"invalid_request_error\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"param\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\"code\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"invalid_request_error\\\\\\\\\\\\\\"}}\\\\\\"}\\"}","error_type":"PluginInvokeError","args":null}', 'data': None}
2025-12-31 10:55:17,782 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.failed exception=GeneratorExit()
2025-12-31 10:55:17,782 DEBUG [_trace.py:47] 5e2ad19ace response_closed.started
2025-12-31 10:55:17,782 DEBUG [_trace.py:47] 5e2ad19ace response_closed.complete
2025-12-31 10:55:17,785 ERROR [error_handler.py:101]  Node 1766146760051 failed with ABORT strategy: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"}
2025-12-31 10:55:17,785 ERROR [debug_logging.py:174]  ? Node failed: 1766146760051
2025-12-31 10:55:17,785 ERROR [debug_logging.py:175]    Error: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"}
2025-12-31 10:55:17,785 ERROR [debug_logging.py:178]    Details: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"}
2025-12-31 10:55:17,831 ERROR [debug_logging.py:139] 7d37f35dab ? Graph run failed: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"}
2025-12-31 10:55:17,832 ERROR [debug_logging.py:141] 7d37f35dab   Total exceptions: 1
2025-12-31 10:55:17,839 DEBUG [worker_pool.py:129] 7d37f35dab Stopping worker pool: 1 workers
2025-12-31 10:55:17,840 DEBUG [based_generate_task_pipeline.py:45] d6fa042c6a error: Run failed: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"}
2025-12-31 10:55:17,891 INFO [debug_logging.py:230] 7d37f35dab ================================================================================
2025-12-31 10:55:17,891 ERROR [debug_logging.py:233] 7d37f35dab ?? GRAPH EXECUTION FAILED
2025-12-31 10:55:17,891 ERROR [debug_logging.py:234] 7d37f35dab   Error: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"}
2025-12-31 10:55:17,892 INFO [debug_logging.py:239] 7d37f35dab Execution Statistics:
2025-12-31 10:55:17,892 INFO [debug_logging.py:240] 7d37f35dab   Total nodes executed: 2
2025-12-31 10:55:17,892 INFO [debug_logging.py:241] 7d37f35dab   Successful nodes: 1
2025-12-31 10:55:17,892 INFO [debug_logging.py:242] 7d37f35dab   Failed nodes: 1
2025-12-31 10:55:17,892 INFO [debug_logging.py:243] 7d37f35dab   Node retries: 0
2025-12-31 10:55:17,892 INFO [debug_logging.py:250] 7d37f35dab ================================================================================
2025-12-31 10:55:17,892 DEBUG [execution_limits.py:110] 7d37f35dab Execution completed: 2 steps in 8.40 seconds
2025-12-31 10:55:17,892 ERROR [workflow_entry.py:116] 7d37f35dab Unknown Error when workflow entry running
Traceback (most recent call last):
  File "/home/leslie/share/code/dify/api/core/workflow/workflow_entry.py", line 112, in run
    yield from generator
  File "/home/leslie/share/code/dify/api/core/workflow/graph_engine/graph_engine.py", line 271, in run
    raise self._graph_execution.error
RuntimeError: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"}

Originally created by @leslie2046 on GitHub (Dec 30, 2025). ### Self Checks - [x] This is only for bug report, if you would like to ask a question, please head to [Discussions](https://github.com/langgenius/dify/discussions/categories/general). - [x] I have searched for existing issues [Dify issues](https://github.com/langgenius/dify/issues) & [Dify Official Plugins](https://github.com/langgenius/dify-official-plugins/issues), including closed ones. - [x] I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)). - [x] [FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:) - [x] Please do not modify this template :) and fill in all the required fields. ### Dify version 1.11.2 ### Plugin version 0.0.8 ### Cloud or Self Hosted Self Hosted (Source) ### Steps to reproduce <img width="1619" height="1064" alt="Image" src="https://github.com/user-attachments/assets/bce2e4e1-fcc4-453d-b2d7-77528272a818" /> ### ✔️ Error log ``` [on_llm_before_invoke] Model: deepseek-reasoner Parameters: Tools: current_time lunar_query get_weather Stream: True User: 9fba3e06-7a71-4e01-8782-981c3acba5cc Prompt messages: role: system content: 你是一名助手 role: user content: 同时查询下当前时间和北京天气 role: assistant content: <think> 用户想同时查询当前时间和北京天气。我需要调用两个工具:current_time 和 get_weather。这两个工具可以同时调用。我先来调用它们。 </think> name: current_time role: tool content: 2025-12-31 10:55:15 name: get_weather role: tool content: tool response: {"error_code": 0, "reason": "查询成功!", "result": {"city": "北京", "future": [{"date": "2025-12-31", "direct": "北风转西南风", "temperature": "-9/0℃", "weather": "晴", "wid": {"day": "00", "night": "00"}}, {"date": "2026-01-01", "direct": "东北风转北风", "temperature": "-8/1℃", "weather": "多云转晴", "wid": {"day": "01", "night": "00"}}, {"date": "2026-01-02", "direct": "西南风", "temperature": "-8/3℃", "weather": "晴", "wid": {"day": "00", "night": "00"}}, {"date": "2026-01-03", "direct": "西北风转北风", "temperature": "-4/5℃", "weather": "晴转多云", "wid": {"day": "00", "night": "01"}}, {"date": "2026-01-04", "direct": "西风转北风", "temperature": "-6/5℃", "weather": "多云转晴", "wid": {"day": "01", "night": "00"}}], "realtime": {"aqi": "14", "direct": "东北风", "humidity": "23", "info": "晴", "power": "3级", "temperature": "-5", "wid": "00"}}}. [on_llm_new_chunk]2025-12-31 10:55:17,294 DEBUG [_config.py:82] 98bea4a48e load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,295 DEBUG [_config.py:148] 98bea4a48e load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,315 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,315 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,331 DEBUG [_config.py:82] 98bea4a48e load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,331 DEBUG [_config.py:148] 98bea4a48e load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,355 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,356 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,372 DEBUG [_config.py:82] 98bea4a48e load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,372 DEBUG [_config.py:148] 98bea4a48e load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,394 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,395 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e connect_tcp.started host='192.168.0.188' port=5002 local_address=None timeout=600.0 socket_options=None 2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x746457fb7140> 2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e send_request_headers.started request=<Request [b'POST']> 2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e send_request_headers.complete 2025-12-31 10:55:17,415 DEBUG [_trace.py:47] 98bea4a48e send_request_body.started request=<Request [b'POST']> 2025-12-31 10:55:17,416 DEBUG [_trace.py:47] 98bea4a48e send_request_body.complete 2025-12-31 10:55:17,416 DEBUG [_trace.py:47] 98bea4a48e receive_response_headers.started request=<Request [b'POST']> 2025-12-31 10:55:17,429 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.started host='192.168.0.188' port=5002 local_address=None timeout=600.0 socket_options=None 2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x746497b86c90> 2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.started request=<Request [b'GET']> 2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.complete 2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.started request=<Request [b'GET']> 2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.complete 2025-12-31 10:55:17,430 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.started request=<Request [b'GET']> 2025-12-31 10:55:17,434 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'application/json; charset=utf-8'), (b'Date', b'Wed, 31 Dec 2025 02:55:17 GMT'), (b'Transfer-Encoding', b'chunked')]) 2025-12-31 10:55:17,434 INFO [_client.py:1038] 5e2ad19ace HTTP Request: GET http://192.168.0.188:5002/plugin/d8669796-681c-419a-8a68-2fefa954ac92/management/tools?page=1&page_size=256 "HTTP/1.1 200 OK" 2025-12-31 10:55:17,434 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.started request=<Request [b'GET']> 2025-12-31 10:55:17,435 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.complete 2025-12-31 10:55:17,435 DEBUG [_trace.py:47] 5e2ad19ace response_closed.started 2025-12-31 10:55:17,435 DEBUG [_trace.py:47] 5e2ad19ace response_closed.complete 2025-12-31 10:55:17,436 DEBUG [_trace.py:47] 5e2ad19ace close.started 2025-12-31 10:55:17,436 DEBUG [_trace.py:47] 5e2ad19ace close.complete 2025-12-31 10:55:17,456 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,457 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,483 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,484 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,509 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,510 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,515 DEBUG [debug_logging.py:225] Event: NodeRunAgentLogEvent 2025-12-31 10:55:17,515 DEBUG [debug_logging.py:187] ?? Stream chunk from 1766146760051: 2025-12-31 10:55:17,516 DEBUG [debug_logging.py:225] Event: NodeRunAgentLogEvent 2025-12-31 10:55:17,516 DEBUG [debug_logging.py:225] Event: NodeRunAgentLogEvent 2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.started host='192.168.0.188' port=5002 local_address=None timeout=600.0 socket_options=None 2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7464c4b591c0> 2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.started request=<Request [b'GET']> 2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.complete 2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.started request=<Request [b'GET']> 2025-12-31 10:55:17,537 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.complete 2025-12-31 10:55:17,538 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.started request=<Request [b'GET']> 2025-12-31 10:55:17,561 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'application/json; charset=utf-8'), (b'Date', b'Wed, 31 Dec 2025 02:55:17 GMT'), (b'Transfer-Encoding', b'chunked')]) 2025-12-31 10:55:17,562 INFO [_client.py:1038] 5e2ad19ace HTTP Request: GET http://192.168.0.188:5002/plugin/d8669796-681c-419a-8a68-2fefa954ac92/management/list?page=1&page_size=256&response_type=paged "HTTP/1.1 200 OK" 2025-12-31 10:55:17,562 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.started request=<Request [b'GET']> 2025-12-31 10:55:17,563 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.complete 2025-12-31 10:55:17,563 DEBUG [_trace.py:47] 5e2ad19ace response_closed.started 2025-12-31 10:55:17,563 DEBUG [_trace.py:47] 5e2ad19ace response_closed.complete 2025-12-31 10:55:17,564 DEBUG [_trace.py:47] 5e2ad19ace close.started 2025-12-31 10:55:17,564 DEBUG [_trace.py:47] 5e2ad19ace close.complete 2025-12-31 10:55:17,671 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,671 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,699 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,699 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,725 DEBUG [_config.py:82] 5e2ad19ace load_ssl_context verify=True cert=None trust_env=True http2=False 2025-12-31 10:55:17,726 DEBUG [_config.py:148] 5e2ad19ace load_verify_locations cafile='/home/leslie/share/code/dify/api/.venv/lib/python3.12/site-packages/certifi/cacert.pem' 2025-12-31 10:55:17,736 DEBUG [_trace.py:47] 98bea4a48e receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'text/event-stream'), (b'Date', b'Wed, 31 Dec 2025 02:55:17 GMT'), (b'Transfer-Encoding', b'chunked')]) 2025-12-31 10:55:17,736 INFO [_client.py:1038] 98bea4a48e HTTP Request: POST http://192.168.0.188:5002/plugin/d8669796-681c-419a-8a68-2fefa954ac92/dispatch/llm/invoke "HTTP/1.1 200 OK" 2025-12-31 10:55:17,737 DEBUG [_trace.py:47] 98bea4a48e receive_response_body.started request=<Request [b'POST']> 2025-12-31 10:55:17,738 ERROR [base.py:277] 98bea4a48e Error in stream response for plugin {'code': -500, 'message': '{"message":"{\\"args\\":{\\"description\\":\\"[models] Error: API request failed with status code 400: {\\\\\\"error\\\\\\":{\\\\\\"message\\\\\\":\\\\\\"An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. (insufficient tool messages following tool_calls message)\\\\\\",\\\\\\"type\\\\\\":\\\\\\"invalid_request_error\\\\\\",\\\\\\"param\\\\\\":null,\\\\\\"code\\\\\\":\\\\\\"invalid_request_error\\\\\\"}}\\"},\\"error_type\\":\\"InvokeError\\",\\"message\\":\\"[models] Error: API request failed with status code 400: {\\\\\\"error\\\\\\":{\\\\\\"message\\\\\\":\\\\\\"An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. (insufficient tool messages following tool_calls message)\\\\\\",\\\\\\"type\\\\\\":\\\\\\"invalid_request_error\\\\\\",\\\\\\"param\\\\\\":null,\\\\\\"code\\\\\\":\\\\\\"invalid_request_error\\\\\\"}}\\"}","error_type":"PluginInvokeError","args":null}', 'data': None} 2025-12-31 10:55:17,738 DEBUG [_trace.py:47] 98bea4a48e receive_response_body.failed exception=GeneratorExit() 2025-12-31 10:55:17,738 DEBUG [_trace.py:47] 98bea4a48e response_closed.started 2025-12-31 10:55:17,738 DEBUG [_trace.py:47] 98bea4a48e response_closed.complete 2025-12-31 10:55:17,740 INFO [_internal.py:97] 98bea4a48e 172.19.0.4 - - [31/Dec/2025 02:55:17] "POST /inner/api/invoke/llm HTTP/1.1" 200 - 2025-12-31 10:55:17,754 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.started host='192.168.0.188' port=5002 local_address=None timeout=600.0 socket_options=None 2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x746457fb76e0> 2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.started request=<Request [b'GET']> 2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace send_request_headers.complete 2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.started request=<Request [b'GET']> 2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace send_request_body.complete 2025-12-31 10:55:17,755 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.started request=<Request [b'GET']> 2025-12-31 10:55:17,759 DEBUG [_trace.py:47] 5e2ad19ace receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Content-Type', b'application/json; charset=utf-8'), (b'Date', b'Wed, 31 Dec 2025 02:55:17 GMT'), (b'Transfer-Encoding', b'chunked')]) 2025-12-31 10:55:17,760 INFO [_client.py:1038] 5e2ad19ace HTTP Request: GET http://192.168.0.188:5002/plugin/d8669796-681c-419a-8a68-2fefa954ac92/management/tools?page=1&page_size=256 "HTTP/1.1 200 OK" 2025-12-31 10:55:17,760 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.started request=<Request [b'GET']> 2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.complete 2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace response_closed.started 2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace response_closed.complete 2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace close.started 2025-12-31 10:55:17,761 DEBUG [_trace.py:47] 5e2ad19ace close.complete 2025-12-31 10:55:17,781 DEBUG [debug_logging.py:225] Event: NodeRunAgentLogEvent 2025-12-31 10:55:17,781 ERROR [base.py:277] 5e2ad19ace Error in stream response for plugin {'code': -500, 'message': '{"message":"{\\"args\\":{},\\"error_type\\":\\"Exception\\",\\"message\\":\\"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\\\\\\"args\\\\\\":{\\\\\\"description\\\\\\":\\\\\\"[models] Error: API request failed with status code 400: {\\\\\\\\\\\\\\"error\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\"message\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. (insufficient tool messages following tool_calls message)\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"type\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"invalid_request_error\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"param\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\"code\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"invalid_request_error\\\\\\\\\\\\\\"}}\\\\\\"},\\\\\\"error_type\\\\\\":\\\\\\"InvokeError\\\\\\",\\\\\\"message\\\\\\":\\\\\\"[models] Error: API request failed with status code 400: {\\\\\\\\\\\\\\"error\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\"message\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"An assistant message with \'tool_calls\' must be followed by tool messages responding to each \'tool_call_id\'. (insufficient tool messages following tool_calls message)\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"type\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"invalid_request_error\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"param\\\\\\\\\\\\\\":null,\\\\\\\\\\\\\\"code\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"invalid_request_error\\\\\\\\\\\\\\"}}\\\\\\"}\\"}","error_type":"PluginInvokeError","args":null}', 'data': None} 2025-12-31 10:55:17,782 DEBUG [_trace.py:47] 5e2ad19ace receive_response_body.failed exception=GeneratorExit() 2025-12-31 10:55:17,782 DEBUG [_trace.py:47] 5e2ad19ace response_closed.started 2025-12-31 10:55:17,782 DEBUG [_trace.py:47] 5e2ad19ace response_closed.complete 2025-12-31 10:55:17,785 ERROR [error_handler.py:101] Node 1766146760051 failed with ABORT strategy: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"} 2025-12-31 10:55:17,785 ERROR [debug_logging.py:174] ? Node failed: 1766146760051 2025-12-31 10:55:17,785 ERROR [debug_logging.py:175] Error: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"} 2025-12-31 10:55:17,785 ERROR [debug_logging.py:178] Details: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"} 2025-12-31 10:55:17,831 ERROR [debug_logging.py:139] 7d37f35dab ? Graph run failed: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"} 2025-12-31 10:55:17,832 ERROR [debug_logging.py:141] 7d37f35dab Total exceptions: 1 2025-12-31 10:55:17,839 DEBUG [worker_pool.py:129] 7d37f35dab Stopping worker pool: 1 workers 2025-12-31 10:55:17,840 DEBUG [based_generate_task_pipeline.py:45] d6fa042c6a error: Run failed: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"} 2025-12-31 10:55:17,891 INFO [debug_logging.py:230] 7d37f35dab ================================================================================ 2025-12-31 10:55:17,891 ERROR [debug_logging.py:233] 7d37f35dab ?? GRAPH EXECUTION FAILED 2025-12-31 10:55:17,891 ERROR [debug_logging.py:234] 7d37f35dab Error: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"} 2025-12-31 10:55:17,892 INFO [debug_logging.py:239] 7d37f35dab Execution Statistics: 2025-12-31 10:55:17,892 INFO [debug_logging.py:240] 7d37f35dab Total nodes executed: 2 2025-12-31 10:55:17,892 INFO [debug_logging.py:241] 7d37f35dab Successful nodes: 1 2025-12-31 10:55:17,892 INFO [debug_logging.py:242] 7d37f35dab Failed nodes: 1 2025-12-31 10:55:17,892 INFO [debug_logging.py:243] 7d37f35dab Node retries: 0 2025-12-31 10:55:17,892 INFO [debug_logging.py:250] 7d37f35dab ================================================================================ 2025-12-31 10:55:17,892 DEBUG [execution_limits.py:110] 7d37f35dab Execution completed: 2 steps in 8.40 seconds 2025-12-31 10:55:17,892 ERROR [workflow_entry.py:116] 7d37f35dab Unknown Error when workflow entry running Traceback (most recent call last): File "/home/leslie/share/code/dify/api/core/workflow/workflow_entry.py", line 112, in run yield from generator File "/home/leslie/share/code/dify/api/core/workflow/graph_engine/graph_engine.py", line 271, in run raise self._graph_execution.error RuntimeError: Failed to transform agent message: req_id: 5e2ad19ace PluginInvokeError: {"args":{},"error_type":"Exception","message":"read llm model failed: request failed: req_id: 98bea4a48e PluginInvokeError: {\"args\":{\"description\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"},\"error_type\":\"InvokeError\",\"message\":\"[models] Error: API request failed with status code 400: {\\\"error\\\":{\\\"message\\\":\\\"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. (insufficient tool messages following tool_calls message)\\\",\\\"type\\\":\\\"invalid_request_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"invalid_request_error\\\"}}\"}"} ```
yindo added the bug label 2026-02-16 10:20:55 -05:00
yindo closed this issue 2026-02-16 10:20:55 -05:00
Author
Owner

@dosubot[bot] commented on GitHub (Dec 30, 2025):

This error is caused by how parallel tool calls are handled in the plugin/agent strategy: previously, each tool call could result in an unexpected empty assistant message, or tool calls weren't merged into a single assistant message, which breaks the protocol expected by the LLM API and leads to the "insufficient tool messages following tool_calls message" error.

This is a known issue and has been fixed in the dify-official-plugins repository. The relevant fix is in PR #2351, which merges all tool calls into a single assistant message and ensures the correct sequence and formatting for tool call responses. The fix is available starting from plugin/strategy version 0.0.29. You are currently on version 0.0.8, so upgrading to at least 0.0.29 should resolve this error. You can see the details of the fix here: dify-official-plugins PR #2351.

If you can't upgrade right away, a temporary workaround is to avoid parallel tool calls in your workflow and serialize them instead.

Let me know if you need help with upgrade steps or further troubleshooting.

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other

Open in Cursor Join Discord Share on X

@dosubot[bot] commented on GitHub (Dec 30, 2025): <!-- Answer --> This error is caused by how parallel tool calls are handled in the plugin/agent strategy: previously, each tool call could result in an unexpected empty assistant message, or tool calls weren't merged into a single assistant message, which breaks the protocol expected by the LLM API and leads to the "insufficient tool messages following tool_calls message" error. This is a known issue and has been fixed in the dify-official-plugins repository. The relevant fix is in PR #2351, which merges all tool calls into a single assistant message and ensures the correct sequence and formatting for tool call responses. The fix is available starting from plugin/strategy version 0.0.29. You are currently on version 0.0.8, so upgrading to at least 0.0.29 should resolve this error. You can see the details of the fix here: [dify-official-plugins PR #2351](https://github.com/langgenius/dify-official-plugins/pull/2351). If you can't upgrade right away, a temporary workaround is to avoid parallel tool calls in your workflow and serialize them instead. Let me know if you need help with upgrade steps or further troubleshooting. <!-- Dosu Comment Footer --> *To reply, just mention [@dosu](https://go.dosu.dev/dosubot).* --- <sup>How did I do? [Good](https://app.dosu.dev/response-feedback/401783c7-d8b1-4bbd-b926-bbab2afe7007?feedback_type=great_response) | [Irrelevant](https://app.dosu.dev/response-feedback/401783c7-d8b1-4bbd-b926-bbab2afe7007?feedback_type=irrelevant_answer) | [Incorrect](https://app.dosu.dev/response-feedback/401783c7-d8b1-4bbd-b926-bbab2afe7007?feedback_type=incorrect_sources) | [Verbose](https://app.dosu.dev/response-feedback/401783c7-d8b1-4bbd-b926-bbab2afe7007?feedback_type=too_verbose) | [Hallucination](https://app.dosu.dev/response-feedback/401783c7-d8b1-4bbd-b926-bbab2afe7007?feedback_type=hallucination) | [Report 🐛](https://app.dosu.dev/response-feedback/401783c7-d8b1-4bbd-b926-bbab2afe7007?feedback_type=bug_report) | [Other](https://app.dosu.dev/response-feedback/401783c7-d8b1-4bbd-b926-bbab2afe7007?feedback_type=other)</sup> [![Open in Cursor](https://dosu.dev/dosu-in-cursor.svg)](https://cursor.com/link/prompt?text=This%20error%20is%20caused%20by%20how%20parallel%20tool%20calls%20are%20handled%20in%20the%20plugin/agent%20strategy%3A%20previously%2C%20each%20tool%20call%20could%20result%20in%20an%20unexpected%20empty%20assistant%20message%2C%20or%20tool%20calls%20weren%27t%20merged%20into%20a%20single%20assistant%20message%2C%20which%20breaks%20the%20protocol%20expected%20by%20the%20LLM%20API%20and%20leads%20to%20the%20%22insufficient%20tool%20messages%20following%20tool_calls%20message%22%20error.%0A%0AThis%20is%20a%20known%20issue%20and%20has%20been%20fixed%20in%20the%20dify-official-plugins%20repository.%20The%20relevant%20fix%20is%20in%20PR%20%232351%2C%20which%20merges%20all%20tool%20calls%20into%20a%20single%20assistant%20message%20and%20ensures%20the%20correct%20sequence%20and%20formatting%20for%20tool%20call%20responses.%20The%20fix%20is%20available%20starting%20from%20plugin/strategy%20version%200.0.29.%20You%20are%20currently%20on%20version%200.0.8%2C%20so%20upgrading%20to%20at%20least%200.0.29%20should%20resolve%20this%20error.%20You%20can%20see%20the%20details%20of%20the%20fix%20here%3A%20%5Bdify-official-plugins%20PR%20%232351%5D%28https%3A//github.com/langgenius/dify-official-plugins/pull/2351%29.%0A%0AIf%20you%20can%27t%20upgrade%20right%20away%2C%20a%20temporary%20workaround%20is%20to%20avoid%20parallel%20tool%20calls%20in%20your%20workflow%20and%20serialize%20them%20instead.%0A%0ALet%20me%20know%20if%20you%20need%20help%20with%20upgrade%20steps%20or%20further%20troubleshooting.)&nbsp;[![Join Discord](https://img.shields.io/badge/join-5865F2?logo=discord&logoColor=white&label=)](https://go.dosu.dev/discord-bot)&nbsp;[![Share on X](https://img.shields.io/badge/X-share-black)](https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/langgenius/dify-official-plugins/issues/2352)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify-official-plugins#911