From 9f7d9e4c0d7cb7c757e2c935fa2f5b3cbb6337ff Mon Sep 17 00:00:00 2001 From: Ethan Date: Sun, 2 Mar 2025 18:49:32 +0800 Subject: [PATCH 1/9] feat: enhance user message preprocessing to include message creation timestamp --- pkg/provider/runners/difysvapi.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/pkg/provider/runners/difysvapi.py b/pkg/provider/runners/difysvapi.py index 9db1e98f..5d1e4f2b 100644 --- a/pkg/provider/runners/difysvapi.py +++ b/pkg/provider/runners/difysvapi.py @@ -61,7 +61,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): async def _preprocess_user_message( self, query: core_entities.Query - ) -> tuple[str, list[str]]: + ) -> tuple[str, list[str], int | None]: """预处理用户消息,提取纯文本,并将图片上传到 Dify 服务 Returns: @@ -69,6 +69,18 @@ class DifyServiceAPIRunner(runner.RequestRunner): """ plain_text = "" image_ids = [] + + # 尝试获取 CreateTime + create_time = None + try: + timestamp = query.message_event.source_platform_object.get('Data', {}).get('CreateTime') + # 确保 timestamp 是整数类型 + if isinstance(timestamp, (int, float)): + create_time = int(timestamp) + except AttributeError: + # 如果获取过程中发生属性错误,保持 create_time 为 None + pass + if isinstance(query.user_message.content, list): for ce in query.user_message.content: if ce.type == "text": @@ -86,7 +98,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): elif isinstance(query.user_message.content, str): plain_text = query.user_message.content - return plain_text, image_ids + return plain_text, image_ids, create_time async def _chat_messages( self, query: core_entities.Query @@ -94,7 +106,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): """调用聊天助手""" cov_id = query.session.using_conversation.uuid or "" - plain_text, image_ids = await self._preprocess_user_message(query) + plain_text, image_ids, _ = await self._preprocess_user_message(query) files = [ { @@ -147,7 +159,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): """调用聊天助手""" cov_id = query.session.using_conversation.uuid or "" - plain_text, image_ids = await self._preprocess_user_message(query) + plain_text, image_ids, _ = await self._preprocess_user_message(query) files = [ { @@ -228,7 +240,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): cov_id = query.session.using_conversation.uuid - plain_text, image_ids = await self._preprocess_user_message(query) + plain_text, image_ids, timestamp = await self._preprocess_user_message(query) files = [ { @@ -246,6 +258,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): "langbot_user_message_text": plain_text, "langbot_session_id": f"{query.session.launcher_type.value}_{query.session.launcher_id}", "langbot_conversation_id": cov_id, + "langbot_msg_timestamp": timestamp, }, user=f"{query.session.launcher_type.value}_{query.session.launcher_id}", files=files, From 05b979e68ae24dfb13a75b94895d80f0530dc9fe Mon Sep 17 00:00:00 2001 From: Ethan Date: Sun, 2 Mar 2025 19:10:09 +0800 Subject: [PATCH 2/9] feat: enhance user message preprocessing to include message creation timestamp --- pkg/provider/runners/difysvapi.py | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pkg/provider/runners/difysvapi.py b/pkg/provider/runners/difysvapi.py index 5d1e4f2b..6e47ccb8 100644 --- a/pkg/provider/runners/difysvapi.py +++ b/pkg/provider/runners/difysvapi.py @@ -70,17 +70,6 @@ class DifyServiceAPIRunner(runner.RequestRunner): plain_text = "" image_ids = [] - # 尝试获取 CreateTime - create_time = None - try: - timestamp = query.message_event.source_platform_object.get('Data', {}).get('CreateTime') - # 确保 timestamp 是整数类型 - if isinstance(timestamp, (int, float)): - create_time = int(timestamp) - except AttributeError: - # 如果获取过程中发生属性错误,保持 create_time 为 None - pass - if isinstance(query.user_message.content, list): for ce in query.user_message.content: if ce.type == "text": @@ -98,7 +87,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): elif isinstance(query.user_message.content, str): plain_text = query.user_message.content - return plain_text, image_ids, create_time + return plain_text, image_ids async def _chat_messages( self, query: core_entities.Query @@ -106,7 +95,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): """调用聊天助手""" cov_id = query.session.using_conversation.uuid or "" - plain_text, image_ids, _ = await self._preprocess_user_message(query) + plain_text, image_ids = await self._preprocess_user_message(query) files = [ { @@ -159,7 +148,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): """调用聊天助手""" cov_id = query.session.using_conversation.uuid or "" - plain_text, image_ids, _ = await self._preprocess_user_message(query) + plain_text, image_ids = await self._preprocess_user_message(query) files = [ { @@ -242,6 +231,17 @@ class DifyServiceAPIRunner(runner.RequestRunner): plain_text, image_ids, timestamp = await self._preprocess_user_message(query) + # 尝试获取 CreateTime + create_time = 0 + try: + timestamp = query.message_event.source_platform_object.get('Data', {}).get('CreateTime') + # 确保 timestamp 是整数类型 + if isinstance(timestamp, (int, float)): + create_time = int(timestamp) + except AttributeError: + # 如果获取过程中发生属性错误,保持 create_time 为 None + pass + files = [ { "type": "image", @@ -256,9 +256,9 @@ class DifyServiceAPIRunner(runner.RequestRunner): async for chunk in self.dify_client.workflow_run( inputs={ "langbot_user_message_text": plain_text, - "langbot_session_id": f"{query.session.launcher_type.value}_{query.session.launcher_id}", + "langbot_session_id": f"{query.session.launcher_type.value}_{query.session.launcher_id}_{create_time}", "langbot_conversation_id": cov_id, - "langbot_msg_timestamp": timestamp, + "langbot_msg_create_time": create_time, }, user=f"{query.session.launcher_type.value}_{query.session.launcher_id}", files=files, From d6d5dac6b30ae8b1fe43cc144da0df2b0fec7251 Mon Sep 17 00:00:00 2001 From: Ethan Date: Sun, 2 Mar 2025 19:10:53 +0800 Subject: [PATCH 3/9] feat: enhance user message preprocessing to include message creation timestamp --- pkg/provider/runners/difysvapi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/provider/runners/difysvapi.py b/pkg/provider/runners/difysvapi.py index 6e47ccb8..ba8e5110 100644 --- a/pkg/provider/runners/difysvapi.py +++ b/pkg/provider/runners/difysvapi.py @@ -229,7 +229,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): cov_id = query.session.using_conversation.uuid - plain_text, image_ids, timestamp = await self._preprocess_user_message(query) + plain_text, image_ids = await self._preprocess_user_message(query) # 尝试获取 CreateTime create_time = 0 From f6205d79c0022d1b2441a145214391ff6b68dff2 Mon Sep 17 00:00:00 2001 From: Ethan Date: Sun, 2 Mar 2025 19:18:26 +0800 Subject: [PATCH 4/9] feat: enhance user message preprocessing to include message creation timestamp --- libs/dify_service_api/v1/client.py | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/dify_service_api/v1/client.py b/libs/dify_service_api/v1/client.py index 70a804b7..7e5dba53 100644 --- a/libs/dify_service_api/v1/client.py +++ b/libs/dify_service_api/v1/client.py @@ -78,6 +78,7 @@ class AsyncDifyServiceClient: trust_env=True, timeout=timeout, ) as client: + print(f"inputs: {inputs}") async with client.stream( "POST", From 8878f1ed875a93ddf6ab31f1f78beba9ebca50c8 Mon Sep 17 00:00:00 2001 From: Ethan Date: Sun, 2 Mar 2025 19:20:10 +0800 Subject: [PATCH 5/9] feat: enhance user message preprocessing to include message creation timestamp --- pkg/provider/runners/difysvapi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/provider/runners/difysvapi.py b/pkg/provider/runners/difysvapi.py index ba8e5110..50dd38bd 100644 --- a/pkg/provider/runners/difysvapi.py +++ b/pkg/provider/runners/difysvapi.py @@ -258,7 +258,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): "langbot_user_message_text": plain_text, "langbot_session_id": f"{query.session.launcher_type.value}_{query.session.launcher_id}_{create_time}", "langbot_conversation_id": cov_id, - "langbot_msg_create_time": create_time, + "langbot_msg_create_time": f"ctime_{create_time}", }, user=f"{query.session.launcher_type.value}_{query.session.launcher_id}", files=files, From 48841daff500f56b2c00cdcf5adf2efe99ed09c6 Mon Sep 17 00:00:00 2001 From: Ethan Date: Sun, 2 Mar 2025 19:30:07 +0800 Subject: [PATCH 6/9] feat: enhance user message preprocessing to include message creation timestamp --- libs/dify_service_api/v1/client.py | 1 - pkg/provider/runners/difysvapi.py | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/dify_service_api/v1/client.py b/libs/dify_service_api/v1/client.py index 7e5dba53..70a804b7 100644 --- a/libs/dify_service_api/v1/client.py +++ b/libs/dify_service_api/v1/client.py @@ -78,7 +78,6 @@ class AsyncDifyServiceClient: trust_env=True, timeout=timeout, ) as client: - print(f"inputs: {inputs}") async with client.stream( "POST", diff --git a/pkg/provider/runners/difysvapi.py b/pkg/provider/runners/difysvapi.py index 50dd38bd..fb3f47d7 100644 --- a/pkg/provider/runners/difysvapi.py +++ b/pkg/provider/runners/difysvapi.py @@ -256,9 +256,9 @@ class DifyServiceAPIRunner(runner.RequestRunner): async for chunk in self.dify_client.workflow_run( inputs={ "langbot_user_message_text": plain_text, - "langbot_session_id": f"{query.session.launcher_type.value}_{query.session.launcher_id}_{create_time}", + "langbot_session_id": f"{query.session.launcher_type.value}_{query.session.launcher_id}", "langbot_conversation_id": cov_id, - "langbot_msg_create_time": f"ctime_{create_time}", + "langbot_msg_create_time": create_time, }, user=f"{query.session.launcher_type.value}_{query.session.launcher_id}", files=files, From aa300258ab4e802ead2a2fa75c98984b0aef19b1 Mon Sep 17 00:00:00 2001 From: Ethan Date: Sun, 2 Mar 2025 19:45:10 +0800 Subject: [PATCH 7/9] feat: enhance user message preprocessing to include message creation timestamp --- pkg/provider/runners/difysvapi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/provider/runners/difysvapi.py b/pkg/provider/runners/difysvapi.py index fb3f47d7..2b99693c 100644 --- a/pkg/provider/runners/difysvapi.py +++ b/pkg/provider/runners/difysvapi.py @@ -61,7 +61,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): async def _preprocess_user_message( self, query: core_entities.Query - ) -> tuple[str, list[str], int | None]: + ) -> tuple[str, list[str]]: """预处理用户消息,提取纯文本,并将图片上传到 Dify 服务 Returns: From 8963a2117baf7a9c33c9e6c5085d5ff7d969ea8c Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Sun, 2 Mar 2025 20:16:34 +0800 Subject: [PATCH 8/9] feat: add field `time` in `MessageEvent` --- pkg/platform/sources/dingtalk.py | 4 ++-- pkg/platform/sources/qqofficial.py | 18 +++++++++++++++--- pkg/platform/types/events.py | 3 +++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pkg/platform/sources/dingtalk.py b/pkg/platform/sources/dingtalk.py index 505ab9a2..97df77d6 100644 --- a/pkg/platform/sources/dingtalk.py +++ b/pkg/platform/sources/dingtalk.py @@ -77,7 +77,7 @@ class DingTalkEventConverter(adapter.EventConverter): remark="" ), message_chain = message_chain, - time = datetime.datetime.now(), + time = event.incoming_message.create_at, source_platform_object=event, ) elif event.conversation == 'GroupMessage': @@ -95,7 +95,7 @@ class DingTalkEventConverter(adapter.EventConverter): last_speak_timestamp=0, mute_time_remaining=0 ) - time = datetime.datetime.now(), + time = event.incoming_message.create_at return platform_events.GroupMessage( sender =sender, message_chain = message_chain, diff --git a/pkg/platform/sources/qqofficial.py b/pkg/platform/sources/qqofficial.py index 518dfdb8..1e08b435 100644 --- a/pkg/platform/sources/qqofficial.py +++ b/pkg/platform/sources/qqofficial.py @@ -74,7 +74,11 @@ class QQOfficialEventConverter(adapter.EventConverter): remark = "", ) return platform_events.FriendMessage( - sender = friend,message_chain = yiri_chain,time = event.timestamp, + sender = friend,message_chain = yiri_chain,time = int( + datetime.datetime.strptime( + event.timestamp, "%Y-%m-%dT%H:%M:%S%z" + ).timestamp() + ), source_platform_object=event ) @@ -105,7 +109,11 @@ class QQOfficialEventConverter(adapter.EventConverter): last_speak_timestamp=0, mute_time_remaining=0 ) - time = event.timestamp + time = int( + datetime.datetime.strptime( + event.timestamp, "%Y-%m-%dT%H:%M:%S%z" + ).timestamp() + ) return platform_events.GroupMessage( sender = sender, message_chain=yiri_chain, @@ -128,7 +136,11 @@ class QQOfficialEventConverter(adapter.EventConverter): last_speak_timestamp=0, mute_time_remaining=0 ) - time = event.timestamp, + time = int( + datetime.datetime.strptime( + event.timestamp, "%Y-%m-%dT%H:%M:%S%z" + ).timestamp() + ), return platform_events.GroupMessage( sender =sender, message_chain = yiri_chain, diff --git a/pkg/platform/types/events.py b/pkg/platform/types/events.py index 867f8a83..57a84f24 100644 --- a/pkg/platform/types/events.py +++ b/pkg/platform/types/events.py @@ -57,6 +57,9 @@ class MessageEvent(Event): message_chain: platform_message.MessageChain """消息内容。""" + time: float + """消息发送时间戳。""" + source_platform_object: typing.Optional[typing.Any] = None """原消息平台对象。 供消息平台适配器开发者使用,如果回复用户时需要使用原消息事件对象的信息, From 92e1ac5c3a83f107575a7d66e9d22ea87cf7034a Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Sun, 2 Mar 2025 20:18:33 +0800 Subject: [PATCH 9/9] feat: add supports for passing `time` to dify workflow --- pkg/platform/types/events.py | 2 +- pkg/provider/runners/difysvapi.py | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/pkg/platform/types/events.py b/pkg/platform/types/events.py index 57a84f24..40507315 100644 --- a/pkg/platform/types/events.py +++ b/pkg/platform/types/events.py @@ -57,7 +57,7 @@ class MessageEvent(Event): message_chain: platform_message.MessageChain """消息内容。""" - time: float + time: float | None = None """消息发送时间戳。""" source_platform_object: typing.Optional[typing.Any] = None diff --git a/pkg/provider/runners/difysvapi.py b/pkg/provider/runners/difysvapi.py index 2b99693c..bc806431 100644 --- a/pkg/provider/runners/difysvapi.py +++ b/pkg/provider/runners/difysvapi.py @@ -5,6 +5,7 @@ import json import uuid import re import base64 +import datetime import aiohttp @@ -232,15 +233,7 @@ class DifyServiceAPIRunner(runner.RequestRunner): plain_text, image_ids = await self._preprocess_user_message(query) # 尝试获取 CreateTime - create_time = 0 - try: - timestamp = query.message_event.source_platform_object.get('Data', {}).get('CreateTime') - # 确保 timestamp 是整数类型 - if isinstance(timestamp, (int, float)): - create_time = int(timestamp) - except AttributeError: - # 如果获取过程中发生属性错误,保持 create_time 为 None - pass + create_time = int(query.message_event.time) if query.message_event.time else int(datetime.datetime.now().timestamp()) files = [ {