sycommon-python-lib 0.2.10a10__tar.gz → 0.2.10a12__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.
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/pyproject.toml +1 -1
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/health/readiness.py +95 -8
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/kafka_log.py +47 -5
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/logger_levels.py +9 -3
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
- sycommon_python_lib-0.2.10a12/tests/test_kafka_upie_fix.py +401 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/README.md +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/api/query.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/db/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/db/service.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/model/parse.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/agent/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/.env.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/.gitignore.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/Dockerfile.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/app.yaml.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/model/file_info.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/base/requirements.txt.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/cli/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/cli/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/cli/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/cli/commands/hello.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/cli/pyproject.toml.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/api/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/command/templates/web/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/nexus/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/__main__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/acp/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/acp/config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/acp/executor.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/acp/registry.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/acp/server.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/agents/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/agents/factory.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/agents/prompts.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/browser.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/capabilities/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/capabilities/console.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/capabilities/dom.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/capabilities/network.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/capabilities/page_errors.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/capabilities/performance.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/capabilities/screenshot.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/client.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/protocol.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cdp/repl.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/cli.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/acp_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/acp_serve_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/cdp_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/chat_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/create_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/evaluate_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/init_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/memory_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/resume_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/rollback_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/commands/run_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/core/backend.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/core/config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/core/display.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/core/git_integration.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/core/llm.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/core/state.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/evaluate/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/evaluate/api_evaluator.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/memory/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/memory/compressor.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/memory/full.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/memory/hot.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/memory/manager.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/memory/warm.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/mode/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/mode/create.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/mode/optimize.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/models/config_models.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/baseline_tests.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/checkpoint.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/convergence.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/diagnosis.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/engine.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/environment.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/experience.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/harness_prompts.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/history.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/optimization_logger.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/pre_validation.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/reward.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/strategy_bandit.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/strategy_generator.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/rl/strategy_prompts.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/simple_chat_agent.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycli/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/acp/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/acp/client.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/acp/fetch.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/acp/server_adapter.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/acp/ssh_init.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/acp/tool.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/agent_manager.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/chat_events.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/deep_agent.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/mcp/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/mcp/models.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/mcp/tool_loader.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/middleware/model_request_prep.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/middleware/sandbox_path_guard.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/middleware/sensitive_guard.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/multi_agent_team.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/reasoning_content_patch.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/resume_compactor.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/sandbox/file_ops.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/skills_retry_patch.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/agent/summarization_utils.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/auth/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/auth/ldap_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/auth/oa_cache.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/auth/oa_crypto.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/auth/oa_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/auth/wecom_ldap_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/ACPAgentConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/EgressPolicyConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/PgConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/XxlJobConfig.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/config/config_change_notifier.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/pg_checkpoint_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/resilient_pg_saver.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/token_utils.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/bounded_kafka_sink.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/bounded_stdout_sink.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/log_masker.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/mcp_server/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/mcp_server/server.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/egress_wall.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/sandbox.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/sandbox_gateway.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/token_tracking.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/tool_result_truncation.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/middleware/traceid.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/mcp_server_config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/sandbox.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/models/xxljob_handler_config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/notice/wecom_message.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbit_management_client.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/feign_client.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_backend_factory_compat.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_consistent_hash.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_consume_dedup.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_consumer_broker_health.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_consumer_recovery.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_consumer_recovery_fix.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_consumer_tags_sync.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_db_keepalive.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_encoding_cache.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_env_tenant_helper.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_exp_concurrent_migrate.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_exp_delete_queue_with_consumers.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_fault_injection_real.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_fix_verification.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_heartbeat_timeout.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_integration_real_broker.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_mcp_server.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_mq_config_driven.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_nacos_llm_real.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_oa_login.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_queue_priority_upgrade_timing.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_real_summarization.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_reconnect_scenarios.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_sandbox_glob_hardening.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_services_plugin_defaults.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_summarization_config.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_summarization_real.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_upgrade_aio_pika.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_upgrade_langgraph_stream.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tests/test_upgrade_verification.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/snowflake.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/time_utils.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/tools/user_id.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/xxljob/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/xxljob/xxljob_service.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_acp_tool.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_asyncio_logging.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_config_change_notifier.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_hotreload_snapshot.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_llm_apikey_contextvar.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_log_masker.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_resilient_pg_saver.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_sandbox_path_guard.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_sensitive_guard.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_simple_chat_agent.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_skill_regex_upgrade.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_skill_write_guard.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_streaming_e2e.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_summary_echo_break_loop.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_sycli.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_sylogger_fixes.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_sync_skills_to_sandbox.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_time_utils.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_traceid_omit_base64.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_upload_concurrency.py +0 -0
- {sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/tests/test_upload_e2e_http.py +0 -0
{sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/health/readiness.py
RENAMED
|
@@ -7,9 +7,10 @@ from starlette.concurrency import run_in_threadpool
|
|
|
7
7
|
|
|
8
8
|
from sycommon.logging.kafka_log import SYLogger
|
|
9
9
|
|
|
10
|
-
# DB/Redis 拨测超时(秒);MQ
|
|
10
|
+
# DB/Redis 拨测超时(秒);MQ 通道往返与 LLM 真实补全略宽
|
|
11
11
|
PROBE_TIMEOUT_SECONDS = 3.0
|
|
12
12
|
MQ_PROBE_TIMEOUT_SECONDS = 5.0
|
|
13
|
+
LLM_PROBE_TIMEOUT_SECONDS = 8.0
|
|
13
14
|
|
|
14
15
|
# 拨测结果 TTL 缓存(秒):K8s/Nacos/LB 多源轮询直接命中缓存,
|
|
15
16
|
# 避免故障期间探针流量放大成对依赖的额外负载
|
|
@@ -17,10 +18,13 @@ PROBE_CACHE_TTL_SECONDS = 2.0
|
|
|
17
18
|
|
|
18
19
|
# 等拨测锁超时(秒):底层库吞取消语义的兜底,防端点整体 wedged。
|
|
19
20
|
# 预算必须覆盖最慢合法路径再加余量:MQ 撞换池窗口的兜底重探最坏
|
|
20
|
-
# 2×MQ_PROBE_TIMEOUT
|
|
21
|
-
#
|
|
21
|
+
# 2×MQ_PROBE_TIMEOUT,LLM 网关慢响应最坏 1×LLM_PROBE_TIMEOUT —— 取两者
|
|
22
|
+
# 较大者再配余量(写小了会把正常慢探测误判成 wedged 答 stale,
|
|
23
|
+
# 对齐 Go lib fca8ee1 锁预算修复思路:TTL + 最慢组件 + 余量)。
|
|
22
24
|
LOCK_WAIT_TIMEOUT_SECONDS = (
|
|
23
|
-
PROBE_CACHE_TTL_SECONDS
|
|
25
|
+
PROBE_CACHE_TTL_SECONDS
|
|
26
|
+
+ max(2 * MQ_PROBE_TIMEOUT_SECONDS, LLM_PROBE_TIMEOUT_SECONDS)
|
|
27
|
+
+ 5.0)
|
|
24
28
|
|
|
25
29
|
|
|
26
30
|
def _skipped(reason: str) -> dict:
|
|
@@ -61,10 +65,11 @@ async def _probe_async_engine(engine) -> None:
|
|
|
61
65
|
await connection.execute(text("SELECT 1"))
|
|
62
66
|
|
|
63
67
|
|
|
64
|
-
async def _timed_probe(coro, timeout: float, probe_name: str) -> dict:
|
|
68
|
+
async def _timed_probe(coro, timeout: float, probe_name: str, **extra) -> dict:
|
|
65
69
|
"""单组件拨测统一包裹:计时 + 超时 + 异常→DOWN,互不影响其他组件。
|
|
66
70
|
|
|
67
71
|
error 只含异常类型名(详见 _err_type_only);完整异常进 WARNING 日志。
|
|
72
|
+
extra 透传进 UP/DOWN 的 details(如 LLM 拨测的 model 名)。
|
|
68
73
|
"""
|
|
69
74
|
start = time.monotonic()
|
|
70
75
|
try:
|
|
@@ -76,6 +81,7 @@ async def _timed_probe(coro, timeout: float, probe_name: str) -> dict:
|
|
|
76
81
|
"probe": probe_name,
|
|
77
82
|
"error": "probe timeout",
|
|
78
83
|
"latency_ms": round((time.monotonic() - start) * 1000, 1),
|
|
84
|
+
**extra,
|
|
79
85
|
},
|
|
80
86
|
}
|
|
81
87
|
except Exception as e:
|
|
@@ -90,6 +96,7 @@ async def _timed_probe(coro, timeout: float, probe_name: str) -> dict:
|
|
|
90
96
|
"probe": probe_name,
|
|
91
97
|
"error": _err_type_only(e),
|
|
92
98
|
"latency_ms": round((time.monotonic() - start) * 1000, 1),
|
|
99
|
+
**extra,
|
|
93
100
|
},
|
|
94
101
|
}
|
|
95
102
|
return {
|
|
@@ -97,6 +104,7 @@ async def _timed_probe(coro, timeout: float, probe_name: str) -> dict:
|
|
|
97
104
|
"details": {
|
|
98
105
|
"probe": probe_name,
|
|
99
106
|
"latency_ms": round((time.monotonic() - start) * 1000, 1),
|
|
107
|
+
**extra,
|
|
100
108
|
},
|
|
101
109
|
}
|
|
102
110
|
|
|
@@ -283,13 +291,92 @@ async def _probe_mq_pool_alive(pool) -> None:
|
|
|
283
291
|
raise RuntimeError("mq connection not alive")
|
|
284
292
|
|
|
285
293
|
|
|
294
|
+
async def _check_llm() -> dict:
|
|
295
|
+
"""LLM 拨测:配置里没有任何 LLMConfig → SKIPPED(纯中间件服务不掺和);
|
|
296
|
+
有配置则取 default 模型发一条 "1+1=" 真实补全,收到非空回复即 UP。
|
|
297
|
+
|
|
298
|
+
「能正常返回数据」的判定:通道通但 content 为空(网关 200 空补全)
|
|
299
|
+
同样算 DOWN —— 空回复对消费方等于不可用。错误只回显类型名/HTTP
|
|
300
|
+
状态码(同 _err_type_only 脱敏标准,网关错误文案可能内嵌上游信息)。
|
|
301
|
+
max_tokens 固定 16:拨测只要一个数字,防推理模型把输出预算烧满。
|
|
302
|
+
timeout 固定拨测预算(覆盖客户端默认 180s —— readiness 要求秒级)。
|
|
303
|
+
"""
|
|
304
|
+
from sycommon.config.Config import Config
|
|
305
|
+
|
|
306
|
+
try:
|
|
307
|
+
cfg = Config()
|
|
308
|
+
default_cfg = cfg.get_default_llm_config()
|
|
309
|
+
model = default_cfg.get("model")
|
|
310
|
+
has_configs = bool(cfg.llm_configs)
|
|
311
|
+
except Exception:
|
|
312
|
+
has_configs = False
|
|
313
|
+
model = None
|
|
314
|
+
|
|
315
|
+
if not has_configs or not model:
|
|
316
|
+
if _declared("llm"):
|
|
317
|
+
return {
|
|
318
|
+
"status": "DOWN",
|
|
319
|
+
"details": {"reason": "llm declared but no LLMConfig loaded"},
|
|
320
|
+
}
|
|
321
|
+
return _skipped("no LLMConfig loaded")
|
|
322
|
+
|
|
323
|
+
async def _probe_llm_chat() -> None:
|
|
324
|
+
from langchain_core.messages import HumanMessage
|
|
325
|
+
|
|
326
|
+
from sycommon.llm.get_llm import get_llm
|
|
327
|
+
|
|
328
|
+
# thinking=False(指令模式):get_llm 注入
|
|
329
|
+
# chat_template_kwargs.enable_thinking=False —— 推理模型(默认条目
|
|
330
|
+
# Qwen3.8-Flash-Next 实测)开着思考时 16 token 全烧在 reasoning、
|
|
331
|
+
# content 为 None → 撞 length 上限被空回复哨兵误判 DOWN;关思考后
|
|
332
|
+
# 同一预算直接吐 "1 + 1 = 2"。max_tokens=16 同理:拨测只要一个数字,
|
|
333
|
+
# 防推理模型把输出预算烧满;timeout 固定拨测预算(覆盖客户端默认
|
|
334
|
+
# 180s —— readiness 要求秒级)。
|
|
335
|
+
llm = get_llm(
|
|
336
|
+
model,
|
|
337
|
+
wrap_structured=False,
|
|
338
|
+
thinking=False,
|
|
339
|
+
max_retries=1,
|
|
340
|
+
timeout=LLM_PROBE_TIMEOUT_SECONDS,
|
|
341
|
+
max_tokens=16,
|
|
342
|
+
temperature=0,
|
|
343
|
+
)
|
|
344
|
+
# 拨测无请求上下文,强制走 nacos 全局 apiKey
|
|
345
|
+
#(current_llm_api_key 为空时 resolve_api_key 自会回退配置值)。
|
|
346
|
+
resp = await llm.ainvoke([HumanMessage(content="1+1=")])
|
|
347
|
+
content = resp.content if hasattr(resp, "content") else ""
|
|
348
|
+
if isinstance(content, list): # 多模态 content 分片 → 拼纯文本
|
|
349
|
+
content = "".join(
|
|
350
|
+
part.get("text", "") for part in content
|
|
351
|
+
if isinstance(part, dict))
|
|
352
|
+
if not str(content).strip():
|
|
353
|
+
raise _EmptyCompletionError()
|
|
354
|
+
|
|
355
|
+
try:
|
|
356
|
+
return await _timed_probe(
|
|
357
|
+
_probe_llm_chat(), LLM_PROBE_TIMEOUT_SECONDS,
|
|
358
|
+
"chat completions", model=model)
|
|
359
|
+
except Exception as e:
|
|
360
|
+
SYLogger.warning(
|
|
361
|
+
f"[READINESS] llm check failed: {type(e).__name__}")
|
|
362
|
+
return {
|
|
363
|
+
"status": "DOWN",
|
|
364
|
+
"details": {"error": _err_type_only(e)},
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
class _EmptyCompletionError(Exception):
|
|
369
|
+
"""空回复哨兵:类型名即脱敏文案(通道通但没吐字)。"""
|
|
370
|
+
|
|
371
|
+
|
|
286
372
|
def setup_readiness_handler(app: FastAPI):
|
|
287
|
-
"""挂载 GET /actuator/health/readiness:按需拨测 DB/Redis/MQ。
|
|
373
|
+
"""挂载 GET /actuator/health/readiness:按需拨测 DB/Redis/MQ/LLM。
|
|
288
374
|
|
|
289
375
|
组件是否「在用」由各服务单例运行时状态判定(零配置):
|
|
290
376
|
- database: DatabaseService/AsyncDatabaseService engine 存在
|
|
291
377
|
- redis: RedisService.is_initialized()
|
|
292
378
|
- mq: RabbitMQService.is_configured()(mq.yml 已加载)
|
|
379
|
+
- llm: Config 里存在 LLMConfig 条目(默认模型真实补全往返)
|
|
293
380
|
|
|
294
381
|
在用组件任一 DOWN → HTTP 503;SKIPPED 不影响。
|
|
295
382
|
结果带 PROBE_CACHE_TTL_SECONDS 缓存:多探针源(K8s/Nacos/LB)轮询
|
|
@@ -328,9 +415,9 @@ def setup_readiness_handler(app: FastAPI):
|
|
|
328
415
|
# 单组件异常/导入失败不得炸掉整个 gather(否则取消兄弟任务);
|
|
329
416
|
# gather return_exceptions + 逐个兜底
|
|
330
417
|
results = await asyncio.gather(
|
|
331
|
-
_check_database(), _check_redis(), _check_mq(),
|
|
418
|
+
_check_database(), _check_redis(), _check_mq(), _check_llm(),
|
|
332
419
|
return_exceptions=True)
|
|
333
|
-
names = ("database", "redis", "mq")
|
|
420
|
+
names = ("database", "redis", "mq", "llm")
|
|
334
421
|
components = {}
|
|
335
422
|
for name, res in zip(names, results):
|
|
336
423
|
if isinstance(res, BaseException):
|
{sycommon_python_lib-0.2.10a10 → sycommon_python_lib-0.2.10a12}/src/sycommon/logging/kafka_log.py
RENAMED
|
@@ -220,6 +220,20 @@ class KafkaSink:
|
|
|
220
220
|
bootstrap_timeout_ms=10000:
|
|
221
221
|
api_version 默认为 None,__init__ 会 eager bootstrap 拉取版本信息,
|
|
222
222
|
broker 不可达时默认 30s 才超时。重建/惰性补建路径下 30s 太长,收到 10s。
|
|
223
|
+
enable_idempotence=False 的理由(2026-10-14 netsearch 生产事故复盘):
|
|
224
|
+
kafka-python 3.x 把 enable_idempotence 默认从 False 静默改为 True,
|
|
225
|
+
日志 producer 被动卷进 PID/序列号/muted 整套幂等机制,触发两个库缺陷:
|
|
226
|
+
1. retention 型 UnknownProducerIdError 活锁:broker 因 retention 清掉
|
|
227
|
+
producer state 后持续回 UPIE,客户端 KAFKA-5793 分支每次都重置序列号
|
|
228
|
+
重试(该分支在 _can_retry 之前、不受 retries 约束),且
|
|
229
|
+
reset_sequence_for_partition 把 last_acked 一并弹掉(此后永远 -1),
|
|
230
|
+
导致每次都判成 retention-based → 无限重试(现场转了 2 分钟)。
|
|
231
|
+
2. muted.remove KeyError:幂等下 guarantee_message_order=True,批次被
|
|
232
|
+
双重完成(本地 delivery timeout 一次 + broker 迟到响应一次)时
|
|
233
|
+
_dispatch_error 尾部裸 muted.remove(tp) 第二次抛 KeyError,直接炸
|
|
234
|
+
出 "Uncaught error in kafka producer I/O thread"。
|
|
235
|
+
日志管道不需要 exactly-once(可容忍重复/丢失),关掉幂等后 UPIE 走
|
|
236
|
+
非重试分支直接 fail 进 errback(自愈信号),muted 集合彻底不用。
|
|
223
237
|
"""
|
|
224
238
|
return KafkaProducer(
|
|
225
239
|
bootstrap_servers=self._bootstrap_servers,
|
|
@@ -229,6 +243,7 @@ class KafkaSink:
|
|
|
229
243
|
max_block_ms=5000,
|
|
230
244
|
retries=5,
|
|
231
245
|
request_timeout_ms=30000,
|
|
246
|
+
enable_idempotence=False,
|
|
232
247
|
# delivery_timeout 由默认 120s 收紧到 45s:断网时批次最多积压 45s 就过期并触发
|
|
233
248
|
# errback(自愈信号),而不是静默积压 2 分钟后才批量报错。约束:必须大于
|
|
234
249
|
# linger_ms + request_timeout_ms(5 + 30000),45s 满足。
|
|
@@ -430,6 +445,11 @@ class KafkaSink:
|
|
|
430
445
|
"sySpanId": "",
|
|
431
446
|
"syBizId": "",
|
|
432
447
|
"ptxId": "",
|
|
448
|
+
# 2026-10-14 补齐(Java starter-log 字段表 30 项全集对照):
|
|
449
|
+
# pSpanId/pAgentId 在 Java 侧从 MDC PspanId / pinpoint.agentId
|
|
450
|
+
# 读,常态空但键存在 — 缺键会让 ES mapping/平台列两侧不齐
|
|
451
|
+
"pSpanId": "",
|
|
452
|
+
"pAgentId": "",
|
|
433
453
|
"time": record["time"].strftime("%Y-%m-%d %H:%M:%S,%f")[:-3],
|
|
434
454
|
"day": datetime.now().strftime("%Y.%m.%d"),
|
|
435
455
|
"msg": _msg_str,
|
|
@@ -570,11 +590,16 @@ class KafkaSink:
|
|
|
570
590
|
引用,故全程用 _rebuild_lock 保护,并置 _rebuild_in_progress 让 write()
|
|
571
591
|
在此期间跳过惰性建 producer,避免重复构造。
|
|
572
592
|
|
|
573
|
-
|
|
593
|
+
关键一:close() 内部会 join sender 线程(sender.join(timeout)),而本方法
|
|
574
594
|
正是从 sender 线程的 errback 链调进来的——若在锁内直接 close 旧 producer
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
595
|
+
会触发"在自己线程里 join 自己"的死锁。所以 flush/close 必须放在锁外。
|
|
596
|
+
|
|
597
|
+
关键二(2026-10-14 生产事故复盘):只放锁外还不够——errback 同步执行
|
|
598
|
+
flush(5s)+close(10s) 会让 kafka 的 IO 线程卡 15s(现场 14.9s,selector
|
|
599
|
+
慢任务看门狗连报 blocking the event loop),期间网络收发全部停摆。因此
|
|
600
|
+
整个 关旧/建新 挪到独立 daemon 线程执行,errback 立即返回。_rebuild_
|
|
601
|
+
in_progress 维持到新 producer 就位,期间 write() 跳过(日志丢弃语义与
|
|
602
|
+
原重建窗口一致)。"""
|
|
578
603
|
with self._rebuild_lock:
|
|
579
604
|
if self._rebuild_in_progress:
|
|
580
605
|
return # 已有重建在进行,不重入
|
|
@@ -583,7 +608,17 @@ class KafkaSink:
|
|
|
583
608
|
# 摘引用:write() 见到 _producer is None 且 _rebuild_in_progress 会跳过
|
|
584
609
|
self._producer = None
|
|
585
610
|
self._producer_obj = None
|
|
586
|
-
#
|
|
611
|
+
# 关旧/建新全在独立线程:绝不阻塞 kafka IO 线程(errback 调用方)与 loguru 线程
|
|
612
|
+
threading.Thread(
|
|
613
|
+
target=self._rebuild_worker, args=(old,),
|
|
614
|
+
name="kafka-sink-rebuild", daemon=True).start()
|
|
615
|
+
|
|
616
|
+
def _rebuild_worker(self, old):
|
|
617
|
+
"""重建工作体(独立 daemon 线程内执行)。
|
|
618
|
+
|
|
619
|
+
close() 会 join sender 线程,绝不能在 sender 线程里做;bootstrap 不可达
|
|
620
|
+
会抛,吞掉,下次失败计数还会再触发。"""
|
|
621
|
+
# flush/close 放锁外且放本线程:join sender 线程最长 ~15s,别拖任何人
|
|
587
622
|
if old is not None:
|
|
588
623
|
try:
|
|
589
624
|
old.flush(timeout=5)
|
|
@@ -730,6 +765,13 @@ class KafkaLogger(metaclass=SingletonMeta):
|
|
|
730
765
|
intercept_handler = _InterceptHandler()
|
|
731
766
|
logging.root.handlers = [intercept_handler]
|
|
732
767
|
logging.root.setLevel(logging.WARNING)
|
|
768
|
+
# kafka-python 内部日志降噪兜底(正常由 services.setup_logger_levels()
|
|
769
|
+
# 在插件链更早处设置;此处幂等重申):故障期间库的 WARNING 风暴
|
|
770
|
+
# (UnknownProducerIdError 重试/selector 慢任务/批次过期)经 root 桥接
|
|
771
|
+
# 回灌 loguru 后又要发往同一故障 topic,形成放大回路(2026-10-14 复盘)。
|
|
772
|
+
for _name in ("kafka", "kafka.net", "kafka.net.selector",
|
|
773
|
+
"kafka.net.connection", "kafka.producer"):
|
|
774
|
+
logging.getLogger(_name).setLevel(logging.ERROR)
|
|
733
775
|
|
|
734
776
|
sys.excepthook = KafkaLogger._handle_exception
|
|
735
777
|
# sys.excepthook 只管主线程;工作线程的未捕获异常走 threading.excepthook
|
|
@@ -6,9 +6,15 @@ def setup_logger_levels():
|
|
|
6
6
|
# Nacos 客户端:仅输出WARNING及以上(屏蔽INFO级的心跳/注册日志)
|
|
7
7
|
logging.getLogger("nacos.client").setLevel(logging.WARNING)
|
|
8
8
|
|
|
9
|
-
# Kafka Python客户端:屏蔽INFO
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
# Kafka Python客户端:屏蔽INFO级的连接/版本检测日志。
|
|
10
|
+
# kafka.* 整族压到 ERROR(2026-10-14 生产事故复盘):故障期间库自身持续打
|
|
11
|
+
# WARNING——retention 型 UnknownProducerIdError 风暴(每秒多条)、selector
|
|
12
|
+
# 慢任务看门狗(kafka.net.selector)、批次过期——经 stdlib root 桥接回灌
|
|
13
|
+
# loguru 后又要发往同一个正在故障的 topic,形成放大回路。这些 WARNING 的
|
|
14
|
+
# 价值在 ERR 都有(sender 线程崩溃/批次最终失败),全部静音。
|
|
15
|
+
for _name in ("kafka", "kafka.net", "kafka.net.selector",
|
|
16
|
+
"kafka.net.connection", "kafka.producer"):
|
|
17
|
+
logging.getLogger(_name).setLevel(logging.ERROR)
|
|
12
18
|
|
|
13
19
|
# Uvicorn/FastAPI:屏蔽启动/应用初始化的INFO日志(保留ERROR/WARNING)
|
|
14
20
|
# logging.getLogger("uvicorn").setLevel(logging.WARNING)
|
|
@@ -352,6 +352,7 @@ tests/test_acp_tool.py
|
|
|
352
352
|
tests/test_asyncio_logging.py
|
|
353
353
|
tests/test_config_change_notifier.py
|
|
354
354
|
tests/test_hotreload_snapshot.py
|
|
355
|
+
tests/test_kafka_upie_fix.py
|
|
355
356
|
tests/test_llm_apikey_contextvar.py
|
|
356
357
|
tests/test_log_masker.py
|
|
357
358
|
tests/test_resilient_pg_saver.py
|