synth-ai 0.22.2.dev679__tar.gz → 0.22.2.dev680__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.
- {synth_ai-0.22.2.dev679/synth_ai.egg-info → synth_ai-0.22.2.dev680}/PKG-INFO +1 -1
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/openapi/research-v1.json +259 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/pyproject.toml +1 -1
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/__init__.py +2 -0
- synth_ai-0.22.2.dev680/synth_ai/sdk/research/contracts/swarm_controls.py +55 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/operations.py +10 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/swarms.py +118 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680/synth_ai.egg-info}/PKG-INFO +1 -1
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai.egg-info/SOURCES.txt +1 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/LICENSE +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/MANIFEST.in +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/openapi/index-v1.json +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/openapi/messaging-v1.json +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/setup.cfg +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/setup.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/__main__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/AGENTS.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/__main__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/index.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/main.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/research.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/research_environments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/research_image_releases.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/cli/research_projects.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/client.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/auth/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/auth/credentials.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/contracts/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/contracts/json_value.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/contracts/pagination.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/errors.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/http/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/http/async_transport.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/http/request.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/http/retry.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/http/streaming.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/http/transport.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/research/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/utils/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/utils/env.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/utils/log_filter.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/utils/paths.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/core/utils/urls.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/__main__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/objective_tools.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/registry.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/request_models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/server.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/approvals.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/artifacts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/datasets.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/environments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/exports.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/factories.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/factory_results.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/files.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/image_releases.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/index.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/index_qa.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/integrations.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/intern_program.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/local_files.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/logs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/outputs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/progress.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/project_data.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/projects.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/prs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/readiness.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/repos.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/research_intern.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/resource_reads.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/resources.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/runs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/scientific_records.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/trained_models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/usage.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/visuals.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/pools.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/py.typed +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/AGENT_SETUP_PROMPT.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/agent_policy.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/artifacts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/catalog.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/catalogue.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/classification.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/client.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/contracts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/contributions.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/errors.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/forge_notices.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/intake.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/lifecycle.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/manifest.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/oauth.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/package.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/public.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/public_corpus.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/public_search.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/qa.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/qa_checks.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/qa_preflight.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/qa_reviews.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/research/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/research/build.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/research/capture.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/research/contracts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/research/files.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/research/release.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/research_intake.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/retry.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/rights.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/scientific_provenance.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/scope_errors.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/scopes.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/search.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/submission.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/timeouts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/transfer.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/upload_session.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/usage_accounting.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/value.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/index/wallet_search.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/messaging/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/messaging/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/messaging/client.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/messaging/contracts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/optimizers/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/optimizers/client.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/optimizers/contracts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/pagination.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/_internal/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/_internal/crypto.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/_internal/env.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/_internal/urls.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/account.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/advanced.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/advanced_factories.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/advanced_swarms.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/artifacts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/auth.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/client.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/container_pools/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/container_pools/api.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/container_pools/contracts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/container_pools/operations.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/container_pools/packaging.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/_wire.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/activity.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/billing.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/canonical_usage.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/common.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/economics.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/environments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/evidence.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/factories.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/factory_operations.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/failure.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/forge/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/forge/contracts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/forge/evaluation.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/forge/exports.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/forge/operations.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/forge/records.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/forge/resources.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/forge/schema.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/intern_blockers.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/intern_grants.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/intern_program.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/intern_resources.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/intern_usage.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/limit_evidence.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/project.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/project_data.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/projects.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/promotions.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/research_intern.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/resource_reads.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/resource_settlement.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_control.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_events.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_state.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/status.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/swarm_rollouts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/swarms.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/tag.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/traces.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/transcript.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/types.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/usage.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/visuals.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/wire_models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/work_products.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/economics.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/efforts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/environments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/errors.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/events.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/experiments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/facade.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/factories.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/factory_storage.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/image_releases.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/intern_blockers.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/intern_program.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/knowledge.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/project_data.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/project_deliveries.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/project_workspaces.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/projects.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/public.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/readouts.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/research_intern.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/resource_reads.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/scientific_records.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/secrets.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/README.md +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/_base.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/_client_helpers.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/approvals.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/billing.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/client.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/config.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/cost.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/datasets.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/dev_environments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/environments.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/exports.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/factories.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/files.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/github.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/image_releases.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/images.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/logs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/outputs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/progress.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/project.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/projects.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/prs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/readiness.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/repositories.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/runs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/secrets.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/setup.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/tag.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/trained_models.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/transport.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/usage.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/work_products.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/surface_parity.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/traces.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/transport/__init__.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/transport/http.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/transport/pagination.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/version.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/visuals.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/wiki.py +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai.egg-info/dependency_links.txt +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai.egg-info/entry_points.txt +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai.egg-info/requires.txt +0 -0
- {synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai.egg-info/top_level.txt +0 -0
|
@@ -22119,6 +22119,131 @@
|
|
|
22119
22119
|
"title": "SmrOpenEndedQuestionInlineCreateRequest",
|
|
22120
22120
|
"type": "object"
|
|
22121
22121
|
},
|
|
22122
|
+
"SmrOrchestraActionAnswerRequest": {
|
|
22123
|
+
"additionalProperties": false,
|
|
22124
|
+
"description": "Answer one Orchestra ``pending_questions[]`` action (``action_answer``).",
|
|
22125
|
+
"properties": {
|
|
22126
|
+
"idempotency_key": {
|
|
22127
|
+
"anyOf": [
|
|
22128
|
+
{
|
|
22129
|
+
"type": "string"
|
|
22130
|
+
},
|
|
22131
|
+
{
|
|
22132
|
+
"type": "null"
|
|
22133
|
+
}
|
|
22134
|
+
],
|
|
22135
|
+
"title": "Idempotency Key"
|
|
22136
|
+
},
|
|
22137
|
+
"response_text": {
|
|
22138
|
+
"minLength": 1,
|
|
22139
|
+
"title": "Response Text",
|
|
22140
|
+
"type": "string"
|
|
22141
|
+
}
|
|
22142
|
+
},
|
|
22143
|
+
"required": [
|
|
22144
|
+
"response_text"
|
|
22145
|
+
],
|
|
22146
|
+
"title": "SmrOrchestraActionAnswerRequest",
|
|
22147
|
+
"type": "object"
|
|
22148
|
+
},
|
|
22149
|
+
"SmrOrchestraOperationReceiptResponse": {
|
|
22150
|
+
"additionalProperties": false,
|
|
22151
|
+
"description": "Orchestra's write receipt for a public answer/steer (HTTP 202).\n\n``status`` is Orchestra's: ``accepted`` for a new write, ``duplicate`` for\na replay of the same ``operation_id`` with the same request.",
|
|
22152
|
+
"properties": {
|
|
22153
|
+
"action_id": {
|
|
22154
|
+
"anyOf": [
|
|
22155
|
+
{
|
|
22156
|
+
"type": "string"
|
|
22157
|
+
},
|
|
22158
|
+
{
|
|
22159
|
+
"type": "null"
|
|
22160
|
+
}
|
|
22161
|
+
],
|
|
22162
|
+
"title": "Action Id"
|
|
22163
|
+
},
|
|
22164
|
+
"control_seq": {
|
|
22165
|
+
"anyOf": [
|
|
22166
|
+
{
|
|
22167
|
+
"type": "integer"
|
|
22168
|
+
},
|
|
22169
|
+
{
|
|
22170
|
+
"type": "null"
|
|
22171
|
+
}
|
|
22172
|
+
],
|
|
22173
|
+
"title": "Control Seq"
|
|
22174
|
+
},
|
|
22175
|
+
"interaction_id": {
|
|
22176
|
+
"anyOf": [
|
|
22177
|
+
{
|
|
22178
|
+
"type": "string"
|
|
22179
|
+
},
|
|
22180
|
+
{
|
|
22181
|
+
"type": "null"
|
|
22182
|
+
}
|
|
22183
|
+
],
|
|
22184
|
+
"title": "Interaction Id"
|
|
22185
|
+
},
|
|
22186
|
+
"kind": {
|
|
22187
|
+
"enum": [
|
|
22188
|
+
"action_answer",
|
|
22189
|
+
"steer"
|
|
22190
|
+
],
|
|
22191
|
+
"title": "Kind",
|
|
22192
|
+
"type": "string"
|
|
22193
|
+
},
|
|
22194
|
+
"operation_id": {
|
|
22195
|
+
"title": "Operation Id",
|
|
22196
|
+
"type": "string"
|
|
22197
|
+
},
|
|
22198
|
+
"run_id": {
|
|
22199
|
+
"title": "Run Id",
|
|
22200
|
+
"type": "string"
|
|
22201
|
+
},
|
|
22202
|
+
"status": {
|
|
22203
|
+
"enum": [
|
|
22204
|
+
"accepted",
|
|
22205
|
+
"duplicate"
|
|
22206
|
+
],
|
|
22207
|
+
"title": "Status",
|
|
22208
|
+
"type": "string"
|
|
22209
|
+
}
|
|
22210
|
+
},
|
|
22211
|
+
"required": [
|
|
22212
|
+
"run_id",
|
|
22213
|
+
"operation_id",
|
|
22214
|
+
"kind",
|
|
22215
|
+
"status"
|
|
22216
|
+
],
|
|
22217
|
+
"title": "SmrOrchestraOperationReceiptResponse",
|
|
22218
|
+
"type": "object"
|
|
22219
|
+
},
|
|
22220
|
+
"SmrOrchestraSteerRequest": {
|
|
22221
|
+
"additionalProperties": false,
|
|
22222
|
+
"description": "Steer an orchestra-authority run (Orchestra ``RunControl::Steer``).",
|
|
22223
|
+
"properties": {
|
|
22224
|
+
"idempotency_key": {
|
|
22225
|
+
"anyOf": [
|
|
22226
|
+
{
|
|
22227
|
+
"type": "string"
|
|
22228
|
+
},
|
|
22229
|
+
{
|
|
22230
|
+
"type": "null"
|
|
22231
|
+
}
|
|
22232
|
+
],
|
|
22233
|
+
"title": "Idempotency Key"
|
|
22234
|
+
},
|
|
22235
|
+
"message": {
|
|
22236
|
+
"minLength": 1,
|
|
22237
|
+
"title": "Message",
|
|
22238
|
+
"type": "string"
|
|
22239
|
+
}
|
|
22240
|
+
},
|
|
22241
|
+
"required": [
|
|
22242
|
+
"message"
|
|
22243
|
+
],
|
|
22244
|
+
"title": "SmrOrchestraSteerRequest",
|
|
22245
|
+
"type": "object"
|
|
22246
|
+
},
|
|
22122
22247
|
"SmrPatchVisualRequest": {
|
|
22123
22248
|
"properties": {
|
|
22124
22249
|
"summary": {
|
|
@@ -50558,6 +50683,78 @@
|
|
|
50558
50683
|
]
|
|
50559
50684
|
}
|
|
50560
50685
|
},
|
|
50686
|
+
"/smr/runs/{run_id}/actions/{action_id}/answer": {
|
|
50687
|
+
"post": {
|
|
50688
|
+
"description": "Answer an Orchestra ``pending_questions[]`` action on an orchestra run.",
|
|
50689
|
+
"operationId": "answer_run_action",
|
|
50690
|
+
"parameters": [
|
|
50691
|
+
{
|
|
50692
|
+
"in": "path",
|
|
50693
|
+
"name": "run_id",
|
|
50694
|
+
"required": true,
|
|
50695
|
+
"schema": {
|
|
50696
|
+
"title": "Run Id",
|
|
50697
|
+
"type": "string"
|
|
50698
|
+
}
|
|
50699
|
+
},
|
|
50700
|
+
{
|
|
50701
|
+
"in": "path",
|
|
50702
|
+
"name": "action_id",
|
|
50703
|
+
"required": true,
|
|
50704
|
+
"schema": {
|
|
50705
|
+
"minLength": 1,
|
|
50706
|
+
"title": "Action Id",
|
|
50707
|
+
"type": "string"
|
|
50708
|
+
}
|
|
50709
|
+
}
|
|
50710
|
+
],
|
|
50711
|
+
"requestBody": {
|
|
50712
|
+
"content": {
|
|
50713
|
+
"application/json": {
|
|
50714
|
+
"schema": {
|
|
50715
|
+
"$ref": "#/components/schemas/SmrOrchestraActionAnswerRequest"
|
|
50716
|
+
}
|
|
50717
|
+
}
|
|
50718
|
+
},
|
|
50719
|
+
"required": true
|
|
50720
|
+
},
|
|
50721
|
+
"responses": {
|
|
50722
|
+
"202": {
|
|
50723
|
+
"content": {
|
|
50724
|
+
"application/json": {
|
|
50725
|
+
"schema": {
|
|
50726
|
+
"$ref": "#/components/schemas/SmrOrchestraOperationReceiptResponse"
|
|
50727
|
+
}
|
|
50728
|
+
}
|
|
50729
|
+
},
|
|
50730
|
+
"description": "Successful Response"
|
|
50731
|
+
},
|
|
50732
|
+
"404": {
|
|
50733
|
+
"description": "Run not found in the caller's organization."
|
|
50734
|
+
},
|
|
50735
|
+
"409": {
|
|
50736
|
+
"description": "run_not_orchestra_authority | terminal_run | answer_conflict | idempotency_conflict | orchestra_run_not_launched | project_archived"
|
|
50737
|
+
},
|
|
50738
|
+
"422": {
|
|
50739
|
+
"content": {
|
|
50740
|
+
"application/json": {
|
|
50741
|
+
"schema": {
|
|
50742
|
+
"$ref": "#/components/schemas/HTTPValidationError"
|
|
50743
|
+
}
|
|
50744
|
+
}
|
|
50745
|
+
},
|
|
50746
|
+
"description": "Validation Error"
|
|
50747
|
+
},
|
|
50748
|
+
"503": {
|
|
50749
|
+
"description": "orchestra_in_doubt | orchestra_unavailable (retryable)"
|
|
50750
|
+
}
|
|
50751
|
+
},
|
|
50752
|
+
"summary": "Answer Run Action",
|
|
50753
|
+
"tags": [
|
|
50754
|
+
"smr"
|
|
50755
|
+
]
|
|
50756
|
+
}
|
|
50757
|
+
},
|
|
50561
50758
|
"/smr/runs/{run_id}/activity": {
|
|
50562
50759
|
"get": {
|
|
50563
50760
|
"description": "Return typed bounded execution activity for a swarm.",
|
|
@@ -52050,6 +52247,68 @@
|
|
|
52050
52247
|
]
|
|
52051
52248
|
}
|
|
52052
52249
|
},
|
|
52250
|
+
"/smr/runs/{run_id}/steer": {
|
|
52251
|
+
"post": {
|
|
52252
|
+
"description": "Steer an orchestra-authority run (Orchestra ``RunControl::Steer``).",
|
|
52253
|
+
"operationId": "steer_run",
|
|
52254
|
+
"parameters": [
|
|
52255
|
+
{
|
|
52256
|
+
"in": "path",
|
|
52257
|
+
"name": "run_id",
|
|
52258
|
+
"required": true,
|
|
52259
|
+
"schema": {
|
|
52260
|
+
"title": "Run Id",
|
|
52261
|
+
"type": "string"
|
|
52262
|
+
}
|
|
52263
|
+
}
|
|
52264
|
+
],
|
|
52265
|
+
"requestBody": {
|
|
52266
|
+
"content": {
|
|
52267
|
+
"application/json": {
|
|
52268
|
+
"schema": {
|
|
52269
|
+
"$ref": "#/components/schemas/SmrOrchestraSteerRequest"
|
|
52270
|
+
}
|
|
52271
|
+
}
|
|
52272
|
+
},
|
|
52273
|
+
"required": true
|
|
52274
|
+
},
|
|
52275
|
+
"responses": {
|
|
52276
|
+
"202": {
|
|
52277
|
+
"content": {
|
|
52278
|
+
"application/json": {
|
|
52279
|
+
"schema": {
|
|
52280
|
+
"$ref": "#/components/schemas/SmrOrchestraOperationReceiptResponse"
|
|
52281
|
+
}
|
|
52282
|
+
}
|
|
52283
|
+
},
|
|
52284
|
+
"description": "Successful Response"
|
|
52285
|
+
},
|
|
52286
|
+
"404": {
|
|
52287
|
+
"description": "Run not found in the caller's organization."
|
|
52288
|
+
},
|
|
52289
|
+
"409": {
|
|
52290
|
+
"description": "run_not_orchestra_authority | terminal_run | answer_conflict | idempotency_conflict | orchestra_run_not_launched | project_archived"
|
|
52291
|
+
},
|
|
52292
|
+
"422": {
|
|
52293
|
+
"content": {
|
|
52294
|
+
"application/json": {
|
|
52295
|
+
"schema": {
|
|
52296
|
+
"$ref": "#/components/schemas/HTTPValidationError"
|
|
52297
|
+
}
|
|
52298
|
+
}
|
|
52299
|
+
},
|
|
52300
|
+
"description": "Validation Error"
|
|
52301
|
+
},
|
|
52302
|
+
"503": {
|
|
52303
|
+
"description": "orchestra_in_doubt | orchestra_unavailable (retryable)"
|
|
52304
|
+
}
|
|
52305
|
+
},
|
|
52306
|
+
"summary": "Steer Run",
|
|
52307
|
+
"tags": [
|
|
52308
|
+
"smr"
|
|
52309
|
+
]
|
|
52310
|
+
}
|
|
52311
|
+
},
|
|
52053
52312
|
"/smr/runs/{run_id}/stop": {
|
|
52054
52313
|
"post": {
|
|
52055
52314
|
"operationId": "stop_run",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "synth-ai"
|
|
3
|
-
version = "0.22.2.
|
|
3
|
+
version = "0.22.2.dev680"
|
|
4
4
|
description = "Python SDK, CLI and MCP servers for Synth Index search and Swarms"
|
|
5
5
|
keywords = ["synth", "index", "search", "citations", "research", "swarms", "mcp", "sdk"]
|
|
6
6
|
authors = [{name = "Synth AI", email = "josh@usesynth.ai"}]
|
{synth_ai-0.22.2.dev679 → synth_ai-0.22.2.dev680}/synth_ai/sdk/research/contracts/__init__.py
RENAMED
|
@@ -428,6 +428,7 @@ from synth_ai.sdk.research.contracts.runtime_stream_snapshot import (
|
|
|
428
428
|
RuntimeWorkersSnapshot,
|
|
429
429
|
SwarmRuntimeSnapshot,
|
|
430
430
|
)
|
|
431
|
+
from synth_ai.sdk.research.contracts.swarm_controls import SwarmControlReceipt
|
|
431
432
|
from synth_ai.sdk.research.contracts.swarms import (
|
|
432
433
|
ActiveActorModel,
|
|
433
434
|
ActorHarness,
|
|
@@ -610,6 +611,7 @@ def __getattr__(name: str) -> object:
|
|
|
610
611
|
|
|
611
612
|
|
|
612
613
|
__all__ = [
|
|
614
|
+
"SwarmControlReceipt",
|
|
613
615
|
"AiCacheMode",
|
|
614
616
|
"AiCachePolicy",
|
|
615
617
|
"ActiveActorModel",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""Receipts for backend-owned native Swarm answer and steer operations.
|
|
2
|
+
|
|
3
|
+
# See: openapi/research-v1.json SmrOrchestraOperationReceiptResponse
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from typing import Literal, cast
|
|
10
|
+
|
|
11
|
+
from synth_ai.core.contracts.json_value import JsonValue
|
|
12
|
+
from synth_ai.sdk.research.contracts._wire import object_value, optional_text, required_text
|
|
13
|
+
from synth_ai.sdk.research.contracts.common import SwarmId
|
|
14
|
+
|
|
15
|
+
ControlKind = Literal["action_answer", "steer"]
|
|
16
|
+
ControlStatus = Literal["accepted", "duplicate"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass(frozen=True, slots=True)
|
|
20
|
+
class SwarmControlReceipt:
|
|
21
|
+
"""Durable acceptance acknowledgement; execution delivery remains asynchronous."""
|
|
22
|
+
|
|
23
|
+
swarm_id: SwarmId
|
|
24
|
+
operation_id: str
|
|
25
|
+
kind: ControlKind
|
|
26
|
+
status: ControlStatus
|
|
27
|
+
action_id: str | None = None
|
|
28
|
+
interaction_id: str | None = None
|
|
29
|
+
control_seq: int | None = None
|
|
30
|
+
|
|
31
|
+
@classmethod
|
|
32
|
+
def from_wire(cls, value: JsonValue) -> SwarmControlReceipt:
|
|
33
|
+
payload = object_value(value, operation_id="swarm control receipt")
|
|
34
|
+
required = {"run_id", "operation_id", "kind", "status"}
|
|
35
|
+
allowed = required | {"action_id", "interaction_id", "control_seq"}
|
|
36
|
+
if required - payload.keys() or payload.keys() - allowed:
|
|
37
|
+
raise ValueError("swarm control receipt fields drifted")
|
|
38
|
+
kind, status = required_text(payload, "kind"), required_text(payload, "status")
|
|
39
|
+
if kind not in ("action_answer", "steer") or status not in ("accepted", "duplicate"):
|
|
40
|
+
raise ValueError("swarm control receipt vocabulary drifted")
|
|
41
|
+
sequence = payload.get("control_seq")
|
|
42
|
+
if sequence is not None and (type(sequence) is not int or sequence < 0):
|
|
43
|
+
raise ValueError("swarm control sequence must be a non-negative integer")
|
|
44
|
+
return cls(
|
|
45
|
+
SwarmId(required_text(payload, "run_id")),
|
|
46
|
+
required_text(payload, "operation_id"),
|
|
47
|
+
cast(ControlKind, kind),
|
|
48
|
+
cast(ControlStatus, status),
|
|
49
|
+
optional_text(payload, "action_id"),
|
|
50
|
+
optional_text(payload, "interaction_id"),
|
|
51
|
+
cast(int | None, sequence),
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
__all__ = ["SwarmControlReceipt"]
|
|
@@ -22,6 +22,16 @@ def _operation(
|
|
|
22
22
|
RESEARCH_OPERATIONS = {
|
|
23
23
|
operation.operation_id: operation
|
|
24
24
|
for operation in (
|
|
25
|
+
_operation(
|
|
26
|
+
"steer_run", HttpMethod.POST, "/smr/runs/{run_id}/steer", mutation=True, idempotent=True
|
|
27
|
+
),
|
|
28
|
+
_operation(
|
|
29
|
+
"answer_run_action",
|
|
30
|
+
HttpMethod.POST,
|
|
31
|
+
"/smr/runs/{run_id}/actions/{action_id}/answer",
|
|
32
|
+
mutation=True,
|
|
33
|
+
idempotent=True,
|
|
34
|
+
),
|
|
25
35
|
_operation(
|
|
26
36
|
"getExactDatasetRevision",
|
|
27
37
|
HttpMethod.GET,
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import time
|
|
7
7
|
from collections.abc import AsyncIterator, Iterator, Mapping
|
|
8
|
+
from urllib.parse import quote
|
|
8
9
|
|
|
9
10
|
from synth_ai.core.contracts.json_value import JsonObject, JsonValue
|
|
10
11
|
from synth_ai.core.errors import SynthError
|
|
@@ -19,6 +20,7 @@ from synth_ai.sdk.research.contracts.common import (
|
|
|
19
20
|
ProjectId,
|
|
20
21
|
SwarmId,
|
|
21
22
|
WorkProductId,
|
|
23
|
+
require_text,
|
|
22
24
|
)
|
|
23
25
|
from synth_ai.sdk.research.contracts.evidence import (
|
|
24
26
|
ContentDisposition,
|
|
@@ -26,6 +28,7 @@ from synth_ai.sdk.research.contracts.evidence import (
|
|
|
26
28
|
)
|
|
27
29
|
from synth_ai.sdk.research.contracts.resource_settlement import RunResourceSettlement
|
|
28
30
|
from synth_ai.sdk.research.contracts.status import SwarmStatus
|
|
31
|
+
from synth_ai.sdk.research.contracts.swarm_controls import SwarmControlReceipt
|
|
29
32
|
from synth_ai.sdk.research.contracts.swarm_rollouts import SwarmRollout, swarm_rollouts_from_wire
|
|
30
33
|
from synth_ai.sdk.research.contracts.swarms import (
|
|
31
34
|
BranchResult,
|
|
@@ -100,6 +103,31 @@ def _stream_timeout(timeout_seconds: float | None) -> float | None:
|
|
|
100
103
|
return timeout_seconds
|
|
101
104
|
|
|
102
105
|
|
|
106
|
+
def _control_body(field: str, text: str, idempotency_key: str | None) -> JsonObject:
|
|
107
|
+
if not isinstance(text, str) or not text.strip() or len(text.encode("utf-8")) > 16_384:
|
|
108
|
+
raise ValueError(f"{field} must be nonblank and at most 16384 UTF-8 bytes")
|
|
109
|
+
body: JsonObject = {field: text}
|
|
110
|
+
if idempotency_key is not None:
|
|
111
|
+
key = require_text(idempotency_key, field_name="idempotency_key")
|
|
112
|
+
if len(key) > 255:
|
|
113
|
+
raise ValueError("idempotency_key must be at most 255 characters")
|
|
114
|
+
body["idempotency_key"] = key
|
|
115
|
+
return body
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _control_receipt(
|
|
119
|
+
value: JsonValue, swarm_id: SwarmId, kind: str, action_id: str | None = None
|
|
120
|
+
) -> SwarmControlReceipt:
|
|
121
|
+
receipt = SwarmControlReceipt.from_wire(value)
|
|
122
|
+
if (
|
|
123
|
+
receipt.swarm_id != swarm_id
|
|
124
|
+
or receipt.kind != kind
|
|
125
|
+
or (action_id is not None and receipt.action_id != action_id)
|
|
126
|
+
):
|
|
127
|
+
raise ValueError("swarm control receipt does not match the request scope")
|
|
128
|
+
return receipt
|
|
129
|
+
|
|
130
|
+
|
|
103
131
|
class SwarmHandle:
|
|
104
132
|
"""Handle returned when creating a Swarm."""
|
|
105
133
|
|
|
@@ -281,6 +309,18 @@ class SwarmHandle:
|
|
|
281
309
|
timeout_seconds=timeout_seconds,
|
|
282
310
|
)
|
|
283
311
|
|
|
312
|
+
def steer(self, message: str, *, idempotency_key: str | None = None) -> SwarmControlReceipt:
|
|
313
|
+
"""Request native steering; acceptance is distinct from execution delivery."""
|
|
314
|
+
return self._api.steer(self.swarm_id, message, idempotency_key=idempotency_key)
|
|
315
|
+
|
|
316
|
+
def answer_action(
|
|
317
|
+
self, action_id: str, response_text: str, *, idempotency_key: str | None = None
|
|
318
|
+
) -> SwarmControlReceipt:
|
|
319
|
+
"""Answer the correlated action exposed by authoritative native history."""
|
|
320
|
+
return self._api.answer_action(
|
|
321
|
+
self.swarm_id, action_id, response_text, idempotency_key=idempotency_key
|
|
322
|
+
)
|
|
323
|
+
|
|
284
324
|
|
|
285
325
|
class SwarmsAPI:
|
|
286
326
|
"""Swarm lifecycle operations."""
|
|
@@ -731,6 +771,38 @@ class SwarmsAPI:
|
|
|
731
771
|
):
|
|
732
772
|
yield decode_swarm_event(event)
|
|
733
773
|
|
|
774
|
+
def steer(
|
|
775
|
+
self, swarm_id: SwarmId, message: str, *, idempotency_key: str | None = None
|
|
776
|
+
) -> SwarmControlReceipt:
|
|
777
|
+
"""Steer through the backend's native control ledger; reuse a key for retries."""
|
|
778
|
+
value = self._transport.execute(
|
|
779
|
+
_request(
|
|
780
|
+
"steer_run",
|
|
781
|
+
f"/smr/runs/{swarm_id}/steer",
|
|
782
|
+
body=_control_body("message", message, idempotency_key),
|
|
783
|
+
)
|
|
784
|
+
)
|
|
785
|
+
return _control_receipt(value, swarm_id, "steer")
|
|
786
|
+
|
|
787
|
+
def answer_action(
|
|
788
|
+
self,
|
|
789
|
+
swarm_id: SwarmId,
|
|
790
|
+
action_id: str,
|
|
791
|
+
response_text: str,
|
|
792
|
+
*,
|
|
793
|
+
idempotency_key: str | None = None,
|
|
794
|
+
) -> SwarmControlReceipt:
|
|
795
|
+
"""Answer a native action; changed bytes with the same key conflict server-side."""
|
|
796
|
+
action = require_text(action_id, field_name="action_id")
|
|
797
|
+
value = self._transport.execute(
|
|
798
|
+
_request(
|
|
799
|
+
"answer_run_action",
|
|
800
|
+
f"/smr/runs/{swarm_id}/actions/{quote(action, safe='')}/answer",
|
|
801
|
+
body=_control_body("response_text", response_text, idempotency_key),
|
|
802
|
+
)
|
|
803
|
+
)
|
|
804
|
+
return _control_receipt(value, swarm_id, "action_answer", action)
|
|
805
|
+
|
|
734
806
|
|
|
735
807
|
class AsyncSwarmHandle:
|
|
736
808
|
"""Handle returned when creating a Swarm."""
|
|
@@ -918,6 +990,20 @@ class AsyncSwarmHandle:
|
|
|
918
990
|
):
|
|
919
991
|
yield event
|
|
920
992
|
|
|
993
|
+
async def steer(
|
|
994
|
+
self, message: str, *, idempotency_key: str | None = None
|
|
995
|
+
) -> SwarmControlReceipt:
|
|
996
|
+
"""Request native steering; acceptance is distinct from execution delivery."""
|
|
997
|
+
return await self._api.steer(self.swarm_id, message, idempotency_key=idempotency_key)
|
|
998
|
+
|
|
999
|
+
async def answer_action(
|
|
1000
|
+
self, action_id: str, response_text: str, *, idempotency_key: str | None = None
|
|
1001
|
+
) -> SwarmControlReceipt:
|
|
1002
|
+
"""Answer the correlated action exposed by authoritative native history."""
|
|
1003
|
+
return await self._api.answer_action(
|
|
1004
|
+
self.swarm_id, action_id, response_text, idempotency_key=idempotency_key
|
|
1005
|
+
)
|
|
1006
|
+
|
|
921
1007
|
|
|
922
1008
|
class AsyncSwarmsAPI:
|
|
923
1009
|
"""Swarm lifecycle operations."""
|
|
@@ -1340,6 +1426,38 @@ class AsyncSwarmsAPI:
|
|
|
1340
1426
|
):
|
|
1341
1427
|
yield decode_swarm_event(event)
|
|
1342
1428
|
|
|
1429
|
+
async def steer(
|
|
1430
|
+
self, swarm_id: SwarmId, message: str, *, idempotency_key: str | None = None
|
|
1431
|
+
) -> SwarmControlReceipt:
|
|
1432
|
+
"""Steer through the backend's native control ledger; reuse a key for retries."""
|
|
1433
|
+
value = await self._transport.execute(
|
|
1434
|
+
_request(
|
|
1435
|
+
"steer_run",
|
|
1436
|
+
f"/smr/runs/{swarm_id}/steer",
|
|
1437
|
+
body=_control_body("message", message, idempotency_key),
|
|
1438
|
+
)
|
|
1439
|
+
)
|
|
1440
|
+
return _control_receipt(value, swarm_id, "steer")
|
|
1441
|
+
|
|
1442
|
+
async def answer_action(
|
|
1443
|
+
self,
|
|
1444
|
+
swarm_id: SwarmId,
|
|
1445
|
+
action_id: str,
|
|
1446
|
+
response_text: str,
|
|
1447
|
+
*,
|
|
1448
|
+
idempotency_key: str | None = None,
|
|
1449
|
+
) -> SwarmControlReceipt:
|
|
1450
|
+
"""Answer a native action; changed bytes with the same key conflict server-side."""
|
|
1451
|
+
action = require_text(action_id, field_name="action_id")
|
|
1452
|
+
value = await self._transport.execute(
|
|
1453
|
+
_request(
|
|
1454
|
+
"answer_run_action",
|
|
1455
|
+
f"/smr/runs/{swarm_id}/actions/{quote(action, safe='')}/answer",
|
|
1456
|
+
body=_control_body("response_text", response_text, idempotency_key),
|
|
1457
|
+
)
|
|
1458
|
+
)
|
|
1459
|
+
return _control_receipt(value, swarm_id, "action_answer", action)
|
|
1460
|
+
|
|
1343
1461
|
|
|
1344
1462
|
ResearchSwarmHandle = SwarmHandle
|
|
1345
1463
|
ResearchSwarmsAPI = SwarmsAPI
|
|
@@ -276,6 +276,7 @@ synth_ai/sdk/research/contracts/smr_runtime_kinds.py
|
|
|
276
276
|
synth_ai/sdk/research/contracts/smr_tool_providers.py
|
|
277
277
|
synth_ai/sdk/research/contracts/smr_work_modes.py
|
|
278
278
|
synth_ai/sdk/research/contracts/status.py
|
|
279
|
+
synth_ai/sdk/research/contracts/swarm_controls.py
|
|
279
280
|
synth_ai/sdk/research/contracts/swarm_rollouts.py
|
|
280
281
|
synth_ai/sdk/research/contracts/swarms.py
|
|
281
282
|
synth_ai/sdk/research/contracts/tag.py
|
|
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
|
|
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
|
|
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
|