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.
Files changed (376) hide show
  1. gatewaysdk/__init__.py +540 -0
  2. gatewaysdk/adapter/__init__.py +15 -0
  3. gatewaysdk/adapter/base.py +94 -0
  4. gatewaysdk/adapter/messages.py +270 -0
  5. gatewaysdk/adapter/triplet.py +1026 -0
  6. gatewaysdk/algorithm/__init__.py +39 -0
  7. gatewaysdk/algorithm/apo/__init__.py +5 -0
  8. gatewaysdk/algorithm/apo/apo.py +898 -0
  9. gatewaysdk/algorithm/apo/prompts/apply_edit_variant01.poml +22 -0
  10. gatewaysdk/algorithm/apo/prompts/apply_edit_variant02.poml +18 -0
  11. gatewaysdk/algorithm/apo/prompts/text_gradient_variant01.poml +18 -0
  12. gatewaysdk/algorithm/apo/prompts/text_gradient_variant02.poml +16 -0
  13. gatewaysdk/algorithm/apo/prompts/text_gradient_variant03.poml +107 -0
  14. gatewaysdk/algorithm/base.py +262 -0
  15. gatewaysdk/algorithm/decorator.py +264 -0
  16. gatewaysdk/algorithm/evals/__init__.py +7 -0
  17. gatewaysdk/algorithm/evals/evals.py +217 -0
  18. gatewaysdk/algorithm/fast.py +250 -0
  19. gatewaysdk/algorithm/gepa/__init__.py +61 -0
  20. gatewaysdk/algorithm/gepa/adapter.py +495 -0
  21. gatewaysdk/algorithm/gepa/gepa.py +570 -0
  22. gatewaysdk/algorithm/gepa/lib/__init__.py +18 -0
  23. gatewaysdk/algorithm/gepa/lib/adapters/README.md +12 -0
  24. gatewaysdk/algorithm/gepa/lib/adapters/__init__.py +0 -0
  25. gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/README.md +341 -0
  26. gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/__init__.py +1 -0
  27. gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/anymaths_adapter.py +174 -0
  28. gatewaysdk/algorithm/gepa/lib/adapters/anymaths_adapter/requirements.txt +1 -0
  29. gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/README.md +0 -0
  30. gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/__init__.py +0 -0
  31. gatewaysdk/algorithm/gepa/lib/adapters/default_adapter/default_adapter.py +209 -0
  32. gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/README.md +7 -0
  33. gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/__init__.py +0 -0
  34. gatewaysdk/algorithm/gepa/lib/adapters/dspy_adapter/dspy_adapter.py +307 -0
  35. gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/README.md +99 -0
  36. gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/dspy_program_proposal_signature.py +137 -0
  37. gatewaysdk/algorithm/gepa/lib/adapters/dspy_full_program_adapter/full_program_adapter.py +268 -0
  38. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/GEPA_RAG.md +621 -0
  39. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/__init__.py +56 -0
  40. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/evaluation_metrics.py +226 -0
  41. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/generic_rag_adapter.py +496 -0
  42. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/rag_pipeline.py +238 -0
  43. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_store_interface.py +212 -0
  44. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/__init__.py +2 -0
  45. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/chroma_store.py +196 -0
  46. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/lancedb_store.py +422 -0
  47. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/milvus_store.py +409 -0
  48. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/qdrant_store.py +368 -0
  49. gatewaysdk/algorithm/gepa/lib/adapters/generic_rag_adapter/vector_stores/weaviate_store.py +418 -0
  50. gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/README.md +552 -0
  51. gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/__init__.py +37 -0
  52. gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/mcp_adapter.py +699 -0
  53. gatewaysdk/algorithm/gepa/lib/adapters/mcp_adapter/mcp_client.py +364 -0
  54. gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/README.md +9 -0
  55. gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/__init__.py +0 -0
  56. gatewaysdk/algorithm/gepa/lib/adapters/terminal_bench_adapter/terminal_bench_adapter.py +217 -0
  57. gatewaysdk/algorithm/gepa/lib/api.py +382 -0
  58. gatewaysdk/algorithm/gepa/lib/core/__init__.py +0 -0
  59. gatewaysdk/algorithm/gepa/lib/core/adapter.py +180 -0
  60. gatewaysdk/algorithm/gepa/lib/core/data_loader.py +74 -0
  61. gatewaysdk/algorithm/gepa/lib/core/engine.py +379 -0
  62. gatewaysdk/algorithm/gepa/lib/core/result.py +233 -0
  63. gatewaysdk/algorithm/gepa/lib/core/state.py +636 -0
  64. gatewaysdk/algorithm/gepa/lib/examples/__init__.py +0 -0
  65. gatewaysdk/algorithm/gepa/lib/examples/aime.py +24 -0
  66. gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/eval_default.py +111 -0
  67. gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/prompt-templates/instruction_prompt.txt +9 -0
  68. gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/prompt-templates/optimal_prompt.txt +24 -0
  69. gatewaysdk/algorithm/gepa/lib/examples/anymaths-bench/train_anymaths.py +177 -0
  70. gatewaysdk/algorithm/gepa/lib/examples/dspy_full_program_evolution/arc_agi.ipynb +25705 -0
  71. gatewaysdk/algorithm/gepa/lib/examples/dspy_full_program_evolution/example.ipynb +348 -0
  72. gatewaysdk/algorithm/gepa/lib/examples/mcp_adapter/__init__.py +4 -0
  73. gatewaysdk/algorithm/gepa/lib/examples/mcp_adapter/mcp_optimization_example.py +456 -0
  74. gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/RAG_GUIDE.md +613 -0
  75. gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/__init__.py +9 -0
  76. gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/rag_optimization.py +820 -0
  77. gatewaysdk/algorithm/gepa/lib/examples/rag_adapter/requirements-rag.txt +29 -0
  78. gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/prompt-templates/instruction_prompt.txt +16 -0
  79. gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/prompt-templates/terminus.txt +9 -0
  80. gatewaysdk/algorithm/gepa/lib/examples/terminal-bench/train_terminus.py +161 -0
  81. gatewaysdk/algorithm/gepa/lib/gepa_utils.py +117 -0
  82. gatewaysdk/algorithm/gepa/lib/logging/__init__.py +0 -0
  83. gatewaysdk/algorithm/gepa/lib/logging/experiment_tracker.py +187 -0
  84. gatewaysdk/algorithm/gepa/lib/logging/logger.py +75 -0
  85. gatewaysdk/algorithm/gepa/lib/logging/utils.py +103 -0
  86. gatewaysdk/algorithm/gepa/lib/proposer/__init__.py +0 -0
  87. gatewaysdk/algorithm/gepa/lib/proposer/base.py +31 -0
  88. gatewaysdk/algorithm/gepa/lib/proposer/merge.py +357 -0
  89. gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/__init__.py +0 -0
  90. gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/base.py +49 -0
  91. gatewaysdk/algorithm/gepa/lib/proposer/reflective_mutation/reflective_mutation.py +176 -0
  92. gatewaysdk/algorithm/gepa/lib/py.typed +0 -0
  93. gatewaysdk/algorithm/gepa/lib/strategies/__init__.py +0 -0
  94. gatewaysdk/algorithm/gepa/lib/strategies/batch_sampler.py +77 -0
  95. gatewaysdk/algorithm/gepa/lib/strategies/candidate_selector.py +50 -0
  96. gatewaysdk/algorithm/gepa/lib/strategies/component_selector.py +36 -0
  97. gatewaysdk/algorithm/gepa/lib/strategies/eval_policy.py +64 -0
  98. gatewaysdk/algorithm/gepa/lib/strategies/instruction_proposal.py +126 -0
  99. gatewaysdk/algorithm/gepa/lib/utils/__init__.py +10 -0
  100. gatewaysdk/algorithm/gepa/lib/utils/stop_condition.py +196 -0
  101. gatewaysdk/algorithm/gepa/tracing.py +105 -0
  102. gatewaysdk/algorithm/utils.py +177 -0
  103. gatewaysdk/algorithm/verl/__init__.py +5 -0
  104. gatewaysdk/algorithm/verl/interface.py +202 -0
  105. gatewaysdk/automations.py +111 -0
  106. gatewaysdk/benchmark_hub/README.md +88 -0
  107. gatewaysdk/benchmark_hub/__init__.py +119 -0
  108. gatewaysdk/benchmark_hub/_archive.py +189 -0
  109. gatewaysdk/benchmark_hub/_tar.py +6 -0
  110. gatewaysdk/benchmark_hub/client.py +992 -0
  111. gatewaysdk/benchmark_hub/dispatch_shard.py +34 -0
  112. gatewaysdk/benchmark_hub/eval_config.py +20 -0
  113. gatewaysdk/benchmark_hub/evals.py +351 -0
  114. gatewaysdk/benchmark_hub/harbor_adapter.py +673 -0
  115. gatewaysdk/benchmark_hub/path_utils.py +81 -0
  116. gatewaysdk/benchmark_hub/save_utils.py +101 -0
  117. gatewaysdk/benchmark_hub/verifiers_adapter.py +327 -0
  118. gatewaysdk/benchmark_hub/versioning.py +72 -0
  119. gatewaysdk/build.py +515 -0
  120. gatewaysdk/cli/__init__.py +58 -0
  121. gatewaysdk/cli/agent_runner.py +132 -0
  122. gatewaysdk/cli/http_client.py +115 -0
  123. gatewaysdk/cli/platform.py +4086 -0
  124. gatewaysdk/cli/prometheus.py +115 -0
  125. gatewaysdk/cli/release_gate.py +215 -0
  126. gatewaysdk/cli/store.py +131 -0
  127. gatewaysdk/cli/vllm.py +29 -0
  128. gatewaysdk/client.py +406 -0
  129. gatewaysdk/config.py +348 -0
  130. gatewaysdk/connectors/__init__.py +25 -0
  131. gatewaysdk/connectors/client.py +203 -0
  132. gatewaysdk/connectors/skill.py +25 -0
  133. gatewaysdk/connectors/template.py +106 -0
  134. gatewaysdk/context.py +606 -0
  135. gatewaysdk/emitter/__init__.py +43 -0
  136. gatewaysdk/emitter/annotation.py +370 -0
  137. gatewaysdk/emitter/exception.py +54 -0
  138. gatewaysdk/emitter/message.py +61 -0
  139. gatewaysdk/emitter/object.py +117 -0
  140. gatewaysdk/emitter/reward.py +320 -0
  141. gatewaysdk/env_var.py +156 -0
  142. gatewaysdk/environment/__init__.py +108 -0
  143. gatewaysdk/environment/_bundle.py +281 -0
  144. gatewaysdk/environment/_harbor.py +276 -0
  145. gatewaysdk/environment/_materialize.py +97 -0
  146. gatewaysdk/environment/_tar.py +33 -0
  147. gatewaysdk/environment/_world.py +346 -0
  148. gatewaysdk/environment/core.py +527 -0
  149. gatewaysdk/environment/errors.py +58 -0
  150. gatewaysdk/environment/runtime.py +150 -0
  151. gatewaysdk/environment/schema/__init__.py +35 -0
  152. gatewaysdk/environment/schema/__main__.py +225 -0
  153. gatewaysdk/environment/schema/_slack_fidelity.py +116 -0
  154. gatewaysdk/environment/schema/_slack_scenario.py +183 -0
  155. gatewaysdk/environment/schema/api.py +1628 -0
  156. gatewaysdk/environment/schema/batch.py +755 -0
  157. gatewaysdk/environment/schema/compiler.py +615 -0
  158. gatewaysdk/environment/schema/conform.py +428 -0
  159. gatewaysdk/environment/schema/connector.py +777 -0
  160. gatewaysdk/environment/schema/connectors/apple-business-manager/handlers.py +17 -0
  161. gatewaysdk/environment/schema/connectors/apple-business-manager/parity.json +28 -0
  162. gatewaysdk/environment/schema/connectors/apple-business-manager/provenance.json +233 -0
  163. gatewaysdk/environment/schema/connectors/apple-business-manager/scope.toml +112 -0
  164. gatewaysdk/environment/schema/connectors/apple-business-manager/world.json +1380 -0
  165. gatewaysdk/environment/schema/connectors/base.json +28 -0
  166. gatewaysdk/environment/schema/connectors/custom/handlers.py +18 -0
  167. gatewaysdk/environment/schema/connectors/custom/world.json +123 -0
  168. gatewaysdk/environment/schema/connectors/github/handlers.py +81 -0
  169. gatewaysdk/environment/schema/connectors/github/parity.json +37 -0
  170. gatewaysdk/environment/schema/connectors/github/provenance.json +134 -0
  171. gatewaysdk/environment/schema/connectors/github/scope.toml +158 -0
  172. gatewaysdk/environment/schema/connectors/github/world.json +5869 -0
  173. gatewaysdk/environment/schema/connectors/google-calendar/handlers.py +23 -0
  174. gatewaysdk/environment/schema/connectors/google-calendar/world.json +209 -0
  175. gatewaysdk/environment/schema/connectors/google-drive/handlers.py +18 -0
  176. gatewaysdk/environment/schema/connectors/google-drive/world.json +286 -0
  177. gatewaysdk/environment/schema/connectors/jamf/handlers.py +34 -0
  178. gatewaysdk/environment/schema/connectors/jamf/parity.json +49 -0
  179. gatewaysdk/environment/schema/connectors/jamf/provenance.json +181 -0
  180. gatewaysdk/environment/schema/connectors/jamf/scope.toml +128 -0
  181. gatewaysdk/environment/schema/connectors/jamf/world.json +2218 -0
  182. gatewaysdk/environment/schema/connectors/jira/handlers.py +28 -0
  183. gatewaysdk/environment/schema/connectors/jira/world.json +389 -0
  184. gatewaysdk/environment/schema/connectors/kandji/handlers.py +38 -0
  185. gatewaysdk/environment/schema/connectors/kandji/parity.json +29 -0
  186. gatewaysdk/environment/schema/connectors/kandji/provenance.json +152 -0
  187. gatewaysdk/environment/schema/connectors/kandji/scope.toml +120 -0
  188. gatewaysdk/environment/schema/connectors/kandji/world.json +765 -0
  189. gatewaysdk/environment/schema/connectors/linear/handlers.py +20 -0
  190. gatewaysdk/environment/schema/connectors/linear/world.json +363 -0
  191. gatewaysdk/environment/schema/connectors/microsoft-teams/fidelity.json +45 -0
  192. gatewaysdk/environment/schema/connectors/microsoft-teams/handlers.py +1 -0
  193. gatewaysdk/environment/schema/connectors/microsoft-teams/provenance.json +851 -0
  194. gatewaysdk/environment/schema/connectors/microsoft-teams/scope.md +231 -0
  195. gatewaysdk/environment/schema/connectors/microsoft-teams/teams-types.json +1710 -0
  196. gatewaysdk/environment/schema/connectors/microsoft-teams/world.json +858 -0
  197. gatewaysdk/environment/schema/connectors/netsuite/handlers.py +32 -0
  198. gatewaysdk/environment/schema/connectors/netsuite/parity.json +50 -0
  199. gatewaysdk/environment/schema/connectors/netsuite/provenance.json +137 -0
  200. gatewaysdk/environment/schema/connectors/netsuite/scope.toml +78 -0
  201. gatewaysdk/environment/schema/connectors/netsuite/world.json +16243 -0
  202. gatewaysdk/environment/schema/connectors/salesforce/handlers.py +806 -0
  203. gatewaysdk/environment/schema/connectors/salesforce/parity.json +46 -0
  204. gatewaysdk/environment/schema/connectors/salesforce/provenance.json +143 -0
  205. gatewaysdk/environment/schema/connectors/salesforce/scope.toml +174 -0
  206. gatewaysdk/environment/schema/connectors/salesforce/world.json +4695 -0
  207. gatewaysdk/environment/schema/connectors/slack/MODEL.md +236 -0
  208. gatewaysdk/environment/schema/connectors/slack/capabilities.json +1039 -0
  209. gatewaysdk/environment/schema/connectors/slack/handlers.py +762 -0
  210. gatewaysdk/environment/schema/connectors/slack/parity.json +65 -0
  211. gatewaysdk/environment/schema/connectors/slack/provenance.json +294 -0
  212. gatewaysdk/environment/schema/connectors/slack/scope.toml +44 -0
  213. gatewaysdk/environment/schema/connectors/slack/world.json +4993 -0
  214. gatewaysdk/environment/schema/connectors/workday/handlers.py +75 -0
  215. gatewaysdk/environment/schema/connectors/workday/parity.json +36 -0
  216. gatewaysdk/environment/schema/connectors/workday/provenance.json +179 -0
  217. gatewaysdk/environment/schema/connectors/workday/scope.toml +180 -0
  218. gatewaysdk/environment/schema/connectors/workday/world.json +806 -0
  219. gatewaysdk/environment/schema/data.py +593 -0
  220. gatewaysdk/environment/schema/extract.py +263 -0
  221. gatewaysdk/environment/schema/host.py +2437 -0
  222. gatewaysdk/environment/schema/host_surfaces.py +275 -0
  223. gatewaysdk/environment/schema/platform.py +1272 -0
  224. gatewaysdk/environment/schema/scaffold.py +250 -0
  225. gatewaysdk/environment/schema/skill.py +118 -0
  226. gatewaysdk/environment/schema/skills/agents/connector-template-author.md +202 -0
  227. gatewaysdk/environment/schema/skills/connector-schema-authoring/CONNECTORS.md +331 -0
  228. gatewaysdk/environment/schema/skills/connector-schema-authoring/CONVENTIONS.md +100 -0
  229. gatewaysdk/environment/schema/skills/connector-schema-authoring/SKILL.md +313 -0
  230. gatewaysdk/environment/schema/skills/world-data-ingestion/ROWS.md +223 -0
  231. gatewaysdk/environment/schema/skills/world-data-ingestion/SKILL.md +293 -0
  232. gatewaysdk/environment/schema/skills/worlds-getting-started/SKILL.md +390 -0
  233. gatewaysdk/environment/schema/slack.py +757 -0
  234. gatewaysdk/environment/schema/snapshot.py +479 -0
  235. gatewaysdk/environment/schema/store.py +904 -0
  236. gatewaysdk/environment/schema/tasks.py +525 -0
  237. gatewaysdk/environment/schema/tools_world.py +322 -0
  238. gatewaysdk/environment/schema/validation.py +577 -0
  239. gatewaysdk/environment/schema/worker.py +78 -0
  240. gatewaysdk/environment/schema/workers.py +500 -0
  241. gatewaysdk/environment/schema/world_tests.py +336 -0
  242. gatewaysdk/environments/__init__.py +24 -0
  243. gatewaysdk/environments/client.py +486 -0
  244. gatewaysdk/environments/types.py +318 -0
  245. gatewaysdk/execution/__init__.py +15 -0
  246. gatewaysdk/execution/base.py +64 -0
  247. gatewaysdk/execution/client_server.py +443 -0
  248. gatewaysdk/execution/events.py +69 -0
  249. gatewaysdk/execution/inter_process.py +16 -0
  250. gatewaysdk/execution/shared_memory.py +282 -0
  251. gatewaysdk/experiments/__init__.py +90 -0
  252. gatewaysdk/experiments/assignment.py +177 -0
  253. gatewaysdk/experiments/client.py +877 -0
  254. gatewaysdk/experiments/exposure.py +222 -0
  255. gatewaysdk/experiments/types.py +81 -0
  256. gatewaysdk/importers/__init__.py +49 -0
  257. gatewaysdk/importers/_normalize.py +91 -0
  258. gatewaysdk/importers/builder.py +173 -0
  259. gatewaysdk/importers/client.py +95 -0
  260. gatewaysdk/importers/langsmith.py +196 -0
  261. gatewaysdk/importers/recipes.py +249 -0
  262. gatewaysdk/instrumentation/__init__.py +300 -0
  263. gatewaysdk/instrumentation/agentops.py +314 -0
  264. gatewaysdk/instrumentation/agentops_langchain.py +45 -0
  265. gatewaysdk/instrumentation/base.py +119 -0
  266. gatewaysdk/instrumentation/litellm.py +83 -0
  267. gatewaysdk/instrumentation/registry.py +273 -0
  268. gatewaysdk/instrumentation/vllm.py +81 -0
  269. gatewaysdk/instrumentation/weave.py +500 -0
  270. gatewaysdk/integrations/__init__.py +15 -0
  271. gatewaysdk/integrations/gateway/__init__.py +11 -0
  272. gatewaysdk/integrations/gateway/client.py +171 -0
  273. gatewaysdk/integrations/tool_access.py +549 -0
  274. gatewaysdk/litagent/__init__.py +11 -0
  275. gatewaysdk/litagent/decorator.py +536 -0
  276. gatewaysdk/litagent/litagent.py +252 -0
  277. gatewaysdk/llm_proxy.py +1742 -0
  278. gatewaysdk/logging.py +370 -0
  279. gatewaysdk/memory.py +278 -0
  280. gatewaysdk/personas.py +186 -0
  281. gatewaysdk/platform/__init__.py +17 -0
  282. gatewaysdk/platform/builder.py +221 -0
  283. gatewaysdk/platform/compatibility.py +67 -0
  284. gatewaysdk/platform/manifest.py +185 -0
  285. gatewaysdk/platform/orchestrator.py +901 -0
  286. gatewaysdk/platform/registry.py +122 -0
  287. gatewaysdk/platform/worker.py +864 -0
  288. gatewaysdk/replay/__init__.py +1032 -0
  289. gatewaysdk/replay/pytest.py +56 -0
  290. gatewaysdk/reward.py +7 -0
  291. gatewaysdk/run.py +1781 -0
  292. gatewaysdk/runner/__init__.py +11 -0
  293. gatewaysdk/runner/agent.py +878 -0
  294. gatewaysdk/runner/base.py +182 -0
  295. gatewaysdk/runner/legacy.py +309 -0
  296. gatewaysdk/security.py +700 -0
  297. gatewaysdk/semconv.py +170 -0
  298. gatewaysdk/server.py +399 -0
  299. gatewaysdk/sessions.py +282 -0
  300. gatewaysdk/store/__init__.py +45 -0
  301. gatewaysdk/store/base.py +908 -0
  302. gatewaysdk/store/client_server.py +2093 -0
  303. gatewaysdk/store/collection/__init__.py +30 -0
  304. gatewaysdk/store/collection/base.py +587 -0
  305. gatewaysdk/store/collection/memory.py +970 -0
  306. gatewaysdk/store/collection/mongo.py +1412 -0
  307. gatewaysdk/store/collection_based.py +1823 -0
  308. gatewaysdk/store/gateway.py +983 -0
  309. gatewaysdk/store/gateway_listener.py +465 -0
  310. gatewaysdk/store/listener.py +58 -0
  311. gatewaysdk/store/memory.py +396 -0
  312. gatewaysdk/store/mongo.py +165 -0
  313. gatewaysdk/store/redis_stream.py +517 -0
  314. gatewaysdk/store/sqlite.py +3 -0
  315. gatewaysdk/store/threading.py +370 -0
  316. gatewaysdk/store/utils.py +142 -0
  317. gatewaysdk/tracer/__init__.py +14 -0
  318. gatewaysdk/tracer/base.py +286 -0
  319. gatewaysdk/tracer/dummy.py +106 -0
  320. gatewaysdk/tracer/otel.py +559 -0
  321. gatewaysdk/tracing/__init__.py +110 -0
  322. gatewaysdk/tracing/api.py +808 -0
  323. gatewaysdk/tracing/attributes.py +9 -0
  324. gatewaysdk/tracing/context.py +272 -0
  325. gatewaysdk/tracing/exporters/__init__.py +10 -0
  326. gatewaysdk/tracing/exporters/gateway.py +228 -0
  327. gatewaysdk/tracing/identity.py +288 -0
  328. gatewaysdk/tracing/init.py +620 -0
  329. gatewaysdk/tracing/instrumentors/__init__.py +15 -0
  330. gatewaysdk/tracing/instrumentors/claude_agent_sdk.py +766 -0
  331. gatewaysdk/tracing/instrumentors/instrumentation_principles.md +294 -0
  332. gatewaysdk/tracing/instrumentors/registry.py +352 -0
  333. gatewaysdk/tracing/mapping.py +729 -0
  334. gatewaysdk/tracing/processors.py +393 -0
  335. gatewaysdk/tracing/push.py +617 -0
  336. gatewaysdk/tracing/push_models.py +247 -0
  337. gatewaysdk/tracing/semconv.py +294 -0
  338. gatewaysdk/tracing/span_builder.py +356 -0
  339. gatewaysdk/trainer/__init__.py +6 -0
  340. gatewaysdk/trainer/init_utils.py +263 -0
  341. gatewaysdk/trainer/legacy.py +359 -0
  342. gatewaysdk/trainer/registry.py +12 -0
  343. gatewaysdk/trainer/trainer.py +638 -0
  344. gatewaysdk/types/__init__.py +63 -0
  345. gatewaysdk/types/core.py +556 -0
  346. gatewaysdk/types/resources.py +204 -0
  347. gatewaysdk/types/tracer.py +515 -0
  348. gatewaysdk/types/tracing.py +162 -0
  349. gatewaysdk/users.py +251 -0
  350. gatewaysdk/utils/__init__.py +1 -0
  351. gatewaysdk/utils/id.py +18 -0
  352. gatewaysdk/utils/metrics.py +1025 -0
  353. gatewaysdk/utils/otel.py +550 -0
  354. gatewaysdk/utils/otlp.py +556 -0
  355. gatewaysdk/utils/redact.py +22 -0
  356. gatewaysdk/utils/server_launcher.py +1045 -0
  357. gatewaysdk/utils/system_snapshot.py +90 -0
  358. gatewaysdk/verl/__init__.py +8 -0
  359. gatewaysdk/verl/__main__.py +6 -0
  360. gatewaysdk/verl/async_server.py +46 -0
  361. gatewaysdk/verl/config.yaml +27 -0
  362. gatewaysdk/verl/daemon.py +1154 -0
  363. gatewaysdk/verl/dataset.py +44 -0
  364. gatewaysdk/verl/entrypoint.py +248 -0
  365. gatewaysdk/verl/trainer.py +549 -0
  366. gatewaysdk/world_browser.py +748 -0
  367. gatewaysdk/world_data.py +453 -0
  368. gatewaysdk/world_sessions.py +978 -0
  369. gatewaysdk/world_tasks.py +285 -0
  370. gatewaysdk/world_tools.py +115 -0
  371. gatewaysdk/worlds.py +639 -0
  372. gatewaysdk-0.3.2.dist-info/METADATA +236 -0
  373. gatewaysdk-0.3.2.dist-info/RECORD +376 -0
  374. gatewaysdk-0.3.2.dist-info/WHEEL +4 -0
  375. gatewaysdk-0.3.2.dist-info/entry_points.txt +5 -0
  376. 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)