synth-ai 0.18.2.dev613__tar.gz → 0.18.2.dev615__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.18.2.dev613/synth_ai.egg-info → synth_ai-0.18.2.dev615}/PKG-INFO +1 -1
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/pyproject.toml +1 -1
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/__init__.py +22 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/client.py +38 -3
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/README.md +40 -3
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/server.py +2 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/__init__.py +2 -0
- synth_ai-0.18.2.dev615/synth_ai/mcp/research/tools/intern_program.py +793 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/research_intern.py +45 -5
- synth_ai-0.18.2.dev615/synth_ai/sdk/optimizers/__init__.py +30 -0
- synth_ai-0.18.2.dev615/synth_ai/sdk/optimizers/client.py +291 -0
- synth_ai-0.18.2.dev615/synth_ai/sdk/optimizers/contracts.py +142 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/__init__.py +337 -227
- synth_ai-0.18.2.dev615/synth_ai/sdk/research/contracts/intern_grants.py +346 -0
- synth_ai-0.18.2.dev615/synth_ai/sdk/research/contracts/intern_program.py +768 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/research_intern.py +200 -13
- synth_ai-0.18.2.dev615/synth_ai/sdk/research/intern_program.py +854 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/operations.py +156 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/public.py +278 -152
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/research_intern.py +245 -4
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615/synth_ai.egg-info}/PKG-INFO +1 -1
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai.egg-info/SOURCES.txt +7 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/LICENSE +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/MANIFEST.in +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/README.md +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/setup.cfg +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/README.md +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/__main__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/AGENTS.md +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/README.md +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/__main__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/main.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/research.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/research_environments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/research_image_releases.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/cli/research_projects.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/README.md +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/auth/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/auth/credentials.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/contracts/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/contracts/json_value.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/contracts/pagination.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/errors.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/http/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/http/async_transport.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/http/request.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/http/retry.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/http/streaming.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/http/transport.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/research/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/utils/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/utils/env.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/utils/log_filter.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/utils/paths.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/core/utils/urls.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/__main__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/objective_tools.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/registry.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/request_models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/approvals.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/artifacts.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/datasets.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/environments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/exports.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/factories.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/factory_results.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/files.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/image_releases.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/integrations.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/logs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/outputs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/progress.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/project_data.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/projects.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/prs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/readiness.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/repos.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/resources.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/runs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/trained_models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/usage.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/visuals.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/py.typed +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/README.md +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/pagination.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/_internal/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/_internal/crypto.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/_internal/env.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/_internal/urls.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/account.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/advanced.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/advanced_factories.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/advanced_swarms.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/artifacts.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/auth.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/client.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/_wire.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/activity.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/billing.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/canonical_usage.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/common.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/economics.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/environments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/evidence.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/factories.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/factory_operations.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/failure.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/limit_evidence.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/project.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/project_data.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/projects.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/promotions.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_control.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_events.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_state.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/status.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/swarms.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/tag.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/traces.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/transcript.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/types.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/usage.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/visuals.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/wire_models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/work_products.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/economics.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/efforts.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/environments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/errors.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/events.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/experiments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/facade.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/factories.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/factory_storage.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/image_releases.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/knowledge.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/project_data.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/project_deliveries.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/project_workspaces.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/projects.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/readouts.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/secrets.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/README.md +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/_base.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/_client_helpers.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/approvals.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/billing.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/client.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/config.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/cost.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/datasets.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/dev_environments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/environments.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/exports.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/factories.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/files.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/github.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/image_releases.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/images.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/logs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/outputs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/progress.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/project.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/projects.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/prs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/readiness.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/repositories.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/runs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/secrets.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/setup.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/tag.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/trained_models.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/transport.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/usage.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/work_products.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/swarms.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/traces.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/transport/__init__.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/transport/http.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/transport/pagination.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/version.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/visuals.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai/sdk/research/wiki.py +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai.egg-info/dependency_links.txt +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai.egg-info/entry_points.txt +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai.egg-info/requires.txt +0 -0
- {synth_ai-0.18.2.dev613 → synth_ai-0.18.2.dev615}/synth_ai.egg-info/top_level.txt +0 -0
|
@@ -39,6 +39,7 @@ except _PackageNotFoundError:
|
|
|
39
39
|
__all__ = [
|
|
40
40
|
"AsyncResearchInternReactiveSession",
|
|
41
41
|
"AsyncSynthClient",
|
|
42
|
+
"AsyncOptimizersClient",
|
|
42
43
|
"DataBindingCreateRequest",
|
|
43
44
|
"DatasetRevisionCreateRequest",
|
|
44
45
|
"DatasetRevisionFinalizeRequest",
|
|
@@ -99,9 +100,30 @@ __all__ = [
|
|
|
99
100
|
"ResearchVisualPromotionRequest",
|
|
100
101
|
"ResearchVisualVersions",
|
|
101
102
|
"SynthClient",
|
|
103
|
+
"OptimizersClient",
|
|
104
|
+
"OptimizerRunOutputs",
|
|
105
|
+
"SavedLoraCheckpoint",
|
|
106
|
+
"SavedLoraCheckpointPage",
|
|
107
|
+
"SavedLoraLineage",
|
|
108
|
+
"SavedLoraRunPage",
|
|
109
|
+
"HostedTrainingModelCatalog",
|
|
102
110
|
]
|
|
103
111
|
|
|
104
112
|
_EXPORTS: dict[str, tuple[str, str]] = {
|
|
113
|
+
"AsyncOptimizersClient": ("synth_ai.sdk.optimizers", "AsyncOptimizersClient"),
|
|
114
|
+
"HostedTrainingModelCatalog": (
|
|
115
|
+
"synth_ai.sdk.optimizers",
|
|
116
|
+
"HostedTrainingModelCatalog",
|
|
117
|
+
),
|
|
118
|
+
"OptimizersClient": ("synth_ai.sdk.optimizers", "OptimizersClient"),
|
|
119
|
+
"OptimizerRunOutputs": ("synth_ai.sdk.optimizers", "OptimizerRunOutputs"),
|
|
120
|
+
"SavedLoraCheckpoint": ("synth_ai.sdk.optimizers", "SavedLoraCheckpoint"),
|
|
121
|
+
"SavedLoraCheckpointPage": (
|
|
122
|
+
"synth_ai.sdk.optimizers",
|
|
123
|
+
"SavedLoraCheckpointPage",
|
|
124
|
+
),
|
|
125
|
+
"SavedLoraLineage": ("synth_ai.sdk.optimizers", "SavedLoraLineage"),
|
|
126
|
+
"SavedLoraRunPage": ("synth_ai.sdk.optimizers", "SavedLoraRunPage"),
|
|
105
127
|
"AsyncResearchInternReactiveSession": (
|
|
106
128
|
"synth_ai.sdk.research.research_intern",
|
|
107
129
|
"AsyncResearchInternReactiveSession",
|
|
@@ -9,6 +9,7 @@ from synth_ai.core.auth.credentials import resolve_api_credential
|
|
|
9
9
|
from synth_ai.core.utils.urls import BACKEND_URL_BASE, normalize_backend_base
|
|
10
10
|
|
|
11
11
|
if TYPE_CHECKING:
|
|
12
|
+
from synth_ai.sdk.optimizers import AsyncOptimizersClient, OptimizersClient
|
|
12
13
|
from synth_ai.sdk.research import AsyncResearchClient
|
|
13
14
|
from synth_ai.sdk.research.facade import ResearchClient
|
|
14
15
|
|
|
@@ -22,10 +23,10 @@ def _resolve_base_url(base_url: str | None) -> str:
|
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class SynthClient:
|
|
25
|
-
"""Sync client for Managed Research.
|
|
26
|
+
"""Sync client for Managed Research and hosted optimizers.
|
|
26
27
|
|
|
27
28
|
Use ``research`` for hosted projects, swarms, and Factory lifecycles. That
|
|
28
|
-
|
|
29
|
+
Use ``optimizers`` for hosted training model discovery and saved LoRAs.
|
|
29
30
|
"""
|
|
30
31
|
|
|
31
32
|
def __init__(
|
|
@@ -41,6 +42,7 @@ class SynthClient:
|
|
|
41
42
|
self.timeout_seconds = timeout_seconds
|
|
42
43
|
self.allow_legacy_intern_sessions = allow_legacy_intern_sessions
|
|
43
44
|
self._research_client: ResearchClient | None = None
|
|
45
|
+
self._optimizers_client: OptimizersClient | None = None
|
|
44
46
|
|
|
45
47
|
@property
|
|
46
48
|
def research(self) -> ResearchClient:
|
|
@@ -61,6 +63,22 @@ class SynthClient:
|
|
|
61
63
|
if self._research_client is not None:
|
|
62
64
|
self._research_client.close()
|
|
63
65
|
self._research_client = None
|
|
66
|
+
if self._optimizers_client is not None:
|
|
67
|
+
self._optimizers_client.close()
|
|
68
|
+
self._optimizers_client = None
|
|
69
|
+
|
|
70
|
+
@property
|
|
71
|
+
def optimizers(self) -> OptimizersClient:
|
|
72
|
+
"""Hosted training models and searchable saved-LoRA lineage."""
|
|
73
|
+
if self._optimizers_client is None:
|
|
74
|
+
from synth_ai.sdk.optimizers import OptimizersClient
|
|
75
|
+
|
|
76
|
+
self._optimizers_client = OptimizersClient(
|
|
77
|
+
api_key=self.api_key,
|
|
78
|
+
base_url=self.base_url,
|
|
79
|
+
timeout_seconds=self.timeout_seconds,
|
|
80
|
+
)
|
|
81
|
+
return self._optimizers_client
|
|
64
82
|
|
|
65
83
|
def __enter__(self) -> SynthClient:
|
|
66
84
|
return self
|
|
@@ -70,7 +88,7 @@ class SynthClient:
|
|
|
70
88
|
|
|
71
89
|
|
|
72
90
|
class AsyncSynthClient:
|
|
73
|
-
"""Async client for Managed Research."""
|
|
91
|
+
"""Async client for Managed Research and hosted optimizers."""
|
|
74
92
|
|
|
75
93
|
def __init__(
|
|
76
94
|
self,
|
|
@@ -85,6 +103,7 @@ class AsyncSynthClient:
|
|
|
85
103
|
self.timeout_seconds = timeout_seconds
|
|
86
104
|
self.allow_legacy_intern_sessions = allow_legacy_intern_sessions
|
|
87
105
|
self._async_research_client: AsyncResearchClient | None = None
|
|
106
|
+
self._async_optimizers_client: AsyncOptimizersClient | None = None
|
|
88
107
|
|
|
89
108
|
@property
|
|
90
109
|
def research(self) -> AsyncResearchClient:
|
|
@@ -115,6 +134,22 @@ class AsyncSynthClient:
|
|
|
115
134
|
if self._async_research_client is not None:
|
|
116
135
|
await self._async_research_client.close()
|
|
117
136
|
self._async_research_client = None
|
|
137
|
+
if self._async_optimizers_client is not None:
|
|
138
|
+
await self._async_optimizers_client.close()
|
|
139
|
+
self._async_optimizers_client = None
|
|
140
|
+
|
|
141
|
+
@property
|
|
142
|
+
def optimizers(self) -> AsyncOptimizersClient:
|
|
143
|
+
"""Native asynchronous hosted optimizer namespace."""
|
|
144
|
+
if self._async_optimizers_client is None:
|
|
145
|
+
from synth_ai.sdk.optimizers import AsyncOptimizersClient
|
|
146
|
+
|
|
147
|
+
self._async_optimizers_client = AsyncOptimizersClient(
|
|
148
|
+
api_key=self.api_key,
|
|
149
|
+
base_url=self.base_url,
|
|
150
|
+
timeout_seconds=self.timeout_seconds,
|
|
151
|
+
)
|
|
152
|
+
return self._async_optimizers_client
|
|
118
153
|
|
|
119
154
|
async def __aenter__(self) -> AsyncSynthClient:
|
|
120
155
|
return self
|
|
@@ -95,16 +95,53 @@ sessions; they never address the singleton Async resource implicitly.
|
|
|
95
95
|
|
|
96
96
|
Async Intern control plane:
|
|
97
97
|
- `intern_async_ensure` and `intern_async_get` address the organization's one
|
|
98
|
-
long-lived Async Intern runtime
|
|
99
|
-
|
|
98
|
+
long-lived Async Intern runtime. Ensure accepts day/month spend ceilings via
|
|
99
|
+
`budget.maximum_daily_cost_cents` / `budget.maximum_monthly_cost_cents` or
|
|
100
|
+
top-level kwargs of the same names; omitted ceilings get server defaults.
|
|
101
|
+
- `intern_async_command` preserves the exact durable command envelope (including
|
|
102
|
+
`request_spine_handoff` / `advance_spine`)
|
|
100
103
|
- `intern_async_send`, `intern_async_intervene`,
|
|
101
104
|
`intern_async_redirect_objective`, and `intern_async_request_checkpoint`
|
|
102
105
|
submit typed instructions to the same backend inbox
|
|
103
106
|
- `intern_async_pause`, `intern_async_resume`, `intern_async_cancel`, and
|
|
104
|
-
`intern_async_provide_input` expose explicit state-machine controls
|
|
107
|
+
`intern_async_provide_input` expose explicit state-machine controls. Pause
|
|
108
|
+
frees the sticky exe.dev host lease; resume reacquires it.
|
|
109
|
+
- `intern_async_get` projections include `open_judgment_items` and `effort_work`
|
|
110
|
+
(ask-and-continue asks and per-Effort work summaries), plus `spend` and
|
|
111
|
+
`host_lease`. The spend totals are the same ones the capability gate and the
|
|
112
|
+
spend sweeper read, host idle cost included, so what a caller sees is what
|
|
113
|
+
actually blocks work; `host_lease.reused` distinguishes a lease reacquired on
|
|
114
|
+
resume from a freshly provisioned host
|
|
105
115
|
- `intern_async_events` replays a bounded event page and `intern_async_tail`
|
|
106
116
|
waits for a bounded number of SSE events
|
|
107
117
|
|
|
118
|
+
Intern research program (Effort-first):
|
|
119
|
+
- `intern_effort_board` lists Efforts as board rows -- the Effort plus its open
|
|
120
|
+
objective/task/question counts -- and `intern_effort_detail` rolls one Effort
|
|
121
|
+
up into Progress / Results / Experiments / Knowledge. The runtime block on the
|
|
122
|
+
detail is secondary ops chrome (cycle, wake, cursor, spend, host lease), not
|
|
123
|
+
the product surface.
|
|
124
|
+
- `intern_objective_list` / `_create` / `_get` / `_update`,
|
|
125
|
+
`intern_milestone_list` / `_create` / `_transition`, and
|
|
126
|
+
`intern_task_list` / `_create` / `_update` address the Intern's own
|
|
127
|
+
Effort-bound planner store. The Effort is a required argument on every create:
|
|
128
|
+
a row cannot exist without its binding, and the binding is immutable.
|
|
129
|
+
- `intern_progress_claim_create` folds a finished run's result back into the
|
|
130
|
+
objective that motivated it; `intern_objective_link_create` records a
|
|
131
|
+
*reference* from an Intern objective to an SMR-owned run, report, work
|
|
132
|
+
product, or experiment. Neither writes the target.
|
|
133
|
+
- Effort lifecycle itself is not duplicated here. Use the existing
|
|
134
|
+
`research_list_factory_efforts`, `research_get_effort`, and
|
|
135
|
+
`research_patch_effort`; these are the Async program verbs.
|
|
136
|
+
- `intern_memory_search` / `intern_memory_get` read the Intern's own history.
|
|
137
|
+
They return the retrieval payload with no wrapper, field for field with the
|
|
138
|
+
Intern's own memory tools -- so an operator inspecting memory sees exactly
|
|
139
|
+
what the Intern saw, rather than a second description of the same records.
|
|
140
|
+
- The Intern is a client of the swarm plane, never its owner. Kickoff and poll
|
|
141
|
+
stay on `research_trigger_run` / `research_get_run` / `research_get_swarm_*`.
|
|
142
|
+
No tool here plans a swarm's task graph, and none should be added that does --
|
|
143
|
+
`synth_ai.sdk.research.intern_grants` refuses those names outright.
|
|
144
|
+
|
|
108
145
|
These tools are thin adapters over `client.intern.async_`; they do not call
|
|
109
146
|
HTTP directly and do not contain reducer logic. A command receipt proves
|
|
110
147
|
durable admission, not completion. Callers retain command/idempotency identity
|
|
@@ -47,6 +47,7 @@ from synth_ai.mcp.research.tools.factory_results import (
|
|
|
47
47
|
from synth_ai.mcp.research.tools.files import build_file_tools
|
|
48
48
|
from synth_ai.mcp.research.tools.image_releases import build_image_release_tools
|
|
49
49
|
from synth_ai.mcp.research.tools.integrations import build_integration_tools
|
|
50
|
+
from synth_ai.mcp.research.tools.intern_program import build_intern_program_tools
|
|
50
51
|
from synth_ai.mcp.research.tools.logs import build_log_tools
|
|
51
52
|
from synth_ai.mcp.research.tools.models import build_model_tools
|
|
52
53
|
from synth_ai.mcp.research.tools.outputs import build_output_tools
|
|
@@ -480,6 +481,7 @@ class ResearchMcpServer:
|
|
|
480
481
|
*build_output_tools(self),
|
|
481
482
|
*build_readiness_tools(self),
|
|
482
483
|
*build_research_intern_tools(self._core_client_from_args),
|
|
484
|
+
*build_intern_program_tools(self._core_client_from_args),
|
|
483
485
|
*build_resource_tools(self),
|
|
484
486
|
*build_run_tools(self),
|
|
485
487
|
*build_progress_tools(self),
|
|
@@ -6,6 +6,7 @@ from synth_ai.mcp.research.tools.exports import build_export_tools
|
|
|
6
6
|
from synth_ai.mcp.research.tools.factories import build_factory_tools
|
|
7
7
|
from synth_ai.mcp.research.tools.files import build_file_tools
|
|
8
8
|
from synth_ai.mcp.research.tools.image_releases import build_image_release_tools
|
|
9
|
+
from synth_ai.mcp.research.tools.intern_program import build_intern_program_tools
|
|
9
10
|
from synth_ai.mcp.research.tools.models import build_model_tools
|
|
10
11
|
from synth_ai.mcp.research.tools.outputs import build_output_tools
|
|
11
12
|
from synth_ai.mcp.research.tools.progress import build_progress_tools
|
|
@@ -26,6 +27,7 @@ __all__ = [
|
|
|
26
27
|
"build_factory_tools",
|
|
27
28
|
"build_file_tools",
|
|
28
29
|
"build_image_release_tools",
|
|
30
|
+
"build_intern_program_tools",
|
|
29
31
|
"build_model_tools",
|
|
30
32
|
"build_output_tools",
|
|
31
33
|
"build_progress_tools",
|