sycommon-python-lib 0.2.2a18__tar.gz → 0.2.3a0__tar.gz

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.
Files changed (271) hide show
  1. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/deep_agent.py +8 -3
  4. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/multi_agent_team.py +4 -1
  5. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/summarization_utils.py +2 -2
  6. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/get_llm.py +2 -2
  7. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/struct_token.py +4 -6
  8. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/sy_langfuse.py +17 -2
  9. sycommon_python_lib-0.2.3a0/src/sycommon/middleware/tool_result_truncation.py +136 -0
  10. sycommon_python_lib-0.2.3a0/src/sycommon/notice/__init__.py +5 -0
  11. sycommon_python_lib-0.2.3a0/src/sycommon/notice/wecom_message.py +328 -0
  12. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  13. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon_python_lib.egg-info/SOURCES.txt +2 -0
  14. sycommon_python_lib-0.2.2a18/src/sycommon/tools/__init__.py +0 -0
  15. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/README.md +0 -0
  16. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/setup.cfg +0 -0
  17. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/__init__.py +0 -0
  18. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/cli.py +0 -0
  19. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/core/__init__.py +0 -0
  20. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/core/console.py +0 -0
  21. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/core/models.py +0 -0
  22. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/core/project.py +0 -0
  23. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/core/utils.py +0 -0
  24. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/__init__.py +0 -0
  25. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/README.md.tpl +0 -0
  26. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/__init__.py +0 -0
  27. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/api/query.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/app.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/db/service.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/model/parse.py.tpl +0 -0
  45. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/.env.tpl +0 -0
  48. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/.gitignore.tpl +0 -0
  49. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/Dockerfile.tpl +0 -0
  50. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/README.md.tpl +0 -0
  51. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/__init__.py +0 -0
  52. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/app.py.tpl +0 -0
  53. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/app.yaml.tpl +0 -0
  54. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/client/__init__.py.tpl +0 -0
  56. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/model/__init__.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/model/file_info.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/base/requirements.txt.tpl +0 -0
  59. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/cli/README.md.tpl +0 -0
  60. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/cli/__init__.py +0 -0
  61. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/cli/app.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  64. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  65. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/README.md.tpl +0 -0
  67. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/__init__.py +0 -0
  68. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/api/__init__.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/api/echo.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  71. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  72. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/app.py.tpl +0 -0
  73. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/client/__init__.py.tpl +0 -0
  74. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/model/__init__.py.tpl +0 -0
  75. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  76. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/command/templates/web/tools/mq.py.tpl +0 -0
  77. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/nexus/__init__.py +0 -0
  78. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/__init__.py +0 -0
  79. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/__main__.py +0 -0
  80. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/agents/__init__.py +0 -0
  81. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/agents/factory.py +0 -0
  82. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/agents/prompts.py +0 -0
  83. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/__init__.py +0 -0
  84. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/browser.py +0 -0
  85. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/capabilities/__init__.py +0 -0
  86. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/capabilities/console.py +0 -0
  87. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/capabilities/dom.py +0 -0
  88. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/capabilities/network.py +0 -0
  89. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  90. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/capabilities/performance.py +0 -0
  91. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  92. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/client.py +0 -0
  93. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/protocol.py +0 -0
  94. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cdp/repl.py +0 -0
  95. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/cli.py +0 -0
  96. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/__init__.py +0 -0
  97. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/cdp_cmd.py +0 -0
  98. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/chat_cmd.py +0 -0
  99. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/create_cmd.py +0 -0
  100. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/evaluate_cmd.py +0 -0
  101. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/init_cmd.py +0 -0
  102. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/memory_cmd.py +0 -0
  103. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/resume_cmd.py +0 -0
  104. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/rollback_cmd.py +0 -0
  105. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/commands/run_cmd.py +0 -0
  106. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/core/__init__.py +0 -0
  107. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/core/backend.py +0 -0
  108. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/core/config.py +0 -0
  109. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/core/display.py +0 -0
  110. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/core/git_integration.py +0 -0
  111. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/core/llm.py +0 -0
  112. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/core/state.py +0 -0
  113. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/evaluate/__init__.py +0 -0
  114. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/evaluate/api_evaluator.py +0 -0
  115. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/memory/__init__.py +0 -0
  116. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/memory/compressor.py +0 -0
  117. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/memory/full.py +0 -0
  118. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/memory/hot.py +0 -0
  119. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/memory/manager.py +0 -0
  120. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/memory/warm.py +0 -0
  121. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/mode/__init__.py +0 -0
  122. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/mode/create.py +0 -0
  123. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/mode/optimize.py +0 -0
  124. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/models/__init__.py +0 -0
  125. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/models/config_models.py +0 -0
  126. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/__init__.py +0 -0
  127. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/baseline_tests.py +0 -0
  128. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/checkpoint.py +0 -0
  129. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/convergence.py +0 -0
  130. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/diagnosis.py +0 -0
  131. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/engine.py +0 -0
  132. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/environment.py +0 -0
  133. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/experience.py +0 -0
  134. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/harness_prompts.py +0 -0
  135. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/history.py +0 -0
  136. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/optimization_logger.py +0 -0
  137. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/pre_validation.py +0 -0
  138. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/reward.py +0 -0
  139. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/strategy_bandit.py +0 -0
  140. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/strategy_generator.py +0 -0
  141. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/rl/strategy_prompts.py +0 -0
  142. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycli/skills/__init__.py +0 -0
  143. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/__init__.py +0 -0
  144. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/__init__.py +0 -0
  145. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/agent_manager.py +0 -0
  146. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/chat_events.py +0 -0
  147. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/sandbox/__init__.py +0 -0
  148. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  149. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  150. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  151. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  152. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  153. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/agent/sandbox/session.py +0 -0
  154. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/auth/__init__.py +0 -0
  155. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/auth/ldap_service.py +0 -0
  156. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  157. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/Config.py +0 -0
  158. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/DatabaseConfig.py +0 -0
  159. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  160. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/EmbeddingConfig.py +0 -0
  161. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/LLMConfig.py +0 -0
  162. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/LangfuseConfig.py +0 -0
  163. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/MQConfig.py +0 -0
  164. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/RedisConfig.py +0 -0
  165. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/RerankerConfig.py +0 -0
  166. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/SentryConfig.py +0 -0
  167. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/XxlJobConfig.py +0 -0
  168. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/config/__init__.py +0 -0
  169. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/database/async_base_db_service.py +0 -0
  170. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/database/async_database_service.py +0 -0
  171. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/database/base_db_service.py +0 -0
  172. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/database/database_service.py +0 -0
  173. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/database/elasticsearch_service.py +0 -0
  174. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/database/redis_service.py +0 -0
  175. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/database/token_usage_db_service.py +0 -0
  176. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/health/__init__.py +0 -0
  177. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/health/health_check.py +0 -0
  178. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/health/metrics.py +0 -0
  179. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/health/ping.py +0 -0
  180. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/heartbeat_process/__init__.py +0 -0
  181. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  182. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  183. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  184. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/__init__.py +0 -0
  185. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/embedding.py +0 -0
  186. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/llm_logger.py +0 -0
  187. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/llm_tokens.py +0 -0
  188. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  189. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  190. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  191. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/token_usage_es_service.py +0 -0
  192. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  193. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/llm/usage_token.py +0 -0
  194. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/logging/__init__.py +0 -0
  195. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/logging/async_sql_logger.py +0 -0
  196. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/logging/kafka_log.py +0 -0
  197. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/logging/logger_levels.py +0 -0
  198. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/logging/logger_wrapper.py +0 -0
  199. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/logging/process_logger.py +0 -0
  200. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/logging/sql_logger.py +0 -0
  201. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/__init__.py +0 -0
  202. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/background_execution.py +0 -0
  203. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/context.py +0 -0
  204. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/cors.py +0 -0
  205. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/docs.py +0 -0
  206. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/exception.py +0 -0
  207. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/middleware.py +0 -0
  208. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/monitor_memory.py +0 -0
  209. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/mq.py +0 -0
  210. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/sandbox.py +0 -0
  211. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/timeout.py +0 -0
  212. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/token_tracking.py +0 -0
  213. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/middleware/traceid.py +0 -0
  214. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/__init__.py +0 -0
  215. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/base_http.py +0 -0
  216. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/log.py +0 -0
  217. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/mqlistener_config.py +0 -0
  218. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/mqmsg_model.py +0 -0
  219. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/mqsend_config.py +0 -0
  220. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/sandbox.py +0 -0
  221. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/sso_user.py +0 -0
  222. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/token_usage.py +0 -0
  223. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/token_usage_mysql.py +0 -0
  224. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/models/xxljob_handler_config.py +0 -0
  225. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  226. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  227. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  228. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  229. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  230. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  231. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  232. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  233. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  234. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  235. {sycommon_python_lib-0.2.2a18/src/sycommon/notice → sycommon_python_lib-0.2.3a0/src/sycommon/sentry}/__init__.py +0 -0
  236. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/sentry/sy_sentry.py +0 -0
  237. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/services.py +0 -0
  238. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/sse/__init__.py +0 -0
  239. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/sse/event.py +0 -0
  240. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/sse/sse.py +0 -0
  241. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/__init__.py +0 -0
  242. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/example.py +0 -0
  243. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/example2.py +0 -0
  244. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/feign.py +0 -0
  245. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/feign_client.py +0 -0
  246. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/nacos_client_base.py +0 -0
  247. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  248. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  249. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/nacos_service.py +0 -0
  250. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  251. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  252. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/synacos/param.py +0 -0
  253. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tests/deep_agent_server.py +0 -0
  254. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tests/test_deep_agent.py +0 -0
  255. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tests/test_email.py +0 -0
  256. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tests/test_mq.py +0 -0
  257. {sycommon_python_lib-0.2.2a18/src/sycommon/sentry → sycommon_python_lib-0.2.3a0/src/sycommon/tools}/__init__.py +0 -0
  258. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tools/async_utils.py +0 -0
  259. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tools/docs.py +0 -0
  260. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tools/env.py +0 -0
  261. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tools/merge_headers.py +0 -0
  262. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tools/snowflake.py +0 -0
  263. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tools/syemail.py +0 -0
  264. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/tools/timing.py +0 -0
  265. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/xxljob/__init__.py +0 -0
  266. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon/xxljob/xxljob_service.py +0 -0
  267. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  268. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  269. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  270. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  271. {sycommon_python_lib-0.2.2a18 → sycommon_python_lib-0.2.3a0}/tests/test_sycli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.2a18
3
+ Version: 0.2.3a0
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.2.2a18"
3
+ version = "0.2.3a0"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -51,6 +51,7 @@ 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 sycommon.middleware.tool_result_truncation import ToolResultTruncationMiddleware
54
55
  from deepagents.middleware.summarization import create_summarization_tool_middleware # noqa: F401 保留 re-export
55
56
  from sycommon.agent.summarization_utils import build_summarization_middleware
56
57
 
@@ -107,7 +108,7 @@ class AgentConfig(BaseModel):
107
108
 
108
109
  # 沙箱配置
109
110
  sandbox_service_name: str = "shengye-platform-sandbox"
110
- sandbox_timeout: int = 60
111
+ sandbox_timeout: int = 300
111
112
  skills_dir: Optional[str] = None
112
113
  memory_dir: Optional[str] = None
113
114
 
@@ -489,6 +490,8 @@ class DeepAgent:
489
490
  from openai import APIConnectionError, APIError, APITimeoutError
490
491
 
491
492
  last_error = None
493
+ sandbox_retries = 0
494
+ max_sandbox_retries = 3
492
495
 
493
496
  while True:
494
497
  for attempt in range(max_retries):
@@ -511,8 +514,9 @@ class DeepAgent:
511
514
  else:
512
515
  raise last_error
513
516
  except RuntimeError as e:
514
- if "沙箱服务不可用" in str(e) and self.recovery_manager:
515
- SYLogger.warning("[DeepAgent] 沙箱服务不可用,尝试恢复...")
517
+ if "沙箱服务不可用" in str(e) and self.recovery_manager and sandbox_retries < max_sandbox_retries:
518
+ sandbox_retries += 1
519
+ SYLogger.warning(f"[DeepAgent] 沙箱服务不可用,尝试恢复 ({sandbox_retries}/{max_sandbox_retries})...")
516
520
  recovered = await self.recovery_manager.recover()
517
521
  if recovered:
518
522
  SYLogger.info("[DeepAgent] 沙箱已恢复,继续执行")
@@ -598,6 +602,7 @@ async def create_deep_agent(
598
602
  "debug": config.debug,
599
603
  "middleware": [
600
604
  BackgroundExecutionMiddleware(backend=sandbox_backend),
605
+ ToolResultTruncationMiddleware(),
601
606
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
602
607
  summarization_mw,
603
608
  ],
@@ -44,6 +44,7 @@ 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 sycommon.middleware.tool_result_truncation import ToolResultTruncationMiddleware
47
48
  from deepagents.middleware.summarization import create_summarization_tool_middleware # noqa: F401 保留 re-export
48
49
  from sycommon.agent.summarization_utils import build_summarization_middleware
49
50
 
@@ -165,7 +166,7 @@ class TeamConfig(BaseModel):
165
166
  coordinator_name: str = "项目经理"
166
167
 
167
168
  sandbox_service_name: str = "shengye-platform-sandbox"
168
- sandbox_timeout: int = 60
169
+ sandbox_timeout: int = 300
169
170
  skills_dir: Optional[str] = None
170
171
  memory_dir: Optional[str] = None
171
172
 
@@ -585,6 +586,7 @@ async def create_multi_agent_team(
585
586
 
586
587
  middleware = [
587
588
  BackgroundExecutionMiddleware(backend=sandbox_backend),
589
+ ToolResultTruncationMiddleware(),
588
590
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
589
591
  build_summarization_middleware(model, config.model_name, sandbox_backend),
590
592
  ]
@@ -640,6 +642,7 @@ async def create_multi_agent_team(
640
642
  name=coord_name,
641
643
  middleware=[
642
644
  BackgroundExecutionMiddleware(backend=sandbox_backend),
645
+ ToolResultTruncationMiddleware(),
643
646
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
644
647
  build_summarization_middleware(model, config.model_name, sandbox_backend),
645
648
  ],
@@ -23,7 +23,7 @@ def build_summarization_middleware(
23
23
  model_name: str,
24
24
  backend: "BACKEND_TYPES",
25
25
  *,
26
- trigger_fraction: float = 0.85,
26
+ trigger_fraction: float = 0.70,
27
27
  keep_fraction: float = 0.10,
28
28
  default_max_tokens: int = 200000,
29
29
  ) -> SummarizationToolMiddleware:
@@ -35,7 +35,7 @@ def build_summarization_middleware(
35
35
  model: LLM 实例。
36
36
  model_name: 模型名称(用于从 nacos 读取配置)。
37
37
  backend: 后端实例。
38
- trigger_fraction: 触发压缩的上下文窗口比例,默认 85%。
38
+ trigger_fraction: 触发压缩的上下文窗口比例,默认 70%。
39
39
  keep_fraction: 压缩后保留的上下文窗口比例,默认 10%。
40
40
  default_max_tokens: 无法从配置读取时的默认上下文窗口大小。
41
41
 
@@ -153,7 +153,7 @@ def get_llm(
153
153
 
154
154
  # 根据 wrap_structured 决定默认超时
155
155
  if timeout is _TIMEOUT_UNSET:
156
- timeout = 180 if wrap_structured else None
156
+ timeout = 180 if wrap_structured else 300
157
157
 
158
158
  init_params = {
159
159
  "model_provider": llmConfig.provider,
@@ -165,7 +165,7 @@ def get_llm(
165
165
  "streaming": streaming,
166
166
  "timeout": timeout,
167
167
  "max_retries": max_retries,
168
- "stream_chunk_timeout": None,
168
+ "stream_chunk_timeout": 180,
169
169
  }
170
170
 
171
171
  # 合并其他透传参数(包括 presence_penalty, extra_body, top_p 等)
@@ -345,7 +345,6 @@ class StructuredRunnableWithToken(Runnable):
345
345
  try:
346
346
  with self.langfuse.start_as_current_observation(as_type="span", name="invoke") as span:
347
347
  with propagate_attributes(session_id=trace_id, user_id=user_id):
348
- span.update_trace(user_id=user_id, session_id=trace_id)
349
348
  return self._execute_chain(input, config, trace_id, user_id, span)
350
349
  except Exception as e:
351
350
  # Langfuse 跟踪失败不应阻断业务,降级执行
@@ -366,7 +365,6 @@ class StructuredRunnableWithToken(Runnable):
366
365
  try:
367
366
  with self.langfuse.start_as_current_observation(as_type="span", name="ainvoke") as span:
368
367
  with propagate_attributes(session_id=trace_id, user_id=user_id):
369
- span.update_trace(user_id=user_id, session_id=trace_id)
370
368
  return await self._aexecute_chain(input, config, trace_id, user_id, span)
371
369
  except Exception as e:
372
370
  # Langfuse 跟踪失败不应阻断业务,降级执行
@@ -405,7 +403,7 @@ class StructuredRunnableWithToken(Runnable):
405
403
  input_data = {"messages": adapted_input}
406
404
 
407
405
  if span:
408
- span.update_trace(input=input_data)
406
+ span.update(input=input_data)
409
407
 
410
408
  structured_result = self.retry_chain.invoke(
411
409
  input_data,
@@ -413,7 +411,7 @@ class StructuredRunnableWithToken(Runnable):
413
411
  )
414
412
 
415
413
  if span:
416
- span.update_trace(output=structured_result)
414
+ span.update(output=structured_result)
417
415
 
418
416
  token_usage = token_handler.usage_metadata
419
417
  structured_result._token_usage_ = token_usage
@@ -465,7 +463,7 @@ class StructuredRunnableWithToken(Runnable):
465
463
  input_data = {"messages": adapted_input}
466
464
 
467
465
  if span:
468
- span.update_trace(input=input_data)
466
+ span.update(input=input_data)
469
467
 
470
468
  # 3. 调用子链
471
469
  structured_result = await self.retry_chain.ainvoke(
@@ -474,7 +472,7 @@ class StructuredRunnableWithToken(Runnable):
474
472
  )
475
473
 
476
474
  if span:
477
- span.update_trace(output=structured_result)
475
+ span.update(output=structured_result)
478
476
 
479
477
  token_usage = token_handler.usage_metadata
480
478
  structured_result._token_usage_ = token_usage
@@ -3,11 +3,26 @@ from typing import Tuple, List, Optional, Any, Dict
3
3
  from langfuse import Langfuse, get_client
4
4
  from sycommon.config.Config import Config, SingletonMeta
5
5
  from sycommon.logging.kafka_log import SYLogger
6
- from langfuse.langchain import CallbackHandler
6
+ from langfuse.langchain import CallbackHandler as _LangfuseCallbackHandler
7
7
  from sycommon.tools.env import get_env_var
8
8
  from sycommon.tools.merge_headers import get_header_value
9
9
 
10
10
 
11
+ class SafeLangfuseCallbackHandler(_LangfuseCallbackHandler):
12
+ """Wraps Langfuse CallbackHandler to handle unpicklable error objects.
13
+
14
+ LangGraph errors (e.g. Command/Interrupt dataclasses) may hold
15
+ _asyncio.Task references. When Langfuse calls str(error) → asdict() →
16
+ deepcopy(), this raises TypeError: cannot pickle '_asyncio.Task' object.
17
+ """
18
+
19
+ def on_chain_error(self, error, **kwargs):
20
+ try:
21
+ super().on_chain_error(error, **kwargs)
22
+ except (TypeError, ValueError):
23
+ pass
24
+
25
+
11
26
  class LangfuseInitializer(metaclass=SingletonMeta):
12
27
  """
13
28
  Langfuse 初始化管理器
@@ -53,7 +68,7 @@ class LangfuseInitializer(metaclass=SingletonMeta):
53
68
 
54
69
  self._langfuse_client = get_client()
55
70
 
56
- langfuse_handler = CallbackHandler()
71
+ langfuse_handler = SafeLangfuseCallbackHandler()
57
72
  self._base_callbacks.append(langfuse_handler)
58
73
 
59
74
  SYLogger.info(f"Langfuse 初始化成功 [Service: {server_name}]")
@@ -0,0 +1,136 @@
1
+ """工具结果截断中间件
2
+
3
+ 在工具执行结果返回给 LLM 之前,自动截断过长的 ToolMessage.content,
4
+ 防止 "Prompt exceeds max length" 错误。
5
+
6
+ 通过 wrap_tool_call / awrap_tool_call 钩子拦截每个工具调用结果,
7
+ 在结果进入对话历史之前完成截断。
8
+ """
9
+
10
+ from collections.abc import Awaitable, Callable
11
+ from typing import Any, FrozenSet
12
+
13
+ from langchain.agents.middleware.types import (
14
+ AgentMiddleware,
15
+ AgentState,
16
+ ContextT,
17
+ ResponseT,
18
+ )
19
+ from langchain_core.messages import ToolMessage
20
+ from langgraph.prebuilt.tool_node import ToolCallRequest
21
+ from langgraph.types import Command
22
+
23
+ from sycommon.logging.kafka_log import SYLogger
24
+
25
+
26
+ # 不需要截断的工具(输出始终很短,或前端需要完整数据)
27
+ DEFAULT_PASSTHROUGH_TOOLS: FrozenSet[str] = frozenset({
28
+ "get_download_url",
29
+ "get_current_date",
30
+ "memory",
31
+ "skill_manager",
32
+ "session_search",
33
+ "web_search", # web_search 已在工具内部自行截断
34
+ })
35
+
36
+ # 截断提示模板
37
+ DEFAULT_TRUNCATION_SUFFIX = (
38
+ "\n\n[输出已截断至前{kept}字符,原始长度{original}字符。"
39
+ "如需查看完整输出,可以:\n"
40
+ "1. 重新执行命令并添加过滤条件(如 grep、head、tail)\n"
41
+ "2. 将输出重定向到文件后用 read_file 分段读取]"
42
+ )
43
+
44
+
45
+ class ToolResultTruncationMiddleware(AgentMiddleware):
46
+ """截断过长的工具结果,防止超出模型上下文窗口。
47
+
48
+ Args:
49
+ max_content_length: 工具结果内容的最大字符长度,默认 15000(约 3750 token)。
50
+ 模型上下文 200K token,70% 触发压缩 = 140K token,给单条工具结果留 3750 token
51
+ 约占剩余空间的 2.6%,多条工具调用并行时也不会逼近上限。
52
+ passthrough_tools: 不截断的工具名集合。
53
+ truncation_suffix: 截断提示文本,支持 {kept} 和 {original} 占位符。
54
+ """
55
+
56
+ def __init__(
57
+ self,
58
+ *,
59
+ max_content_length: int = 15000,
60
+ passthrough_tools: FrozenSet[str] | None = None,
61
+ truncation_suffix: str = DEFAULT_TRUNCATION_SUFFIX,
62
+ ) -> None:
63
+ self._max_content_length = max_content_length
64
+ self._passthrough_tools = passthrough_tools or DEFAULT_PASSTHROUGH_TOOLS
65
+ self._truncation_suffix = truncation_suffix
66
+
67
+ @property
68
+ def name(self) -> str:
69
+ return "ToolResultTruncationMiddleware"
70
+
71
+ def _should_passthrough(self, tool_name: str) -> bool:
72
+ return tool_name in self._passthrough_tools
73
+
74
+ def _truncate(self, content: str, tool_name: str) -> str:
75
+ if self._should_passthrough(tool_name):
76
+ return content
77
+
78
+ original_len = len(content)
79
+ if original_len <= self._max_content_length:
80
+ return content
81
+
82
+ kept = self._max_content_length
83
+ suffix = self._truncation_suffix.format(kept=kept, original=original_len)
84
+ truncated = content[:kept] + suffix
85
+
86
+ SYLogger.info(
87
+ f"[ToolResultTruncation] tool='{tool_name}' truncated: "
88
+ f"{original_len} -> {len(truncated)} chars"
89
+ )
90
+ return truncated
91
+
92
+ def _process_result(
93
+ self,
94
+ result: Any,
95
+ tool_name: str,
96
+ ) -> Any:
97
+ """处理工具调用结果,截断过长的 ToolMessage.content"""
98
+ if isinstance(result, Command):
99
+ return result
100
+
101
+ if not isinstance(result, ToolMessage):
102
+ return result
103
+
104
+ content = result.content
105
+ if not isinstance(content, str):
106
+ return result
107
+
108
+ new_content = self._truncate(content, tool_name)
109
+ if new_content is content:
110
+ return result
111
+
112
+ return ToolMessage(
113
+ content=new_content,
114
+ tool_call_id=result.tool_call_id,
115
+ name=result.name,
116
+ status=result.status,
117
+ artifact=result.artifact,
118
+ )
119
+
120
+ def wrap_tool_call(
121
+ self,
122
+ request: ToolCallRequest,
123
+ handler: Callable[[ToolCallRequest], ToolMessage | Command],
124
+ ) -> ToolMessage | Command:
125
+ tool_name = request.tool_call.get("name", "")
126
+ result = handler(request)
127
+ return self._process_result(result, tool_name)
128
+
129
+ async def awrap_tool_call(
130
+ self,
131
+ request: ToolCallRequest,
132
+ handler: Callable[[ToolCallRequest], Awaitable[ToolMessage | Command]],
133
+ ) -> ToolMessage | Command:
134
+ tool_name = request.tool_call.get("name", "")
135
+ result = await handler(request)
136
+ return self._process_result(result, tool_name)
@@ -0,0 +1,5 @@
1
+ from sycommon.notice.wecom_message import WeComMessageService
2
+
3
+ __all__ = [
4
+ "WeComMessageService",
5
+ ]