sycommon-python-lib 0.2.3a0__tar.gz → 0.2.3a2__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 (270) hide show
  1. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/deep_agent.py +31 -3
  4. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/sandbox/file_ops.py +11 -3
  5. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/sy_langfuse.py +4 -4
  6. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/tool_result_truncation.py +59 -0
  7. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  8. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/README.md +0 -0
  9. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/setup.cfg +0 -0
  10. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/__init__.py +0 -0
  11. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/cli.py +0 -0
  12. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/core/__init__.py +0 -0
  13. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/core/console.py +0 -0
  14. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/core/models.py +0 -0
  15. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/core/project.py +0 -0
  16. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/core/utils.py +0 -0
  17. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/__init__.py +0 -0
  18. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/README.md.tpl +0 -0
  19. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/__init__.py +0 -0
  20. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  21. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  22. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  23. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  24. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  25. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  26. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/api/query.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/app.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/db/service.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/model/parse.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/.env.tpl +0 -0
  41. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/.gitignore.tpl +0 -0
  42. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/Dockerfile.tpl +0 -0
  43. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/README.md.tpl +0 -0
  44. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/__init__.py +0 -0
  45. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/app.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/app.yaml.tpl +0 -0
  47. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/client/__init__.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/model/__init__.py.tpl +0 -0
  50. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/model/file_info.py.tpl +0 -0
  51. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/base/requirements.txt.tpl +0 -0
  52. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/cli/README.md.tpl +0 -0
  53. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/cli/__init__.py +0 -0
  54. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/cli/app.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  56. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  58. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/README.md.tpl +0 -0
  60. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/__init__.py +0 -0
  61. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/api/__init__.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/api/echo.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  64. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/app.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/client/__init__.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/model/__init__.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/command/templates/web/tools/mq.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/nexus/__init__.py +0 -0
  71. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/__init__.py +0 -0
  72. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/__main__.py +0 -0
  73. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/agents/__init__.py +0 -0
  74. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/agents/factory.py +0 -0
  75. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/agents/prompts.py +0 -0
  76. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/__init__.py +0 -0
  77. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/browser.py +0 -0
  78. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/capabilities/__init__.py +0 -0
  79. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/capabilities/console.py +0 -0
  80. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/capabilities/dom.py +0 -0
  81. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/capabilities/network.py +0 -0
  82. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  83. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/capabilities/performance.py +0 -0
  84. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  85. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/client.py +0 -0
  86. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/protocol.py +0 -0
  87. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cdp/repl.py +0 -0
  88. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/cli.py +0 -0
  89. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/__init__.py +0 -0
  90. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/cdp_cmd.py +0 -0
  91. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/chat_cmd.py +0 -0
  92. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/create_cmd.py +0 -0
  93. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/evaluate_cmd.py +0 -0
  94. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/init_cmd.py +0 -0
  95. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/memory_cmd.py +0 -0
  96. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/resume_cmd.py +0 -0
  97. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/rollback_cmd.py +0 -0
  98. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/commands/run_cmd.py +0 -0
  99. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/core/__init__.py +0 -0
  100. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/core/backend.py +0 -0
  101. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/core/config.py +0 -0
  102. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/core/display.py +0 -0
  103. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/core/git_integration.py +0 -0
  104. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/core/llm.py +0 -0
  105. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/core/state.py +0 -0
  106. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/evaluate/__init__.py +0 -0
  107. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/evaluate/api_evaluator.py +0 -0
  108. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/memory/__init__.py +0 -0
  109. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/memory/compressor.py +0 -0
  110. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/memory/full.py +0 -0
  111. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/memory/hot.py +0 -0
  112. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/memory/manager.py +0 -0
  113. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/memory/warm.py +0 -0
  114. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/mode/__init__.py +0 -0
  115. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/mode/create.py +0 -0
  116. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/mode/optimize.py +0 -0
  117. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/models/__init__.py +0 -0
  118. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/models/config_models.py +0 -0
  119. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/__init__.py +0 -0
  120. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/baseline_tests.py +0 -0
  121. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/checkpoint.py +0 -0
  122. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/convergence.py +0 -0
  123. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/diagnosis.py +0 -0
  124. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/engine.py +0 -0
  125. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/environment.py +0 -0
  126. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/experience.py +0 -0
  127. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/harness_prompts.py +0 -0
  128. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/history.py +0 -0
  129. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/optimization_logger.py +0 -0
  130. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/pre_validation.py +0 -0
  131. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/reward.py +0 -0
  132. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/strategy_bandit.py +0 -0
  133. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/strategy_generator.py +0 -0
  134. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/rl/strategy_prompts.py +0 -0
  135. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycli/skills/__init__.py +0 -0
  136. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/__init__.py +0 -0
  137. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/__init__.py +0 -0
  138. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/agent_manager.py +0 -0
  139. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/chat_events.py +0 -0
  140. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/multi_agent_team.py +0 -0
  141. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/sandbox/__init__.py +0 -0
  142. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  143. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  144. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  145. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  146. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/sandbox/session.py +0 -0
  147. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/agent/summarization_utils.py +0 -0
  148. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/auth/__init__.py +0 -0
  149. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/auth/ldap_service.py +0 -0
  150. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  151. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/Config.py +0 -0
  152. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/DatabaseConfig.py +0 -0
  153. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  154. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/EmbeddingConfig.py +0 -0
  155. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/LLMConfig.py +0 -0
  156. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/LangfuseConfig.py +0 -0
  157. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/MQConfig.py +0 -0
  158. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/RedisConfig.py +0 -0
  159. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/RerankerConfig.py +0 -0
  160. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/SentryConfig.py +0 -0
  161. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/XxlJobConfig.py +0 -0
  162. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/config/__init__.py +0 -0
  163. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/database/async_base_db_service.py +0 -0
  164. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/database/async_database_service.py +0 -0
  165. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/database/base_db_service.py +0 -0
  166. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/database/database_service.py +0 -0
  167. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/database/elasticsearch_service.py +0 -0
  168. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/database/redis_service.py +0 -0
  169. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/database/token_usage_db_service.py +0 -0
  170. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/health/__init__.py +0 -0
  171. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/health/health_check.py +0 -0
  172. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/health/metrics.py +0 -0
  173. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/health/ping.py +0 -0
  174. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/heartbeat_process/__init__.py +0 -0
  175. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  176. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  177. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  178. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/__init__.py +0 -0
  179. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/embedding.py +0 -0
  180. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/get_llm.py +0 -0
  181. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/llm_logger.py +0 -0
  182. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/llm_tokens.py +0 -0
  183. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  184. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  185. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  186. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/struct_token.py +0 -0
  187. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/token_usage_es_service.py +0 -0
  188. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  189. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/llm/usage_token.py +0 -0
  190. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/logging/__init__.py +0 -0
  191. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/logging/async_sql_logger.py +0 -0
  192. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/logging/kafka_log.py +0 -0
  193. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/logging/logger_levels.py +0 -0
  194. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/logging/logger_wrapper.py +0 -0
  195. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/logging/process_logger.py +0 -0
  196. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/logging/sql_logger.py +0 -0
  197. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/__init__.py +0 -0
  198. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/background_execution.py +0 -0
  199. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/context.py +0 -0
  200. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/cors.py +0 -0
  201. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/docs.py +0 -0
  202. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/exception.py +0 -0
  203. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/middleware.py +0 -0
  204. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/monitor_memory.py +0 -0
  205. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/mq.py +0 -0
  206. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/sandbox.py +0 -0
  207. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/timeout.py +0 -0
  208. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/token_tracking.py +0 -0
  209. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/middleware/traceid.py +0 -0
  210. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/__init__.py +0 -0
  211. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/base_http.py +0 -0
  212. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/log.py +0 -0
  213. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/mqlistener_config.py +0 -0
  214. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/mqmsg_model.py +0 -0
  215. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/mqsend_config.py +0 -0
  216. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/sandbox.py +0 -0
  217. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/sso_user.py +0 -0
  218. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/token_usage.py +0 -0
  219. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/token_usage_mysql.py +0 -0
  220. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/models/xxljob_handler_config.py +0 -0
  221. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/notice/__init__.py +0 -0
  222. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  223. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/notice/wecom_message.py +0 -0
  224. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  225. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  226. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  227. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  228. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  229. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  230. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  231. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  232. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  233. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/sentry/__init__.py +0 -0
  234. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/sentry/sy_sentry.py +0 -0
  235. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/services.py +0 -0
  236. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/sse/__init__.py +0 -0
  237. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/sse/event.py +0 -0
  238. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/sse/sse.py +0 -0
  239. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/__init__.py +0 -0
  240. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/example.py +0 -0
  241. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/example2.py +0 -0
  242. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/feign.py +0 -0
  243. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/feign_client.py +0 -0
  244. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/nacos_client_base.py +0 -0
  245. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  246. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  247. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/nacos_service.py +0 -0
  248. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  249. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  250. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/synacos/param.py +0 -0
  251. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tests/deep_agent_server.py +0 -0
  252. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tests/test_deep_agent.py +0 -0
  253. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tests/test_email.py +0 -0
  254. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tests/test_mq.py +0 -0
  255. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tools/__init__.py +0 -0
  256. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tools/async_utils.py +0 -0
  257. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tools/docs.py +0 -0
  258. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tools/env.py +0 -0
  259. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tools/merge_headers.py +0 -0
  260. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tools/snowflake.py +0 -0
  261. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tools/syemail.py +0 -0
  262. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/tools/timing.py +0 -0
  263. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/xxljob/__init__.py +0 -0
  264. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon/xxljob/xxljob_service.py +0 -0
  265. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  266. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  267. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  268. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  269. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  270. {sycommon_python_lib-0.2.3a0 → sycommon_python_lib-0.2.3a2}/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.3a0
3
+ Version: 0.2.3a2
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.3a0"
3
+ version = "0.2.3a2"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -231,9 +231,32 @@ class DeepAgent:
231
231
  f"[DeepAgent] AIMessage | content={repr(content_log)} | tools={tc_names}")
232
232
  elif msg_type == "ToolMessage":
233
233
  content_log = (msg.content or "")
234
- preview = content_log[:100]
235
- print(
236
- f"[DeepAgent] ToolResult | {getattr(msg, 'name', '?')} | len={len(content_log)} | preview={repr(preview)}")
234
+ if isinstance(content_log, list):
235
+ # e.g. [{'type': 'image', 'base64': '...'}]
236
+ preview_parts = []
237
+ total_len = 0
238
+ for item in content_log:
239
+ if isinstance(item, dict):
240
+ t = item.get('type', '?')
241
+ if t == 'image' and 'base64' in item:
242
+ b64 = item['base64']
243
+ total_len += len(b64)
244
+ preview_parts.append(
245
+ f"{{'type': 'image', 'base64': '{b64[:100]}...'({len(b64)} chars)}}")
246
+ else:
247
+ s = str(item)
248
+ total_len += len(s)
249
+ preview_parts.append(s[:100])
250
+ else:
251
+ s = str(item)
252
+ total_len += len(s)
253
+ preview_parts.append(s[:100])
254
+ print(
255
+ f"[DeepAgent] ToolResult | {getattr(msg, 'name', '?')} | len={total_len} | preview={preview_parts}")
256
+ else:
257
+ preview = str(content_log)[:100]
258
+ print(
259
+ f"[DeepAgent] ToolResult | {getattr(msg, 'name', '?')} | len={len(str(content_log))} | preview={repr(preview)}")
237
260
  elif msg_type == "HumanMessage":
238
261
  content_log = (msg.content or "")[:100]
239
262
  print(
@@ -506,6 +529,11 @@ class DeepAgent:
506
529
  return
507
530
  except (APIConnectionError, APIError, APITimeoutError, ConnectionError, httpx.RemoteProtocolError) as e:
508
531
  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
509
537
  if attempt < max_retries - 1:
510
538
  delay = base_delay * (2 ** attempt)
511
539
  SYLogger.warning(
@@ -266,8 +266,12 @@ class FileOperationsMixin:
266
266
  "limit": limit
267
267
  }, timeout=timeout)
268
268
  if result.get("error"):
269
- SYLogger.error(f"[Sandbox] 异步读取文件失败: {result['error']}")
270
- return ReadResult(error=result["error"])
269
+ err_msg = result['error']
270
+ if 'not found' in err_msg:
271
+ SYLogger.warning(f"[Sandbox] 异步读取文件未找到: {err_msg}")
272
+ else:
273
+ SYLogger.error(f"[Sandbox] 异步读取文件失败: {err_msg}")
274
+ return ReadResult(error=err_msg)
271
275
  content = result.get("content", "")
272
276
  encoding = result.get("encoding", "utf-8")
273
277
  SYLogger.info(
@@ -329,7 +333,11 @@ class FileOperationsMixin:
329
333
  path=result.get("path")
330
334
  )
331
335
  if write_result.error:
332
- SYLogger.error(f"[Sandbox] 异步写入失败: {write_result.error}")
336
+ err_msg = write_result.error
337
+ if 'already exists' in err_msg:
338
+ SYLogger.warning(f"[Sandbox] 异步写入文件已存在: {err_msg}")
339
+ else:
340
+ SYLogger.error(f"[Sandbox] 异步写入失败: {err_msg}")
333
341
  else:
334
342
  SYLogger.info(f"[Sandbox] 异步写入成功: {write_result.path}")
335
343
  return write_result
@@ -61,10 +61,10 @@ class LangfuseInitializer(metaclass=SingletonMeta):
61
61
  'baseUrl', '')
62
62
  os.environ["LANGFUSE_TRACING_ENVIRONMENT"] = environment
63
63
  os.environ["OTEL_SERVICE_NAME"] = server_name
64
- # 设置 OTLP 追踪导出器超时时间(单位:秒)
65
- os.environ["OTEL_EXPORTER_OTLP_TRACES_TIMEOUT"] = "60"
66
- # 全局 OTLP 超时(覆盖所有信号:追踪/指标/日志)
67
- os.environ["OTEL_EXPORTER_OTLP_TIMEOUT"] = "60"
64
+ # 控制 Langfuse OTLP 导出:超时 30s、每批最多 32 个 span、每 10s 强制 flush
65
+ os.environ["LANGFUSE_TIMEOUT"] = "30"
66
+ os.environ["LANGFUSE_FLUSH_AT"] = "32"
67
+ os.environ["LANGFUSE_FLUSH_INTERVAL"] = "10"
68
68
 
69
69
  self._langfuse_client = get_client()
70
70
 
@@ -5,6 +5,9 @@
5
5
 
6
6
  通过 wrap_tool_call / awrap_tool_call 钩子拦截每个工具调用结果,
7
7
  在结果进入对话历史之前完成截断。
8
+
9
+ 同时处理 list 类型 content(如 read_file 读取图片返回的 base64 数据),
10
+ 将其转换为字符串描述,防止上游 API 拒绝 list content 的 400 错误。
8
11
  """
9
12
 
10
13
  from collections.abc import Awaitable, Callable
@@ -41,6 +44,41 @@ DEFAULT_TRUNCATION_SUFFIX = (
41
44
  "2. 将输出重定向到文件后用 read_file 分段读取]"
42
45
  )
43
46
 
47
+ # list 类型 content 中 base64 图片的最大字符数
48
+ MAX_IMAGE_BASE64_CHARS = 500
49
+
50
+
51
+ def _convert_list_content_to_str(content: list, tool_name: str) -> str:
52
+ """将 list 类型的 ToolMessage.content 转换为字符串。
53
+
54
+ 对于图片类型(type=image 且含 base64),只保留前 MAX_IMAGE_BASE64_CHARS 个字符的 base64 预览。
55
+ 对于文本类型,保留完整文本。
56
+ """
57
+ parts = []
58
+ for item in content:
59
+ if isinstance(item, dict):
60
+ item_type = item.get("type", "text")
61
+ if item_type == "image" and "base64" in item:
62
+ b64 = item["base64"]
63
+ mime = item.get("mime_type", "image/unknown")
64
+ if len(b64) > MAX_IMAGE_BASE64_CHARS:
65
+ parts.append(
66
+ f"[图片文件 ({mime}, {len(b64)} 字符 base64 数据), "
67
+ f"预览: {b64[:MAX_IMAGE_BASE64_CHARS]}...]"
68
+ )
69
+ else:
70
+ parts.append(
71
+ f"[图片文件 ({mime}, {len(b64)} 字符 base64 数据), "
72
+ f"数据: {b64}]"
73
+ )
74
+ elif "text" in item:
75
+ parts.append(item["text"])
76
+ else:
77
+ parts.append(str(item))
78
+ else:
79
+ parts.append(str(item))
80
+ return "\n".join(parts)
81
+
44
82
 
45
83
  class ToolResultTruncationMiddleware(AgentMiddleware):
46
84
  """截断过长的工具结果,防止超出模型上下文窗口。
@@ -102,6 +140,27 @@ class ToolResultTruncationMiddleware(AgentMiddleware):
102
140
  return result
103
141
 
104
142
  content = result.content
143
+
144
+ # list 类型 content:如 read_file 读取图片返回的 base64 数据
145
+ # 转换为字符串描述,防止上游 API 拒绝 list content
146
+ if isinstance(content, list):
147
+ has_image = any(
148
+ isinstance(item, dict) and item.get("type") == "image" and "base64" in item
149
+ for item in content
150
+ )
151
+ if has_image:
152
+ new_content = _convert_list_content_to_str(content, tool_name)
153
+ SYLogger.info(
154
+ f"[ToolResultTruncation] tool='{tool_name}' converted image "
155
+ f"list content to string ({len(new_content)} chars)")
156
+ return ToolMessage(
157
+ content=new_content,
158
+ tool_call_id=result.tool_call_id,
159
+ name=result.name,
160
+ status=result.status,
161
+ artifact=result.artifact,
162
+ )
163
+
105
164
  if not isinstance(content, str):
106
165
  return result
107
166
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.3a0
3
+ Version: 0.2.3a2
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown