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,286 @@
|
|
|
1
|
+
# Copyright (c) Microsoft. All rights reserved.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import functools
|
|
6
|
+
import logging
|
|
7
|
+
from contextlib import contextmanager
|
|
8
|
+
from typing import TYPE_CHECKING, Any, AsyncContextManager, Awaitable, Callable, ContextManager, List, Optional, TypeVar
|
|
9
|
+
|
|
10
|
+
from gatewaysdk.store.base import LightningStore
|
|
11
|
+
from gatewaysdk.types import Attributes, ParallelWorkerBase, Span, SpanCoreFields, SpanRecordingContext, TraceStatus
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from langchain_core.callbacks.base import BaseCallbackHandler # type: ignore
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
T = TypeVar("T")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
_active_tracer: Optional[Tracer] = None
|
|
23
|
+
|
|
24
|
+
T_func = Callable[..., Awaitable[Any]]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Tracer(ParallelWorkerBase):
|
|
28
|
+
"""
|
|
29
|
+
An abstract base class for tracers.
|
|
30
|
+
|
|
31
|
+
This class defines a standard interface for tracing code execution,
|
|
32
|
+
capturing the resulting spans, and providing them for analysis. It is
|
|
33
|
+
designed to be backend-agnostic, allowing for different implementations
|
|
34
|
+
(e.g., for AgentOps, OpenTelemetry, Docker, etc.).
|
|
35
|
+
|
|
36
|
+
The primary interaction pattern is through the [`trace_context`][gatewaysdk.Tracer.trace_context]
|
|
37
|
+
context manager, which ensures that traces are properly started and captured,
|
|
38
|
+
even in the case of exceptions.
|
|
39
|
+
|
|
40
|
+
A typical workflow:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
tracer = YourTracerImplementation()
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
async with tracer.trace_context(name="my_traced_task"):
|
|
47
|
+
# ... code to be traced ...
|
|
48
|
+
await run_my_agent_logic()
|
|
49
|
+
except Exception as e:
|
|
50
|
+
print(f"An error occurred: {e}")
|
|
51
|
+
|
|
52
|
+
# Retrieve the trace data after the context block
|
|
53
|
+
spans: list[ReadableSpan] = tracer.get_last_trace()
|
|
54
|
+
|
|
55
|
+
# Process the trace data
|
|
56
|
+
if trace_tree:
|
|
57
|
+
rl_triplets = TracerTraceToTriplet().adapt(spans)
|
|
58
|
+
# ... do something with the triplets
|
|
59
|
+
```
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
_store: Optional[LightningStore] = None
|
|
63
|
+
|
|
64
|
+
def init_worker(self, worker_id: int, store: Optional[LightningStore] = None) -> None:
|
|
65
|
+
"""Initialize the tracer for a worker.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
worker_id: The ID of the worker.
|
|
69
|
+
store: The store to add the spans to. If it's provided, traces will be added to the store when tracing.
|
|
70
|
+
"""
|
|
71
|
+
super().init_worker(worker_id)
|
|
72
|
+
self._store = store
|
|
73
|
+
|
|
74
|
+
def trace_context(
|
|
75
|
+
self,
|
|
76
|
+
name: Optional[str] = None,
|
|
77
|
+
*,
|
|
78
|
+
store: Optional[LightningStore] = None,
|
|
79
|
+
rollout_id: Optional[str] = None,
|
|
80
|
+
attempt_id: Optional[str] = None,
|
|
81
|
+
) -> AsyncContextManager[Any]:
|
|
82
|
+
"""
|
|
83
|
+
Starts a new tracing context. This should be used as a context manager.
|
|
84
|
+
|
|
85
|
+
The implementation should handle the setup and teardown of the tracing
|
|
86
|
+
for the enclosed code block. It must ensure that any spans generated
|
|
87
|
+
within the `with` block are collected and made available via
|
|
88
|
+
[`get_last_trace`][gatewaysdk.Tracer.get_last_trace].
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
name: The name for the root span of this trace context.
|
|
92
|
+
store: The store to add the spans to. Deprecated in favor of passing store to init_worker().
|
|
93
|
+
rollout_id: The rollout ID to add the spans to.
|
|
94
|
+
attempt_id: The attempt ID to add the spans to.
|
|
95
|
+
"""
|
|
96
|
+
raise NotImplementedError()
|
|
97
|
+
|
|
98
|
+
def _trace_context_sync(
|
|
99
|
+
self,
|
|
100
|
+
name: Optional[str] = None,
|
|
101
|
+
*,
|
|
102
|
+
rollout_id: Optional[str] = None,
|
|
103
|
+
attempt_id: Optional[str] = None,
|
|
104
|
+
) -> ContextManager[Any]:
|
|
105
|
+
"""Internal API for CI backward compatibility."""
|
|
106
|
+
raise NotImplementedError()
|
|
107
|
+
|
|
108
|
+
def get_last_trace(self) -> List[Span]:
|
|
109
|
+
"""
|
|
110
|
+
Retrieves the raw list of captured spans from the most recent trace.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
A list of [`Span`][gatewaysdk.Span] objects collected during the last trace.
|
|
114
|
+
"""
|
|
115
|
+
raise NotImplementedError()
|
|
116
|
+
|
|
117
|
+
def trace_run(self, func: Callable[..., Any], *args: Any, **kwargs: Any) -> Any:
|
|
118
|
+
"""
|
|
119
|
+
A convenience wrapper to trace the execution of a single synchronous function.
|
|
120
|
+
|
|
121
|
+
Deprecated in favor of customizing Runners.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
func: The synchronous function to execute and trace.
|
|
125
|
+
*args: Positional arguments to pass to the function.
|
|
126
|
+
**kwargs: Keyword arguments to pass to the function.
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
The return value of the function.
|
|
130
|
+
"""
|
|
131
|
+
with self._trace_context_sync(name=func.__name__):
|
|
132
|
+
return func(*args, **kwargs)
|
|
133
|
+
|
|
134
|
+
def create_span(
|
|
135
|
+
self,
|
|
136
|
+
name: str,
|
|
137
|
+
attributes: Optional[Attributes] = None,
|
|
138
|
+
timestamp: Optional[float] = None,
|
|
139
|
+
status: Optional[TraceStatus] = None,
|
|
140
|
+
) -> SpanCoreFields:
|
|
141
|
+
"""Notify the tracer that a span should be created here.
|
|
142
|
+
|
|
143
|
+
It uses a fire-and-forget approach and doesn't wait for the span to be created.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
name: The name of the span.
|
|
147
|
+
attributes: The attributes of the span.
|
|
148
|
+
timestamp: The timestamp of the span.
|
|
149
|
+
status: The status of the span.
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
The core fields of the span.
|
|
153
|
+
"""
|
|
154
|
+
raise NotImplementedError()
|
|
155
|
+
|
|
156
|
+
def operation_context(
|
|
157
|
+
self,
|
|
158
|
+
name: str,
|
|
159
|
+
attributes: Optional[Attributes] = None,
|
|
160
|
+
start_time: Optional[float] = None,
|
|
161
|
+
end_time: Optional[float] = None,
|
|
162
|
+
) -> ContextManager[SpanRecordingContext]:
|
|
163
|
+
"""Start to record an operation to a span.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
name: The name of the operation.
|
|
167
|
+
attributes: The attributes of the operation.
|
|
168
|
+
start_time: The start time of the operation.
|
|
169
|
+
end_time: The end time of the operation.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
A [`SpanRecordingContext`][gatewaysdk.SpanRecordingContext] for recording the operation on the span.
|
|
173
|
+
"""
|
|
174
|
+
raise NotImplementedError()
|
|
175
|
+
|
|
176
|
+
async def trace_run_async(self, func: Callable[..., Awaitable[Any]], *args: Any, **kwargs: Any) -> Any:
|
|
177
|
+
"""
|
|
178
|
+
A convenience wrapper to trace the execution of a single asynchronous function.
|
|
179
|
+
|
|
180
|
+
Deprecated in favor of customizing Runners.
|
|
181
|
+
|
|
182
|
+
Args:
|
|
183
|
+
func: The asynchronous function to execute and trace.
|
|
184
|
+
*args: Positional arguments to pass to the function.
|
|
185
|
+
**kwargs: Keyword arguments to pass to the function.
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
The return value of the function.
|
|
189
|
+
"""
|
|
190
|
+
async with self.trace_context(name=func.__name__):
|
|
191
|
+
return await func(*args, **kwargs)
|
|
192
|
+
|
|
193
|
+
def get_langchain_handler(self) -> Optional[BaseCallbackHandler]: # type: ignore
|
|
194
|
+
"""Get a handler to install in langchain agent callback.
|
|
195
|
+
|
|
196
|
+
Agents are expected to use this handler in their agents to enable tracing.
|
|
197
|
+
"""
|
|
198
|
+
logger.warning(f"{self.__class__.__name__} does not provide a LangChain callback handler.")
|
|
199
|
+
return None
|
|
200
|
+
|
|
201
|
+
@contextmanager
|
|
202
|
+
def lifespan(self, store: Optional[LightningStore] = None):
|
|
203
|
+
"""A context manager to manage the lifespan of the tracer.
|
|
204
|
+
|
|
205
|
+
This can be used to set up and tear down any necessary resources
|
|
206
|
+
for the tracer, useful for debugging purposes.
|
|
207
|
+
|
|
208
|
+
Args:
|
|
209
|
+
store: The store to add the spans to. If it's provided, traces will be added to the store when tracing.
|
|
210
|
+
"""
|
|
211
|
+
has_init = False
|
|
212
|
+
has_init_worker = False
|
|
213
|
+
try:
|
|
214
|
+
self.init()
|
|
215
|
+
has_init = True
|
|
216
|
+
|
|
217
|
+
self.init_worker(0, store)
|
|
218
|
+
has_init_worker = True
|
|
219
|
+
|
|
220
|
+
yield
|
|
221
|
+
|
|
222
|
+
finally:
|
|
223
|
+
if has_init_worker:
|
|
224
|
+
self.teardown_worker(0)
|
|
225
|
+
if has_init:
|
|
226
|
+
self.teardown()
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def set_active_tracer(tracer: Tracer):
|
|
230
|
+
"""Set the active tracer for the current process.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
tracer: The tracer to set as active.
|
|
234
|
+
"""
|
|
235
|
+
global _active_tracer
|
|
236
|
+
if _active_tracer is not None:
|
|
237
|
+
raise ValueError("An active tracer is already set. Cannot set a new one.")
|
|
238
|
+
_active_tracer = tracer
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def clear_active_tracer():
|
|
242
|
+
"""Clear the active tracer for the current process."""
|
|
243
|
+
global _active_tracer
|
|
244
|
+
_active_tracer = None
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
def get_active_tracer() -> Optional[Tracer]:
|
|
248
|
+
"""Get the active tracer for the current process.
|
|
249
|
+
|
|
250
|
+
Returns:
|
|
251
|
+
The active tracer, or None if no tracer is active.
|
|
252
|
+
"""
|
|
253
|
+
return _active_tracer
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
class _ActiveTracerAsyncCM(AsyncContextManager[T]):
|
|
257
|
+
def __init__(self, tracer: Tracer, inner: AsyncContextManager[T]):
|
|
258
|
+
self._tracer = tracer
|
|
259
|
+
self._inner = inner
|
|
260
|
+
|
|
261
|
+
async def __aenter__(self) -> T:
|
|
262
|
+
set_active_tracer(self._tracer) # will raise if nested
|
|
263
|
+
try:
|
|
264
|
+
return await self._inner.__aenter__()
|
|
265
|
+
except Exception:
|
|
266
|
+
clear_active_tracer()
|
|
267
|
+
raise
|
|
268
|
+
|
|
269
|
+
async def __aexit__(self, *args: Any, **kwargs: Any) -> Optional[bool]:
|
|
270
|
+
try:
|
|
271
|
+
return await self._inner.__aexit__(*args, **kwargs)
|
|
272
|
+
finally:
|
|
273
|
+
clear_active_tracer()
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def with_active_tracer_context(
|
|
277
|
+
func: Callable[..., AsyncContextManager[T]],
|
|
278
|
+
) -> Callable[..., AsyncContextManager[T]]:
|
|
279
|
+
"""Decorate a method returning an AsyncContextManager so tracer is active for the whole `async with`."""
|
|
280
|
+
|
|
281
|
+
@functools.wraps(func)
|
|
282
|
+
def wrapper(self: Tracer, *args: Any, **kwargs: Any) -> AsyncContextManager[T]:
|
|
283
|
+
cm = func(self, *args, **kwargs)
|
|
284
|
+
return _ActiveTracerAsyncCM(self, cm)
|
|
285
|
+
|
|
286
|
+
return wrapper
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Copyright (c) Microsoft. All rights reserved.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import time
|
|
7
|
+
from contextlib import contextmanager
|
|
8
|
+
from typing import (
|
|
9
|
+
Iterator,
|
|
10
|
+
Optional,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
from gatewaysdk.types import (
|
|
14
|
+
Attributes,
|
|
15
|
+
SpanCoreFields,
|
|
16
|
+
SpanRecordingContext,
|
|
17
|
+
StatusCode,
|
|
18
|
+
TraceStatus,
|
|
19
|
+
)
|
|
20
|
+
from gatewaysdk.utils.otel import format_exception_attributes
|
|
21
|
+
|
|
22
|
+
from .base import Tracer
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DummySpanRecordingContext(SpanRecordingContext):
|
|
28
|
+
"""Context for recording operations on a dummy span, not dependent on any backend tracer."""
|
|
29
|
+
|
|
30
|
+
def __init__(self, name: str, attributes: Optional[Attributes] = None, start_time: Optional[float] = None) -> None:
|
|
31
|
+
self.name = name
|
|
32
|
+
self.attributes = attributes or {}
|
|
33
|
+
self.start_time = start_time or time.time()
|
|
34
|
+
self.end_time = None
|
|
35
|
+
self.status = TraceStatus(status_code="OK")
|
|
36
|
+
|
|
37
|
+
def record_exception(self, exception: BaseException) -> None:
|
|
38
|
+
self.record_status("ERROR", str(exception))
|
|
39
|
+
self.record_attributes(format_exception_attributes(exception))
|
|
40
|
+
|
|
41
|
+
def record_attributes(self, attributes: Attributes) -> None:
|
|
42
|
+
self.attributes.update(attributes)
|
|
43
|
+
|
|
44
|
+
def record_status(self, status_code: StatusCode, description: Optional[str] = None) -> None:
|
|
45
|
+
self.status = TraceStatus(status_code=status_code, description=description)
|
|
46
|
+
|
|
47
|
+
def finalize(self, end_time: Optional[float] = None) -> None:
|
|
48
|
+
self.end_time = end_time or time.time()
|
|
49
|
+
|
|
50
|
+
def get_recorded_span(self) -> SpanCoreFields:
|
|
51
|
+
if self.end_time is None:
|
|
52
|
+
raise ValueError("End time is not set. Call finalize() first.")
|
|
53
|
+
return SpanCoreFields(
|
|
54
|
+
name=self.name,
|
|
55
|
+
attributes=self.attributes,
|
|
56
|
+
start_time=self.start_time,
|
|
57
|
+
end_time=self.end_time,
|
|
58
|
+
status=self.status,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class DummyTracer(Tracer):
|
|
63
|
+
"""A dummy tracer that does not trace anything, but it is compatible with the emitter API.
|
|
64
|
+
|
|
65
|
+
It doesn't rely on any backend tracer, and also doesn't use any stores.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
def create_span(
|
|
69
|
+
self,
|
|
70
|
+
name: str,
|
|
71
|
+
attributes: Optional[Attributes] = None,
|
|
72
|
+
timestamp: Optional[float] = None,
|
|
73
|
+
status: Optional[TraceStatus] = None,
|
|
74
|
+
) -> SpanCoreFields:
|
|
75
|
+
if attributes is None:
|
|
76
|
+
attributes = {}
|
|
77
|
+
if timestamp is None:
|
|
78
|
+
timestamp = time.time()
|
|
79
|
+
if status is None:
|
|
80
|
+
status = TraceStatus(status_code="OK")
|
|
81
|
+
return SpanCoreFields(
|
|
82
|
+
name=name,
|
|
83
|
+
attributes=attributes,
|
|
84
|
+
start_time=timestamp,
|
|
85
|
+
end_time=timestamp,
|
|
86
|
+
status=status,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
@contextmanager
|
|
90
|
+
def operation_context(
|
|
91
|
+
self,
|
|
92
|
+
name: str,
|
|
93
|
+
attributes: Optional[Attributes] = None,
|
|
94
|
+
start_time: Optional[float] = None,
|
|
95
|
+
end_time: Optional[float] = None,
|
|
96
|
+
) -> Iterator[DummySpanRecordingContext]:
|
|
97
|
+
start_time = start_time or time.time()
|
|
98
|
+
recording_context = DummySpanRecordingContext(name, attributes, start_time)
|
|
99
|
+
try:
|
|
100
|
+
yield recording_context
|
|
101
|
+
except Exception as exc:
|
|
102
|
+
recording_context.record_exception(exc)
|
|
103
|
+
recording_context.record_status("ERROR", str(exc))
|
|
104
|
+
raise
|
|
105
|
+
finally:
|
|
106
|
+
recording_context.finalize(end_time)
|