sycommon-python-lib 0.2.3a10__tar.gz → 0.2.3a12__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 (273) hide show
  1. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/deep_agent.py +22 -6
  4. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/summarization_utils.py +74 -30
  5. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/LLMConfig.py +1 -0
  6. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/get_llm.py +6 -1
  7. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/struct_token.py +2 -2
  8. sycommon_python_lib-0.2.3a12/src/sycommon/tests/test_summarization_config.py +463 -0
  9. sycommon_python_lib-0.2.3a12/src/sycommon/tests/test_summarization_real.py +329 -0
  10. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  11. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon_python_lib.egg-info/SOURCES.txt +2 -0
  12. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/README.md +0 -0
  13. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/setup.cfg +0 -0
  14. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/__init__.py +0 -0
  15. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/cli.py +0 -0
  16. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/core/__init__.py +0 -0
  17. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/core/console.py +0 -0
  18. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/core/models.py +0 -0
  19. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/core/project.py +0 -0
  20. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/core/utils.py +0 -0
  21. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/__init__.py +0 -0
  22. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/README.md.tpl +0 -0
  23. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/__init__.py +0 -0
  24. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  25. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  26. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/api/query.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/app.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/db/service.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/model/parse.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/.env.tpl +0 -0
  45. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/.gitignore.tpl +0 -0
  46. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/Dockerfile.tpl +0 -0
  47. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/README.md.tpl +0 -0
  48. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/__init__.py +0 -0
  49. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/app.py.tpl +0 -0
  50. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/app.yaml.tpl +0 -0
  51. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  52. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/client/__init__.py.tpl +0 -0
  53. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/model/__init__.py.tpl +0 -0
  54. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/model/file_info.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/base/requirements.txt.tpl +0 -0
  56. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/cli/README.md.tpl +0 -0
  57. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/cli/__init__.py +0 -0
  58. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/cli/app.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  60. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  62. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/README.md.tpl +0 -0
  64. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/__init__.py +0 -0
  65. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/api/__init__.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/api/echo.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/app.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/client/__init__.py.tpl +0 -0
  71. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/model/__init__.py.tpl +0 -0
  72. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  73. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/command/templates/web/tools/mq.py.tpl +0 -0
  74. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/nexus/__init__.py +0 -0
  75. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/__init__.py +0 -0
  76. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/__main__.py +0 -0
  77. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/agents/__init__.py +0 -0
  78. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/agents/factory.py +0 -0
  79. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/agents/prompts.py +0 -0
  80. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/__init__.py +0 -0
  81. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/browser.py +0 -0
  82. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/capabilities/__init__.py +0 -0
  83. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/capabilities/console.py +0 -0
  84. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/capabilities/dom.py +0 -0
  85. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/capabilities/network.py +0 -0
  86. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  87. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/capabilities/performance.py +0 -0
  88. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  89. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/client.py +0 -0
  90. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/protocol.py +0 -0
  91. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cdp/repl.py +0 -0
  92. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/cli.py +0 -0
  93. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/__init__.py +0 -0
  94. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/cdp_cmd.py +0 -0
  95. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/chat_cmd.py +0 -0
  96. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/create_cmd.py +0 -0
  97. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/evaluate_cmd.py +0 -0
  98. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/init_cmd.py +0 -0
  99. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/memory_cmd.py +0 -0
  100. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/resume_cmd.py +0 -0
  101. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/rollback_cmd.py +0 -0
  102. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/commands/run_cmd.py +0 -0
  103. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/core/__init__.py +0 -0
  104. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/core/backend.py +0 -0
  105. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/core/config.py +0 -0
  106. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/core/display.py +0 -0
  107. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/core/git_integration.py +0 -0
  108. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/core/llm.py +0 -0
  109. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/core/state.py +0 -0
  110. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/evaluate/__init__.py +0 -0
  111. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/evaluate/api_evaluator.py +0 -0
  112. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/memory/__init__.py +0 -0
  113. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/memory/compressor.py +0 -0
  114. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/memory/full.py +0 -0
  115. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/memory/hot.py +0 -0
  116. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/memory/manager.py +0 -0
  117. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/memory/warm.py +0 -0
  118. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/mode/__init__.py +0 -0
  119. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/mode/create.py +0 -0
  120. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/mode/optimize.py +0 -0
  121. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/models/__init__.py +0 -0
  122. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/models/config_models.py +0 -0
  123. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/__init__.py +0 -0
  124. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/baseline_tests.py +0 -0
  125. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/checkpoint.py +0 -0
  126. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/convergence.py +0 -0
  127. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/diagnosis.py +0 -0
  128. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/engine.py +0 -0
  129. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/environment.py +0 -0
  130. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/experience.py +0 -0
  131. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/harness_prompts.py +0 -0
  132. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/history.py +0 -0
  133. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/optimization_logger.py +0 -0
  134. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/pre_validation.py +0 -0
  135. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/reward.py +0 -0
  136. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/strategy_bandit.py +0 -0
  137. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/strategy_generator.py +0 -0
  138. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/rl/strategy_prompts.py +0 -0
  139. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycli/skills/__init__.py +0 -0
  140. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/__init__.py +0 -0
  141. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/__init__.py +0 -0
  142. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/agent_manager.py +0 -0
  143. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/chat_events.py +0 -0
  144. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/multi_agent_team.py +0 -0
  145. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/sandbox/__init__.py +0 -0
  146. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  147. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  148. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  149. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  150. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  151. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/agent/sandbox/session.py +0 -0
  152. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/auth/__init__.py +0 -0
  153. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/auth/ldap_service.py +0 -0
  154. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  155. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/Config.py +0 -0
  156. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/DatabaseConfig.py +0 -0
  157. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  158. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/EmbeddingConfig.py +0 -0
  159. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/LangfuseConfig.py +0 -0
  160. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/MQConfig.py +0 -0
  161. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/RedisConfig.py +0 -0
  162. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/RerankerConfig.py +0 -0
  163. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/SentryConfig.py +0 -0
  164. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/XxlJobConfig.py +0 -0
  165. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/config/__init__.py +0 -0
  166. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/database/async_base_db_service.py +0 -0
  167. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/database/async_database_service.py +0 -0
  168. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/database/base_db_service.py +0 -0
  169. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/database/database_service.py +0 -0
  170. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/database/elasticsearch_service.py +0 -0
  171. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/database/redis_service.py +0 -0
  172. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/database/token_usage_db_service.py +0 -0
  173. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/health/__init__.py +0 -0
  174. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/health/health_check.py +0 -0
  175. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/health/metrics.py +0 -0
  176. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/health/ping.py +0 -0
  177. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/heartbeat_process/__init__.py +0 -0
  178. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  179. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  180. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  181. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/__init__.py +0 -0
  182. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/embedding.py +0 -0
  183. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/llm_logger.py +0 -0
  184. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/llm_tokens.py +0 -0
  185. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  186. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  187. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  188. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/sy_langfuse.py +0 -0
  189. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/token_usage_es_service.py +0 -0
  190. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  191. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/llm/usage_token.py +0 -0
  192. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/logging/__init__.py +0 -0
  193. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/logging/async_sql_logger.py +0 -0
  194. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/logging/kafka_log.py +0 -0
  195. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/logging/logger_levels.py +0 -0
  196. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/logging/logger_wrapper.py +0 -0
  197. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/logging/process_logger.py +0 -0
  198. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/logging/sql_logger.py +0 -0
  199. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/__init__.py +0 -0
  200. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/background_execution.py +0 -0
  201. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/context.py +0 -0
  202. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/cors.py +0 -0
  203. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/docs.py +0 -0
  204. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/exception.py +0 -0
  205. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/middleware.py +0 -0
  206. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/monitor_memory.py +0 -0
  207. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/mq.py +0 -0
  208. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/sandbox.py +0 -0
  209. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/timeout.py +0 -0
  210. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/token_tracking.py +0 -0
  211. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  212. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/middleware/traceid.py +0 -0
  213. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/__init__.py +0 -0
  214. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/base_http.py +0 -0
  215. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/log.py +0 -0
  216. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/mqlistener_config.py +0 -0
  217. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/mqmsg_model.py +0 -0
  218. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/mqsend_config.py +0 -0
  219. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/sandbox.py +0 -0
  220. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/sso_user.py +0 -0
  221. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/token_usage.py +0 -0
  222. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/token_usage_mysql.py +0 -0
  223. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/models/xxljob_handler_config.py +0 -0
  224. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/notice/__init__.py +0 -0
  225. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  226. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/notice/wecom_message.py +0 -0
  227. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  228. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  229. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  230. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  231. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  232. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  233. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  234. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  235. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  236. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/sentry/__init__.py +0 -0
  237. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/sentry/sy_sentry.py +0 -0
  238. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/services.py +0 -0
  239. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/sse/__init__.py +0 -0
  240. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/sse/event.py +0 -0
  241. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/sse/sse.py +0 -0
  242. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/__init__.py +0 -0
  243. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/example.py +0 -0
  244. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/example2.py +0 -0
  245. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/feign.py +0 -0
  246. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/feign_client.py +0 -0
  247. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/nacos_client_base.py +0 -0
  248. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  249. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  250. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/nacos_service.py +0 -0
  251. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  252. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  253. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/synacos/param.py +0 -0
  254. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tests/deep_agent_server.py +0 -0
  255. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tests/test_deep_agent.py +0 -0
  256. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tests/test_email.py +0 -0
  257. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tests/test_mq.py +0 -0
  258. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tests/test_real_summarization.py +0 -0
  259. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tools/__init__.py +0 -0
  260. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tools/async_utils.py +0 -0
  261. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tools/docs.py +0 -0
  262. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tools/env.py +0 -0
  263. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tools/merge_headers.py +0 -0
  264. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tools/snowflake.py +0 -0
  265. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tools/syemail.py +0 -0
  266. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/tools/timing.py +0 -0
  267. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/xxljob/__init__.py +0 -0
  268. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon/xxljob/xxljob_service.py +0 -0
  269. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  270. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  271. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  272. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  273. {sycommon_python_lib-0.2.3a10 → sycommon_python_lib-0.2.3a12}/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.3a10
3
+ Version: 0.2.3a12
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.3a10"
3
+ version = "0.2.3a12"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -168,6 +168,7 @@ class DeepAgent:
168
168
  """
169
169
  current_tool_calls = []
170
170
  ai_chunk_buffer = ""
171
+ ai_text_content = ""
171
172
  seen_tool_call_ids = set()
172
173
  stream_step = 0
173
174
  # 兜底:累积流式 chunk 中的 usage_metadata(middleware 在流式场景可能拿不到)
@@ -211,6 +212,12 @@ class DeepAgent:
211
212
  if usage_meta:
212
213
  total_input_tokens += usage_meta.get("input_tokens", 0)
213
214
  total_output_tokens += usage_meta.get("output_tokens", 0)
215
+ if usage_meta.get("input_tokens", 0) > 0:
216
+ SYLogger.debug(
217
+ f"[DeepAgent] usage_metadata | input={usage_meta.get('input_tokens', 0)} "
218
+ f"output={usage_meta.get('output_tokens', 0)} "
219
+ f"total={usage_meta.get('total_tokens', 0)} "
220
+ f"cumulative_input={total_input_tokens} step={stream_step}")
214
221
 
215
222
  if msg_type == "AIMessageChunk":
216
223
  tool_calls_log = getattr(msg, "tool_calls", [])
@@ -397,6 +404,7 @@ class DeepAgent:
397
404
 
398
405
  if content:
399
406
  ai_chunk_buffer += content
407
+ ai_text_content += content
400
408
  event = ChatEventBuilder.ai_chunk(
401
409
  content, id=getattr(msg, "id", None),
402
410
  agent=DEFAULT_AGENT_NAME)
@@ -453,6 +461,13 @@ class DeepAgent:
453
461
  print(
454
462
  f"[DeepAgent] AI chunk done | {repr(ai_chunk_buffer[:100])}...")
455
463
 
464
+ # 空响应检测:模型被调用但没有产出任何文本
465
+ if not ai_text_content and not ai_chunk_buffer:
466
+ SYLogger.warning(
467
+ f"[DeepAgent] 空响应警告:模型未返回任何文本内容。"
468
+ f"stream_step={stream_step}, tool_calls={len(current_tool_calls)}, "
469
+ f"input_tokens={total_input_tokens}, output_tokens={total_output_tokens}")
470
+
456
471
  # 兜底:如果 middleware 没有成功记录(流式场景),在这里补充记录
457
472
  if total_input_tokens > 0 or total_output_tokens > 0:
458
473
  try:
@@ -508,7 +523,13 @@ class DeepAgent:
508
523
  max_retries: int = 3,
509
524
  base_delay: float = 1.0,
510
525
  ) -> AsyncGenerator:
511
- """带重试机制的 astream"""
526
+ """带重试机制的 astream
527
+
528
+ 网络错误指数退避重试,BadRequestError 不重试。
529
+ 上下文溢出由 deepagents SummarizationMiddleware 在模型调用层处理
530
+ (捕获 ContextOverflowError 后压缩消息并重试 LLM 调用),
531
+ 不在此处重试整个 graph。
532
+ """
512
533
  import httpx
513
534
  from openai import APIConnectionError, APIError, APITimeoutError
514
535
 
@@ -529,11 +550,6 @@ class DeepAgent:
529
550
  return
530
551
  except (APIConnectionError, APIError, APITimeoutError, ConnectionError, httpx.RemoteProtocolError) as e:
531
552
  last_error = e
532
- # 400 BadRequestError 不重试:请求参数有误,重试无意义
533
- from openai import BadRequestError
534
- if isinstance(e, BadRequestError):
535
- SYLogger.error(f"[DeepAgent] API 参数错误,不重试: {e}")
536
- raise
537
553
  if attempt < max_retries - 1:
538
554
  delay = base_delay * (2 ** attempt)
539
555
  SYLogger.warning(
@@ -1,8 +1,9 @@
1
1
  """上下文压缩 middleware 构建工具。
2
2
 
3
3
  根据 nacos 中配置的模型 maxTokens,用绝对 token 数设置压缩阈值。
4
- 中文场景下 count_tokens_approximately 默认 chars_per_token=4.0 会低估约 2.1 倍,
5
- 因此传入自定义 token_counter 修正偏差,并按真实 token 数设定阈值。
4
+ 优先使用模型 API 返回的 usage_metadata.total_tokens(真实 token 数),
5
+ metadata 时回退到 chars_per_token=2.0 的估算值。
6
+ 同时增加基于消息数的安全阈值,防止估算偏低导致压缩不触发。
6
7
  """
7
8
 
8
9
  from __future__ import annotations
@@ -24,17 +25,28 @@ if TYPE_CHECKING:
24
25
 
25
26
  logger = logging.getLogger(__name__)
26
27
 
27
- # 中文场景修正:chars_per_token 从 4.0 改为 2.0,使近似计数接近真实 token 数
28
- _chinese_token_counter = functools.partial(
29
- count_tokens_approximately, chars_per_token=2.0)
28
+
29
+ def _extract_last_usage_total_tokens(messages) -> int:
30
+ """从消息历史中提取最后一条 AIMessage 的 usage_metadata.total_tokens。
31
+
32
+ 返回 0 表示无数据(需回退到估算)。
33
+ """
34
+ from langchain_core.messages import AIMessage
35
+ for msg in reversed(messages):
36
+ if isinstance(msg, AIMessage):
37
+ meta = getattr(msg, 'usage_metadata', None)
38
+ if meta and isinstance(meta, dict):
39
+ total = meta.get('total_tokens', 0)
40
+ if isinstance(total, int) and total > 0:
41
+ return total
42
+ return 0
30
43
 
31
44
 
32
45
  def _patched_compute_summarization_defaults(model):
33
46
  """覆盖 deepagents 默认值,返回中文场景修正后的绝对 token 阈值。
34
47
 
35
- 不走 fraction 路径(fraction 依赖 model.profile.max_input_tokens,
36
- 但内置 middleware 用默认 chars_per_token=4.0 计数,fraction 基于的基数不准)。
37
- 直接返回修正后的绝对 token 数。
48
+ 同时增加基于消息数的安全阈值:即使 token 估算偏低,
49
+ 消息数超过 200 条时也会触发压缩(覆盖工具 schema 等未计入的开销)。
38
50
  """
39
51
  try:
40
52
  from sycommon.config.Config import Config
@@ -48,10 +60,12 @@ def _patched_compute_summarization_defaults(model):
48
60
  except Exception:
49
61
  max_tokens = 72000
50
62
 
51
- trigger = int(max_tokens * 0.70)
52
- keep = int(max_tokens * 0.30)
63
+ # 60% 触发(120K/200K):实测模型在 input≈137K 时开始退化,
64
+ # 120K 触发压缩留 ~17K 安全余量给工具 schema 等未计入开销
65
+ trigger = int(max_tokens * 0.60)
66
+ keep = int(max_tokens * 0.10)
53
67
  return {
54
- "trigger": ("tokens", trigger),
68
+ "trigger": [("tokens", trigger), ("messages", 200)],
55
69
  "keep": ("tokens", keep),
56
70
  "truncate_args_settings": {
57
71
  "trigger": ("tokens", trigger),
@@ -63,10 +77,14 @@ def _patched_compute_summarization_defaults(model):
63
77
  # monkey-patch:替换 deepagents 的默认计算函数
64
78
  _summ_mod.compute_summarization_defaults = _patched_compute_summarization_defaults
65
79
 
66
- # monkey-patch:在内置 middleware 的 awrap_model_call 中注入日志
80
+ # monkey-patch:在内置 middleware 的 awrap_model_call 中注入真实 token + 日志
67
81
  _OrigDeepAgentsSumm = _summ_mod._DeepAgentsSummarizationMiddleware
68
82
  _orig_awrap_model_call = _OrigDeepAgentsSumm.awrap_model_call
69
83
 
84
+ # 基础估算函数,用于日志对比
85
+ _approx_counter = functools.partial(
86
+ count_tokens_approximately, chars_per_token=2.0)
87
+
70
88
 
71
89
  async def _patched_awrap_model_call(self, request, handler):
72
90
  effective_messages = self._get_effective_messages(request)
@@ -75,15 +93,43 @@ async def _patched_awrap_model_call(self, request, handler):
75
93
  )
76
94
  counted_messages = [request.system_message, *
77
95
  truncated_messages] if request.system_message is not None else truncated_messages
96
+
97
+ # 从截断前的 effective_messages 提取真实 token(截断会丢失 usage_metadata)
98
+ real_tokens = _extract_last_usage_total_tokens(effective_messages)
99
+
100
+ # 估算值(用于日志对比)
78
101
  try:
79
- total_tokens = self.token_counter(
80
- counted_messages, tools=request.tools)
102
+ estimated = _approx_counter(counted_messages, tools=request.tools)
81
103
  except TypeError:
82
- total_tokens = self.token_counter(counted_messages)
83
- should = self._should_summarize(truncated_messages, total_tokens)
104
+ estimated = _approx_counter(counted_messages)
105
+
106
+ # 如果有真实 token,临时替换 token_counter 使 _orig 内部判断也用真实值
107
+ # 这样 _should_summarize 和 _determine_cutoff_index 都能拿到正确的 token 数
108
+ if real_tokens > 0:
109
+ original_counter = self.token_counter
110
+
111
+ def _real_counter(msgs, **kwargs):
112
+ # 优先从当前消息中提取真实值(压缩后的消息可能有新的 metadata)
113
+ r = _extract_last_usage_total_tokens(msgs)
114
+ return r if r > 0 else real_tokens
115
+
116
+ self._lc_helper.token_counter = _real_counter
117
+ try:
118
+ result = await _orig_awrap_model_call(self, request, handler)
119
+ finally:
120
+ self._lc_helper.token_counter = original_counter
121
+ else:
122
+ result = await _orig_awrap_model_call(self, request, handler)
123
+
124
+ # 日志
125
+ source = 'real' if real_tokens > 0 else 'estimated'
126
+ should = self._should_summarize(truncated_messages, real_tokens if real_tokens > 0 else estimated)
84
127
  print(
85
- f"[TokenCount] tokens={total_tokens} msgs={len(counted_messages)} should_summarize={should}")
86
- return await _orig_awrap_model_call(self, request, handler)
128
+ f"[TokenCount] real={real_tokens} estimated={estimated} "
129
+ f"source={source} msgs={len(counted_messages)} "
130
+ f"should_summarize={should} "
131
+ f"trigger={getattr(self._lc_helper, 'trigger', '?')}")
132
+ return result
87
133
 
88
134
 
89
135
  _OrigDeepAgentsSumm.awrap_model_call = _patched_awrap_model_call
@@ -94,25 +140,21 @@ def build_summarization_middleware(
94
140
  model_name: str,
95
141
  backend: "BACKEND_TYPES",
96
142
  *,
97
- trigger_fraction: float = 0.70,
98
- keep_fraction: float = 0.30,
143
+ trigger_fraction: float = 0.60,
144
+ keep_fraction: float = 0.10,
99
145
  default_max_tokens: int = 200000,
100
146
  ) -> SummarizationToolMiddleware:
101
147
  """根据模型上下文窗口大小构建 compact_conversation 工具 middleware。
102
148
 
103
- 自动压缩由 deepagents 内置的 SummarizationMiddleware 处理,
104
- 它通过 model.profile.max_input_tokens(由 LLMWithTokenTracking nacos 配置注入)
105
- 计算压缩阈值。
106
-
107
- 此处创建的 SummarizationToolMiddleware 仅提供 compact_conversation 手动压缩工具,
108
- 使用 nacos 配置的 maxTokens 作为其内部 SummarizationMiddleware 的阈值参数。
149
+ 优先使用模型返回的 usage_metadata 真实 token 数进行压缩判断,
150
+ usage_metadata 时回退到 chars_per_token=2.0 估算。
109
151
 
110
152
  Args:
111
153
  model: LLM 实例。
112
154
  model_name: 模型名称(用于从 nacos 读取配置)。
113
155
  backend: 后端实例。
114
- trigger_fraction: 触发压缩的上下文窗口比例,默认 70%。
115
- keep_fraction: 压缩后保留的上下文窗口比例,默认 30%。
156
+ trigger_fraction: 触发压缩占有效输入的比例,默认 60%。
157
+ keep_fraction: 压缩后保留占有效输入的比例,默认 10%。
116
158
  default_max_tokens: 无法从配置读取时的默认上下文窗口大小。
117
159
 
118
160
  Returns:
@@ -134,7 +176,8 @@ def build_summarization_middleware(
134
176
  backend=backend,
135
177
  trigger=("tokens", trigger_tokens),
136
178
  keep=("tokens", keep_tokens),
137
- token_counter=_chinese_token_counter,
179
+ token_counter=functools.partial(
180
+ count_tokens_approximately, chars_per_token=2.0),
138
181
  trim_tokens_to_summarize=None,
139
182
  truncate_args_settings={
140
183
  "trigger": ("tokens", trigger_tokens),
@@ -142,7 +185,8 @@ def build_summarization_middleware(
142
185
  },
143
186
  )
144
187
 
145
- print(f"[Summarization] compact_conversation 工具配置: model={model_name}, max_tokens={max_tokens}, "
188
+ print(f"[Summarization] compact_conversation 工具配置: model={model_name}, "
189
+ f"max_tokens={max_tokens}, "
146
190
  f"trigger={trigger_tokens} tokens ({trigger_fraction:.0%}), "
147
191
  f"keep={keep_tokens} tokens ({keep_fraction:.0%})")
148
192
  return SummarizationToolMiddleware(summ)
@@ -11,6 +11,7 @@ class LLMConfig(BaseModel):
11
11
  callFunction: bool
12
12
  default: Optional[bool] = False
13
13
  apiKey: Optional[str] = None
14
+ maxOutputTokens: Optional[int] = None
14
15
 
15
16
  @classmethod
16
17
  def from_config(cls, model_name: str):
@@ -1,3 +1,4 @@
1
+ import os
1
2
  from sycommon.llm.llm_logger import LLMLogger
2
3
  from langchain.chat_models import init_chat_model
3
4
  from sycommon.config.LLMConfig import LLMConfig
@@ -159,7 +160,7 @@ def get_llm(
159
160
  "model_provider": llmConfig.provider,
160
161
  "model": llmConfig.model,
161
162
  "base_url": llmConfig.baseUrl,
162
- "api_key": llmConfig.apiKey or "-",
163
+ "api_key": os.environ.get("LLM_API_KEY") or llmConfig.apiKey or "-",
163
164
  "callbacks": callbacks,
164
165
  "temperature": temperature,
165
166
  "streaming": streaming,
@@ -168,6 +169,10 @@ def get_llm(
168
169
  "stream_chunk_timeout": 180,
169
170
  }
170
171
 
172
+ # 传入 maxOutputTokens(max_completion_tokens)确保模型有足够的输出 token 空间
173
+ if llmConfig.maxOutputTokens:
174
+ init_params["max_tokens"] = llmConfig.maxOutputTokens
175
+
171
176
  # 合并其他透传参数(包括 presence_penalty, extra_body, top_p 等)
172
177
  init_params.update(kwargs)
173
178
 
@@ -445,10 +445,10 @@ class StructuredRunnableWithToken(Runnable):
445
445
 
446
446
  # 2. 检查并执行上下文压缩 (仅在异步模式且开启时)
447
447
  if self.enable_compression:
448
- max_tokens = self.llmConfig.maxTokens
448
+ max_tokens = int(self.llmConfig.maxTokens * self.threshold_ratio)
449
449
  current_tokens = self._count_tokens(adapted_input)
450
450
 
451
- if current_tokens > max_tokens * self.threshold_ratio:
451
+ if current_tokens > max_tokens:
452
452
  SYLogger.warning(
453
453
  f"⚠️ Context limit reached: {current_tokens}/{max_tokens}")
454
454
  # 执行压缩,替换 adapted_input