From add2716c09bf0d83cc882c7c1c539099dcb22db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E6=B5=B7?= <62863922+xinhai-ai@users.noreply.github.com> Date: Sat, 8 Feb 2025 13:11:53 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=8F=90=E7=A4=BA=E5=92=8C=E6=96=87=E4=BB=B6token?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E8=A2=AB=E8=AE=A1=E7=AE=97=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将inlet中的messages 与 outlet中的 messages 最后一个元素拼接作为新的 outlet messages 传递给 后端进行token计算,保证能正确计算到系统提示以及文件 --- resources/functions/openwebui_monitor.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/resources/functions/openwebui_monitor.py b/resources/functions/openwebui_monitor.py index 1adb5b0..10ece22 100644 --- a/resources/functions/openwebui_monitor.py +++ b/resources/functions/openwebui_monitor.py @@ -61,6 +61,7 @@ def __init__(self): self.outage = False self.start_time = None self.translations = TRANSLATIONS + self.inlet_temp = None def get_text(self, key: str, **kwargs) -> str: """获取指定语言的文本""" @@ -86,7 +87,13 @@ def _prepare_body_dict(self, body: dict) -> dict: body_dict["metadata"]["model"] = body_dict["metadata"]["model"].model_dump() return body_dict - + def _modify_outlet_body(self, body: dict) -> dict: + body_modify = dict(body) + if body_modify["messages"][-1].get("info") is None: + if not self.inlet_temp is None: + body_modify["messages"][:-1] = self.inlet_temp["messages"] + return body_modify + def inlet( self, body: dict, user: Optional[dict] = None, __user__: dict = {} ) -> dict: @@ -98,6 +105,7 @@ def inlet( user_dict = self._prepare_user_dict(__user__) body_dict = self._prepare_body_dict(body) + self.inlet_temp = body_dict response = requests.post( post_url, headers=headers, json={"user": user_dict, "body": body_dict} ) @@ -116,7 +124,6 @@ def inlet( self.outage = response_data.get("balance", 0) <= 0 if self.outage: raise Exception(self.get_text("insufficient_balance", balance=response_data['balance'])) - return body except requests.exceptions.RequestException as e: @@ -144,10 +151,11 @@ async def outlet( headers = {"Authorization": f"Bearer {self.valves.API_KEY}"} user_dict = self._prepare_user_dict(__user__) + body_modify = self._modify_outlet_body(body) request_data = { "user": user_dict, - "body": body, + "body": body_modify, } response = requests.post(post_url, headers=headers, json=request_data) From 1e8054f16ae449640910bcaf369d23084d66bf1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E6=B5=B7?= <62863922+xinhai-ai@users.noreply.github.com> Date: Sat, 8 Feb 2025 13:25:49 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=AE=80=E5=8C=96=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/functions/openwebui_monitor.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/resources/functions/openwebui_monitor.py b/resources/functions/openwebui_monitor.py index 10ece22..84e52f3 100644 --- a/resources/functions/openwebui_monitor.py +++ b/resources/functions/openwebui_monitor.py @@ -89,9 +89,10 @@ def _prepare_body_dict(self, body: dict) -> dict: return body_dict def _modify_outlet_body(self, body: dict) -> dict: body_modify = dict(body) - if body_modify["messages"][-1].get("info") is None: - if not self.inlet_temp is None: - body_modify["messages"][:-1] = self.inlet_temp["messages"] + last_message = body_modify["messages"][-1] + + if "info" not in last_message and self.inlet_temp is not None: + body_modify["messages"][:-1] = self.inlet_temp["messages"] return body_modify def inlet( From e81fada8968ec99a903f0e217409e7c1fc926737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E6=B5=B7?= <62863922+xinhai-ai@users.noreply.github.com> Date: Sat, 8 Feb 2025 13:27:56 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../functions/openwebui_monitor_invisible.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/resources/functions/openwebui_monitor_invisible.py b/resources/functions/openwebui_monitor_invisible.py index cc79b41..27c7103 100644 --- a/resources/functions/openwebui_monitor_invisible.py +++ b/resources/functions/openwebui_monitor_invisible.py @@ -24,6 +24,7 @@ def __init__(self): self.valves = self.Valves() self.outage = False self.start_time = None + self.inlet_temp = None def _prepare_request_body(self, body: dict) -> dict: """Convert body and nested objects to JSON-serializable format""" @@ -45,6 +46,14 @@ def _prepare_user_dict(self, __user__: dict) -> dict: return user_dict + def _modify_outlet_body(self, body: dict) -> dict: + body_modify = dict(body) + last_message = body_modify["messages"][-1] + + if "info" not in last_message and self.inlet_temp is not None: + body_modify["messages"][:-1] = self.inlet_temp["messages"] + return body_modify + def inlet( self, body: dict, user: Optional[dict] = None, __user__: dict = {} ) -> dict: @@ -56,10 +65,11 @@ def inlet( # 使用 _prepare_user_dict 处理 __user__ 对象 user_dict = self._prepare_user_dict(__user__) - + body_dict = self._prepare_request_body(body) + self.inlet_temp = body_dict request_data = { "user": user_dict, - "body": self._prepare_request_body(body) + "body": body_dict } response = requests.post(post_url, headers=headers, json=request_data) @@ -106,10 +116,11 @@ async def outlet( # 使用 _prepare_user_dict 处理 __user__ 对象 user_dict = self._prepare_user_dict(__user__) - + body_dict = self._prepare_request_body(body) + body_modify = self._modify_outlet_body(body_dict) request_data = { "user": user_dict, - "body": self._prepare_request_body(body) + "body": body_modify } response = requests.post(post_url, headers=headers, json=request_data)