feat:add dify _agent_chat_message streaming

This commit is contained in:
Dong_master
2025-07-14 00:40:02 +08:00
parent 0be08d8882
commit 4e1d81c9f8
+39 -4
View File
@@ -251,11 +251,26 @@ class DifyServiceAPIRunner(runner.RequestRunner):
if chunk['event'] in ignored_events: if chunk['event'] in ignored_events:
continue continue
batch_pending_index += 1
if chunk['event'] == 'agent_message': if chunk['event'] == 'agent_message' or chunk['event'] == 'message_end':
pending_agent_message += chunk['answer'] if chunk['event'] == 'message_end':
print(chunk['event'])
# break
is_final = True
else: else:
if pending_agent_message.strip() != '': is_final = False
pending_agent_message += chunk['answer']
if is_stream:
if batch_pending_index % 64 == 0 or is_final:
yield llm_entities.MessageChunk(
role='assistant',
content=self._try_convert_thinking(pending_agent_message),
is_final=is_final,
)
else:
if pending_agent_message.strip() != '' and not is_stream:
pending_agent_message = pending_agent_message.replace('</details>Action:', '</details>') pending_agent_message = pending_agent_message.replace('</details>Action:', '</details>')
yield llm_entities.Message( yield llm_entities.Message(
role='assistant', role='assistant',
@@ -268,6 +283,21 @@ class DifyServiceAPIRunner(runner.RequestRunner):
continue continue
if chunk['tool']: if chunk['tool']:
if is_stream:
msg = llm_entities.MessageChunk(
role='assistant',
tool_calls=[
llm_entities.ToolCall(
id=chunk['id'],
type='function',
function=llm_entities.FunctionCall(
name=chunk['tool'],
arguments=json.dumps({}),
),
)
],
)
else:
msg = llm_entities.Message( msg = llm_entities.Message(
role='assistant', role='assistant',
tool_calls=[ tool_calls=[
@@ -290,7 +320,12 @@ class DifyServiceAPIRunner(runner.RequestRunner):
base_url = base_url[:-3] base_url = base_url[:-3]
image_url = base_url + chunk['url'] image_url = base_url + chunk['url']
if is_stream:
yield llm_entities.MessageChunk(
role='assistant',
content=[llm_entities.ContentElement.from_image_url(image_url)],
)
else:
yield llm_entities.Message( yield llm_entities.Message(
role='assistant', role='assistant',
content=[llm_entities.ContentElement.from_image_url(image_url)], content=[llm_entities.ContentElement.from_image_url(image_url)],