sycommon-python-lib 0.2.2a16__py3-none-any.whl → 0.2.2a18__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,7 +51,8 @@ from sycommon.agent.sandbox.sandbox_recovery import SandboxRecoveryManager
51
51
  from sycommon.agent.chat_events import ChatEvent, ChatEventBuilder, DEFAULT_AGENT_NAME
52
52
  from sycommon.middleware.background_execution import BackgroundExecutionMiddleware
53
53
  from sycommon.middleware.token_tracking import TokenTrackingMiddleware
54
- from deepagents.middleware.summarization import create_summarization_tool_middleware
54
+ from deepagents.middleware.summarization import create_summarization_tool_middleware # noqa: F401 保留 re-export
55
+ from sycommon.agent.summarization_utils import build_summarization_middleware
55
56
 
56
57
  if TYPE_CHECKING:
57
58
  from deepagents.graph import CompiledStateGraph
@@ -583,6 +584,11 @@ async def create_deep_agent(
583
584
  # 创建 agent
584
585
  from deepagents import create_deep_agent as _create_deep_agent
585
586
 
587
+ # 根据模型上下文窗口大小配置压缩阈值
588
+ summarization_mw = build_summarization_middleware(
589
+ model, config.model_name, sandbox_backend,
590
+ )
591
+
586
592
  agent_kwargs = {
587
593
  "model": model,
588
594
  "tools": config.tools or [get_current_date],
@@ -593,7 +599,7 @@ async def create_deep_agent(
593
599
  "middleware": [
594
600
  BackgroundExecutionMiddleware(backend=sandbox_backend),
595
601
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
596
- create_summarization_tool_middleware(model, sandbox_backend),
602
+ summarization_mw,
597
603
  ],
598
604
  }
599
605
  if skills_path:
@@ -44,7 +44,8 @@ from sycommon.agent.sandbox.sandbox_recovery import SandboxRecoveryManager
44
44
  from sycommon.agent.chat_events import ChatEvent, ChatEventBuilder, DEFAULT_AGENT_NAME
45
45
  from sycommon.middleware.background_execution import BackgroundExecutionMiddleware
46
46
  from sycommon.middleware.token_tracking import TokenTrackingMiddleware
47
- from deepagents.middleware.summarization import create_summarization_tool_middleware
47
+ from deepagents.middleware.summarization import create_summarization_tool_middleware # noqa: F401 保留 re-export
48
+ from sycommon.agent.summarization_utils import build_summarization_middleware
48
49
 
49
50
  if TYPE_CHECKING:
50
51
  from deepagents.graph import CompiledStateGraph
@@ -585,7 +586,7 @@ async def create_multi_agent_team(
585
586
  middleware = [
586
587
  BackgroundExecutionMiddleware(backend=sandbox_backend),
587
588
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
588
- create_summarization_tool_middleware(model, sandbox_backend),
589
+ build_summarization_middleware(model, config.model_name, sandbox_backend),
589
590
  ]
590
591
  shared = config.shared_tools or [get_current_date]
591
592
 
@@ -640,7 +641,7 @@ async def create_multi_agent_team(
640
641
  middleware=[
641
642
  BackgroundExecutionMiddleware(backend=sandbox_backend),
642
643
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
643
- create_summarization_tool_middleware(model, sandbox_backend),
644
+ build_summarization_middleware(model, config.model_name, sandbox_backend),
644
645
  ],
645
646
  )
646
647
 
@@ -0,0 +1,68 @@
1
+ """上下文压缩 middleware 构建工具。
2
+
3
+ 根据 nacos 中配置的模型 maxTokens,用绝对 token 数设置压缩阈值,
4
+ 避免依赖模型 profile 信息(部分模型不提供 profile)。
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from typing import TYPE_CHECKING
10
+
11
+ from deepagents.middleware.summarization import (
12
+ SummarizationMiddleware,
13
+ SummarizationToolMiddleware,
14
+ )
15
+
16
+ if TYPE_CHECKING:
17
+ from langchain_core.language_models import BaseChatModel
18
+ from deepagents.backends.protocol import BACKEND_TYPES
19
+
20
+
21
+ def build_summarization_middleware(
22
+ model: BaseChatModel,
23
+ model_name: str,
24
+ backend: "BACKEND_TYPES",
25
+ *,
26
+ trigger_fraction: float = 0.85,
27
+ keep_fraction: float = 0.10,
28
+ default_max_tokens: int = 200000,
29
+ ) -> SummarizationToolMiddleware:
30
+ """根据模型上下文窗口大小构建压缩 middleware。
31
+
32
+ 使用绝对 token 数而非 fraction 模式,避免要求模型提供 profile 信息。
33
+
34
+ Args:
35
+ model: LLM 实例。
36
+ model_name: 模型名称(用于从 nacos 读取配置)。
37
+ backend: 后端实例。
38
+ trigger_fraction: 触发压缩的上下文窗口比例,默认 85%。
39
+ keep_fraction: 压缩后保留的上下文窗口比例,默认 10%。
40
+ default_max_tokens: 无法从配置读取时的默认上下文窗口大小。
41
+
42
+ Returns:
43
+ SummarizationToolMiddleware 实例(包含自动压缩 + compact_conversation 工具)。
44
+ """
45
+ try:
46
+ from sycommon.config.Config import Config
47
+
48
+ llm_cfg = Config().get_llm_config(model_name)
49
+ max_tokens = llm_cfg.get("maxTokens", default_max_tokens)
50
+ except Exception:
51
+ max_tokens = default_max_tokens
52
+
53
+ trigger_tokens = int(max_tokens * trigger_fraction)
54
+ keep_tokens = int(max_tokens * keep_fraction)
55
+
56
+ summ = SummarizationMiddleware(
57
+ model=model,
58
+ backend=backend,
59
+ trigger=("tokens", trigger_tokens),
60
+ keep=("tokens", keep_tokens),
61
+ trim_tokens_to_summarize=None,
62
+ truncate_args_settings={
63
+ "trigger": ("tokens", trigger_tokens),
64
+ "keep": ("tokens", keep_tokens),
65
+ "max_length": 2000,
66
+ },
67
+ )
68
+ return SummarizationToolMiddleware(summ)
@@ -1131,8 +1131,8 @@ COMMAND_EOF
1131
1131
  SYLogger.error(f"[Sandbox Server] tree 失败: {e}")
1132
1132
  return TreeResponse(error=str(e))
1133
1133
 
1134
- max_depth = req.max_depth if req.max_depth is not None else 5
1135
- max_files = req.max_files if req.max_files is not None else 500
1134
+ max_depth = req.max_depth if req.max_depth is not None else 0
1135
+ max_files = req.max_files if req.max_files is not None else 0
1136
1136
  if max_depth == 0:
1137
1137
  max_depth = 100
1138
1138
 
@@ -1157,11 +1157,6 @@ COMMAND_EOF
1157
1157
  return node
1158
1158
 
1159
1159
  for entry in entries:
1160
- if max_files > 0 and file_count >= max_files:
1161
- node.children.append(TreeNode(
1162
- path="...", name=f"... (truncated, max {max_files} files)", is_dir=False
1163
- ))
1164
- break
1165
1160
 
1166
1161
  abs_path = os.path.join(dir_path, entry.name)
1167
1162
  virtual_path = "/" + os.path.relpath(abs_path, workspace)
@@ -86,8 +86,8 @@ class TreeRequest(BaseModel):
86
86
  """树形目录请求"""
87
87
  path: str = "/"
88
88
  user_id: str
89
- max_depth: Optional[int] = 10
90
- max_files: Optional[int] = 500
89
+ max_depth: Optional[int] = 0
90
+ max_files: Optional[int] = 0
91
91
 
92
92
 
93
93
  class TreeResponse(BaseModel):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.2a16
3
+ Version: 0.2.2a18
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -129,8 +129,9 @@ sycommon/services.py,sha256=N6Z4D-qmdyGBZ5z72j2dtSfpXnrnWjEuSyKCgSIY0Cs,21332
129
129
  sycommon/agent/__init__.py,sha256=PXxUiDwdzxv3WQfD8R5MKXtV7qZPvbRc0wPxnS-ZsNQ,3752
130
130
  sycommon/agent/agent_manager.py,sha256=UhhaekEumT7g4v_Z1UB4jTp13X0n8M8erYaQdkGGWkA,13620
131
131
  sycommon/agent/chat_events.py,sha256=bWAMWYIZ2L_yqUcn5jq9ius_lQxLHEv4zQLEqX6UaeM,13190
132
- sycommon/agent/deep_agent.py,sha256=NBLA02b5cISfG1p3jwkdrynKNr_PiueehUaLrC-mjk8,28092
133
- sycommon/agent/multi_agent_team.py,sha256=EJyJEsDp8K-5fl-xZifmnojV7fWyCww3WeCFlSjTo0Q,26156
132
+ sycommon/agent/deep_agent.py,sha256=lqPkn2ztcNox-6dZnH5MV0Eslg2_Bf6U2876JUc_Gn4,28328
133
+ sycommon/agent/multi_agent_team.py,sha256=TkNgWmnCs6etpun-qz3i1UTE1QmmZGis2oqb4OepiC0,26291
134
+ sycommon/agent/summarization_utils.py,sha256=ARaClsm7MsQFe4MwFb0t_2zr19-lKWqEgQNaMzTLxK8,2242
134
135
  sycommon/agent/sandbox/__init__.py,sha256=jR7LlkD4J4Y6QYyRXQClkwmqDBCCPmycV_hQV9p9YHw,4621
135
136
  sycommon/agent/sandbox/file_ops.py,sha256=2LJNm0bQZj_l1FtpcDUtOBSQUK-Sd2vVZyc1JbNBhXk,22779
136
137
  sycommon/agent/sandbox/http_sandbox_backend.py,sha256=mjiTZnADvUq_rO05ewllo_eGDS4uTdD2e2GGYvBpF-Q,56150
@@ -197,7 +198,7 @@ sycommon/middleware/exception.py,sha256=UAy0tKijI_2JoKjwT3h62aL-tybftP3IETvcr26N
197
198
  sycommon/middleware/middleware.py,sha256=z3-6KHdBt93TOSNn0LY579WReSCo0o4f9d9-dq7c-ic,1600
198
199
  sycommon/middleware/monitor_memory.py,sha256=pYRK-wRuDd6enSg9Pf8tQxPdYQS6S0AyjyXeKFRLKEs,628
199
200
  sycommon/middleware/mq.py,sha256=9X6KKtadFjBXKS5L3kEKujYio9wwGfWgXwWOAHO-HDg,254
200
- sycommon/middleware/sandbox.py,sha256=SbnzBrVa2gPASRQJBn_j-C6KCoWYIgChfO8CHox3BHI,61390
201
+ sycommon/middleware/sandbox.py,sha256=SQnUvVE0gvBo_YrP4fdA-6ZmJxAG9Po1zUynNFrgTI4,61109
201
202
  sycommon/middleware/timeout.py,sha256=KlxOPa8xl2dg6yuRi_EzkVJG8bX4stb5ueYxctzzGM8,1433
202
203
  sycommon/middleware/token_tracking.py,sha256=rEbgV1bgWMdzAERx4aq5XAvOIT6jTY_tK1P0xHJnL3o,6609
203
204
  sycommon/middleware/traceid.py,sha256=HX4zg7Tp_mPNr2eWDDvK3f7GFJ6eOSeW062Xcc-xshc,14340
@@ -207,7 +208,7 @@ sycommon/models/log.py,sha256=rZpj6VkDRxK3B6H7XSeWdYZshU8F0Sks8bq1p6pPlDw,500
207
208
  sycommon/models/mqlistener_config.py,sha256=vXp2uMmd0XQ5B9noSRXWHewTy-juQ2y7IsWtISJD5aI,1661
208
209
  sycommon/models/mqmsg_model.py,sha256=Zo-LsDMFuF1Vkx9ZmwBC9E7TrCw-7nAQD2TE4v9-6F4,291
209
210
  sycommon/models/mqsend_config.py,sha256=NQX9dc8PpuquMG36GCVhJe8omAW1KVXXqr6lSRU6D7I,268
210
- sycommon/models/sandbox.py,sha256=EOd9I2P7z5oh5EpB6rSK_dZJYMTLQEsajCidEnbnZHY,7296
211
+ sycommon/models/sandbox.py,sha256=5QPLqKCDm0UeyC8CHb2G0d7Rb3f7MYaLq12RFRSeOxc,7293
211
212
  sycommon/models/sso_user.py,sha256=uqLlZevVaDQQche5eBq8m1b8lu-45Pe4vHY3kd3NdxA,2896
212
213
  sycommon/models/token_usage.py,sha256=w3Aash7jUVSUIgKxBUzI6SqJ9VV5Pk7rLBbMUlLv6nA,1242
213
214
  sycommon/models/token_usage_mysql.py,sha256=eWnCvI2FDwyTA_fr4wWQtAmUnFJgLwrt0WXMXHLAESQ,2633
@@ -254,8 +255,8 @@ sycommon/tools/syemail.py,sha256=BDFhgf7WDOQeTcjxJEQdu0dQhnHFPO_p3eI0-Ni3LhQ,561
254
255
  sycommon/tools/timing.py,sha256=OiiE7P07lRoMzX9kzb8sZU9cDb0zNnqIlY5pWqHcnkY,2064
255
256
  sycommon/xxljob/__init__.py,sha256=7eoBlQxv-B39IfRSCY2bkqdGYs1QRe1umAWd88VMEEM,86
256
257
  sycommon/xxljob/xxljob_service.py,sha256=JIEJaGXhqrTLcyxlyynSrsHg9bBnDNzX-D4qIWLRPUE,6815
257
- sycommon_python_lib-0.2.2a16.dist-info/METADATA,sha256=I7uD0VindlGZzv29gAydwW5DoZyp-k4xJM-GwFlrWy4,7741
258
- sycommon_python_lib-0.2.2a16.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
259
- sycommon_python_lib-0.2.2a16.dist-info/entry_points.txt,sha256=gsR4SssKxDWjRU8ggidzNcdMXDPRSKRS7UaGyNP84Qg,92
260
- sycommon_python_lib-0.2.2a16.dist-info/top_level.txt,sha256=RgphKrg7nJyZ7irJqbxFr-5H2LUYTvI7ivoWZH2hcD0,29
261
- sycommon_python_lib-0.2.2a16.dist-info/RECORD,,
258
+ sycommon_python_lib-0.2.2a18.dist-info/METADATA,sha256=gEuxQjZ14MrPPHCS0TsHhrcfkbpoJT21vMvVBastbYM,7741
259
+ sycommon_python_lib-0.2.2a18.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
260
+ sycommon_python_lib-0.2.2a18.dist-info/entry_points.txt,sha256=gsR4SssKxDWjRU8ggidzNcdMXDPRSKRS7UaGyNP84Qg,92
261
+ sycommon_python_lib-0.2.2a18.dist-info/top_level.txt,sha256=RgphKrg7nJyZ7irJqbxFr-5H2LUYTvI7ivoWZH2hcD0,29
262
+ sycommon_python_lib-0.2.2a18.dist-info/RECORD,,