sycommon-python-lib 0.2.1b9__tar.gz → 0.2.1b10__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 (256) hide show
  1. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/token_usage_mysql_service.py +44 -47
  4. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  5. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/README.md +0 -0
  6. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/setup.cfg +0 -0
  7. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/__init__.py +0 -0
  8. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/cli.py +0 -0
  9. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/core/__init__.py +0 -0
  10. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/core/console.py +0 -0
  11. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/core/models.py +0 -0
  12. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/core/project.py +0 -0
  13. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/core/utils.py +0 -0
  14. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/__init__.py +0 -0
  15. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/__pycache__/__init__.cpython-311.pyc +0 -0
  16. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/README.md.tpl +0 -0
  17. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/__init__.py +0 -0
  18. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  19. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  20. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  21. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  22. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  23. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  24. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  25. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/api/query.py.tpl +0 -0
  26. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/app.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/db/service.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/model/parse.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/.env.tpl +0 -0
  39. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/.gitignore.tpl +0 -0
  40. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/Dockerfile.tpl +0 -0
  41. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/README.md.tpl +0 -0
  42. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/__init__.py +0 -0
  43. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/app.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/app.yaml.tpl +0 -0
  45. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/client/__init__.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/model/__init__.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/model/file_info.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/base/requirements.txt.tpl +0 -0
  50. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/README.md.tpl +0 -0
  51. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/__init__.py +0 -0
  52. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/api/__init__.py.tpl +0 -0
  53. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/api/echo.py.tpl +0 -0
  54. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  56. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/app.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/client/__init__.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/model/__init__.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  60. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/command/templates/web/tools/mq.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/__init__.py +0 -0
  62. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/__main__.py +0 -0
  63. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/agents/__init__.py +0 -0
  64. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/agents/factory.py +0 -0
  65. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/agents/prompts.py +0 -0
  66. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/__init__.py +0 -0
  67. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/browser.py +0 -0
  68. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/capabilities/__init__.py +0 -0
  69. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/capabilities/console.py +0 -0
  70. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/capabilities/dom.py +0 -0
  71. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/capabilities/network.py +0 -0
  72. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  73. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/capabilities/performance.py +0 -0
  74. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  75. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/client.py +0 -0
  76. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/protocol.py +0 -0
  77. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cdp/repl.py +0 -0
  78. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/cli.py +0 -0
  79. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/__init__.py +0 -0
  80. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/cdp_cmd.py +0 -0
  81. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/chat_cmd.py +0 -0
  82. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/create_cmd.py +0 -0
  83. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/evaluate_cmd.py +0 -0
  84. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/init_cmd.py +0 -0
  85. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/memory_cmd.py +0 -0
  86. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/resume_cmd.py +0 -0
  87. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/rollback_cmd.py +0 -0
  88. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/commands/run_cmd.py +0 -0
  89. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/core/__init__.py +0 -0
  90. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/core/backend.py +0 -0
  91. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/core/config.py +0 -0
  92. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/core/display.py +0 -0
  93. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/core/git_integration.py +0 -0
  94. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/core/llm.py +0 -0
  95. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/core/state.py +0 -0
  96. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/evaluate/__init__.py +0 -0
  97. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/evaluate/api_evaluator.py +0 -0
  98. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/memory/__init__.py +0 -0
  99. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/memory/compressor.py +0 -0
  100. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/memory/full.py +0 -0
  101. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/memory/hot.py +0 -0
  102. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/memory/manager.py +0 -0
  103. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/memory/warm.py +0 -0
  104. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/mode/__init__.py +0 -0
  105. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/mode/create.py +0 -0
  106. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/mode/optimize.py +0 -0
  107. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/models/__init__.py +0 -0
  108. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/models/config_models.py +0 -0
  109. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/__init__.py +0 -0
  110. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/convergence.py +0 -0
  111. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/diagnosis.py +0 -0
  112. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/engine.py +0 -0
  113. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/environment.py +0 -0
  114. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/experience.py +0 -0
  115. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/harness_prompts.py +0 -0
  116. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/history.py +0 -0
  117. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/pre_validation.py +0 -0
  118. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/reward.py +0 -0
  119. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/strategy_bandit.py +0 -0
  120. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/strategy_generator.py +0 -0
  121. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/rl/strategy_prompts.py +0 -0
  122. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycli/skills/__init__.py +0 -0
  123. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/__init__.py +0 -0
  124. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/__init__.py +0 -0
  125. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/agent_manager.py +0 -0
  126. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/chat_events.py +0 -0
  127. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/deep_agent.py +0 -0
  128. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/multi_agent_team.py +0 -0
  129. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/sandbox/__init__.py +0 -0
  130. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  131. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  132. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  133. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  134. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/agent/sandbox/session.py +0 -0
  135. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/auth/__init__.py +0 -0
  136. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/auth/ldap_service.py +0 -0
  137. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  138. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/Config.py +0 -0
  139. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/DatabaseConfig.py +0 -0
  140. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  141. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/EmbeddingConfig.py +0 -0
  142. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/LLMConfig.py +0 -0
  143. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/LangfuseConfig.py +0 -0
  144. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/MQConfig.py +0 -0
  145. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/RedisConfig.py +0 -0
  146. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/RerankerConfig.py +0 -0
  147. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/SentryConfig.py +0 -0
  148. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/XxlJobConfig.py +0 -0
  149. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/config/__init__.py +0 -0
  150. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/database/async_base_db_service.py +0 -0
  151. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/database/async_database_service.py +0 -0
  152. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/database/base_db_service.py +0 -0
  153. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/database/database_service.py +0 -0
  154. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/database/elasticsearch_service.py +0 -0
  155. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/database/redis_service.py +0 -0
  156. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/database/token_usage_db_service.py +0 -0
  157. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/health/__init__.py +0 -0
  158. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/health/health_check.py +0 -0
  159. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/health/metrics.py +0 -0
  160. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/health/ping.py +0 -0
  161. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/heartbeat_process/__init__.py +0 -0
  162. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  163. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  164. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  165. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/__init__.py +0 -0
  166. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/embedding.py +0 -0
  167. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/get_llm.py +0 -0
  168. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/llm_logger.py +0 -0
  169. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/llm_tokens.py +0 -0
  170. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  171. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  172. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  173. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/struct_token.py +0 -0
  174. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/sy_langfuse.py +0 -0
  175. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/token_usage_es_service.py +0 -0
  176. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/llm/usage_token.py +0 -0
  177. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/logging/__init__.py +0 -0
  178. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/logging/async_sql_logger.py +0 -0
  179. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/logging/kafka_log.py +0 -0
  180. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/logging/logger_levels.py +0 -0
  181. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/logging/logger_wrapper.py +0 -0
  182. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/logging/process_logger.py +0 -0
  183. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/logging/sql_logger.py +0 -0
  184. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/__init__.py +0 -0
  185. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/background_execution.py +0 -0
  186. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/context.py +0 -0
  187. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/cors.py +0 -0
  188. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/docs.py +0 -0
  189. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/exception.py +0 -0
  190. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/middleware.py +0 -0
  191. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/monitor_memory.py +0 -0
  192. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/mq.py +0 -0
  193. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/sandbox.py +0 -0
  194. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/timeout.py +0 -0
  195. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/token_tracking.py +0 -0
  196. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/middleware/traceid.py +0 -0
  197. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/__init__.py +0 -0
  198. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/base_http.py +0 -0
  199. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/log.py +0 -0
  200. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/mqlistener_config.py +0 -0
  201. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/mqmsg_model.py +0 -0
  202. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/mqsend_config.py +0 -0
  203. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/sandbox.py +0 -0
  204. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/sso_user.py +0 -0
  205. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/token_usage.py +0 -0
  206. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/token_usage_mysql.py +0 -0
  207. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/models/xxljob_handler_config.py +0 -0
  208. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/notice/__init__.py +0 -0
  209. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  210. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  211. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  212. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  213. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  214. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  215. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  216. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  217. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  218. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  219. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/sentry/__init__.py +0 -0
  220. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/sentry/sy_sentry.py +0 -0
  221. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/services.py +0 -0
  222. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/sse/__init__.py +0 -0
  223. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/sse/event.py +0 -0
  224. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/sse/sse.py +0 -0
  225. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/__init__.py +0 -0
  226. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/example.py +0 -0
  227. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/example2.py +0 -0
  228. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/feign.py +0 -0
  229. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/feign_client.py +0 -0
  230. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/nacos_client_base.py +0 -0
  231. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  232. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  233. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/nacos_service.py +0 -0
  234. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  235. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  236. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/synacos/param.py +0 -0
  237. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tests/deep_agent_server.py +0 -0
  238. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tests/test_deep_agent.py +0 -0
  239. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tests/test_email.py +0 -0
  240. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tests/test_mq.py +0 -0
  241. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tools/__init__.py +0 -0
  242. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tools/async_utils.py +0 -0
  243. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tools/docs.py +0 -0
  244. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tools/env.py +0 -0
  245. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tools/merge_headers.py +0 -0
  246. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tools/snowflake.py +0 -0
  247. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tools/syemail.py +0 -0
  248. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/tools/timing.py +0 -0
  249. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/xxljob/__init__.py +0 -0
  250. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon/xxljob/xxljob_service.py +0 -0
  251. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  252. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  253. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  254. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  255. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  256. {sycommon_python_lib-0.2.1b9 → sycommon_python_lib-0.2.1b10}/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.1b9
3
+ Version: 0.2.1b10
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.1b9"
3
+ version = "0.2.1b10"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -17,7 +17,7 @@ from collections import defaultdict
17
17
  from datetime import datetime, date
18
18
  from typing import Optional, Dict, Any, List
19
19
 
20
- from sqlalchemy import select, text
20
+ from sqlalchemy import select
21
21
  from sqlalchemy.dialects.mysql import insert
22
22
 
23
23
  from sycommon.config.Config import SingletonMeta, Config
@@ -71,6 +71,16 @@ class _TokenBuffer:
71
71
  self._buffer.clear()
72
72
  return data
73
73
 
74
+ def put_back(self, data: Dict[tuple, Dict[str, Any]]):
75
+ """将一批数据批量放回缓冲区(线程安全,仅一次加锁)"""
76
+ with self._lock:
77
+ for key, entry in data.items():
78
+ if key in self._buffer:
79
+ self._buffer[key]["input_tokens"] += entry["input_tokens"]
80
+ self._buffer[key]["output_tokens"] += entry["output_tokens"]
81
+ else:
82
+ self._buffer[key] = entry.copy()
83
+
74
84
  @property
75
85
  def size(self) -> int:
76
86
  with self._lock:
@@ -87,7 +97,6 @@ class TokenUsageMySQLService(metaclass=SingletonMeta):
87
97
  """
88
98
 
89
99
  _initialized: bool = False
90
- _table_ensured: bool = False
91
100
  _db_service: Optional[TokenUsageDBService] = None
92
101
  _service_name: Optional[str] = None
93
102
  _system_env: Optional[str] = None
@@ -95,12 +104,17 @@ class TokenUsageMySQLService(metaclass=SingletonMeta):
95
104
  # 内存聚合
96
105
  _buffer: _TokenBuffer = _TokenBuffer()
97
106
  _flush_interval: float = 5.0 # 刷盘间隔(秒)
98
- _flush_threshold: int = 200 # 缓冲区条目阈值
107
+ _flush_threshold: int = 200 # 缓冲区条目阈值(预留,暂未使用)
99
108
  _flush_timeout: float = 10.0 # 单次刷盘超时(秒)
100
109
  _flush_thread: Optional[threading.Thread] = None
101
110
  _flush_loop_event: Optional[asyncio.AbstractEventLoop] = None
102
111
  _init_lock = threading.Lock()
103
112
 
113
+ # 连续失败降频:连续 flush 失败时自动拉长间隔,最大 60 秒
114
+ _consecutive_failures: int = 0
115
+ _MAX_BACKOFF_INTERVAL: float = 60.0
116
+ _MAX_BACKOFF_EXPONENT: int = 4 # 2^4=16, 16*5=80s > 60s, 更大无意义
117
+
104
118
  def __init__(self):
105
119
  pass
106
120
 
@@ -179,10 +193,16 @@ class TokenUsageMySQLService(metaclass=SingletonMeta):
179
193
 
180
194
  @classmethod
181
195
  async def _flush_loop(cls):
182
- """定时刷盘循环"""
196
+ """定时刷盘循环(连续失败时自动降频)"""
183
197
  while cls._initialized:
184
198
  try:
185
- await asyncio.sleep(cls._flush_interval)
199
+ # 动态间隔:连续失败时指数退避,上限 60s
200
+ exponent = min(cls._consecutive_failures, cls._MAX_BACKOFF_EXPONENT)
201
+ interval = min(
202
+ cls._flush_interval * (2 ** exponent),
203
+ cls._MAX_BACKOFF_INTERVAL
204
+ )
205
+ await asyncio.sleep(interval)
186
206
  await cls._flush_to_db()
187
207
  except asyncio.CancelledError:
188
208
  # 关闭时刷盘一次
@@ -209,8 +229,6 @@ class TokenUsageMySQLService(metaclass=SingletonMeta):
209
229
  logging.warning("TokenUsageMySQLService: DB 未就绪,丢弃缓冲区数据")
210
230
  return 0
211
231
 
212
- await cls._ensure_table()
213
-
214
232
  count = 0
215
233
  try:
216
234
  async with asyncio.timeout(cls._flush_timeout):
@@ -248,53 +266,32 @@ class TokenUsageMySQLService(metaclass=SingletonMeta):
248
266
  except Exception as e:
249
267
  logging.error(f"Token 刷盘写入失败 key={key}: {e}", exc_info=True)
250
268
 
269
+ # 成功:重置连续失败计数
270
+ cls._consecutive_failures = 0
271
+
251
272
  except TimeoutError:
252
- logging.warning(f"Token 刷盘超时({cls._flush_timeout}s),丢弃 {len(data)} 条数据")
273
+ cls._consecutive_failures += 1
274
+ # 将失败的数据批量放回缓冲区(一次加锁),下次 flush 重试
275
+ cls._buffer.put_back(data)
276
+ exponent = min(cls._consecutive_failures, cls._MAX_BACKOFF_EXPONENT)
277
+ next_interval = min(
278
+ cls._flush_interval * (2 ** exponent),
279
+ cls._MAX_BACKOFF_INTERVAL
280
+ )
281
+ logging.warning(
282
+ f"Token 刷盘超时({cls._flush_timeout}s),{len(data)} 条数据退回缓冲区"
283
+ f"(连续失败 {cls._consecutive_failures} 次,下次间隔 {next_interval:.0f}s)"
284
+ )
253
285
  except Exception as e:
254
- logging.error(f"Token 刷盘异常: {e}", exc_info=True)
286
+ cls._consecutive_failures += 1
287
+ # 将失败的数据批量放回缓冲区(一次加锁),下次 flush 重试
288
+ cls._buffer.put_back(data)
289
+ logging.error(f"Token 刷盘异常: {e}(连续失败 {cls._consecutive_failures} 次,数据已退回缓冲区)", exc_info=True)
255
290
 
256
291
  if count > 0:
257
292
  logging.debug(f"Token 刷盘完成: {count} 条")
258
293
  return count
259
294
 
260
- @classmethod
261
- async def _ensure_table(cls):
262
- """确保表存在"""
263
- if cls._table_ensured:
264
- return
265
-
266
- if not cls._db_service:
267
- return
268
-
269
- try:
270
- async with cls._db_service.session() as session:
271
- await session.execute(text(f"""
272
- CREATE TABLE IF NOT EXISTS token_usage_daily (
273
- id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
274
- user_id VARCHAR(128) NULL COMMENT '用户ID',
275
- tenant_id VARCHAR(128) NULL COMMENT '租户ID',
276
- service_name VARCHAR(128) NULL COMMENT '服务名称',
277
- system_env VARCHAR(128) NULL COMMENT '系统环境',
278
- input_tokens INT DEFAULT 0 COMMENT '输入token数',
279
- output_tokens INT DEFAULT 0 COMMENT '输出token数',
280
- total_tokens INT DEFAULT 0 COMMENT '总token数',
281
- model VARCHAR(128) NULL COMMENT '最近使用的模型',
282
- usage_date DATE NOT NULL COMMENT '使用日期',
283
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
284
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
285
- UNIQUE KEY uniq_user_service_env_date (user_id, service_name, system_env, usage_date),
286
- INDEX idx_user_id (user_id),
287
- INDEX idx_service_name (service_name),
288
- INDEX idx_tenant_id (tenant_id),
289
- INDEX idx_usage_date (usage_date),
290
- INDEX idx_system_env (system_env)
291
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Token使用量日统计表'
292
- """))
293
- cls._table_ensured = True
294
- logging.info("MySQL 表 token_usage_daily 确认存在")
295
- except Exception as e:
296
- logging.error(f"创建 MySQL 表失败: {e}", exc_info=True)
297
-
298
295
  # ─── 写入接口(写入内存,不直接写 DB) ───
299
296
 
300
297
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.1b9
3
+ Version: 0.2.1b10
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown