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,263 @@
|
|
|
1
|
+
"""``data extract``: rows out of what an agent already has, shaped for the world.
|
|
2
|
+
|
|
3
|
+
Three inputs an agent holds, one output every import accepts (tagged JSONL)::
|
|
4
|
+
|
|
5
|
+
tool-results one {..., "raw_output": {...}} per line; rows are the objects of
|
|
6
|
+
raw_output.results[] (or raw_output.items[]) that carry the
|
|
7
|
+
entity's primary key
|
|
8
|
+
vendor-envelope the vendor's own response, one per line or one document; rows sit
|
|
9
|
+
under the world's [api].envelope key ("" = the bare array)
|
|
10
|
+
session-export calls.jsonl from `worlds session export`; rows are
|
|
11
|
+
result.<envelope>[] of successful `call` records
|
|
12
|
+
|
|
13
|
+
Every adapter then drops keys whose value is null or "", strips keys the entity's
|
|
14
|
+
schema does not declare (counted, never silent), dedupes by the entity's primary
|
|
15
|
+
key (``fill``: first row wins and later ones only add missing fields; ``upsert``:
|
|
16
|
+
the last row wins) and applies the world's ``[redact]`` policy from
|
|
17
|
+
``connector.toml`` (``drop`` removed, ``hash`` spelled ``sha256:<hex>`` over
|
|
18
|
+
``<slug>:<value>``, ``round`` rounded) unless told not to. The summary goes to
|
|
19
|
+
stderr::
|
|
20
|
+
|
|
21
|
+
{"read": N, "rows": M, "unknownFields": {name: n}, "redacted": {"dropped": n, "hashed": n}}
|
|
22
|
+
|
|
23
|
+
Input is streamed. The deduplicated rows are held keyed until the input ends,
|
|
24
|
+
because a later row may still change an earlier one.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
import json
|
|
30
|
+
from dataclasses import dataclass, field
|
|
31
|
+
from pathlib import Path
|
|
32
|
+
from typing import IO, Any, Iterable, Iterator
|
|
33
|
+
|
|
34
|
+
from .batch import _Reader, _stream_array, encode_row
|
|
35
|
+
from .compiler import Contract, build
|
|
36
|
+
from .connector import SPEC, Spec, parse_spec, redact
|
|
37
|
+
from .validation import ContractError, fail
|
|
38
|
+
|
|
39
|
+
SHAPES = ("tool-results", "vendor-envelope", "session-export")
|
|
40
|
+
MERGES = ("fill", "upsert")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass
|
|
44
|
+
class Summary:
|
|
45
|
+
read: int = 0
|
|
46
|
+
rows: int = 0
|
|
47
|
+
unknown: dict[str, int] = field(default_factory=dict)
|
|
48
|
+
dropped: int = 0
|
|
49
|
+
hashed: int = 0
|
|
50
|
+
|
|
51
|
+
def to_json(self) -> dict:
|
|
52
|
+
return {
|
|
53
|
+
"read": self.read,
|
|
54
|
+
"rows": self.rows,
|
|
55
|
+
"unknownFields": dict(sorted(self.unknown.items())),
|
|
56
|
+
"redacted": {"dropped": self.dropped, "hashed": self.hashed},
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# ---------------------------------------------------------------- the world
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def envelope_key(world: Path) -> str:
|
|
64
|
+
"""``[api].envelope`` of the world's connector.toml; "" when unset or absent."""
|
|
65
|
+
try:
|
|
66
|
+
import tomllib
|
|
67
|
+
except ModuleNotFoundError: # pragma: no cover - python 3.10
|
|
68
|
+
import tomli as tomllib
|
|
69
|
+
|
|
70
|
+
spec = world / SPEC
|
|
71
|
+
if not spec.is_file():
|
|
72
|
+
return ""
|
|
73
|
+
api = tomllib.loads(spec.read_text(encoding="utf-8")).get("api", {})
|
|
74
|
+
value = api.get("envelope", "") if isinstance(api, dict) else ""
|
|
75
|
+
return value if isinstance(value, str) else ""
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def redaction_spec(world: Path) -> Spec | None:
|
|
79
|
+
spec = world / SPEC
|
|
80
|
+
return parse_spec(spec.read_text(encoding="utf-8")) if spec.is_file() else None
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# ---------------------------------------------------------------- adapters
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _lines(stream: IO[str], where: str) -> Iterator[Any]:
|
|
87
|
+
for number, line in enumerate(stream, start=1):
|
|
88
|
+
if not line.strip():
|
|
89
|
+
continue
|
|
90
|
+
try:
|
|
91
|
+
yield json.loads(line)
|
|
92
|
+
except ValueError:
|
|
93
|
+
fail("extract", f"{where}:{number} is not JSON", where)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _objects(value: Any) -> Iterator[dict]:
|
|
97
|
+
if isinstance(value, list):
|
|
98
|
+
for item in value:
|
|
99
|
+
if isinstance(item, dict):
|
|
100
|
+
yield item
|
|
101
|
+
elif isinstance(value, dict):
|
|
102
|
+
yield value
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _dig(value: Any, path: str) -> Any:
|
|
106
|
+
for part in [p for p in path.split(".") if p]:
|
|
107
|
+
if not isinstance(value, dict) or part not in value:
|
|
108
|
+
return None
|
|
109
|
+
value = value[part]
|
|
110
|
+
return value
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def tool_results(stream: IO[str], where: str, *, keys: list[str], envelope: str = "") -> Iterator[dict]:
|
|
114
|
+
"""Every object of ``raw_output.results[]`` (or ``.items[]``) that carries the key."""
|
|
115
|
+
for record in _lines(stream, where):
|
|
116
|
+
raw = record.get("raw_output") if isinstance(record, dict) else None
|
|
117
|
+
if not isinstance(raw, dict):
|
|
118
|
+
continue
|
|
119
|
+
listed = raw.get("results")
|
|
120
|
+
if listed is None:
|
|
121
|
+
listed = raw.get("items")
|
|
122
|
+
for item in _objects(listed):
|
|
123
|
+
if all(name in item for name in keys):
|
|
124
|
+
yield item
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def vendor_envelope(stream: IO[str], where: str, *, keys: list[str], envelope: str) -> Iterator[dict]:
|
|
128
|
+
"""Rows under the envelope key of each response line, or of the one document."""
|
|
129
|
+
reader = _Reader(stream)
|
|
130
|
+
head = reader.peek()
|
|
131
|
+
if head is None:
|
|
132
|
+
return
|
|
133
|
+
if head == "[":
|
|
134
|
+
if envelope:
|
|
135
|
+
fail("extract", f"{where} is a bare array but the world's envelope is {envelope!r}", where)
|
|
136
|
+
yield from _stream_array(reader, where)
|
|
137
|
+
return
|
|
138
|
+
if head != "{":
|
|
139
|
+
fail("extract", f"{where} is neither a JSON object nor an array", where)
|
|
140
|
+
if not envelope:
|
|
141
|
+
fail("extract", f"{where} is an object but the world's envelope is empty: expected a bare array", where)
|
|
142
|
+
start = reader.pos
|
|
143
|
+
first = reader.line(cap=1024 * 1024)
|
|
144
|
+
one_per_line = False
|
|
145
|
+
if first is not None and len(first) <= 1024 * 1024:
|
|
146
|
+
try:
|
|
147
|
+
json.loads(first)
|
|
148
|
+
one_per_line = True
|
|
149
|
+
except ValueError:
|
|
150
|
+
one_per_line = False
|
|
151
|
+
reader.pos = start
|
|
152
|
+
if one_per_line:
|
|
153
|
+
line = reader.line()
|
|
154
|
+
number = 0
|
|
155
|
+
while line is not None:
|
|
156
|
+
number += 1
|
|
157
|
+
if line.strip():
|
|
158
|
+
try:
|
|
159
|
+
response = json.loads(line)
|
|
160
|
+
except ValueError:
|
|
161
|
+
fail("extract", f"{where}:{number} is not JSON", where)
|
|
162
|
+
yield from _objects(_dig(response, envelope))
|
|
163
|
+
reader.compact()
|
|
164
|
+
line = reader.line()
|
|
165
|
+
return
|
|
166
|
+
# One pretty-printed response: a single page, read whole.
|
|
167
|
+
yield from _objects(_dig(reader.value(where), envelope))
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def session_export(stream: IO[str], where: str, *, keys: list[str], envelope: str) -> Iterator[dict]:
|
|
171
|
+
"""``result.<envelope>[]`` of successful ``call`` records."""
|
|
172
|
+
for record in _lines(stream, where):
|
|
173
|
+
if not isinstance(record, dict) or record.get("kind") != "call" or record.get("error") is not None:
|
|
174
|
+
continue
|
|
175
|
+
result = record.get("result")
|
|
176
|
+
yield from _objects(_dig(result, envelope) if envelope else result)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
ADAPTERS = {"tool-results": tool_results, "vendor-envelope": vendor_envelope, "session-export": session_export}
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
# ---------------------------------------------------------------- the pipeline
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def _clean(row: dict, declared: set[str], summary: Summary) -> dict:
|
|
186
|
+
out: dict = {}
|
|
187
|
+
for name, value in row.items():
|
|
188
|
+
if value is None or value == "":
|
|
189
|
+
continue
|
|
190
|
+
if name not in declared:
|
|
191
|
+
summary.unknown[name] = summary.unknown.get(name, 0) + 1
|
|
192
|
+
continue
|
|
193
|
+
out[name] = value
|
|
194
|
+
return out
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def _count_redaction(before: dict, after: dict, spec: Spec, summary: Summary) -> None:
|
|
198
|
+
for name in before:
|
|
199
|
+
if name not in after:
|
|
200
|
+
summary.dropped += 1
|
|
201
|
+
elif name in spec.hash_fields and before[name] is not None:
|
|
202
|
+
summary.hashed += 1
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def extract(
|
|
206
|
+
world: str | Path,
|
|
207
|
+
sources: Iterable[str | Path],
|
|
208
|
+
*,
|
|
209
|
+
shape: str,
|
|
210
|
+
entity: str,
|
|
211
|
+
merge: str = "fill",
|
|
212
|
+
redaction: bool = True,
|
|
213
|
+
out: IO[str],
|
|
214
|
+
) -> Summary:
|
|
215
|
+
"""Run one adapter over the sources, write tagged JSONL to ``out``, return the summary."""
|
|
216
|
+
if shape not in SHAPES:
|
|
217
|
+
fail("extract", f"shape must be one of {', '.join(SHAPES)}", "/shape")
|
|
218
|
+
if merge not in MERGES:
|
|
219
|
+
fail("extract", f"merge must be one of {', '.join(MERGES)}", "/merge")
|
|
220
|
+
root = Path(world)
|
|
221
|
+
contract: Contract = build(root)
|
|
222
|
+
if entity not in contract.entities:
|
|
223
|
+
fail("entity", f"Unknown entity {entity}; the world has {', '.join(sorted(contract.entities))}", f"/{entity}")
|
|
224
|
+
spec_entity = contract.entities[entity]
|
|
225
|
+
keys = list(spec_entity["primary_key"])
|
|
226
|
+
declared = set(spec_entity["schema"].get("properties", {}))
|
|
227
|
+
envelope = envelope_key(root)
|
|
228
|
+
policy = redaction_spec(root) if redaction else None
|
|
229
|
+
adapter = ADAPTERS[shape]
|
|
230
|
+
summary = Summary()
|
|
231
|
+
held: dict[str, dict] = {}
|
|
232
|
+
from .batch import _open_text
|
|
233
|
+
|
|
234
|
+
for source in sources:
|
|
235
|
+
where = str(source)
|
|
236
|
+
with _open_text(source) as stream:
|
|
237
|
+
for raw in adapter(stream, where, keys=keys, envelope=envelope):
|
|
238
|
+
summary.read += 1
|
|
239
|
+
row = _clean(raw, declared, summary)
|
|
240
|
+
if not all(name in row for name in keys):
|
|
241
|
+
continue
|
|
242
|
+
key = json.dumps([row[name] for name in keys], sort_keys=True, separators=(",", ":"))
|
|
243
|
+
if key in held:
|
|
244
|
+
if merge == "upsert":
|
|
245
|
+
held[key] = row
|
|
246
|
+
else:
|
|
247
|
+
first = held[key]
|
|
248
|
+
for name, value in row.items():
|
|
249
|
+
if name not in first:
|
|
250
|
+
first[name] = value
|
|
251
|
+
else:
|
|
252
|
+
held[key] = row
|
|
253
|
+
for row in held.values():
|
|
254
|
+
if policy is not None:
|
|
255
|
+
redacted = redact(row, policy)
|
|
256
|
+
_count_redaction(row, redacted, policy, summary)
|
|
257
|
+
row = redacted
|
|
258
|
+
out.write(encode_row({"entity": entity, "row": row}) + "\n")
|
|
259
|
+
summary.rows += 1
|
|
260
|
+
return summary
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
__all__ = ["ADAPTERS", "MERGES", "SHAPES", "ContractError", "Summary", "extract"]
|