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,288 @@
|
|
|
1
|
+
# Copyright (c) Gateway. All rights reserved.
|
|
2
|
+
|
|
3
|
+
"""Agent identity for GatewaySDK tracing.
|
|
4
|
+
|
|
5
|
+
The agent is the one identity a developer declares — everything else
|
|
6
|
+
(user, session, context items) flows inherently:
|
|
7
|
+
|
|
8
|
+
- **Agent**: declared once via ``tracing.init(agent=...)`` or the
|
|
9
|
+
``GATEWAY_AGENT_ID`` / ``GATEWAY_AGENT_NAME`` / ``GATEWAY_AGENT_VERSION``
|
|
10
|
+
environment variables. Stamped on every span and registered with the
|
|
11
|
+
platform control plane at init.
|
|
12
|
+
- **User**: resolved from ``GATEWAY_USER_ID`` (or set per-request by
|
|
13
|
+
middleware / explicitly per span). Never hand-stamped in app code.
|
|
14
|
+
|
|
15
|
+
The identity is process-wide: one process is one agent. It is stored at
|
|
16
|
+
module level (not a context variable) and read by the
|
|
17
|
+
``TracingContextSpanProcessor`` on every span start.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import json
|
|
23
|
+
import logging
|
|
24
|
+
import os
|
|
25
|
+
import re
|
|
26
|
+
import threading
|
|
27
|
+
from dataclasses import dataclass
|
|
28
|
+
from typing import Any, Optional, Union
|
|
29
|
+
|
|
30
|
+
logger = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
_AGENT_ID_RE = re.compile(r"[^a-z0-9._-]+")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass(frozen=True)
|
|
36
|
+
class AgentIdentity:
|
|
37
|
+
"""The declared identity of the agent running in this process."""
|
|
38
|
+
|
|
39
|
+
id: str
|
|
40
|
+
name: Optional[str] = None
|
|
41
|
+
version: Optional[str] = None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
_current_agent: Optional[AgentIdentity] = None
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def resolve_agent_identity(
|
|
48
|
+
agent: Union[str, dict, AgentIdentity, None] = None,
|
|
49
|
+
) -> Optional[AgentIdentity]:
|
|
50
|
+
"""Resolve the agent identity: explicit argument first, env second.
|
|
51
|
+
|
|
52
|
+
Environment variables: ``GATEWAY_AGENT_ID``, ``GATEWAY_AGENT_NAME``,
|
|
53
|
+
``GATEWAY_AGENT_VERSION``. Returns None when nothing declares an agent —
|
|
54
|
+
tracing still works, traces are just not agent-attributed.
|
|
55
|
+
"""
|
|
56
|
+
if isinstance(agent, AgentIdentity):
|
|
57
|
+
return agent
|
|
58
|
+
if isinstance(agent, dict):
|
|
59
|
+
agent_id = agent.get("id") or agent.get("agent_id")
|
|
60
|
+
if not agent_id:
|
|
61
|
+
raise ValueError("agent dict requires an 'id' key")
|
|
62
|
+
return AgentIdentity(
|
|
63
|
+
id=str(agent_id),
|
|
64
|
+
name=agent.get("name"),
|
|
65
|
+
version=agent.get("version"),
|
|
66
|
+
)
|
|
67
|
+
if isinstance(agent, str) and agent.strip():
|
|
68
|
+
return AgentIdentity(
|
|
69
|
+
id=agent.strip(),
|
|
70
|
+
name=os.getenv("GATEWAY_AGENT_NAME"),
|
|
71
|
+
version=os.getenv("GATEWAY_AGENT_VERSION"),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
env_id = os.getenv("GATEWAY_AGENT_ID")
|
|
75
|
+
if env_id and env_id.strip():
|
|
76
|
+
return AgentIdentity(
|
|
77
|
+
id=env_id.strip(),
|
|
78
|
+
name=os.getenv("GATEWAY_AGENT_NAME"),
|
|
79
|
+
version=os.getenv("GATEWAY_AGENT_VERSION"),
|
|
80
|
+
)
|
|
81
|
+
return None
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def set_agent_identity(identity: Optional[AgentIdentity]) -> None:
|
|
85
|
+
"""Set the process-wide agent identity (called by ``tracing.init``)."""
|
|
86
|
+
global _current_agent
|
|
87
|
+
_current_agent = identity
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def get_agent_identity() -> Optional[AgentIdentity]:
|
|
91
|
+
"""The process-wide agent identity, or None when undeclared."""
|
|
92
|
+
return _current_agent
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
_current_session_id: Optional[str] = None
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def initialize_ambient_session() -> str:
|
|
99
|
+
"""Establish the process-wide ambient session id (called by init).
|
|
100
|
+
|
|
101
|
+
Sessions auto-populate: every trace belongs to a session without any
|
|
102
|
+
caller code. Resolution: GATEWAY_SESSION_ID env (explicit pin, e.g. a
|
|
103
|
+
stable name across restarts) → auto-generated per process. Finer-grained
|
|
104
|
+
boundaries (request middleware, run()/rollout()) override this ambient
|
|
105
|
+
default per span.
|
|
106
|
+
"""
|
|
107
|
+
global _current_session_id
|
|
108
|
+
env_session = os.getenv("GATEWAY_SESSION_ID")
|
|
109
|
+
if env_session and env_session.strip():
|
|
110
|
+
_current_session_id = env_session.strip()
|
|
111
|
+
elif _current_session_id is None:
|
|
112
|
+
from uuid import uuid4
|
|
113
|
+
|
|
114
|
+
agent = get_agent_identity()
|
|
115
|
+
prefix = f"{agent.id}-" if agent else ""
|
|
116
|
+
_current_session_id = f"{prefix}{uuid4().hex[:12]}"
|
|
117
|
+
return _current_session_id
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def get_ambient_session_id() -> Optional[str]:
|
|
121
|
+
"""The process-wide session id, or None before ``tracing.init``."""
|
|
122
|
+
return _current_session_id
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def reset_ambient_session() -> None:
|
|
126
|
+
"""Testing hook: clear the ambient session."""
|
|
127
|
+
global _current_session_id
|
|
128
|
+
_current_session_id = None
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
# Per-context user identity set via identify() — ContextVar so concurrent
|
|
132
|
+
# requests serving different users never bleed into each other.
|
|
133
|
+
from contextvars import ContextVar
|
|
134
|
+
|
|
135
|
+
_current_user_id: ContextVar[Optional[str]] = ContextVar(
|
|
136
|
+
"gateway_current_user_id", default=None
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def resolve_user_id() -> Optional[str]:
|
|
141
|
+
"""The active end-user id: identify() context > GATEWAY_USER_ID env.
|
|
142
|
+
|
|
143
|
+
Per-request user attribution (e.g. from auth middleware) can also
|
|
144
|
+
override per span by setting the ``gateway.user.id`` attribute directly —
|
|
145
|
+
explicit set wins over the ambient default stamped at span start.
|
|
146
|
+
"""
|
|
147
|
+
contextual = _current_user_id.get()
|
|
148
|
+
if contextual:
|
|
149
|
+
return contextual
|
|
150
|
+
user_id = os.getenv("GATEWAY_USER_ID")
|
|
151
|
+
return user_id.strip() if user_id and user_id.strip() else None
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def identify(
|
|
155
|
+
user_id: str,
|
|
156
|
+
*,
|
|
157
|
+
attributes: Optional[dict] = None,
|
|
158
|
+
display_name: Optional[str] = None,
|
|
159
|
+
email: Optional[str] = None,
|
|
160
|
+
) -> None:
|
|
161
|
+
"""Attribute everything that follows (and the current trace) to a user.
|
|
162
|
+
|
|
163
|
+
- Sets the user for all spans started in this context, and stamps the
|
|
164
|
+
currently open span so the in-flight trace is attributed immediately.
|
|
165
|
+
- When ``attributes``/``display_name``/``email`` are given, the user's
|
|
166
|
+
platform profile is updated in the background (attributes merge with
|
|
167
|
+
what's stored — ideal for incremental ROI facts like plan or
|
|
168
|
+
account_value). Requires GATEWAY_HOST/GATEWAY_PUBLIC_KEY/
|
|
169
|
+
GATEWAY_SECRET_KEY for the profile update; tracing attribution works
|
|
170
|
+
without them.
|
|
171
|
+
|
|
172
|
+
Example::
|
|
173
|
+
|
|
174
|
+
gatewaysdk.identify(
|
|
175
|
+
"user-123",
|
|
176
|
+
attributes={"plan": "enterprise", "account_value": "48000"},
|
|
177
|
+
)
|
|
178
|
+
"""
|
|
179
|
+
cleaned = user_id.strip()
|
|
180
|
+
if not cleaned:
|
|
181
|
+
return
|
|
182
|
+
_current_user_id.set(cleaned)
|
|
183
|
+
|
|
184
|
+
# Stamp the open span so the in-flight trace is upserted with the user —
|
|
185
|
+
# ingestion treats user.id on ANY span as a trace-level update.
|
|
186
|
+
try:
|
|
187
|
+
from opentelemetry import trace as _otel_trace
|
|
188
|
+
|
|
189
|
+
span = _otel_trace.get_current_span()
|
|
190
|
+
if span is not None and span.get_span_context().is_valid:
|
|
191
|
+
span.set_attribute("gateway.user.id", cleaned)
|
|
192
|
+
except Exception: # pragma: no cover - tracing not initialized
|
|
193
|
+
logger.debug("identify(): no active span to stamp", exc_info=True)
|
|
194
|
+
|
|
195
|
+
if attributes or display_name or email:
|
|
196
|
+
def _push_profile() -> None:
|
|
197
|
+
try:
|
|
198
|
+
from ..users import UsersClient
|
|
199
|
+
|
|
200
|
+
UsersClient.from_env().update(
|
|
201
|
+
cleaned,
|
|
202
|
+
display_name=display_name,
|
|
203
|
+
email=email,
|
|
204
|
+
attributes={
|
|
205
|
+
key: str(value) for key, value in (attributes or {}).items()
|
|
206
|
+
},
|
|
207
|
+
)
|
|
208
|
+
except Exception:
|
|
209
|
+
logger.debug(
|
|
210
|
+
"identify(): profile update failed", exc_info=True
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
threading.Thread(
|
|
214
|
+
target=_push_profile, name="gateway-identify", daemon=True
|
|
215
|
+
).start()
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def register_agent_with_platform(
|
|
219
|
+
identity: AgentIdentity,
|
|
220
|
+
*,
|
|
221
|
+
host: Optional[str] = None,
|
|
222
|
+
public_key: Optional[str] = None,
|
|
223
|
+
secret_key: Optional[str] = None,
|
|
224
|
+
) -> None:
|
|
225
|
+
"""Best-effort, non-blocking registration with the platform control plane.
|
|
226
|
+
|
|
227
|
+
Upserts the agent (idempotent by project + name) via
|
|
228
|
+
``POST /api/public/agents/register`` so it appears on the Agents page
|
|
229
|
+
before its first trace, with version history in the manifest. Failures
|
|
230
|
+
are logged at debug level and never break tracing.
|
|
231
|
+
"""
|
|
232
|
+
resolved_host = host or os.getenv("GATEWAY_HOST")
|
|
233
|
+
resolved_public = public_key or os.getenv("GATEWAY_PUBLIC_KEY")
|
|
234
|
+
resolved_secret = secret_key or os.getenv("GATEWAY_SECRET_KEY")
|
|
235
|
+
if not (resolved_host and resolved_public and resolved_secret):
|
|
236
|
+
logger.debug(
|
|
237
|
+
"Agent registration skipped: missing GATEWAY_HOST/PUBLIC_KEY/SECRET_KEY"
|
|
238
|
+
)
|
|
239
|
+
return
|
|
240
|
+
|
|
241
|
+
def _register() -> None:
|
|
242
|
+
import base64
|
|
243
|
+
from urllib import request as urllib_request
|
|
244
|
+
|
|
245
|
+
image_name = _AGENT_ID_RE.sub("-", identity.id.lower()).strip("-") or "agent"
|
|
246
|
+
payload: dict[str, Any] = {
|
|
247
|
+
"name": identity.id,
|
|
248
|
+
# The control plane requires a container image reference; SDK
|
|
249
|
+
# declared agents are not containerized, so a stable synthetic
|
|
250
|
+
# ref keeps the upsert idempotent.
|
|
251
|
+
"image": f"gateway/{image_name}:declared",
|
|
252
|
+
"capabilities": ["gateway_tracing"],
|
|
253
|
+
"manifest": {
|
|
254
|
+
"source": "gatewaysdk.tracing.init",
|
|
255
|
+
"agent": {
|
|
256
|
+
"id": identity.id,
|
|
257
|
+
"name": identity.name,
|
|
258
|
+
"version": identity.version,
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
"resources": {"runtime": "sdk"},
|
|
262
|
+
}
|
|
263
|
+
if identity.name:
|
|
264
|
+
payload["description"] = identity.name
|
|
265
|
+
|
|
266
|
+
token = base64.b64encode(
|
|
267
|
+
f"{resolved_public}:{resolved_secret}".encode("utf-8")
|
|
268
|
+
).decode("utf-8")
|
|
269
|
+
req = urllib_request.Request(
|
|
270
|
+
f"{resolved_host.rstrip('/')}/api/public/agents/register",
|
|
271
|
+
data=json.dumps(payload).encode("utf-8"),
|
|
272
|
+
headers={
|
|
273
|
+
"Authorization": f"Basic {token}",
|
|
274
|
+
"Content-Type": "application/json",
|
|
275
|
+
},
|
|
276
|
+
method="POST",
|
|
277
|
+
)
|
|
278
|
+
try:
|
|
279
|
+
with urllib_request.urlopen(req, timeout=10) as response:
|
|
280
|
+
response.read()
|
|
281
|
+
logger.debug("Registered agent %s with platform", identity.id)
|
|
282
|
+
except Exception as exc: # noqa: BLE001 — registration must never break apps
|
|
283
|
+
logger.debug("Agent registration failed (non-fatal): %s", exc)
|
|
284
|
+
|
|
285
|
+
thread = threading.Thread(
|
|
286
|
+
target=_register, name="gatewaysdk-agent-register", daemon=True
|
|
287
|
+
)
|
|
288
|
+
thread.start()
|