synth-ai 0.18.2.dev602__tar.gz → 0.18.2.dev605__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.dev602/synth_ai.egg-info → synth_ai-0.18.2.dev605}/PKG-INFO +2 -2
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/README.md +1 -1
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/pyproject.toml +1 -1
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/client.py +6 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/research_intern.py +36 -4
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/client.py +10 -2
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/facade.py +2 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/public.py +2 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/research_intern.py +118 -7
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605/synth_ai.egg-info}/PKG-INFO +2 -2
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/LICENSE +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/MANIFEST.in +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/setup.cfg +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/README.md +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/__main__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/AGENTS.md +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/README.md +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/__main__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/main.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/research.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/research_environments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/research_image_releases.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/cli/research_projects.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/README.md +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/auth/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/auth/credentials.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/contracts/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/contracts/json_value.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/contracts/pagination.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/errors.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/http/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/http/async_transport.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/http/request.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/http/retry.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/http/streaming.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/http/transport.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/research/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/utils/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/utils/env.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/utils/log_filter.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/utils/paths.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/core/utils/urls.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/README.md +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/__main__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/objective_tools.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/registry.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/request_models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/server.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/approvals.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/artifacts.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/datasets.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/environments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/exports.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/factories.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/factory_results.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/files.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/image_releases.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/integrations.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/logs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/outputs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/progress.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/project_data.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/projects.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/prs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/readiness.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/repos.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/resources.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/runs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/trained_models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/usage.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/visuals.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/py.typed +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/README.md +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/pagination.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/_internal/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/_internal/crypto.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/_internal/env.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/_internal/urls.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/account.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/advanced.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/advanced_factories.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/advanced_swarms.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/artifacts.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/auth.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/_wire.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/activity.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/billing.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/canonical_usage.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/common.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/economics.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/environments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/evidence.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/factories.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/factory_operations.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/failure.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/limit_evidence.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/project.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/project_data.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/projects.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/promotions.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/research_intern.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_control.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_events.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_state.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/status.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/swarms.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/tag.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/traces.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/transcript.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/types.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/usage.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/visuals.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/wire_models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/work_products.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/economics.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/efforts.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/environments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/errors.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/events.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/experiments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/factories.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/factory_storage.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/image_releases.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/knowledge.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/operations.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/project_data.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/project_deliveries.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/project_workspaces.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/projects.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/readouts.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/secrets.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/README.md +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/_base.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/_client_helpers.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/approvals.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/billing.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/client.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/config.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/cost.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/datasets.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/dev_environments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/environments.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/exports.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/factories.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/files.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/github.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/image_releases.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/images.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/logs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/outputs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/progress.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/project.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/projects.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/prs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/readiness.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/repositories.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/runs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/secrets.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/setup.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/tag.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/trained_models.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/transport.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/usage.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/work_products.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/swarms.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/traces.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/transport/__init__.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/transport/http.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/transport/pagination.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/version.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/visuals.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/sdk/research/wiki.py +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai.egg-info/SOURCES.txt +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai.egg-info/dependency_links.txt +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai.egg-info/entry_points.txt +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai.egg-info/requires.txt +0 -0
- {synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synth-ai
|
|
3
|
-
Version: 0.18.2.
|
|
3
|
+
Version: 0.18.2.dev605
|
|
4
4
|
Summary: Python SDK and CLI for Synth Managed Research and Research Factory
|
|
5
5
|
Author-email: Synth AI <josh@usesynth.ai>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -27,7 +27,7 @@ Dynamic: license-file
|
|
|
27
27
|
|
|
28
28
|
# Synth AI SDK
|
|
29
29
|
|
|
30
|
-
<!-- CI release pins: PyPI-0.18.
|
|
30
|
+
<!-- CI release pins: PyPI-0.18.2-orange synth-ai==0.18.2 -->
|
|
31
31
|
|
|
32
32
|
[](https://pypi.org/project/synth-ai/)
|
|
33
33
|
[](https://pypi.org/project/synth-ai/)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Synth AI SDK
|
|
2
2
|
|
|
3
|
-
<!-- CI release pins: PyPI-0.18.
|
|
3
|
+
<!-- CI release pins: PyPI-0.18.2-orange synth-ai==0.18.2 -->
|
|
4
4
|
|
|
5
5
|
[](https://pypi.org/project/synth-ai/)
|
|
6
6
|
[](https://pypi.org/project/synth-ai/)
|
|
@@ -34,10 +34,12 @@ class SynthClient:
|
|
|
34
34
|
api_key: str | None = None,
|
|
35
35
|
base_url: str | None = None,
|
|
36
36
|
timeout_seconds: float = 30.0,
|
|
37
|
+
allow_legacy_intern_sessions: bool = False,
|
|
37
38
|
) -> None:
|
|
38
39
|
self.api_key = _resolve_api_key(api_key)
|
|
39
40
|
self.base_url = _resolve_base_url(base_url)
|
|
40
41
|
self.timeout_seconds = timeout_seconds
|
|
42
|
+
self.allow_legacy_intern_sessions = allow_legacy_intern_sessions
|
|
41
43
|
self._research_client: ResearchClient | None = None
|
|
42
44
|
|
|
43
45
|
@property
|
|
@@ -50,6 +52,7 @@ class SynthClient:
|
|
|
50
52
|
api_key=self.api_key,
|
|
51
53
|
base_url=self.base_url,
|
|
52
54
|
timeout_seconds=self.timeout_seconds,
|
|
55
|
+
allow_legacy_intern_sessions=self.allow_legacy_intern_sessions,
|
|
53
56
|
)
|
|
54
57
|
return self._research_client
|
|
55
58
|
|
|
@@ -75,10 +78,12 @@ class AsyncSynthClient:
|
|
|
75
78
|
api_key: str | None = None,
|
|
76
79
|
base_url: str | None = None,
|
|
77
80
|
timeout_seconds: float = 30.0,
|
|
81
|
+
allow_legacy_intern_sessions: bool = False,
|
|
78
82
|
) -> None:
|
|
79
83
|
self.api_key = _resolve_api_key(api_key)
|
|
80
84
|
self.base_url = _resolve_base_url(base_url)
|
|
81
85
|
self.timeout_seconds = timeout_seconds
|
|
86
|
+
self.allow_legacy_intern_sessions = allow_legacy_intern_sessions
|
|
82
87
|
self._async_research_client: AsyncResearchClient | None = None
|
|
83
88
|
|
|
84
89
|
@property
|
|
@@ -91,6 +96,7 @@ class AsyncSynthClient:
|
|
|
91
96
|
api_key=self.api_key,
|
|
92
97
|
base_url=self.base_url,
|
|
93
98
|
timeout_seconds=self.timeout_seconds,
|
|
99
|
+
allow_legacy_intern_sessions=self.allow_legacy_intern_sessions,
|
|
94
100
|
)
|
|
95
101
|
return self._async_research_client
|
|
96
102
|
|
{synth_ai-0.18.2.dev602 → synth_ai-0.18.2.dev605}/synth_ai/mcp/research/tools/research_intern.py
RENAMED
|
@@ -12,7 +12,12 @@ from synth_ai.mcp.research.registry import (
|
|
|
12
12
|
ToolDefinition,
|
|
13
13
|
tool_schema,
|
|
14
14
|
)
|
|
15
|
-
from synth_ai.mcp.research.request_models import
|
|
15
|
+
from synth_ai.mcp.research.request_models import (
|
|
16
|
+
optional_int,
|
|
17
|
+
optional_string,
|
|
18
|
+
require_int,
|
|
19
|
+
require_string,
|
|
20
|
+
)
|
|
16
21
|
from synth_ai.sdk.research.client import Client as ResearchClient
|
|
17
22
|
from synth_ai.sdk.research.contracts.research_intern import (
|
|
18
23
|
InternAsyncCommandKind,
|
|
@@ -35,11 +40,35 @@ from synth_ai.sdk.research.contracts.research_intern import (
|
|
|
35
40
|
ResearchInternTracePublicationRequest,
|
|
36
41
|
ResearchInternTurnRequest,
|
|
37
42
|
)
|
|
38
|
-
from synth_ai.sdk.research.research_intern import
|
|
43
|
+
from synth_ai.sdk.research.research_intern import (
|
|
44
|
+
ResearchInternEventCursor,
|
|
45
|
+
legacy_intern_sessions_enabled,
|
|
46
|
+
)
|
|
39
47
|
|
|
40
48
|
CoreClientFactory = Callable[[JSONDict], ResearchClient]
|
|
41
49
|
_RESEARCH_INTERN_EVENT_SEQUENCE_MAX = 2**31 - 1
|
|
42
50
|
|
|
51
|
+
#: MCP tools that drive the legacy ``/smr/research-intern/sessions`` plane.
|
|
52
|
+
#: They are excluded from registration unless the environment explicitly opts
|
|
53
|
+
#: in via ``SYNTH_ALLOW_LEGACY_INTERN_SESSIONS=1``; QA treats any legacy
|
|
54
|
+
#: ``/sessions`` hit as a hard fail, so the default surface is sync-sessions
|
|
55
|
+
#: only (``intern_sync_*`` / ``intern_async_*``).
|
|
56
|
+
LEGACY_INTERN_SESSION_TOOL_NAMES = frozenset(
|
|
57
|
+
{
|
|
58
|
+
"research_append_research_intern_event",
|
|
59
|
+
"research_close_research_intern_session",
|
|
60
|
+
"research_create_research_intern_session",
|
|
61
|
+
"research_exchange_research_intern_turn",
|
|
62
|
+
"research_get_research_intern_session",
|
|
63
|
+
"research_list_research_intern_events",
|
|
64
|
+
"research_list_research_intern_sessions",
|
|
65
|
+
"research_publish_research_intern_session_trace",
|
|
66
|
+
"research_run_research_intern_turn",
|
|
67
|
+
"research_sync_research_intern_session",
|
|
68
|
+
"research_watch_research_intern_events",
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
|
|
43
72
|
|
|
44
73
|
def _request_payload(args: JSONDict, names: tuple[str, ...]) -> JSONDict:
|
|
45
74
|
return {name: args[name] for name in names if name in args}
|
|
@@ -725,7 +754,7 @@ def build_research_intern_tools(
|
|
|
725
754
|
sync_selector: JSONDict = {
|
|
726
755
|
"sync_session_id": {"type": "string", "minLength": 1},
|
|
727
756
|
}
|
|
728
|
-
|
|
757
|
+
tools = [
|
|
729
758
|
ToolDefinition(
|
|
730
759
|
name="intern_sync_create",
|
|
731
760
|
description="Create or replay one durable operator-present Sync session.",
|
|
@@ -1598,6 +1627,9 @@ def build_research_intern_tools(
|
|
|
1598
1627
|
required_scopes=READ_SCOPES,
|
|
1599
1628
|
),
|
|
1600
1629
|
]
|
|
1630
|
+
if not legacy_intern_sessions_enabled():
|
|
1631
|
+
tools = [tool for tool in tools if tool.name not in LEGACY_INTERN_SESSION_TOOL_NAMES]
|
|
1632
|
+
return tools
|
|
1601
1633
|
|
|
1602
1634
|
|
|
1603
|
-
__all__ = ["build_research_intern_tools"]
|
|
1635
|
+
__all__ = ["LEGACY_INTERN_SESSION_TOOL_NAMES", "build_research_intern_tools"]
|
|
@@ -45,6 +45,7 @@ class Client:
|
|
|
45
45
|
api_key: str | None = None,
|
|
46
46
|
base_url: str | None = None,
|
|
47
47
|
timeout_seconds: float = 30.0,
|
|
48
|
+
allow_legacy_intern_sessions: bool = False,
|
|
48
49
|
) -> None:
|
|
49
50
|
self._credential = resolve_api_credential(api_key)
|
|
50
51
|
self._transport = HttpTransport(
|
|
@@ -53,7 +54,10 @@ class Client:
|
|
|
53
54
|
timeout_seconds=timeout_seconds,
|
|
54
55
|
)
|
|
55
56
|
self.projects = ProjectsAPI(self._transport)
|
|
56
|
-
self.intern = ResearchInternAPI(
|
|
57
|
+
self.intern = ResearchInternAPI(
|
|
58
|
+
self._transport,
|
|
59
|
+
allow_legacy_intern_sessions=allow_legacy_intern_sessions,
|
|
60
|
+
)
|
|
57
61
|
self.swarms = SwarmsAPI(self._transport)
|
|
58
62
|
self.factories = FactoriesAPI(self._transport)
|
|
59
63
|
self.environments = EnvironmentsAPI(self._transport)
|
|
@@ -115,6 +119,7 @@ class AsyncClient:
|
|
|
115
119
|
api_key: str | None = None,
|
|
116
120
|
base_url: str | None = None,
|
|
117
121
|
timeout_seconds: float = 30.0,
|
|
122
|
+
allow_legacy_intern_sessions: bool = False,
|
|
118
123
|
) -> None:
|
|
119
124
|
self._credential = resolve_api_credential(api_key)
|
|
120
125
|
self._transport = AsyncHttpTransport(
|
|
@@ -123,7 +128,10 @@ class AsyncClient:
|
|
|
123
128
|
timeout_seconds=timeout_seconds,
|
|
124
129
|
)
|
|
125
130
|
self.projects = AsyncProjectsAPI(self._transport)
|
|
126
|
-
self.intern = AsyncResearchInternAPI(
|
|
131
|
+
self.intern = AsyncResearchInternAPI(
|
|
132
|
+
self._transport,
|
|
133
|
+
allow_legacy_intern_sessions=allow_legacy_intern_sessions,
|
|
134
|
+
)
|
|
127
135
|
self.swarms = AsyncSwarmsAPI(self._transport)
|
|
128
136
|
self.factories = AsyncFactoriesAPI(self._transport)
|
|
129
137
|
self.environments = AsyncEnvironmentsAPI(self._transport)
|
|
@@ -115,6 +115,7 @@ class Client:
|
|
|
115
115
|
api_key: str,
|
|
116
116
|
base_url: str,
|
|
117
117
|
timeout_seconds: float = 120.0,
|
|
118
|
+
allow_legacy_intern_sessions: bool = False,
|
|
118
119
|
) -> None:
|
|
119
120
|
self.api_key = api_key
|
|
120
121
|
self.base_url = base_url
|
|
@@ -123,6 +124,7 @@ class Client:
|
|
|
123
124
|
api_key=api_key,
|
|
124
125
|
base_url=base_url,
|
|
125
126
|
timeout_seconds=timeout_seconds,
|
|
127
|
+
allow_legacy_intern_sessions=allow_legacy_intern_sessions,
|
|
126
128
|
)
|
|
127
129
|
self._session: ResearchSession | None = None
|
|
128
130
|
self._advanced: ResearchAdvancedAPI | None = None
|
|
@@ -413,6 +413,7 @@ from synth_ai.sdk.research.research_intern import (
|
|
|
413
413
|
AsyncResearchInternReactiveSession,
|
|
414
414
|
AsyncResearchInternSessionsAPI,
|
|
415
415
|
AsyncResearchInternSyncRuntimeAPI,
|
|
416
|
+
LegacyInternSessionsDisabledError,
|
|
416
417
|
ProjectComputerAPI,
|
|
417
418
|
ProjectDataBindingsAPI,
|
|
418
419
|
ResearchInternAcceptanceReceiptsAPI,
|
|
@@ -489,6 +490,7 @@ __all__ = [
|
|
|
489
490
|
"InternSyncSession",
|
|
490
491
|
"InternSyncSessionCreateRequest",
|
|
491
492
|
"InternSyncStatus",
|
|
493
|
+
"LegacyInternSessionsDisabledError",
|
|
492
494
|
"FactoryStorageAuthorityResponse",
|
|
493
495
|
"MAGI_CANONICAL_USER_BY_MODE",
|
|
494
496
|
"MagiActuationStatus",
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import builtins
|
|
7
|
+
import os
|
|
7
8
|
import time
|
|
8
9
|
from collections.abc import AsyncIterator, Iterator
|
|
9
10
|
from dataclasses import dataclass
|
|
@@ -963,15 +964,66 @@ class ResearchInternTurnFailedError(RuntimeError):
|
|
|
963
964
|
self.terminal_event = terminal_event
|
|
964
965
|
|
|
965
966
|
|
|
967
|
+
LEGACY_INTERN_SESSIONS_ENV = "SYNTH_ALLOW_LEGACY_INTERN_SESSIONS"
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
def legacy_intern_sessions_enabled() -> bool:
|
|
971
|
+
"""Whether the environment explicitly opted in to the legacy sessions plane."""
|
|
972
|
+
return str(os.getenv(LEGACY_INTERN_SESSIONS_ENV) or "").strip().lower() in {
|
|
973
|
+
"1",
|
|
974
|
+
"true",
|
|
975
|
+
"yes",
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
class LegacyInternSessionsDisabledError(RuntimeError):
|
|
980
|
+
"""The legacy ``/smr/research-intern/sessions`` plane is disabled by default.
|
|
981
|
+
|
|
982
|
+
QA for the Sync Intern release treats any legacy ``/sessions`` hit as a hard
|
|
983
|
+
fail, so the plane requires an explicit opt-in instead of being callable by
|
|
984
|
+
default. Use the ``/smr/research-intern/sync-sessions`` plane (``intern.sync_``
|
|
985
|
+
on the SDK, ``intern_sync_*`` / ``intern_async_*`` MCP tools) instead.
|
|
986
|
+
"""
|
|
987
|
+
|
|
988
|
+
def __init__(self, operation: str) -> None:
|
|
989
|
+
super().__init__(
|
|
990
|
+
f"Legacy Research Intern sessions operation {operation!r} is disabled. "
|
|
991
|
+
"Use the /smr/research-intern/sync-sessions plane instead "
|
|
992
|
+
"(client.intern.sync_ / client.intern.async_, or the intern_sync_* / "
|
|
993
|
+
"intern_async_* MCP tools). To explicitly opt back in, construct the "
|
|
994
|
+
"client with allow_legacy_intern_sessions=True or set "
|
|
995
|
+
f"{LEGACY_INTERN_SESSIONS_ENV}=1."
|
|
996
|
+
)
|
|
997
|
+
self.operation = operation
|
|
998
|
+
|
|
999
|
+
|
|
966
1000
|
class ResearchInternSessionsAPI:
|
|
967
|
-
"""Durable reactive sessions and their ordered event logs.
|
|
1001
|
+
"""Durable reactive sessions and their ordered event logs.
|
|
1002
|
+
|
|
1003
|
+
Legacy plane: every method requires the explicit
|
|
1004
|
+
``allow_legacy_intern_sessions`` / ``SYNTH_ALLOW_LEGACY_INTERN_SESSIONS``
|
|
1005
|
+
opt-in and raises :class:`LegacyInternSessionsDisabledError` otherwise.
|
|
1006
|
+
"""
|
|
968
1007
|
|
|
969
|
-
def __init__(
|
|
1008
|
+
def __init__(
|
|
1009
|
+
self,
|
|
1010
|
+
transport: HttpTransport,
|
|
1011
|
+
owner: ResearchInternAPI,
|
|
1012
|
+
*,
|
|
1013
|
+
allow_legacy: bool = False,
|
|
1014
|
+
) -> None:
|
|
970
1015
|
self._transport = transport
|
|
971
1016
|
self._owner = owner
|
|
1017
|
+
self._allow_legacy = allow_legacy
|
|
1018
|
+
|
|
1019
|
+
def _require_legacy_enabled(self, operation: str) -> None:
|
|
1020
|
+
if self._allow_legacy or legacy_intern_sessions_enabled():
|
|
1021
|
+
return
|
|
1022
|
+
raise LegacyInternSessionsDisabledError(operation)
|
|
972
1023
|
|
|
973
1024
|
def create(self, request: ResearchInternSessionCreateRequest) -> ResearchInternSessionResponse:
|
|
974
1025
|
"""Create or replay one durable Intern session."""
|
|
1026
|
+
self._require_legacy_enabled("create")
|
|
975
1027
|
session = ResearchInternSessionResponse.from_wire(
|
|
976
1028
|
self._transport.execute(
|
|
977
1029
|
_request(
|
|
@@ -993,6 +1045,7 @@ class ResearchInternSessionsAPI:
|
|
|
993
1045
|
|
|
994
1046
|
def list(self, *, limit: int = 100) -> tuple[ResearchInternSessionResponse, ...]:
|
|
995
1047
|
"""List a bounded page of Intern sessions."""
|
|
1048
|
+
self._require_legacy_enabled("list")
|
|
996
1049
|
return _sessions(
|
|
997
1050
|
self._transport.execute(
|
|
998
1051
|
_request(
|
|
@@ -1005,6 +1058,7 @@ class ResearchInternSessionsAPI:
|
|
|
1005
1058
|
|
|
1006
1059
|
def retrieve(self, session_id: str) -> ResearchInternSessionResponse:
|
|
1007
1060
|
"""Retrieve one Intern session by stable identity."""
|
|
1061
|
+
self._require_legacy_enabled("retrieve")
|
|
1008
1062
|
session = ResearchInternSessionResponse.from_wire(
|
|
1009
1063
|
self._transport.execute(
|
|
1010
1064
|
_request(
|
|
@@ -1023,6 +1077,7 @@ class ResearchInternSessionsAPI:
|
|
|
1023
1077
|
request: ResearchInternEventAppendRequest,
|
|
1024
1078
|
) -> ResearchInternEventResponse:
|
|
1025
1079
|
"""Append one optimistic-concurrency-fenced event."""
|
|
1080
|
+
self._require_legacy_enabled("append_event")
|
|
1026
1081
|
event = ResearchInternEventResponse.from_wire(
|
|
1027
1082
|
self._transport.execute(
|
|
1028
1083
|
_request(
|
|
@@ -1049,6 +1104,7 @@ class ResearchInternSessionsAPI:
|
|
|
1049
1104
|
limit: int = 100,
|
|
1050
1105
|
) -> tuple[ResearchInternEventResponse, ...]:
|
|
1051
1106
|
"""Observe an ordered, bounded page after one reconnect sequence."""
|
|
1107
|
+
self._require_legacy_enabled("list_events")
|
|
1052
1108
|
if (
|
|
1053
1109
|
isinstance(after_sequence, bool)
|
|
1054
1110
|
or not isinstance(after_sequence, int)
|
|
@@ -1096,6 +1152,7 @@ class ResearchInternSessionsAPI:
|
|
|
1096
1152
|
timeout_seconds: float = 30.0,
|
|
1097
1153
|
) -> Iterator[ResearchInternEventStreamPayload]:
|
|
1098
1154
|
"""Stream typed backend-owned frames from one exact reconnect cursor."""
|
|
1155
|
+
self._require_legacy_enabled("stream_events")
|
|
1099
1156
|
validator = _ResearchInternEventStreamValidator(
|
|
1100
1157
|
session_id,
|
|
1101
1158
|
cursor=cursor,
|
|
@@ -1123,6 +1180,7 @@ class ResearchInternSessionsAPI:
|
|
|
1123
1180
|
timeout_seconds: float = 30.0,
|
|
1124
1181
|
) -> ResearchInternEventStreamObservation:
|
|
1125
1182
|
"""Wait with explicit bounds, reconnecting only from durable SSE cursors."""
|
|
1183
|
+
self._require_legacy_enabled("watch")
|
|
1126
1184
|
_stream_bound(event_count_max, name="event_count_max", maximum=500)
|
|
1127
1185
|
_stream_bound(frame_count_max, name="frame_count_max", maximum=5_000)
|
|
1128
1186
|
_stream_bound(reconnect_count_max, name="reconnect_count_max", maximum=20)
|
|
@@ -1208,6 +1266,7 @@ class ResearchInternSessionsAPI:
|
|
|
1208
1266
|
limit: int = 200,
|
|
1209
1267
|
) -> ResearchInternSessionSyncResponse:
|
|
1210
1268
|
"""Project a bounded page of canonical runtime transcript events."""
|
|
1269
|
+
self._require_legacy_enabled("sync")
|
|
1211
1270
|
response = ResearchInternSessionSyncResponse.from_wire(
|
|
1212
1271
|
self._transport.execute(
|
|
1213
1272
|
_request(
|
|
@@ -1232,6 +1291,7 @@ class ResearchInternSessionsAPI:
|
|
|
1232
1291
|
request: ResearchInternTurnRequest,
|
|
1233
1292
|
) -> ResearchInternTurnResponse:
|
|
1234
1293
|
"""Submit one canonical real-runtime operator turn."""
|
|
1294
|
+
self._require_legacy_enabled("turn")
|
|
1235
1295
|
response = ResearchInternTurnResponse.from_wire(
|
|
1236
1296
|
self._transport.execute(
|
|
1237
1297
|
_request(
|
|
@@ -1258,6 +1318,7 @@ class ResearchInternSessionsAPI:
|
|
|
1258
1318
|
request: ResearchInternSessionCloseRequest,
|
|
1259
1319
|
) -> ResearchInternSessionResponse:
|
|
1260
1320
|
"""Close one exact session generation and retain its event history."""
|
|
1321
|
+
self._require_legacy_enabled("close")
|
|
1261
1322
|
session = ResearchInternSessionResponse.from_wire(
|
|
1262
1323
|
self._transport.execute(
|
|
1263
1324
|
_request(
|
|
@@ -1280,6 +1341,7 @@ class ResearchInternSessionsAPI:
|
|
|
1280
1341
|
request: ResearchInternTracePublicationRequest,
|
|
1281
1342
|
) -> ResearchInternTracePublicationResponse:
|
|
1282
1343
|
"""Publish the terminal event chain through backend Trace V5 authority."""
|
|
1344
|
+
self._require_legacy_enabled("publish_trace")
|
|
1283
1345
|
response = ResearchInternTracePublicationResponse.from_wire(
|
|
1284
1346
|
self._transport.execute(
|
|
1285
1347
|
_request(
|
|
@@ -1302,6 +1364,7 @@ class ResearchInternSessionsAPI:
|
|
|
1302
1364
|
request: ResearchInternSessionCreateRequest,
|
|
1303
1365
|
) -> ResearchInternReactiveSession:
|
|
1304
1366
|
"""Create a reconnectable reactive view over one backend session."""
|
|
1367
|
+
self._require_legacy_enabled("create_reactive")
|
|
1305
1368
|
session = self.create(request)
|
|
1306
1369
|
return ResearchInternReactiveSession(
|
|
1307
1370
|
self._owner,
|
|
@@ -1316,6 +1379,7 @@ class ResearchInternSessionsAPI:
|
|
|
1316
1379
|
cursor: ResearchInternEventCursor | None = None,
|
|
1317
1380
|
) -> ResearchInternReactiveSession:
|
|
1318
1381
|
"""Reconnect to a session from an exact previously returned cursor."""
|
|
1382
|
+
self._require_legacy_enabled("connect")
|
|
1319
1383
|
session = self.retrieve(session_id)
|
|
1320
1384
|
reconnect_cursor = cursor or ResearchInternEventCursor(session_id=session_id)
|
|
1321
1385
|
if reconnect_cursor.session_id != session_id:
|
|
@@ -2549,13 +2613,22 @@ class ResearchInternAsyncRuntimeAPI:
|
|
|
2549
2613
|
class ResearchInternAPI:
|
|
2550
2614
|
"""One durable organization Intern and its many Factory memberships."""
|
|
2551
2615
|
|
|
2552
|
-
def __init__(
|
|
2616
|
+
def __init__(
|
|
2617
|
+
self,
|
|
2618
|
+
transport: HttpTransport,
|
|
2619
|
+
*,
|
|
2620
|
+
allow_legacy_intern_sessions: bool = False,
|
|
2621
|
+
) -> None:
|
|
2553
2622
|
self._transport = transport
|
|
2554
2623
|
self.sync_ = ResearchInternSyncRuntimeAPI(transport)
|
|
2555
2624
|
self.async_ = ResearchInternAsyncRuntimeAPI(transport)
|
|
2556
2625
|
self.factories = ResearchInternFactoriesAPI(transport)
|
|
2557
2626
|
self.decisions = ResearchInternDecisionsAPI(transport)
|
|
2558
|
-
self.sessions = ResearchInternSessionsAPI(
|
|
2627
|
+
self.sessions = ResearchInternSessionsAPI(
|
|
2628
|
+
transport,
|
|
2629
|
+
self,
|
|
2630
|
+
allow_legacy=allow_legacy_intern_sessions,
|
|
2631
|
+
)
|
|
2559
2632
|
self.acceptance_receipts = ResearchInternAcceptanceReceiptsAPI(transport)
|
|
2560
2633
|
|
|
2561
2634
|
def provision(
|
|
@@ -3325,21 +3398,35 @@ class AsyncResearchInternDecisionsAPI:
|
|
|
3325
3398
|
|
|
3326
3399
|
|
|
3327
3400
|
class AsyncResearchInternSessionsAPI:
|
|
3328
|
-
"""Native asynchronous Intern session and event-log operations.
|
|
3401
|
+
"""Native asynchronous Intern session and event-log operations.
|
|
3402
|
+
|
|
3403
|
+
Legacy plane: every method requires the explicit
|
|
3404
|
+
``allow_legacy_intern_sessions`` / ``SYNTH_ALLOW_LEGACY_INTERN_SESSIONS``
|
|
3405
|
+
opt-in and raises :class:`LegacyInternSessionsDisabledError` otherwise.
|
|
3406
|
+
"""
|
|
3329
3407
|
|
|
3330
3408
|
def __init__(
|
|
3331
3409
|
self,
|
|
3332
3410
|
transport: AsyncHttpTransport,
|
|
3333
3411
|
owner: AsyncResearchInternAPI,
|
|
3412
|
+
*,
|
|
3413
|
+
allow_legacy: bool = False,
|
|
3334
3414
|
) -> None:
|
|
3335
3415
|
self._transport = transport
|
|
3336
3416
|
self._owner = owner
|
|
3417
|
+
self._allow_legacy = allow_legacy
|
|
3418
|
+
|
|
3419
|
+
def _require_legacy_enabled(self, operation: str) -> None:
|
|
3420
|
+
if self._allow_legacy or legacy_intern_sessions_enabled():
|
|
3421
|
+
return
|
|
3422
|
+
raise LegacyInternSessionsDisabledError(operation)
|
|
3337
3423
|
|
|
3338
3424
|
async def create(
|
|
3339
3425
|
self,
|
|
3340
3426
|
request: ResearchInternSessionCreateRequest,
|
|
3341
3427
|
) -> ResearchInternSessionResponse:
|
|
3342
3428
|
"""Create or replay one durable Intern session."""
|
|
3429
|
+
self._require_legacy_enabled("create")
|
|
3343
3430
|
session = ResearchInternSessionResponse.from_wire(
|
|
3344
3431
|
await self._transport.execute(
|
|
3345
3432
|
_request(
|
|
@@ -3361,6 +3448,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3361
3448
|
|
|
3362
3449
|
async def list(self, *, limit: int = 100) -> tuple[ResearchInternSessionResponse, ...]:
|
|
3363
3450
|
"""List a bounded page of Intern sessions."""
|
|
3451
|
+
self._require_legacy_enabled("list")
|
|
3364
3452
|
return _sessions(
|
|
3365
3453
|
await self._transport.execute(
|
|
3366
3454
|
_request(
|
|
@@ -3373,6 +3461,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3373
3461
|
|
|
3374
3462
|
async def retrieve(self, session_id: str) -> ResearchInternSessionResponse:
|
|
3375
3463
|
"""Retrieve one Intern session by stable identity."""
|
|
3464
|
+
self._require_legacy_enabled("retrieve")
|
|
3376
3465
|
session = ResearchInternSessionResponse.from_wire(
|
|
3377
3466
|
await self._transport.execute(
|
|
3378
3467
|
_request(
|
|
@@ -3391,6 +3480,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3391
3480
|
request: ResearchInternEventAppendRequest,
|
|
3392
3481
|
) -> ResearchInternEventResponse:
|
|
3393
3482
|
"""Append one optimistic-concurrency-fenced event."""
|
|
3483
|
+
self._require_legacy_enabled("append_event")
|
|
3394
3484
|
event = ResearchInternEventResponse.from_wire(
|
|
3395
3485
|
await self._transport.execute(
|
|
3396
3486
|
_request(
|
|
@@ -3417,6 +3507,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3417
3507
|
limit: int = 100,
|
|
3418
3508
|
) -> tuple[ResearchInternEventResponse, ...]:
|
|
3419
3509
|
"""Observe an ordered, bounded page after one reconnect sequence."""
|
|
3510
|
+
self._require_legacy_enabled("list_events")
|
|
3420
3511
|
if (
|
|
3421
3512
|
isinstance(after_sequence, bool)
|
|
3422
3513
|
or not isinstance(after_sequence, int)
|
|
@@ -3464,6 +3555,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3464
3555
|
timeout_seconds: float = 30.0,
|
|
3465
3556
|
) -> AsyncIterator[ResearchInternEventStreamPayload]:
|
|
3466
3557
|
"""Stream typed backend-owned frames from one exact reconnect cursor."""
|
|
3558
|
+
self._require_legacy_enabled("stream_events")
|
|
3467
3559
|
validator = _ResearchInternEventStreamValidator(
|
|
3468
3560
|
session_id,
|
|
3469
3561
|
cursor=cursor,
|
|
@@ -3491,6 +3583,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3491
3583
|
timeout_seconds: float = 30.0,
|
|
3492
3584
|
) -> ResearchInternEventStreamObservation:
|
|
3493
3585
|
"""Wait with explicit bounds, reconnecting only from durable SSE cursors."""
|
|
3586
|
+
self._require_legacy_enabled("watch")
|
|
3494
3587
|
_stream_bound(event_count_max, name="event_count_max", maximum=500)
|
|
3495
3588
|
_stream_bound(frame_count_max, name="frame_count_max", maximum=5_000)
|
|
3496
3589
|
_stream_bound(reconnect_count_max, name="reconnect_count_max", maximum=20)
|
|
@@ -3580,6 +3673,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3580
3673
|
limit: int = 200,
|
|
3581
3674
|
) -> ResearchInternSessionSyncResponse:
|
|
3582
3675
|
"""Project a bounded page of canonical runtime transcript events."""
|
|
3676
|
+
self._require_legacy_enabled("sync")
|
|
3583
3677
|
response = ResearchInternSessionSyncResponse.from_wire(
|
|
3584
3678
|
await self._transport.execute(
|
|
3585
3679
|
_request(
|
|
@@ -3604,6 +3698,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3604
3698
|
request: ResearchInternTurnRequest,
|
|
3605
3699
|
) -> ResearchInternTurnResponse:
|
|
3606
3700
|
"""Submit one canonical real-runtime operator turn."""
|
|
3701
|
+
self._require_legacy_enabled("turn")
|
|
3607
3702
|
response = ResearchInternTurnResponse.from_wire(
|
|
3608
3703
|
await self._transport.execute(
|
|
3609
3704
|
_request(
|
|
@@ -3630,6 +3725,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3630
3725
|
request: ResearchInternSessionCloseRequest,
|
|
3631
3726
|
) -> ResearchInternSessionResponse:
|
|
3632
3727
|
"""Close one exact session generation and retain its event history."""
|
|
3728
|
+
self._require_legacy_enabled("close")
|
|
3633
3729
|
session = ResearchInternSessionResponse.from_wire(
|
|
3634
3730
|
await self._transport.execute(
|
|
3635
3731
|
_request(
|
|
@@ -3652,6 +3748,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3652
3748
|
request: ResearchInternTracePublicationRequest,
|
|
3653
3749
|
) -> ResearchInternTracePublicationResponse:
|
|
3654
3750
|
"""Publish the terminal event chain through backend Trace V5 authority."""
|
|
3751
|
+
self._require_legacy_enabled("publish_trace")
|
|
3655
3752
|
response = ResearchInternTracePublicationResponse.from_wire(
|
|
3656
3753
|
await self._transport.execute(
|
|
3657
3754
|
_request(
|
|
@@ -3674,6 +3771,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3674
3771
|
request: ResearchInternSessionCreateRequest,
|
|
3675
3772
|
) -> AsyncResearchInternReactiveSession:
|
|
3676
3773
|
"""Create an asynchronously reconnectable view over one backend session."""
|
|
3774
|
+
self._require_legacy_enabled("create_reactive")
|
|
3677
3775
|
session = await self.create(request)
|
|
3678
3776
|
return AsyncResearchInternReactiveSession(
|
|
3679
3777
|
self._owner,
|
|
@@ -3688,6 +3786,7 @@ class AsyncResearchInternSessionsAPI:
|
|
|
3688
3786
|
cursor: ResearchInternEventCursor | None = None,
|
|
3689
3787
|
) -> AsyncResearchInternReactiveSession:
|
|
3690
3788
|
"""Reconnect asynchronously from one exact previously returned cursor."""
|
|
3789
|
+
self._require_legacy_enabled("connect")
|
|
3691
3790
|
session = await self.retrieve(session_id)
|
|
3692
3791
|
reconnect_cursor = cursor or ResearchInternEventCursor(session_id=session_id)
|
|
3693
3792
|
if reconnect_cursor.session_id != session_id:
|
|
@@ -4314,13 +4413,22 @@ class AsyncResearchInternAsyncRuntimeAPI:
|
|
|
4314
4413
|
class AsyncResearchInternAPI:
|
|
4315
4414
|
"""Native asynchronous organization Research Intern operations."""
|
|
4316
4415
|
|
|
4317
|
-
def __init__(
|
|
4416
|
+
def __init__(
|
|
4417
|
+
self,
|
|
4418
|
+
transport: AsyncHttpTransport,
|
|
4419
|
+
*,
|
|
4420
|
+
allow_legacy_intern_sessions: bool = False,
|
|
4421
|
+
) -> None:
|
|
4318
4422
|
self._transport = transport
|
|
4319
4423
|
self.sync_ = AsyncResearchInternSyncRuntimeAPI(transport)
|
|
4320
4424
|
self.async_ = AsyncResearchInternAsyncRuntimeAPI(transport)
|
|
4321
4425
|
self.factories = AsyncResearchInternFactoriesAPI(transport)
|
|
4322
4426
|
self.decisions = AsyncResearchInternDecisionsAPI(transport)
|
|
4323
|
-
self.sessions = AsyncResearchInternSessionsAPI(
|
|
4427
|
+
self.sessions = AsyncResearchInternSessionsAPI(
|
|
4428
|
+
transport,
|
|
4429
|
+
self,
|
|
4430
|
+
allow_legacy=allow_legacy_intern_sessions,
|
|
4431
|
+
)
|
|
4324
4432
|
self.acceptance_receipts = AsyncResearchInternAcceptanceReceiptsAPI(transport)
|
|
4325
4433
|
|
|
4326
4434
|
async def provision(
|
|
@@ -5253,6 +5361,8 @@ __all__ = [
|
|
|
5253
5361
|
"AsyncResearchInternFactoriesAPI",
|
|
5254
5362
|
"AsyncResearchInternReactiveSession",
|
|
5255
5363
|
"AsyncResearchInternSessionsAPI",
|
|
5364
|
+
"LEGACY_INTERN_SESSIONS_ENV",
|
|
5365
|
+
"LegacyInternSessionsDisabledError",
|
|
5256
5366
|
"ProjectComputerAPI",
|
|
5257
5367
|
"ProjectDataBindingsAPI",
|
|
5258
5368
|
"ResearchInternAcceptanceReceiptsAPI",
|
|
@@ -5269,4 +5379,5 @@ __all__ = [
|
|
|
5269
5379
|
"ResearchInternReactiveSession",
|
|
5270
5380
|
"ResearchInternSessionsAPI",
|
|
5271
5381
|
"ResearchInternTurnFailedError",
|
|
5382
|
+
"legacy_intern_sessions_enabled",
|
|
5272
5383
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synth-ai
|
|
3
|
-
Version: 0.18.2.
|
|
3
|
+
Version: 0.18.2.dev605
|
|
4
4
|
Summary: Python SDK and CLI for Synth Managed Research and Research Factory
|
|
5
5
|
Author-email: Synth AI <josh@usesynth.ai>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -27,7 +27,7 @@ Dynamic: license-file
|
|
|
27
27
|
|
|
28
28
|
# Synth AI SDK
|
|
29
29
|
|
|
30
|
-
<!-- CI release pins: PyPI-0.18.
|
|
30
|
+
<!-- CI release pins: PyPI-0.18.2-orange synth-ai==0.18.2 -->
|
|
31
31
|
|
|
32
32
|
[](https://pypi.org/project/synth-ai/)
|
|
33
33
|
[](https://pypi.org/project/synth-ai/)
|
|
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
|