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,322 @@
1
+ """A mock-tools world on the World Host.
2
+
3
+ A mock-tools bundle (``gateway-env.toml`` at its root, ``tools/*.py`` handlers,
4
+ ``db/`` and ``verifiers/*.sql``) has no HTTP surface: an agent reaches it
5
+ through the ``tools`` surface, the platform's ``call``/``grade``/``reset``/
6
+ ``seed`` rendezvous. On the pod engine that rendezvous is a runner sidecar and
7
+ ``deploy/benchmark-runner/engines/schema_session.py``; on the host it is this
8
+ module, driven by :class:`~gatewaysdk.environment.schema.host.WorldHost`.
9
+
10
+ The session contract is the runner's: ``call`` executes a handler through the
11
+ schema contract, ``grade`` runs the task's verifiers, ``reset`` copies the
12
+ template back and re-arms the task context, ``seed`` lands rows through the
13
+ contract. The handlers are world-authored code, so a tools version always
14
+ lives in a version worker; the supervisor only detects the kind.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import json
20
+ import shutil
21
+ import uuid
22
+ from collections.abc import Callable
23
+ from dataclasses import dataclass, field
24
+ from pathlib import Path
25
+ from typing import Any
26
+
27
+ from .. import _bundle
28
+ from .._materialize import materialize_template
29
+ from .._world import World
30
+ from ..errors import WorldStartError
31
+ from . import snapshot as snapshots
32
+ from .compiler import ContractError, bundle_mode, check_bundle, fail
33
+ from .data import seed_batch
34
+
35
+ Handler = Callable[..., Any]
36
+
37
+ #: The reward key the scalar goes under; a verifier may not claim it.
38
+ REWARD = "reward"
39
+ #: The opt-in table a bundle declares to read the active task from SQL.
40
+ TASK_CONTEXT_TABLE = "benchmark_runtime_context"
41
+
42
+
43
+ @dataclass(frozen=True)
44
+ class ToolsTask:
45
+ """One task of a mock-tools bundle: the prompt and the checks that grade it.
46
+ Mirrors the runner's ``MockTask`` minus the eval-loop fields (user
47
+ simulation, dependency worlds), which a session does not run."""
48
+
49
+ id: str
50
+ prompt: str
51
+ verifier: str | None = None
52
+ verifiers: tuple[str, ...] = ()
53
+ metadata: dict[str, Any] = field(default_factory=dict)
54
+
55
+ def selected(self, all_verifiers: list[str]) -> list[str]:
56
+ """The verifiers this task grades with: its own list, else the
57
+ primary one, else every verifier the bundle ships."""
58
+ if self.verifiers:
59
+ return list(self.verifiers)
60
+ if self.verifier is not None:
61
+ return [self.verifier]
62
+ return list(all_verifiers)
63
+
64
+
65
+ @dataclass
66
+ class ToolsVersion:
67
+ """A mock-tools version as the host caches it: the bundle, its tasks and
68
+ verifiers, the materialized template every session copies, and (in a
69
+ worker) the loaded handlers."""
70
+
71
+ bundle: Path
72
+ manifest: _bundle.EnvManifest
73
+ verifiers: list[str]
74
+ tasks: dict[str, ToolsTask]
75
+ template: Path
76
+ handlers: dict[str, Handler] | None = None
77
+
78
+
79
+ def is_tools_bundle(bundle: Path) -> bool:
80
+ return (bundle / "gateway-env.toml").is_file() and not (bundle / "gateway-api-world.toml").is_file()
81
+
82
+
83
+ def verifier_names(bundle: Path) -> list[str]:
84
+ verifiers_dir = bundle / "verifiers"
85
+ if not verifiers_dir.is_dir():
86
+ return []
87
+ return sorted(p.stem for p in verifiers_dir.glob("*.sql"))
88
+
89
+
90
+ def _task(raw: dict, index: int) -> ToolsTask | None:
91
+ prompt = raw.get("request") or raw.get("prompt") or raw.get("instruction") or raw.get("goal")
92
+ if not isinstance(prompt, str) or not prompt.strip():
93
+ return None
94
+ task_id = str(raw.get("id") or raw.get("name") or f"task-{index}")
95
+ verifier = raw.get("verifier")
96
+ listed = raw.get("verifiers")
97
+ metadata = raw.get("metadata")
98
+ return ToolsTask(
99
+ id=task_id,
100
+ prompt=prompt.strip(),
101
+ verifier=verifier if isinstance(verifier, str) and verifier.strip() else None,
102
+ verifiers=(
103
+ tuple(dict.fromkeys(str(v).strip() for v in listed if str(v).strip())) if isinstance(listed, list) else ()
104
+ ),
105
+ metadata=metadata if isinstance(metadata, dict) else {},
106
+ )
107
+
108
+
109
+ def _tasks_from_rows(rows: list) -> list[ToolsTask]:
110
+ out = []
111
+ for index, raw in enumerate(rows):
112
+ task = _task(raw, index) if isinstance(raw, dict) else None
113
+ if task is not None:
114
+ out.append(task)
115
+ return out
116
+
117
+
118
+ def load_tasks(bundle: Path, manifest: _bundle.EnvManifest, verifiers: list[str]) -> dict[str, ToolsTask]:
119
+ """The bundle's tasks, in the runner's precedence: ``[[tasks]]`` in the
120
+ manifest, else ``tasks.jsonl`` / ``tasks.json``, else one task per
121
+ verifier. A bundle with neither has nothing to grade and is refused."""
122
+ declared = manifest.raw.get("tasks")
123
+ tasks = _tasks_from_rows(declared) if isinstance(declared, list) else []
124
+ if not tasks:
125
+ for name in ("tasks.jsonl", "tasks.json"):
126
+ path = bundle / name
127
+ if not path.is_file():
128
+ continue
129
+ text = path.read_text(encoding="utf-8")
130
+ if name.endswith(".jsonl"):
131
+ rows = [json.loads(line) for line in text.splitlines() if line.strip()]
132
+ else:
133
+ data = json.loads(text)
134
+ rows = data if isinstance(data, list) else data.get("tasks", [])
135
+ tasks = _tasks_from_rows(rows)
136
+ if tasks:
137
+ break
138
+ if not tasks:
139
+ tasks = [
140
+ ToolsTask(
141
+ id=name,
142
+ prompt=f"Drive the environment into the state checked by the verifier '{name}'.",
143
+ verifier=name,
144
+ )
145
+ for name in verifiers
146
+ ]
147
+ if not tasks:
148
+ fail(
149
+ "host",
150
+ "mock-tools bundle declares no tasks and ships no verifiers/*.sql: nothing to grade",
151
+ )
152
+ by_id: dict[str, ToolsTask] = {}
153
+ for task in tasks:
154
+ if task.id in by_id:
155
+ fail("host", f"task id '{task.id}' is declared twice")
156
+ by_id[task.id] = task
157
+ return by_id
158
+
159
+
160
+ def load_tools_version(
161
+ bundle: Path,
162
+ template: Path,
163
+ snapshot: dict[str, str] | None,
164
+ *,
165
+ run_handlers: bool,
166
+ ) -> ToolsVersion:
167
+ """Cache a mock-tools version: verify and pin its snapshot, materialize the
168
+ template once, read its tasks, and in a worker import its handlers."""
169
+ if not is_tools_bundle(bundle):
170
+ fail("host", f"{bundle} is not a mock-tools bundle (no gateway-env.toml)")
171
+ manifest = _bundle.parse_manifest(bundle)
172
+ if manifest.raw.get("dependencies"):
173
+ fail("host", "the World Host does not open task sets with dependency worlds yet; use the pod engine")
174
+ if bundle_mode(bundle) is None:
175
+ fail(
176
+ "host",
177
+ "the World Host opens schema-backed mock-tools worlds only ([schema] language in "
178
+ "gateway-env.toml); a db/schema.sql world runs on the pod engine",
179
+ )
180
+ contract = check_bundle(bundle)
181
+ if snapshot:
182
+ snapshots.fetch(bundle, contract, snapshot["url"], snapshot["sha256"], snapshot["digest"])
183
+ if not template.is_file():
184
+ materialize_template(bundle, template, require_sql=True)
185
+ verifiers = verifier_names(bundle)
186
+ if REWARD in verifiers:
187
+ fail("host", f"verifier name '{REWARD}' is reserved for the scalar grade")
188
+ tasks = load_tasks(bundle, manifest, verifiers)
189
+ for task in tasks.values():
190
+ unknown = set(task.selected(verifiers)) - set(verifiers)
191
+ if unknown:
192
+ fail("host", f"task '{task.id}' names verifiers the bundle lacks: {', '.join(sorted(unknown))}")
193
+ handlers = None
194
+ if run_handlers:
195
+ try:
196
+ handlers = _bundle.load_handlers(bundle, manifest)
197
+ except WorldStartError as error:
198
+ fail("host", str(error))
199
+ return ToolsVersion(
200
+ bundle=bundle,
201
+ manifest=manifest,
202
+ verifiers=verifiers,
203
+ tasks=tasks,
204
+ template=template,
205
+ handlers=handlers,
206
+ )
207
+
208
+
209
+ class _EnvHost:
210
+ """What :class:`World` reads of an ``Environment``: the template, a scratch
211
+ dir, the handlers, the bundle path, and always-``env`` routing."""
212
+
213
+ def __init__(self, version: ToolsVersion, worlds_dir: Path) -> None:
214
+ self.bundle_path = version.bundle
215
+ self._worlds_dir = worlds_dir
216
+ self._template_db = version.template
217
+ self._handlers = version.handlers or {}
218
+
219
+ def resolve_route(self, tool_name: str) -> str:
220
+ return "env"
221
+
222
+ def _record_route(self, *args: Any, **kwargs: Any) -> None:
223
+ return None
224
+
225
+
226
+ class ToolsWorld:
227
+ """One session of a mock-tools version: a copy of the template in the
228
+ session's own directory, executed through the bundle's handlers."""
229
+
230
+ def __init__(self, version: ToolsVersion, session_dir: Path, task: str) -> None:
231
+ if version.handlers is None:
232
+ fail("host", "a mock-tools session runs world-authored handlers; only a version worker opens one")
233
+ selected = version.tasks.get(task)
234
+ if selected is None:
235
+ fail("host", f"no task '{task}' in this world; it has {', '.join(sorted(version.tasks))}")
236
+ raise AssertionError # fail() never returns
237
+ self.version = version
238
+ self.task = selected
239
+ self._dir = Path(session_dir)
240
+ self._dir.mkdir(parents=True, exist_ok=True)
241
+ self.world = World(_EnvHost(version, self._dir), world_id=uuid.uuid4().hex) # type: ignore[arg-type]
242
+ self._arm()
243
+
244
+ def _arm(self) -> None:
245
+ """Write the active task into the bundle's opt-in context table, so its
246
+ SQL verifiers can key off the scenario without a tool that sets it."""
247
+ conn = self.world._conn
248
+ declared = conn.execute(
249
+ "SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?", (TASK_CONTEXT_TABLE,)
250
+ ).fetchall()
251
+ if not declared:
252
+ return
253
+ scenario_id = str(self.task.metadata.get("scenario_id") or self.task.id)
254
+ conn.execute(f"DELETE FROM {TASK_CONTEXT_TABLE}")
255
+ conn.execute(
256
+ f"INSERT INTO {TASK_CONTEXT_TABLE} (context_key, scenario_id) VALUES ('active_task', ?)",
257
+ (scenario_id,),
258
+ )
259
+
260
+ def call(self, tool: str, args: dict) -> dict:
261
+ if tool not in (self.version.handlers or {}):
262
+ known = ", ".join(sorted(self.version.handlers or {})) or "(none)"
263
+ fail("host", f"unknown tool '{tool}'; this world serves: {known}")
264
+ try:
265
+ result = self.world.execute(tool, args)
266
+ except ContractError:
267
+ raise
268
+ except Exception as error: # noqa: BLE001 - the handler's failure is the call's answer
269
+ return {"status": 500, "body": {"error": str(error)[:2000]}}
270
+ return {"status": 200, "body": result}
271
+
272
+ def grade(self) -> dict:
273
+ rewards: dict[str, float | None] = {}
274
+ for name in self.task.selected(self.version.verifiers):
275
+ rewards[name] = self.world.verify(name).score
276
+ if self.task.verifier is not None and self.task.verifier in rewards:
277
+ reward = rewards[self.task.verifier]
278
+ else:
279
+ numeric = [s for s in rewards.values() if isinstance(s, (int, float))]
280
+ reward = sum(numeric) / len(numeric) if numeric else None
281
+ return {REWARD: reward, "rewards": rewards}
282
+
283
+ def reset(self) -> dict:
284
+ self.world.reset()
285
+ self._arm()
286
+ return {"reset": True}
287
+
288
+ def export(self, destination: Path) -> Path:
289
+ """The session's state as one sqlite file, taken consistently."""
290
+ return self.world.snapshot(destination)
291
+
292
+ def restore(self, source: Path) -> None:
293
+ """Continue from a file :meth:`export` wrote."""
294
+ self.world.restore(source)
295
+ self._arm()
296
+
297
+ def seed(self, args: dict) -> dict:
298
+ rows = args.get("rows")
299
+ mode = args.get("mode", "append")
300
+ if not isinstance(rows, dict):
301
+ fail("host", "seed needs args.rows as {entity: [row, ...]}")
302
+ store, contract = self.world.store, self.world.contract
303
+ if store is None or contract is None:
304
+ fail("host", "seed needs a schema-backed world (gateway-world/1); this bundle has none")
305
+ raise AssertionError # fail() never returns
306
+ batch = seed_batch(store, contract, rows, mode, batch_id=f"host-seed-{uuid.uuid4().hex}")
307
+ applied = store.apply_batch(batch)
308
+ return {
309
+ "seeded": applied.get("applied", sum(len(v) for v in rows.values())),
310
+ "mode": mode,
311
+ "entity_counts": {entity: len(store.list(entity)) for entity in rows if entity in contract.entities},
312
+ }
313
+
314
+ def state(self) -> dict:
315
+ store, contract = self.world.store, self.world.contract
316
+ if store is None or contract is None:
317
+ return {"entities": {}}
318
+ return {"entities": {entity: store.list(entity) for entity in contract.entities}}
319
+
320
+ def close(self) -> None:
321
+ self.world.close()
322
+ shutil.rmtree(self._dir, ignore_errors=True)