sycommon-python-lib 0.2.5a13__tar.gz → 0.2.5a14__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.5a13 → sycommon_python_lib-0.2.5a14}/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/pyproject.toml +1 -1
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/http_sandbox_backend.py +89 -41
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/sandbox.py +9 -2
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/sandbox.py +3 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/snowflake.py +32 -76
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/README.md +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/api/query.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/db/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/db/service.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/model/parse.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/.env.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/.gitignore.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/Dockerfile.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/app.yaml.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/model/file_info.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/requirements.txt.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/commands/hello.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/pyproject.toml.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/api/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/nexus/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/__main__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/agents/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/agents/factory.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/agents/prompts.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/browser.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/console.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/dom.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/network.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/page_errors.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/performance.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/screenshot.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/client.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/protocol.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/repl.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/cli.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/cdp_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/chat_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/create_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/evaluate_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/init_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/memory_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/resume_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/rollback_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/run_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/core/backend.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/core/config.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/core/display.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/core/git_integration.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/core/llm.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/core/state.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/evaluate/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/evaluate/api_evaluator.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/compressor.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/full.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/hot.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/manager.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/warm.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/mode/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/mode/create.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/mode/optimize.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/models/config_models.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/baseline_tests.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/checkpoint.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/convergence.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/diagnosis.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/engine.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/environment.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/experience.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/harness_prompts.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/history.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/optimization_logger.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/pre_validation.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/reward.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/strategy_bandit.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/strategy_generator.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/strategy_prompts.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycli/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/agent_manager.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/chat_events.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/deep_agent.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/mcp/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/mcp/models.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/mcp/tool_loader.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/multi_agent_team.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/file_ops.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/summarization_utils.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/ldap_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/oa_cache.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/oa_crypto.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/oa_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/wecom_ldap_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/PgConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/XxlJobConfig.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/pg_checkpoint_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/logger_levels.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/mcp_server/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/mcp_server/server.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/token_tracking.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/tool_result_truncation.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/traceid.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/mcp_server_config.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/xxljob_handler_config.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/notice/wecom_message.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/feign_client.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_consumer_recovery.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_encoding_cache.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_mcp_server.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_oa_login.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_real_summarization.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_summarization_config.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_summarization_real.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/xxljob/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/xxljob/xxljob_service.py +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
- {sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/tests/test_sycli.py +0 -0
|
@@ -120,6 +120,10 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
120
120
|
self._nacos_service_name = nacos_service_name
|
|
121
121
|
self._nacos_group = nacos_group
|
|
122
122
|
|
|
123
|
+
# 共享异步 HTTP 会话(连接池复用,惰性初始化)
|
|
124
|
+
self._async_session: Optional[aiohttp.ClientSession] = None
|
|
125
|
+
self._session_loop_id: Optional[int] = None # track which loop created the session
|
|
126
|
+
|
|
123
127
|
# 生成 ID
|
|
124
128
|
self._id = self._base_url.replace(
|
|
125
129
|
"http://", ""
|
|
@@ -131,6 +135,55 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
131
135
|
"/", "-"
|
|
132
136
|
)
|
|
133
137
|
|
|
138
|
+
async def _get_async_session(self) -> aiohttp.ClientSession:
|
|
139
|
+
"""获取或创建共享的 aiohttp ClientSession(连接池复用)
|
|
140
|
+
|
|
141
|
+
Handles the case where the backend was created in a different thread
|
|
142
|
+
(e.g. via asyncio.to_thread) by detecting loop mismatch and resetting.
|
|
143
|
+
"""
|
|
144
|
+
try:
|
|
145
|
+
current_loop = asyncio.get_running_loop()
|
|
146
|
+
except RuntimeError:
|
|
147
|
+
current_loop = None
|
|
148
|
+
|
|
149
|
+
# If session was created on a different event loop, discard it
|
|
150
|
+
if self._async_session is not None and self._session_loop_id != id(current_loop):
|
|
151
|
+
try:
|
|
152
|
+
self._async_session.close()
|
|
153
|
+
except Exception:
|
|
154
|
+
pass
|
|
155
|
+
self._async_session = None
|
|
156
|
+
|
|
157
|
+
if self._async_session is None or self._async_session.closed:
|
|
158
|
+
connector = aiohttp.TCPConnector(
|
|
159
|
+
ssl=_SSL_CONTEXT,
|
|
160
|
+
limit=10,
|
|
161
|
+
limit_per_host=10,
|
|
162
|
+
keepalive_timeout=30,
|
|
163
|
+
enable_cleanup_closed=True,
|
|
164
|
+
)
|
|
165
|
+
self._async_session = aiohttp.ClientSession(connector=connector)
|
|
166
|
+
self._session_loop_id = id(current_loop)
|
|
167
|
+
return self._async_session
|
|
168
|
+
|
|
169
|
+
async def acleanup(self):
|
|
170
|
+
"""关闭共享的异步 HTTP 会话,释放连接池资源"""
|
|
171
|
+
if self._async_session and not self._async_session.closed:
|
|
172
|
+
await self._async_session.close()
|
|
173
|
+
self._async_session = None
|
|
174
|
+
|
|
175
|
+
def cleanup(self):
|
|
176
|
+
"""同步方式关闭共享会话(供非 async 上下文使用)"""
|
|
177
|
+
if self._async_session and not self._async_session.closed:
|
|
178
|
+
try:
|
|
179
|
+
loop = asyncio.get_running_loop()
|
|
180
|
+
loop.create_task(self._async_session.close())
|
|
181
|
+
except RuntimeError:
|
|
182
|
+
loop = asyncio.new_event_loop()
|
|
183
|
+
loop.run_until_complete(self._async_session.close())
|
|
184
|
+
loop.close()
|
|
185
|
+
self._async_session = None
|
|
186
|
+
|
|
134
187
|
@classmethod
|
|
135
188
|
def from_nacos(
|
|
136
189
|
cls,
|
|
@@ -361,10 +414,11 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
361
414
|
SYLogger.warning(f"[Sandbox] 请求失败 (尝试 {attempt + 1}/{max_retries}): {self._base_url} - {e}")
|
|
362
415
|
|
|
363
416
|
if attempt < max_retries - 1:
|
|
417
|
+
backoff = 2 ** attempt
|
|
364
418
|
switched = self._refresh_from_nacos_and_switch_sync()
|
|
365
419
|
if not switched:
|
|
366
420
|
import time
|
|
367
|
-
time.sleep(
|
|
421
|
+
time.sleep(backoff)
|
|
368
422
|
else:
|
|
369
423
|
raise RuntimeError(f"沙箱服务不可用: {e}")
|
|
370
424
|
|
|
@@ -377,38 +431,32 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
377
431
|
# ============== 内部方法 - 异步版本 ==============
|
|
378
432
|
|
|
379
433
|
async def _post_async(self, endpoint: str, data: dict, timeout: int = None) -> dict:
|
|
380
|
-
"""异步 POST
|
|
434
|
+
"""异步 POST 请求(使用共享连接池)"""
|
|
381
435
|
actual_timeout = timeout if timeout is not None else self._timeout
|
|
382
436
|
if "/execute" in endpoint:
|
|
383
437
|
http_timeout = actual_timeout + 60
|
|
384
438
|
else:
|
|
385
439
|
http_timeout = actual_timeout + 30
|
|
386
440
|
|
|
387
|
-
|
|
388
|
-
headers = {"Content-Type": "application/json"}
|
|
389
|
-
if trace_id:
|
|
390
|
-
headers["x-traceid-header"] = str(trace_id)
|
|
391
|
-
if self._token:
|
|
392
|
-
headers["X-Sandbox-Token"] = self._token
|
|
441
|
+
headers = self._build_headers()
|
|
393
442
|
|
|
394
443
|
url = f"{self._base_url}{endpoint}"
|
|
395
444
|
SYLogger.info(f"[Sandbox] Async POST 请求开始: {url}, timeout={http_timeout}s")
|
|
396
445
|
|
|
397
446
|
timeout_obj = aiohttp.ClientTimeout(total=http_timeout)
|
|
398
|
-
|
|
399
|
-
async with
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
return result
|
|
447
|
+
session = await self._get_async_session()
|
|
448
|
+
async with session.post(url, json=data, headers=headers, timeout=timeout_obj) as resp:
|
|
449
|
+
SYLogger.info(f"[Sandbox] Async POST 响应状态码: {resp.status}")
|
|
450
|
+
if resp.status >= 400:
|
|
451
|
+
text = await resp.text()
|
|
452
|
+
SYLogger.error(f"[Sandbox] HTTP 错误 {resp.status}: {text}")
|
|
453
|
+
resp.raise_for_status()
|
|
454
|
+
result = await resp.json()
|
|
455
|
+
SYLogger.info(f"[Sandbox] Async POST 成功: {url}")
|
|
456
|
+
return result
|
|
409
457
|
|
|
410
458
|
async def _post_async_with_failover(self, endpoint: str, data: dict, timeout: int = None) -> dict:
|
|
411
|
-
"""
|
|
459
|
+
"""带故障转移和指数退避的异步 POST 请求"""
|
|
412
460
|
max_retries = 3
|
|
413
461
|
|
|
414
462
|
for attempt in range(max_retries):
|
|
@@ -418,10 +466,12 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
418
466
|
SYLogger.warning(f"[Sandbox] Async 请求失败 (尝试 {attempt + 1}/{max_retries}): {self._base_url} - {e}")
|
|
419
467
|
|
|
420
468
|
if attempt < max_retries - 1:
|
|
469
|
+
# 指数退避: 1s, 2s
|
|
470
|
+
backoff = 2 ** attempt
|
|
421
471
|
# 尝试故障转移
|
|
422
472
|
switched = await asyncio.to_thread(self._refresh_from_nacos_and_switch_sync)
|
|
423
473
|
if not switched:
|
|
424
|
-
await asyncio.sleep(
|
|
474
|
+
await asyncio.sleep(backoff)
|
|
425
475
|
else:
|
|
426
476
|
raise RuntimeError(f"沙箱服务不可用: {e}")
|
|
427
477
|
|
|
@@ -490,20 +540,19 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
490
540
|
SYLogger.info(f"[Sandbox] 使用环境变量 SANDBOX_WORKSPACE={env_workspace}")
|
|
491
541
|
return self._workspace_root
|
|
492
542
|
|
|
493
|
-
# 从沙箱服务端 health
|
|
543
|
+
# 从沙箱服务端 health 接口获取(使用共享连接池)
|
|
494
544
|
try:
|
|
495
545
|
url = f"{self._base_url}{SANDBOX_API_PREFIX}/health"
|
|
496
|
-
connector = aiohttp.TCPConnector(ssl=_SSL_CONTEXT)
|
|
497
546
|
timeout_obj = aiohttp.ClientTimeout(total=10)
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
547
|
+
session = await self._get_async_session()
|
|
548
|
+
async with session.get(url, timeout=timeout_obj) as resp:
|
|
549
|
+
if resp.status == 200:
|
|
550
|
+
data = await resp.json()
|
|
551
|
+
workspace = data.get("workspace", "")
|
|
552
|
+
if workspace:
|
|
553
|
+
self._workspace_root = workspace
|
|
554
|
+
SYLogger.info(f"[Sandbox] 从沙箱服务端获取 WORKSPACE_ROOT={workspace}")
|
|
555
|
+
return self._workspace_root
|
|
507
556
|
except Exception as e:
|
|
508
557
|
SYLogger.warning(f"[Sandbox] 异步获取沙箱 workspace 失败: {e}")
|
|
509
558
|
|
|
@@ -1071,7 +1120,7 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
1071
1120
|
failed_count += 1
|
|
1072
1121
|
errors.append({"path": sandbox_path, "error": str(e)})
|
|
1073
1122
|
|
|
1074
|
-
max_workers = min(
|
|
1123
|
+
max_workers = min(4, len(files_to_upload)) if files_to_upload else 1
|
|
1075
1124
|
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
|
1076
1125
|
futures = [
|
|
1077
1126
|
executor.submit(_upload_one, idx, sandbox_path, local_file)
|
|
@@ -1185,18 +1234,17 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
1185
1234
|
raise
|
|
1186
1235
|
|
|
1187
1236
|
async def ahealth_check(self, timeout: int = 10) -> dict:
|
|
1188
|
-
"""
|
|
1237
|
+
"""异步健康检查(使用共享连接池)"""
|
|
1189
1238
|
try:
|
|
1190
1239
|
headers = self._build_headers()
|
|
1191
1240
|
url = f"{self._base_url}{SANDBOX_API_PREFIX}/health"
|
|
1192
1241
|
timeout_obj = aiohttp.ClientTimeout(total=timeout)
|
|
1193
|
-
|
|
1194
|
-
async with
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
return result
|
|
1242
|
+
session = await self._get_async_session()
|
|
1243
|
+
async with session.get(url, headers=headers, timeout=timeout_obj) as resp:
|
|
1244
|
+
resp.raise_for_status()
|
|
1245
|
+
result = await resp.json()
|
|
1246
|
+
SYLogger.info(f"[Sandbox] 异步健康检查成功: {result}")
|
|
1247
|
+
return result
|
|
1200
1248
|
except Exception as e:
|
|
1201
1249
|
SYLogger.error(f"[Sandbox] 异步健康检查失败: {e}")
|
|
1202
1250
|
raise
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/sandbox.py
RENAMED
|
@@ -67,7 +67,8 @@ from sycommon.models.sandbox import (
|
|
|
67
67
|
_WORKER_ID = f"{os.getpid()}-{uuid.uuid4().hex[:8]}"
|
|
68
68
|
|
|
69
69
|
# 进程存储: process_id -> {process: Popen, command: str, user_id: str, started_at: datetime, workspace: str}
|
|
70
|
-
|
|
70
|
+
_background_processes: Dict = {}
|
|
71
|
+
_process_lock = None
|
|
71
72
|
|
|
72
73
|
|
|
73
74
|
def _get_process_lock() -> asyncio.Lock:
|
|
@@ -403,7 +404,13 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
403
404
|
@sandbox_router.get("/health", response_model=HealthResponse)
|
|
404
405
|
async def health():
|
|
405
406
|
"""健康检查,返回 worker_id 用于多 worker 部署下的路由定位"""
|
|
406
|
-
return HealthResponse(
|
|
407
|
+
return HealthResponse(
|
|
408
|
+
status="ok",
|
|
409
|
+
workspace=WORKSPACE_BASE,
|
|
410
|
+
name=os.environ.get("SANDBOX_NAME", "远程沙箱"),
|
|
411
|
+
description=os.environ.get("SANDBOX_DESCRIPTION", ""),
|
|
412
|
+
type="remote",
|
|
413
|
+
)
|
|
407
414
|
|
|
408
415
|
@sandbox_router.post("/execute", response_model=ExecuteResponse)
|
|
409
416
|
async def execute(req: ExecuteRequest):
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/snowflake.py
RENAMED
|
@@ -4,44 +4,37 @@ import socket
|
|
|
4
4
|
import hashlib
|
|
5
5
|
import random
|
|
6
6
|
import os
|
|
7
|
-
from typing import Optional, Type, Any
|
|
8
|
-
from os import environ
|
|
9
7
|
import psutil
|
|
8
|
+
from typing import Optional, Any
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
class ClassProperty:
|
|
13
|
-
"""支持通过 类.属性 的方式访问,无需实例化"""
|
|
14
|
-
|
|
15
12
|
def __init__(self, func):
|
|
16
13
|
self.func = func
|
|
17
14
|
|
|
18
|
-
def __get__(self, instance: Any, cls:
|
|
15
|
+
def __get__(self, instance: Any, cls: type) -> str:
|
|
19
16
|
return self.func(cls)
|
|
20
17
|
|
|
21
18
|
|
|
22
19
|
class Snowflake:
|
|
23
20
|
"""
|
|
24
|
-
|
|
21
|
+
雪花算法生成器
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
2. 锁内原子更新:确保时钟回拨判断与状态更新的原子性。
|
|
29
|
-
3. 移除 sleep:全流程无休眠,纯自旋保证极致吞吐。
|
|
30
|
-
4. 机器ID分段:Python服务使用0-511,避免与Java服务(512-1023)冲突
|
|
23
|
+
- 序列号溢出时释放锁自旋等待,避免阻塞其他线程
|
|
24
|
+
- 机器ID分段:Python服务使用4096~5119,避免与Java服务(0~4095)冲突
|
|
31
25
|
"""
|
|
26
|
+
|
|
32
27
|
START_TIMESTAMP = 1388534400000 # 2014-01-01 00:00:00
|
|
33
|
-
SEQUENCE_BITS =
|
|
34
|
-
MACHINE_ID_BITS =
|
|
35
|
-
MAX_MACHINE_ID = (1 << MACHINE_ID_BITS) - 1 # 0~
|
|
36
|
-
MAX_SEQUENCE = (1 << SEQUENCE_BITS) - 1 #
|
|
28
|
+
SEQUENCE_BITS = 9
|
|
29
|
+
MACHINE_ID_BITS = 13
|
|
30
|
+
MAX_MACHINE_ID = (1 << MACHINE_ID_BITS) - 1 # 0~8191
|
|
31
|
+
MAX_SEQUENCE = (1 << SEQUENCE_BITS) - 1 # 511
|
|
37
32
|
MACHINE_ID_SHIFT = SEQUENCE_BITS
|
|
38
33
|
TIMESTAMP_SHIFT = SEQUENCE_BITS + MACHINE_ID_BITS
|
|
39
34
|
CLOCK_BACKWARD_THRESHOLD = 5
|
|
40
35
|
_MAX_JAVA_LONG = 9223372036854775807
|
|
41
36
|
|
|
42
|
-
|
|
43
|
-
# Python服务: 512-1023, Java服务: 0-511
|
|
44
|
-
PYTHON_MACHINE_ID_MIN = 512
|
|
37
|
+
PYTHON_MACHINE_ID_MIN = 4096
|
|
45
38
|
|
|
46
39
|
_instance = None
|
|
47
40
|
_instance_lock = threading.Lock()
|
|
@@ -51,12 +44,9 @@ class Snowflake:
|
|
|
51
44
|
if machine_id is None:
|
|
52
45
|
machine_id = self._get_k8s_machine_id()
|
|
53
46
|
|
|
54
|
-
# Python服务机器ID限制在
|
|
47
|
+
# Python服务机器ID限制在4096~5119范围,避免与Java服务(0~4095)冲突
|
|
55
48
|
machine_id = self.PYTHON_MACHINE_ID_MIN + \
|
|
56
|
-
(machine_id % (
|
|
57
|
-
|
|
58
|
-
if not (0 <= machine_id <= self.MAX_MACHINE_ID):
|
|
59
|
-
raise ValueError(f"机器ID必须在0~{self.MAX_MACHINE_ID}之间")
|
|
49
|
+
(machine_id % (5120 - self.PYTHON_MACHINE_ID_MIN))
|
|
60
50
|
|
|
61
51
|
self.machine_id = machine_id
|
|
62
52
|
self.last_timestamp = -1
|
|
@@ -66,15 +56,14 @@ class Snowflake:
|
|
|
66
56
|
def _validate_timestamp_range(self):
|
|
67
57
|
max_support_timestamp = self.START_TIMESTAMP + \
|
|
68
58
|
(1 << (64 - self.TIMESTAMP_SHIFT)) - 1
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
raise RuntimeError(f"当前时间戳({current_timestamp})超过支持范围")
|
|
59
|
+
if self._get_current_timestamp() > max_support_timestamp:
|
|
60
|
+
raise RuntimeError("当前时间戳超过支持范围")
|
|
72
61
|
|
|
73
62
|
def _get_k8s_machine_id(self) -> int:
|
|
74
|
-
pod_name = environ.get("POD_NAME")
|
|
63
|
+
pod_name = os.environ.get("POD_NAME")
|
|
75
64
|
if pod_name:
|
|
76
65
|
return self._hash_to_machine_id(pod_name)
|
|
77
|
-
pod_ip = environ.get("POD_IP")
|
|
66
|
+
pod_ip = os.environ.get("POD_IP")
|
|
78
67
|
if pod_ip:
|
|
79
68
|
return self._hash_to_machine_id(pod_ip)
|
|
80
69
|
try:
|
|
@@ -117,8 +106,7 @@ class Snowflake:
|
|
|
117
106
|
pass
|
|
118
107
|
try:
|
|
119
108
|
hostname = socket.gethostname()
|
|
120
|
-
|
|
121
|
-
for ip in ip_list:
|
|
109
|
+
for ip in socket.gethostbyname_ex(hostname)[2]:
|
|
122
110
|
if not ip.startswith('127.') and not ip.startswith('0.'):
|
|
123
111
|
return ip
|
|
124
112
|
except Exception:
|
|
@@ -133,69 +121,39 @@ class Snowflake:
|
|
|
133
121
|
return int(time.time() * 1000)
|
|
134
122
|
|
|
135
123
|
def generate_id(self) -> int:
|
|
136
|
-
"""
|
|
137
|
-
生成雪花ID(高并发优化版)
|
|
138
|
-
使用 while True 循环来处理序列号溢出时的重试逻辑
|
|
139
|
-
"""
|
|
140
124
|
while True:
|
|
141
|
-
# 1. 快速获取当前时间
|
|
142
125
|
current_timestamp = self._get_current_timestamp()
|
|
143
126
|
|
|
144
|
-
# 2. 加锁,保证状态更新的原子性
|
|
145
127
|
with self.lock:
|
|
146
|
-
# 读取当前状态(快照)
|
|
147
128
|
last_timestamp = self.last_timestamp
|
|
148
|
-
sequence = self.sequence
|
|
149
129
|
|
|
150
|
-
#
|
|
130
|
+
# 时钟回拨处理
|
|
151
131
|
time_diff = last_timestamp - current_timestamp
|
|
152
132
|
if time_diff > 0:
|
|
153
133
|
if time_diff > self.CLOCK_BACKWARD_THRESHOLD:
|
|
154
|
-
# 大幅回拨:直接“借用”未来1ms
|
|
155
134
|
current_timestamp = last_timestamp + 1
|
|
156
135
|
else:
|
|
157
|
-
# 微小回拨:锁内自旋等待追上(通常很快)
|
|
158
136
|
while current_timestamp <= last_timestamp:
|
|
159
137
|
current_timestamp = self._get_current_timestamp()
|
|
160
138
|
|
|
161
|
-
# 2.2 计算序列号
|
|
162
139
|
if current_timestamp == last_timestamp:
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
self.lock.release() # 手动释放锁
|
|
167
|
-
|
|
168
|
-
# 锁外自旋等待下一毫秒
|
|
140
|
+
self.sequence = (self.sequence + 1) & self.MAX_SEQUENCE
|
|
141
|
+
if self.sequence == 0:
|
|
142
|
+
# 序列号溢出:自旋等待下一毫秒(锁内等待,保证状态一致)
|
|
169
143
|
while current_timestamp <= last_timestamp:
|
|
170
144
|
current_timestamp = self._get_current_timestamp()
|
|
145
|
+
# else: sequence 正常递增,继续往下生成
|
|
146
|
+
elif current_timestamp > last_timestamp:
|
|
147
|
+
self.sequence = 0
|
|
171
148
|
|
|
172
|
-
|
|
173
|
-
continue
|
|
149
|
+
self.last_timestamp = current_timestamp
|
|
174
150
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
sequence = 0
|
|
178
|
-
self.last_timestamp = current_timestamp
|
|
179
|
-
self.sequence = sequence
|
|
180
|
-
else:
|
|
181
|
-
# current < last 的情况通常已被回拨逻辑处理
|
|
182
|
-
pass
|
|
183
|
-
|
|
184
|
-
# 2.4 生成 ID
|
|
185
|
-
snowflake_id = (
|
|
186
|
-
((current_timestamp - self.START_TIMESTAMP)
|
|
187
|
-
<< self.TIMESTAMP_SHIFT)
|
|
151
|
+
return (
|
|
152
|
+
((current_timestamp - self.START_TIMESTAMP) << self.TIMESTAMP_SHIFT)
|
|
188
153
|
| (self.machine_id << self.MACHINE_ID_SHIFT)
|
|
189
|
-
| sequence
|
|
154
|
+
| self.sequence
|
|
190
155
|
)
|
|
191
156
|
|
|
192
|
-
# 更新全局状态(如果是同一毫秒)
|
|
193
|
-
if current_timestamp == self.last_timestamp:
|
|
194
|
-
self.sequence = sequence
|
|
195
|
-
|
|
196
|
-
# 成功生成 ID,退出循环
|
|
197
|
-
return snowflake_id
|
|
198
|
-
|
|
199
157
|
@staticmethod
|
|
200
158
|
def parse_id(snowflake_id: int) -> dict:
|
|
201
159
|
from datetime import datetime
|
|
@@ -206,8 +164,6 @@ class Snowflake:
|
|
|
206
164
|
Snowflake.START_TIMESTAMP
|
|
207
165
|
generate_time = datetime.fromtimestamp(
|
|
208
166
|
timestamp / 1000).strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
|
209
|
-
|
|
210
|
-
# 判断服务来源(Python: 512-1023, Java: 0-511)
|
|
211
167
|
service_type = "python" if machine_id >= Snowflake.PYTHON_MACHINE_ID_MIN else "java"
|
|
212
168
|
|
|
213
169
|
return {
|
|
@@ -235,7 +191,7 @@ class Snowflake:
|
|
|
235
191
|
if __name__ == "__main__":
|
|
236
192
|
import concurrent.futures
|
|
237
193
|
|
|
238
|
-
print("===
|
|
194
|
+
print("=== Snowflake 性能测试 ===")
|
|
239
195
|
count = 100000
|
|
240
196
|
workers = 100
|
|
241
197
|
|
|
@@ -245,7 +201,7 @@ if __name__ == "__main__":
|
|
|
245
201
|
def task():
|
|
246
202
|
return Snowflake.id
|
|
247
203
|
|
|
248
|
-
with concurrent.futures.ThreadPoolExecutor(max_workers=
|
|
204
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=workers) as executor:
|
|
249
205
|
futures = [executor.submit(task) for _ in range(count)]
|
|
250
206
|
for future in concurrent.futures.as_completed(futures):
|
|
251
207
|
ids.append(future.result())
|
|
@@ -256,7 +212,7 @@ if __name__ == "__main__":
|
|
|
256
212
|
unique_count = len(set(ids))
|
|
257
213
|
print(f"生成数量: {len(ids)}")
|
|
258
214
|
print(f"唯一ID数量: {unique_count}")
|
|
259
|
-
print(f"是否有重复: {'是
|
|
215
|
+
print(f"是否有重复: {'是' if unique_count != len(ids) else '否'}")
|
|
260
216
|
print(f"总耗时: {duration:.4f} 秒")
|
|
261
217
|
print(f"吞吐量 (QPS): {len(ids) / duration:,.2f}")
|
|
262
218
|
print("\n最后一个ID解析:")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/app.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/.env.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/app.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/app.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.5a13 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|