gatewaysdk 0.3.2__py3-none-any.whl
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.
- gatewaysdk/__init__.py +540 -0
- gatewaysdk/adapter/__init__.py +15 -0
- gatewaysdk/adapter/base.py +94 -0
- gatewaysdk/adapter/messages.py +270 -0
- gatewaysdk/adapter/triplet.py +1026 -0
- gatewaysdk/algorithm/__init__.py +39 -0
- gatewaysdk/algorithm/apo/__init__.py +5 -0
- gatewaysdk/algorithm/apo/apo.py +898 -0
- gatewaysdk/algorithm/apo/prompts/apply_edit_variant01.poml +22 -0
- gatewaysdk/algorithm/apo/prompts/apply_edit_variant02.poml +18 -0
- gatewaysdk/algorithm/apo/prompts/text_gradient_variant01.poml +18 -0
- gatewaysdk/algorithm/apo/prompts/text_gradient_variant02.poml +16 -0
- gatewaysdk/algorithm/apo/prompts/text_gradient_variant03.poml +107 -0
- gatewaysdk/algorithm/base.py +262 -0
- gatewaysdk/algorithm/decorator.py +264 -0
- gatewaysdk/algorithm/evals/__init__.py +7 -0
- gatewaysdk/algorithm/evals/evals.py +217 -0
- gatewaysdk/algorithm/fast.py +250 -0
- gatewaysdk/algorithm/gepa/__init__.py +61 -0
- gatewaysdk/algorithm/gepa/adapter.py +495 -0
- gatewaysdk/algorithm/gepa/gepa.py +570 -0
- gatewaysdk/algorithm/gepa/lib/__init__.py +18 -0
- gatewaysdk/algorithm/gepa/lib/adapters/README.md +12 -0
- gatewaysdk/algorithm/gepa/lib/adapters/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/README.md +341 -0
- gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/__init__.py +1 -0
- gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/anymaths_adapter.py +174 -0
- gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/requirements.txt +1 -0
- gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/README.md +0 -0
- gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/default_adapter.py +209 -0
- gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/README.md +7 -0
- gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/dspy_adapter.py +307 -0
- gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/README.md +99 -0
- gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/dspy_program_proposal_signature.py +137 -0
- gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/full_program_adapter.py +268 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/GEPA_RAG.md +621 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/__init__.py +56 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/evaluation_metrics.py +226 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/generic_rag_adapter.py +496 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/rag_pipeline.py +238 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_store_interface.py +212 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/__init__.py +2 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/chroma_store.py +196 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/lancedb_store.py +422 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/milvus_store.py +409 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/qdrant_store.py +368 -0
- gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/weaviate_store.py +418 -0
- gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/README.md +552 -0
- gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/__init__.py +37 -0
- gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/mcp_adapter.py +699 -0
- gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/mcp_client.py +364 -0
- gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/README.md +9 -0
- gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/terminal_bench_adapter.py +217 -0
- gatewaysdk/algorithm/gepa/lib/api.py +382 -0
- gatewaysdk/algorithm/gepa/lib/core/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/core/adapter.py +180 -0
- gatewaysdk/algorithm/gepa/lib/core/data_loader.py +74 -0
- gatewaysdk/algorithm/gepa/lib/core/engine.py +379 -0
- gatewaysdk/algorithm/gepa/lib/core/result.py +233 -0
- gatewaysdk/algorithm/gepa/lib/core/state.py +636 -0
- gatewaysdk/algorithm/gepa/lib/examples/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/examples/aime.py +24 -0
- gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/eval_default.py +111 -0
- gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/prompt-templates/instruction_prompt.txt +9 -0
- gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/prompt-templates/optimal_prompt.txt +24 -0
- gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/train_anymaths.py +177 -0
- gatewaysdk/algorithm/gepa/lib/examples/dspy_full_program_evolution/arc_agi.ipynb +25705 -0
- gatewaysdk/algorithm/gepa/lib/examples/dspy_full_program_evolution/example.ipynb +348 -0
- gatewaysdk/algorithm/gepa/lib/examples/mcp_adapter/__init__.py +4 -0
- gatewaysdk/algorithm/gepa/lib/examples/mcp_adapter/mcp_optimization_example.py +456 -0
- gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/RAG_GUIDE.md +613 -0
- gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/__init__.py +9 -0
- gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/rag_optimization.py +820 -0
- gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/requirements-rag.txt +29 -0
- gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/prompt-templates/instruction_prompt.txt +16 -0
- gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/prompt-templates/terminus.txt +9 -0
- gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/train_terminus.py +161 -0
- gatewaysdk/algorithm/gepa/lib/gepa_utils.py +117 -0
- gatewaysdk/algorithm/gepa/lib/logging/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/logging/experiment_tracker.py +187 -0
- gatewaysdk/algorithm/gepa/lib/logging/logger.py +75 -0
- gatewaysdk/algorithm/gepa/lib/logging/utils.py +103 -0
- gatewaysdk/algorithm/gepa/lib/proposer/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/proposer/base.py +31 -0
- gatewaysdk/algorithm/gepa/lib/proposer/merge.py +357 -0
- gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/base.py +49 -0
- gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/reflective_mutation.py +176 -0
- gatewaysdk/algorithm/gepa/lib/py.typed +0 -0
- gatewaysdk/algorithm/gepa/lib/strategies/__init__.py +0 -0
- gatewaysdk/algorithm/gepa/lib/strategies/batch_sampler.py +77 -0
- gatewaysdk/algorithm/gepa/lib/strategies/candidate_selector.py +50 -0
- gatewaysdk/algorithm/gepa/lib/strategies/component_selector.py +36 -0
- gatewaysdk/algorithm/gepa/lib/strategies/eval_policy.py +64 -0
- gatewaysdk/algorithm/gepa/lib/strategies/instruction_proposal.py +126 -0
- gatewaysdk/algorithm/gepa/lib/utils/__init__.py +10 -0
- gatewaysdk/algorithm/gepa/lib/utils/stop_condition.py +196 -0
- gatewaysdk/algorithm/gepa/tracing.py +105 -0
- gatewaysdk/algorithm/utils.py +177 -0
- gatewaysdk/algorithm/verl/__init__.py +5 -0
- gatewaysdk/algorithm/verl/interface.py +202 -0
- gatewaysdk/automations.py +111 -0
- gatewaysdk/benchmark_hub/README.md +88 -0
- gatewaysdk/benchmark_hub/__init__.py +119 -0
- gatewaysdk/benchmark_hub/_archive.py +189 -0
- gatewaysdk/benchmark_hub/_tar.py +6 -0
- gatewaysdk/benchmark_hub/client.py +992 -0
- gatewaysdk/benchmark_hub/dispatch_shard.py +34 -0
- gatewaysdk/benchmark_hub/eval_config.py +20 -0
- gatewaysdk/benchmark_hub/evals.py +351 -0
- gatewaysdk/benchmark_hub/harbor_adapter.py +673 -0
- gatewaysdk/benchmark_hub/path_utils.py +81 -0
- gatewaysdk/benchmark_hub/save_utils.py +101 -0
- gatewaysdk/benchmark_hub/verifiers_adapter.py +327 -0
- gatewaysdk/benchmark_hub/versioning.py +72 -0
- gatewaysdk/build.py +515 -0
- gatewaysdk/cli/__init__.py +58 -0
- gatewaysdk/cli/agent_runner.py +132 -0
- gatewaysdk/cli/http_client.py +115 -0
- gatewaysdk/cli/platform.py +4086 -0
- gatewaysdk/cli/prometheus.py +115 -0
- gatewaysdk/cli/release_gate.py +215 -0
- gatewaysdk/cli/store.py +131 -0
- gatewaysdk/cli/vllm.py +29 -0
- gatewaysdk/client.py +406 -0
- gatewaysdk/config.py +348 -0
- gatewaysdk/connectors/__init__.py +25 -0
- gatewaysdk/connectors/client.py +203 -0
- gatewaysdk/connectors/skill.py +25 -0
- gatewaysdk/connectors/template.py +106 -0
- gatewaysdk/context.py +606 -0
- gatewaysdk/emitter/__init__.py +43 -0
- gatewaysdk/emitter/annotation.py +370 -0
- gatewaysdk/emitter/exception.py +54 -0
- gatewaysdk/emitter/message.py +61 -0
- gatewaysdk/emitter/object.py +117 -0
- gatewaysdk/emitter/reward.py +320 -0
- gatewaysdk/env_var.py +156 -0
- gatewaysdk/environment/__init__.py +108 -0
- gatewaysdk/environment/_bundle.py +281 -0
- gatewaysdk/environment/_harbor.py +276 -0
- gatewaysdk/environment/_materialize.py +97 -0
- gatewaysdk/environment/_tar.py +33 -0
- gatewaysdk/environment/_world.py +346 -0
- gatewaysdk/environment/core.py +527 -0
- gatewaysdk/environment/errors.py +58 -0
- gatewaysdk/environment/runtime.py +150 -0
- gatewaysdk/environment/schema/__init__.py +35 -0
- gatewaysdk/environment/schema/__main__.py +225 -0
- gatewaysdk/environment/schema/_slack_fidelity.py +116 -0
- gatewaysdk/environment/schema/_slack_scenario.py +183 -0
- gatewaysdk/environment/schema/api.py +1628 -0
- gatewaysdk/environment/schema/batch.py +755 -0
- gatewaysdk/environment/schema/compiler.py +615 -0
- gatewaysdk/environment/schema/conform.py +428 -0
- gatewaysdk/environment/schema/connector.py +777 -0
- gatewaysdk/environment/schema/connectors/apple-business-manager/handlers.py +17 -0
- gatewaysdk/environment/schema/connectors/apple-business-manager/parity.json +28 -0
- gatewaysdk/environment/schema/connectors/apple-business-manager/provenance.json +233 -0
- gatewaysdk/environment/schema/connectors/apple-business-manager/scope.toml +112 -0
- gatewaysdk/environment/schema/connectors/apple-business-manager/world.json +1380 -0
- gatewaysdk/environment/schema/connectors/base.json +28 -0
- gatewaysdk/environment/schema/connectors/custom/handlers.py +18 -0
- gatewaysdk/environment/schema/connectors/custom/world.json +123 -0
- gatewaysdk/environment/schema/connectors/github/handlers.py +81 -0
- gatewaysdk/environment/schema/connectors/github/parity.json +37 -0
- gatewaysdk/environment/schema/connectors/github/provenance.json +134 -0
- gatewaysdk/environment/schema/connectors/github/scope.toml +158 -0
- gatewaysdk/environment/schema/connectors/github/world.json +5869 -0
- gatewaysdk/environment/schema/connectors/google-calendar/handlers.py +23 -0
- gatewaysdk/environment/schema/connectors/google-calendar/world.json +209 -0
- gatewaysdk/environment/schema/connectors/google-drive/handlers.py +18 -0
- gatewaysdk/environment/schema/connectors/google-drive/world.json +286 -0
- gatewaysdk/environment/schema/connectors/jamf/handlers.py +34 -0
- gatewaysdk/environment/schema/connectors/jamf/parity.json +49 -0
- gatewaysdk/environment/schema/connectors/jamf/provenance.json +181 -0
- gatewaysdk/environment/schema/connectors/jamf/scope.toml +128 -0
- gatewaysdk/environment/schema/connectors/jamf/world.json +2218 -0
- gatewaysdk/environment/schema/connectors/jira/handlers.py +28 -0
- gatewaysdk/environment/schema/connectors/jira/world.json +389 -0
- gatewaysdk/environment/schema/connectors/kandji/handlers.py +38 -0
- gatewaysdk/environment/schema/connectors/kandji/parity.json +29 -0
- gatewaysdk/environment/schema/connectors/kandji/provenance.json +152 -0
- gatewaysdk/environment/schema/connectors/kandji/scope.toml +120 -0
- gatewaysdk/environment/schema/connectors/kandji/world.json +765 -0
- gatewaysdk/environment/schema/connectors/linear/handlers.py +20 -0
- gatewaysdk/environment/schema/connectors/linear/world.json +363 -0
- gatewaysdk/environment/schema/connectors/microsoft-teams/fidelity.json +45 -0
- gatewaysdk/environment/schema/connectors/microsoft-teams/handlers.py +1 -0
- gatewaysdk/environment/schema/connectors/microsoft-teams/provenance.json +851 -0
- gatewaysdk/environment/schema/connectors/microsoft-teams/scope.md +231 -0
- gatewaysdk/environment/schema/connectors/microsoft-teams/teams-types.json +1710 -0
- gatewaysdk/environment/schema/connectors/microsoft-teams/world.json +858 -0
- gatewaysdk/environment/schema/connectors/netsuite/handlers.py +32 -0
- gatewaysdk/environment/schema/connectors/netsuite/parity.json +50 -0
- gatewaysdk/environment/schema/connectors/netsuite/provenance.json +137 -0
- gatewaysdk/environment/schema/connectors/netsuite/scope.toml +78 -0
- gatewaysdk/environment/schema/connectors/netsuite/world.json +16243 -0
- gatewaysdk/environment/schema/connectors/salesforce/handlers.py +806 -0
- gatewaysdk/environment/schema/connectors/salesforce/parity.json +46 -0
- gatewaysdk/environment/schema/connectors/salesforce/provenance.json +143 -0
- gatewaysdk/environment/schema/connectors/salesforce/scope.toml +174 -0
- gatewaysdk/environment/schema/connectors/salesforce/world.json +4695 -0
- gatewaysdk/environment/schema/connectors/slack/MODEL.md +236 -0
- gatewaysdk/environment/schema/connectors/slack/capabilities.json +1039 -0
- gatewaysdk/environment/schema/connectors/slack/handlers.py +762 -0
- gatewaysdk/environment/schema/connectors/slack/parity.json +65 -0
- gatewaysdk/environment/schema/connectors/slack/provenance.json +294 -0
- gatewaysdk/environment/schema/connectors/slack/scope.toml +44 -0
- gatewaysdk/environment/schema/connectors/slack/world.json +4993 -0
- gatewaysdk/environment/schema/connectors/workday/handlers.py +75 -0
- gatewaysdk/environment/schema/connectors/workday/parity.json +36 -0
- gatewaysdk/environment/schema/connectors/workday/provenance.json +179 -0
- gatewaysdk/environment/schema/connectors/workday/scope.toml +180 -0
- gatewaysdk/environment/schema/connectors/workday/world.json +806 -0
- gatewaysdk/environment/schema/data.py +593 -0
- gatewaysdk/environment/schema/extract.py +263 -0
- gatewaysdk/environment/schema/host.py +2437 -0
- gatewaysdk/environment/schema/host_surfaces.py +275 -0
- gatewaysdk/environment/schema/platform.py +1272 -0
- gatewaysdk/environment/schema/scaffold.py +250 -0
- gatewaysdk/environment/schema/skill.py +118 -0
- gatewaysdk/environment/schema/skills/agents/connector-template-author.md +202 -0
- gatewaysdk/environment/schema/skills/connector-schema-authoring/CONNECTORS.md +331 -0
- gatewaysdk/environment/schema/skills/connector-schema-authoring/CONVENTIONS.md +100 -0
- gatewaysdk/environment/schema/skills/connector-schema-authoring/SKILL.md +313 -0
- gatewaysdk/environment/schema/skills/world-data-ingestion/ROWS.md +223 -0
- gatewaysdk/environment/schema/skills/world-data-ingestion/SKILL.md +293 -0
- gatewaysdk/environment/schema/skills/worlds-getting-started/SKILL.md +390 -0
- gatewaysdk/environment/schema/slack.py +757 -0
- gatewaysdk/environment/schema/snapshot.py +479 -0
- gatewaysdk/environment/schema/store.py +904 -0
- gatewaysdk/environment/schema/tasks.py +525 -0
- gatewaysdk/environment/schema/tools_world.py +322 -0
- gatewaysdk/environment/schema/validation.py +577 -0
- gatewaysdk/environment/schema/worker.py +78 -0
- gatewaysdk/environment/schema/workers.py +500 -0
- gatewaysdk/environment/schema/world_tests.py +336 -0
- gatewaysdk/environments/__init__.py +24 -0
- gatewaysdk/environments/client.py +486 -0
- gatewaysdk/environments/types.py +318 -0
- gatewaysdk/execution/__init__.py +15 -0
- gatewaysdk/execution/base.py +64 -0
- gatewaysdk/execution/client_server.py +443 -0
- gatewaysdk/execution/events.py +69 -0
- gatewaysdk/execution/inter_process.py +16 -0
- gatewaysdk/execution/shared_memory.py +282 -0
- gatewaysdk/experiments/__init__.py +90 -0
- gatewaysdk/experiments/assignment.py +177 -0
- gatewaysdk/experiments/client.py +877 -0
- gatewaysdk/experiments/exposure.py +222 -0
- gatewaysdk/experiments/types.py +81 -0
- gatewaysdk/importers/__init__.py +49 -0
- gatewaysdk/importers/_normalize.py +91 -0
- gatewaysdk/importers/builder.py +173 -0
- gatewaysdk/importers/client.py +95 -0
- gatewaysdk/importers/langsmith.py +196 -0
- gatewaysdk/importers/recipes.py +249 -0
- gatewaysdk/instrumentation/__init__.py +300 -0
- gatewaysdk/instrumentation/agentops.py +314 -0
- gatewaysdk/instrumentation/agentops_langchain.py +45 -0
- gatewaysdk/instrumentation/base.py +119 -0
- gatewaysdk/instrumentation/litellm.py +83 -0
- gatewaysdk/instrumentation/registry.py +273 -0
- gatewaysdk/instrumentation/vllm.py +81 -0
- gatewaysdk/instrumentation/weave.py +500 -0
- gatewaysdk/integrations/__init__.py +15 -0
- gatewaysdk/integrations/gateway/__init__.py +11 -0
- gatewaysdk/integrations/gateway/client.py +171 -0
- gatewaysdk/integrations/tool_access.py +549 -0
- gatewaysdk/litagent/__init__.py +11 -0
- gatewaysdk/litagent/decorator.py +536 -0
- gatewaysdk/litagent/litagent.py +252 -0
- gatewaysdk/llm_proxy.py +1742 -0
- gatewaysdk/logging.py +370 -0
- gatewaysdk/memory.py +278 -0
- gatewaysdk/personas.py +186 -0
- gatewaysdk/platform/__init__.py +17 -0
- gatewaysdk/platform/builder.py +221 -0
- gatewaysdk/platform/compatibility.py +67 -0
- gatewaysdk/platform/manifest.py +185 -0
- gatewaysdk/platform/orchestrator.py +901 -0
- gatewaysdk/platform/registry.py +122 -0
- gatewaysdk/platform/worker.py +864 -0
- gatewaysdk/replay/__init__.py +1032 -0
- gatewaysdk/replay/pytest.py +56 -0
- gatewaysdk/reward.py +7 -0
- gatewaysdk/run.py +1781 -0
- gatewaysdk/runner/__init__.py +11 -0
- gatewaysdk/runner/agent.py +878 -0
- gatewaysdk/runner/base.py +182 -0
- gatewaysdk/runner/legacy.py +309 -0
- gatewaysdk/security.py +700 -0
- gatewaysdk/semconv.py +170 -0
- gatewaysdk/server.py +399 -0
- gatewaysdk/sessions.py +282 -0
- gatewaysdk/store/__init__.py +45 -0
- gatewaysdk/store/base.py +908 -0
- gatewaysdk/store/client_server.py +2093 -0
- gatewaysdk/store/collection/__init__.py +30 -0
- gatewaysdk/store/collection/base.py +587 -0
- gatewaysdk/store/collection/memory.py +970 -0
- gatewaysdk/store/collection/mongo.py +1412 -0
- gatewaysdk/store/collection_based.py +1823 -0
- gatewaysdk/store/gateway.py +983 -0
- gatewaysdk/store/gateway_listener.py +465 -0
- gatewaysdk/store/listener.py +58 -0
- gatewaysdk/store/memory.py +396 -0
- gatewaysdk/store/mongo.py +165 -0
- gatewaysdk/store/redis_stream.py +517 -0
- gatewaysdk/store/sqlite.py +3 -0
- gatewaysdk/store/threading.py +370 -0
- gatewaysdk/store/utils.py +142 -0
- gatewaysdk/tracer/__init__.py +14 -0
- gatewaysdk/tracer/base.py +286 -0
- gatewaysdk/tracer/dummy.py +106 -0
- gatewaysdk/tracer/otel.py +559 -0
- gatewaysdk/tracing/__init__.py +110 -0
- gatewaysdk/tracing/api.py +808 -0
- gatewaysdk/tracing/attributes.py +9 -0
- gatewaysdk/tracing/context.py +272 -0
- gatewaysdk/tracing/exporters/__init__.py +10 -0
- gatewaysdk/tracing/exporters/gateway.py +228 -0
- gatewaysdk/tracing/identity.py +288 -0
- gatewaysdk/tracing/init.py +620 -0
- gatewaysdk/tracing/instrumentors/__init__.py +15 -0
- gatewaysdk/tracing/instrumentors/claude_agent_sdk.py +766 -0
- gatewaysdk/tracing/instrumentors/instrumentation_principles.md +294 -0
- gatewaysdk/tracing/instrumentors/registry.py +352 -0
- gatewaysdk/tracing/mapping.py +729 -0
- gatewaysdk/tracing/processors.py +393 -0
- gatewaysdk/tracing/push.py +617 -0
- gatewaysdk/tracing/push_models.py +247 -0
- gatewaysdk/tracing/semconv.py +294 -0
- gatewaysdk/tracing/span_builder.py +356 -0
- gatewaysdk/trainer/__init__.py +6 -0
- gatewaysdk/trainer/init_utils.py +263 -0
- gatewaysdk/trainer/legacy.py +359 -0
- gatewaysdk/trainer/registry.py +12 -0
- gatewaysdk/trainer/trainer.py +638 -0
- gatewaysdk/types/__init__.py +63 -0
- gatewaysdk/types/core.py +556 -0
- gatewaysdk/types/resources.py +204 -0
- gatewaysdk/types/tracer.py +515 -0
- gatewaysdk/types/tracing.py +162 -0
- gatewaysdk/users.py +251 -0
- gatewaysdk/utils/__init__.py +1 -0
- gatewaysdk/utils/id.py +18 -0
- gatewaysdk/utils/metrics.py +1025 -0
- gatewaysdk/utils/otel.py +550 -0
- gatewaysdk/utils/otlp.py +556 -0
- gatewaysdk/utils/redact.py +22 -0
- gatewaysdk/utils/server_launcher.py +1045 -0
- gatewaysdk/utils/system_snapshot.py +90 -0
- gatewaysdk/verl/__init__.py +8 -0
- gatewaysdk/verl/__main__.py +6 -0
- gatewaysdk/verl/async_server.py +46 -0
- gatewaysdk/verl/config.yaml +27 -0
- gatewaysdk/verl/daemon.py +1154 -0
- gatewaysdk/verl/dataset.py +44 -0
- gatewaysdk/verl/entrypoint.py +248 -0
- gatewaysdk/verl/trainer.py +549 -0
- gatewaysdk/world_browser.py +748 -0
- gatewaysdk/world_data.py +453 -0
- gatewaysdk/world_sessions.py +978 -0
- gatewaysdk/world_tasks.py +285 -0
- gatewaysdk/world_tools.py +115 -0
- gatewaysdk/worlds.py +639 -0
- gatewaysdk-0.3.2.dist-info/METADATA +236 -0
- gatewaysdk-0.3.2.dist-info/RECORD +376 -0
- gatewaysdk-0.3.2.dist-info/WHEEL +4 -0
- gatewaysdk-0.3.2.dist-info/entry_points.txt +5 -0
- gatewaysdk-0.3.2.dist-info/licenses/LICENSE +19 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"""A mock-tools world on the World Host.
|
|
2
|
+
|
|
3
|
+
A mock-tools bundle (``gateway-env.toml`` at its root, ``tools/*.py`` handlers,
|
|
4
|
+
``db/`` and ``verifiers/*.sql``) has no HTTP surface: an agent reaches it
|
|
5
|
+
through the ``tools`` surface, the platform's ``call``/``grade``/``reset``/
|
|
6
|
+
``seed`` rendezvous. On the pod engine that rendezvous is a runner sidecar and
|
|
7
|
+
``deploy/benchmark-runner/engines/schema_session.py``; on the host it is this
|
|
8
|
+
module, driven by :class:`~gatewaysdk.environment.schema.host.WorldHost`.
|
|
9
|
+
|
|
10
|
+
The session contract is the runner's: ``call`` executes a handler through the
|
|
11
|
+
schema contract, ``grade`` runs the task's verifiers, ``reset`` copies the
|
|
12
|
+
template back and re-arms the task context, ``seed`` lands rows through the
|
|
13
|
+
contract. The handlers are world-authored code, so a tools version always
|
|
14
|
+
lives in a version worker; the supervisor only detects the kind.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import json
|
|
20
|
+
import shutil
|
|
21
|
+
import uuid
|
|
22
|
+
from collections.abc import Callable
|
|
23
|
+
from dataclasses import dataclass, field
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
from typing import Any
|
|
26
|
+
|
|
27
|
+
from .. import _bundle
|
|
28
|
+
from .._materialize import materialize_template
|
|
29
|
+
from .._world import World
|
|
30
|
+
from ..errors import WorldStartError
|
|
31
|
+
from . import snapshot as snapshots
|
|
32
|
+
from .compiler import ContractError, bundle_mode, check_bundle, fail
|
|
33
|
+
from .data import seed_batch
|
|
34
|
+
|
|
35
|
+
Handler = Callable[..., Any]
|
|
36
|
+
|
|
37
|
+
#: The reward key the scalar goes under; a verifier may not claim it.
|
|
38
|
+
REWARD = "reward"
|
|
39
|
+
#: The opt-in table a bundle declares to read the active task from SQL.
|
|
40
|
+
TASK_CONTEXT_TABLE = "benchmark_runtime_context"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass(frozen=True)
|
|
44
|
+
class ToolsTask:
|
|
45
|
+
"""One task of a mock-tools bundle: the prompt and the checks that grade it.
|
|
46
|
+
Mirrors the runner's ``MockTask`` minus the eval-loop fields (user
|
|
47
|
+
simulation, dependency worlds), which a session does not run."""
|
|
48
|
+
|
|
49
|
+
id: str
|
|
50
|
+
prompt: str
|
|
51
|
+
verifier: str | None = None
|
|
52
|
+
verifiers: tuple[str, ...] = ()
|
|
53
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
54
|
+
|
|
55
|
+
def selected(self, all_verifiers: list[str]) -> list[str]:
|
|
56
|
+
"""The verifiers this task grades with: its own list, else the
|
|
57
|
+
primary one, else every verifier the bundle ships."""
|
|
58
|
+
if self.verifiers:
|
|
59
|
+
return list(self.verifiers)
|
|
60
|
+
if self.verifier is not None:
|
|
61
|
+
return [self.verifier]
|
|
62
|
+
return list(all_verifiers)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@dataclass
|
|
66
|
+
class ToolsVersion:
|
|
67
|
+
"""A mock-tools version as the host caches it: the bundle, its tasks and
|
|
68
|
+
verifiers, the materialized template every session copies, and (in a
|
|
69
|
+
worker) the loaded handlers."""
|
|
70
|
+
|
|
71
|
+
bundle: Path
|
|
72
|
+
manifest: _bundle.EnvManifest
|
|
73
|
+
verifiers: list[str]
|
|
74
|
+
tasks: dict[str, ToolsTask]
|
|
75
|
+
template: Path
|
|
76
|
+
handlers: dict[str, Handler] | None = None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def is_tools_bundle(bundle: Path) -> bool:
|
|
80
|
+
return (bundle / "gateway-env.toml").is_file() and not (bundle / "gateway-api-world.toml").is_file()
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def verifier_names(bundle: Path) -> list[str]:
|
|
84
|
+
verifiers_dir = bundle / "verifiers"
|
|
85
|
+
if not verifiers_dir.is_dir():
|
|
86
|
+
return []
|
|
87
|
+
return sorted(p.stem for p in verifiers_dir.glob("*.sql"))
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _task(raw: dict, index: int) -> ToolsTask | None:
|
|
91
|
+
prompt = raw.get("request") or raw.get("prompt") or raw.get("instruction") or raw.get("goal")
|
|
92
|
+
if not isinstance(prompt, str) or not prompt.strip():
|
|
93
|
+
return None
|
|
94
|
+
task_id = str(raw.get("id") or raw.get("name") or f"task-{index}")
|
|
95
|
+
verifier = raw.get("verifier")
|
|
96
|
+
listed = raw.get("verifiers")
|
|
97
|
+
metadata = raw.get("metadata")
|
|
98
|
+
return ToolsTask(
|
|
99
|
+
id=task_id,
|
|
100
|
+
prompt=prompt.strip(),
|
|
101
|
+
verifier=verifier if isinstance(verifier, str) and verifier.strip() else None,
|
|
102
|
+
verifiers=(
|
|
103
|
+
tuple(dict.fromkeys(str(v).strip() for v in listed if str(v).strip())) if isinstance(listed, list) else ()
|
|
104
|
+
),
|
|
105
|
+
metadata=metadata if isinstance(metadata, dict) else {},
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def _tasks_from_rows(rows: list) -> list[ToolsTask]:
|
|
110
|
+
out = []
|
|
111
|
+
for index, raw in enumerate(rows):
|
|
112
|
+
task = _task(raw, index) if isinstance(raw, dict) else None
|
|
113
|
+
if task is not None:
|
|
114
|
+
out.append(task)
|
|
115
|
+
return out
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def load_tasks(bundle: Path, manifest: _bundle.EnvManifest, verifiers: list[str]) -> dict[str, ToolsTask]:
|
|
119
|
+
"""The bundle's tasks, in the runner's precedence: ``[[tasks]]`` in the
|
|
120
|
+
manifest, else ``tasks.jsonl`` / ``tasks.json``, else one task per
|
|
121
|
+
verifier. A bundle with neither has nothing to grade and is refused."""
|
|
122
|
+
declared = manifest.raw.get("tasks")
|
|
123
|
+
tasks = _tasks_from_rows(declared) if isinstance(declared, list) else []
|
|
124
|
+
if not tasks:
|
|
125
|
+
for name in ("tasks.jsonl", "tasks.json"):
|
|
126
|
+
path = bundle / name
|
|
127
|
+
if not path.is_file():
|
|
128
|
+
continue
|
|
129
|
+
text = path.read_text(encoding="utf-8")
|
|
130
|
+
if name.endswith(".jsonl"):
|
|
131
|
+
rows = [json.loads(line) for line in text.splitlines() if line.strip()]
|
|
132
|
+
else:
|
|
133
|
+
data = json.loads(text)
|
|
134
|
+
rows = data if isinstance(data, list) else data.get("tasks", [])
|
|
135
|
+
tasks = _tasks_from_rows(rows)
|
|
136
|
+
if tasks:
|
|
137
|
+
break
|
|
138
|
+
if not tasks:
|
|
139
|
+
tasks = [
|
|
140
|
+
ToolsTask(
|
|
141
|
+
id=name,
|
|
142
|
+
prompt=f"Drive the environment into the state checked by the verifier '{name}'.",
|
|
143
|
+
verifier=name,
|
|
144
|
+
)
|
|
145
|
+
for name in verifiers
|
|
146
|
+
]
|
|
147
|
+
if not tasks:
|
|
148
|
+
fail(
|
|
149
|
+
"host",
|
|
150
|
+
"mock-tools bundle declares no tasks and ships no verifiers/*.sql: nothing to grade",
|
|
151
|
+
)
|
|
152
|
+
by_id: dict[str, ToolsTask] = {}
|
|
153
|
+
for task in tasks:
|
|
154
|
+
if task.id in by_id:
|
|
155
|
+
fail("host", f"task id '{task.id}' is declared twice")
|
|
156
|
+
by_id[task.id] = task
|
|
157
|
+
return by_id
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def load_tools_version(
|
|
161
|
+
bundle: Path,
|
|
162
|
+
template: Path,
|
|
163
|
+
snapshot: dict[str, str] | None,
|
|
164
|
+
*,
|
|
165
|
+
run_handlers: bool,
|
|
166
|
+
) -> ToolsVersion:
|
|
167
|
+
"""Cache a mock-tools version: verify and pin its snapshot, materialize the
|
|
168
|
+
template once, read its tasks, and in a worker import its handlers."""
|
|
169
|
+
if not is_tools_bundle(bundle):
|
|
170
|
+
fail("host", f"{bundle} is not a mock-tools bundle (no gateway-env.toml)")
|
|
171
|
+
manifest = _bundle.parse_manifest(bundle)
|
|
172
|
+
if manifest.raw.get("dependencies"):
|
|
173
|
+
fail("host", "the World Host does not open task sets with dependency worlds yet; use the pod engine")
|
|
174
|
+
if bundle_mode(bundle) is None:
|
|
175
|
+
fail(
|
|
176
|
+
"host",
|
|
177
|
+
"the World Host opens schema-backed mock-tools worlds only ([schema] language in "
|
|
178
|
+
"gateway-env.toml); a db/schema.sql world runs on the pod engine",
|
|
179
|
+
)
|
|
180
|
+
contract = check_bundle(bundle)
|
|
181
|
+
if snapshot:
|
|
182
|
+
snapshots.fetch(bundle, contract, snapshot["url"], snapshot["sha256"], snapshot["digest"])
|
|
183
|
+
if not template.is_file():
|
|
184
|
+
materialize_template(bundle, template, require_sql=True)
|
|
185
|
+
verifiers = verifier_names(bundle)
|
|
186
|
+
if REWARD in verifiers:
|
|
187
|
+
fail("host", f"verifier name '{REWARD}' is reserved for the scalar grade")
|
|
188
|
+
tasks = load_tasks(bundle, manifest, verifiers)
|
|
189
|
+
for task in tasks.values():
|
|
190
|
+
unknown = set(task.selected(verifiers)) - set(verifiers)
|
|
191
|
+
if unknown:
|
|
192
|
+
fail("host", f"task '{task.id}' names verifiers the bundle lacks: {', '.join(sorted(unknown))}")
|
|
193
|
+
handlers = None
|
|
194
|
+
if run_handlers:
|
|
195
|
+
try:
|
|
196
|
+
handlers = _bundle.load_handlers(bundle, manifest)
|
|
197
|
+
except WorldStartError as error:
|
|
198
|
+
fail("host", str(error))
|
|
199
|
+
return ToolsVersion(
|
|
200
|
+
bundle=bundle,
|
|
201
|
+
manifest=manifest,
|
|
202
|
+
verifiers=verifiers,
|
|
203
|
+
tasks=tasks,
|
|
204
|
+
template=template,
|
|
205
|
+
handlers=handlers,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class _EnvHost:
|
|
210
|
+
"""What :class:`World` reads of an ``Environment``: the template, a scratch
|
|
211
|
+
dir, the handlers, the bundle path, and always-``env`` routing."""
|
|
212
|
+
|
|
213
|
+
def __init__(self, version: ToolsVersion, worlds_dir: Path) -> None:
|
|
214
|
+
self.bundle_path = version.bundle
|
|
215
|
+
self._worlds_dir = worlds_dir
|
|
216
|
+
self._template_db = version.template
|
|
217
|
+
self._handlers = version.handlers or {}
|
|
218
|
+
|
|
219
|
+
def resolve_route(self, tool_name: str) -> str:
|
|
220
|
+
return "env"
|
|
221
|
+
|
|
222
|
+
def _record_route(self, *args: Any, **kwargs: Any) -> None:
|
|
223
|
+
return None
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
class ToolsWorld:
|
|
227
|
+
"""One session of a mock-tools version: a copy of the template in the
|
|
228
|
+
session's own directory, executed through the bundle's handlers."""
|
|
229
|
+
|
|
230
|
+
def __init__(self, version: ToolsVersion, session_dir: Path, task: str) -> None:
|
|
231
|
+
if version.handlers is None:
|
|
232
|
+
fail("host", "a mock-tools session runs world-authored handlers; only a version worker opens one")
|
|
233
|
+
selected = version.tasks.get(task)
|
|
234
|
+
if selected is None:
|
|
235
|
+
fail("host", f"no task '{task}' in this world; it has {', '.join(sorted(version.tasks))}")
|
|
236
|
+
raise AssertionError # fail() never returns
|
|
237
|
+
self.version = version
|
|
238
|
+
self.task = selected
|
|
239
|
+
self._dir = Path(session_dir)
|
|
240
|
+
self._dir.mkdir(parents=True, exist_ok=True)
|
|
241
|
+
self.world = World(_EnvHost(version, self._dir), world_id=uuid.uuid4().hex) # type: ignore[arg-type]
|
|
242
|
+
self._arm()
|
|
243
|
+
|
|
244
|
+
def _arm(self) -> None:
|
|
245
|
+
"""Write the active task into the bundle's opt-in context table, so its
|
|
246
|
+
SQL verifiers can key off the scenario without a tool that sets it."""
|
|
247
|
+
conn = self.world._conn
|
|
248
|
+
declared = conn.execute(
|
|
249
|
+
"SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?", (TASK_CONTEXT_TABLE,)
|
|
250
|
+
).fetchall()
|
|
251
|
+
if not declared:
|
|
252
|
+
return
|
|
253
|
+
scenario_id = str(self.task.metadata.get("scenario_id") or self.task.id)
|
|
254
|
+
conn.execute(f"DELETE FROM {TASK_CONTEXT_TABLE}")
|
|
255
|
+
conn.execute(
|
|
256
|
+
f"INSERT INTO {TASK_CONTEXT_TABLE} (context_key, scenario_id) VALUES ('active_task', ?)",
|
|
257
|
+
(scenario_id,),
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
def call(self, tool: str, args: dict) -> dict:
|
|
261
|
+
if tool not in (self.version.handlers or {}):
|
|
262
|
+
known = ", ".join(sorted(self.version.handlers or {})) or "(none)"
|
|
263
|
+
fail("host", f"unknown tool '{tool}'; this world serves: {known}")
|
|
264
|
+
try:
|
|
265
|
+
result = self.world.execute(tool, args)
|
|
266
|
+
except ContractError:
|
|
267
|
+
raise
|
|
268
|
+
except Exception as error: # noqa: BLE001 - the handler's failure is the call's answer
|
|
269
|
+
return {"status": 500, "body": {"error": str(error)[:2000]}}
|
|
270
|
+
return {"status": 200, "body": result}
|
|
271
|
+
|
|
272
|
+
def grade(self) -> dict:
|
|
273
|
+
rewards: dict[str, float | None] = {}
|
|
274
|
+
for name in self.task.selected(self.version.verifiers):
|
|
275
|
+
rewards[name] = self.world.verify(name).score
|
|
276
|
+
if self.task.verifier is not None and self.task.verifier in rewards:
|
|
277
|
+
reward = rewards[self.task.verifier]
|
|
278
|
+
else:
|
|
279
|
+
numeric = [s for s in rewards.values() if isinstance(s, (int, float))]
|
|
280
|
+
reward = sum(numeric) / len(numeric) if numeric else None
|
|
281
|
+
return {REWARD: reward, "rewards": rewards}
|
|
282
|
+
|
|
283
|
+
def reset(self) -> dict:
|
|
284
|
+
self.world.reset()
|
|
285
|
+
self._arm()
|
|
286
|
+
return {"reset": True}
|
|
287
|
+
|
|
288
|
+
def export(self, destination: Path) -> Path:
|
|
289
|
+
"""The session's state as one sqlite file, taken consistently."""
|
|
290
|
+
return self.world.snapshot(destination)
|
|
291
|
+
|
|
292
|
+
def restore(self, source: Path) -> None:
|
|
293
|
+
"""Continue from a file :meth:`export` wrote."""
|
|
294
|
+
self.world.restore(source)
|
|
295
|
+
self._arm()
|
|
296
|
+
|
|
297
|
+
def seed(self, args: dict) -> dict:
|
|
298
|
+
rows = args.get("rows")
|
|
299
|
+
mode = args.get("mode", "append")
|
|
300
|
+
if not isinstance(rows, dict):
|
|
301
|
+
fail("host", "seed needs args.rows as {entity: [row, ...]}")
|
|
302
|
+
store, contract = self.world.store, self.world.contract
|
|
303
|
+
if store is None or contract is None:
|
|
304
|
+
fail("host", "seed needs a schema-backed world (gateway-world/1); this bundle has none")
|
|
305
|
+
raise AssertionError # fail() never returns
|
|
306
|
+
batch = seed_batch(store, contract, rows, mode, batch_id=f"host-seed-{uuid.uuid4().hex}")
|
|
307
|
+
applied = store.apply_batch(batch)
|
|
308
|
+
return {
|
|
309
|
+
"seeded": applied.get("applied", sum(len(v) for v in rows.values())),
|
|
310
|
+
"mode": mode,
|
|
311
|
+
"entity_counts": {entity: len(store.list(entity)) for entity in rows if entity in contract.entities},
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
def state(self) -> dict:
|
|
315
|
+
store, contract = self.world.store, self.world.contract
|
|
316
|
+
if store is None or contract is None:
|
|
317
|
+
return {"entities": {}}
|
|
318
|
+
return {"entities": {entity: store.list(entity) for entity in contract.entities}}
|
|
319
|
+
|
|
320
|
+
def close(self) -> None:
|
|
321
|
+
self.world.close()
|
|
322
|
+
shutil.rmtree(self._dir, ignore_errors=True)
|