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,22 @@
1
+ <poml>
2
+ <p>Revise the given prompt template using the critique as constraints and improvement guide.</p>
3
+ <cp caption="Revision Rules">
4
+ <list listStyle="decimal">
5
+ <item>Rewrite or restructure the prompt if critique implies it.</item>
6
+ <item>Explicitly include any requested output format, structure, or word limit, if requested by the critique.</item>
7
+ <item>Prioritize mechanism-first phrasing: define what to do, then how to do it.</item>
8
+ <item>Preserve placeholder variables inside curly brackets.</item>
9
+ </list>
10
+ </cp>
11
+ <output-format>
12
+ Return only the improved prompt template with placeholders intact. Do not include other explanations on how you did it, or headers and introductory texts.
13
+ </output-format>
14
+ <human-msg>
15
+ <cp caption="Prompt Template">
16
+ <text whiteSpace="pre">{{ prompt_template }}</text>
17
+ </cp>
18
+ <cp caption="Critique">
19
+ <text whiteSpace="pre">{{ critique }}</text>
20
+ </cp>
21
+ </human-msg>
22
+ </poml>
@@ -0,0 +1,18 @@
1
+ <!-- Conservative Edit Prompt -->
2
+
3
+ <poml>
4
+ <p>Revise the prompt to address ONE critique point clearly and effectively. Preserve all variable names in curly-brackets.</p>
5
+ <p>Do not address more than one critique point. Focus on the single most critical issue.</p>
6
+ <p>Keep the new prompt close in tone, length, and structure to the original.</p>
7
+ <output-format>
8
+ Return only the revised full prompt. Do not include explanations, comparisons, or other text.
9
+ </output-format>
10
+ <human-msg>
11
+ <cp caption="PROMPT" level="3">
12
+ <text whiteSpace="pre">{{ prompt_template }}</text>
13
+ </cp>
14
+ <cp caption="CRITIQUE" level="3">
15
+ <text whiteSpace="pre">{{ critique }}</text>
16
+ </cp>
17
+ </human-msg>
18
+ </poml>
@@ -0,0 +1,18 @@
1
+ <poml>
2
+ <p>You optimize a prompt template.</p>
3
+ <cp caption="Original Prompt Template">
4
+ <text whiteSpace="pre">{{ prompt_template }}</text>
5
+ </cp>
6
+ <cp caption="Experiments with Original Prompt Template">
7
+ <cp for="experiment in experiments" caption="Experiment {{ loop.index + 1 }}">
8
+ <p>This experiment has {{ experiment.status }}. It gets a final reward: {{ experiment.final_reward }}</p>
9
+ <cp caption="Rollout Traces (Chat Messages, Grader Requests included)">
10
+ <object data="{{ experiment.messages }}" />
11
+ </cp>
12
+ </cp>
13
+ </cp>
14
+ <cp caption="Your Task">
15
+ Produce a brief critique listing specific causes for the error or ways to raise reward next time.
16
+ Return a bullet list with concrete, testable changes (format, constraints, ordering, definitions).
17
+ </cp>
18
+ </poml>
@@ -0,0 +1,16 @@
1
+ <poml>
2
+ <role>You are a prompt engineer.</role>
3
+ <task>Analyze where the current prompt failed to elicit the right mechanism.</task>
4
+ <cp caption="Current Prompt Template">
5
+ <text whiteSpace="pre">{{ prompt_template }}</text>
6
+ </cp>
7
+ <cp caption="Sample Runs with Current Prompt Template">
8
+ <p>The following are the OpenTelemetry spans collected from the sample runs with the current prompt template. They should contain both prompt, responses and rewards.</p>
9
+ <cp for="experiment in experiments" caption="Sample Run #{{ loop.index + 1 }} Diagnostics">
10
+ <object for="span in experiment.spans" data="{{ span }}" />
11
+ </cp>
12
+ </cp>
13
+ <output-format>
14
+ Write 3-5 short bullets titled 'Critique:' focusing on missing constraints, ordering, or formatting.
15
+ </output-format>
16
+ </poml>
@@ -0,0 +1,107 @@
1
+ <poml>
2
+
3
+ <role>You are an expert prompt engineer.</role>
4
+
5
+ <task>Your task is to analyze the prompt and provide a critique of the prompt. Follow the steps below to create the critique.
6
+
7
+ <cp caption="1. Structural Issues">
8
+ <p>These flaws block clarity and logic. Always check them first.</p>
9
+
10
+ <list>
11
+ <item><b>Missing goal</b>: The prompt never defines what success looks like. Ask: <i>Can I summarize its output goal in one line?</i></item>
12
+ <item><b>Contradictions</b>: Two or more instructions conflict. Search for words like *never*, *always*, *except*, *but also*.</item>
13
+ <item><b>Circular dependencies</b>: The model is told to do A before B and B before A.</item>
14
+ <item><b>No stop condition</b>: The prompt doesn’t say when the task is done. Flag any open-ended verbs: <i>explore,</i> <i>analyze further,</i> <i>continue indefinitely.</i></item>
15
+ </list>
16
+ </cp>
17
+
18
+ <cp caption="2. Instruction Quality">
19
+ <p>Examine how the instructions are stated and ordered to ensure clarity and enforceability.</p>
20
+ <list>
21
+ <item><b>Vague verbs</b>: Avoid terms like <i>optimize,</i> <i>improve,</i> and <i>ensure.</i> Use precise, measurable instructions.</item>
22
+ <item><b>Lack of hierarchy</b>: All rules appear equally important, making conflict resolution impossible. Clarify rule precedence.</item>
23
+ <item><b>Mixed abstraction</b>: High-level policies are interleaved with implementation details. Keep principles separate from step-by-step actions.</item>
24
+ <item><b>Overlapping scope</b>: Similar instructions appear in several sections with minor changes. Identify and consolidate duplicates.</item>
25
+ </list>
26
+ </cp>
27
+
28
+ <cp caption="3. Control and Behavior">
29
+ <p>Review boundaries on model autonomy, tool use, and communication style.</p>
30
+ <list>
31
+ <item><b>No tool limits</b>: Limits on tool calls, retries, or time not specified. Define boundaries for operations.</item>
32
+ <item><b>Unclear uncertainty handling</b>: Conflicting instructions regarding clarifying uncertainties vs. never asking users. Select one behavior.</item>
33
+ <item><b>Verbosity confusion</b>: Some parts demand detailed answers, others specify brevity. Highlight and resolve inconsistency.</item>
34
+ <item><b>Feedback omission</b>: No plan for progress reporting or preamble during multi-step operations.</item>
35
+ </list>
36
+ </cp>
37
+
38
+ <cp caption="4. Input and Output Specification">
39
+ <p>Assess if required data and expected output formats are clearly defined.</p>
40
+ <list>
41
+ <item><b>No input defaults</b>: What should happen if a needed value is absent or invalid isn’t explained.</item>
42
+ <item><b>Output schema missing</b>: Expected response format or sections are not spelled out.</item>
43
+ <item><b>Format inconsistency</b>: Output style (Markdown, JSON, XML, etc.) shifts mid-prompt. Ensure format requirements are stable.</item>
44
+ <item><b>No validation</b>: Lacks steps like <i>verify results before submitting</i> or <i>summarize at end.</i></item>
45
+ </list>
46
+ </cp>
47
+
48
+ <cp caption="5. Scope and Safety">
49
+ <p>Ensure prompt actions remain within safe, authorized boundaries.</p>
50
+ <list>
51
+ <item><b>Scope creep</b>: Open-ended statements such as <i>feel free to enhance</i> can justify unrelated changes.</item>
52
+ <item><b>Unsafe actions</b>: Allows deletions or modifications without explicit user approval.</item>
53
+ <item><b>No error handling</b>: What happens if a tool call fails or data is missing is not addressed.</item>
54
+ <item><b>User authority ambiguity</b>: Model may act for multiple users or perform irreversible actions without checks.</item>
55
+ </list>
56
+ </cp>
57
+
58
+ <cp caption="6. Efficiency and Maintainability">
59
+ <p>Consider the prompt’s length, redundancy, and future comprehensibility.</p>
60
+ <list>
61
+ <item><b>Overexplained</b>: Verbose explanations where concise, numbered steps suffice.</item>
62
+ <item><b>Redundancy</b>: Similar rules scattered in multiple aliases; centralize and summarize them.</item>
63
+ <item><b>Hidden assumptions</b>: Implicit defaults (like timezone, language) are not stated.</item>
64
+ <item><b>Poor auditability</b>: Lacks section markers (e.g., <code>&lt;policy&gt;</code>, <code>&lt;procedure&gt;</code>). Structure prompt for easy review.</item>
65
+ </list>
66
+ </cp>
67
+
68
+ <cp caption="7. Testing Method">
69
+ <p>Methodical approach for reviewing a prompt:</p>
70
+ <list>
71
+ <item>Read the prompt fully; highlight all unclear or contradictory instructions.</item>
72
+ <item>For each main area, answer:
73
+ <list listStyle="decimal">
74
+ <item>What is the intended outcome?</item>
75
+ <item>What is the stop or completion condition?</item>
76
+ <item>How are conflicts between rules resolved?</item>
77
+ <item>What are the explicit limits (tools, run time, tokens)?</item>
78
+ <item>What should the output format be?</item>
79
+ </list>
80
+ </item>
81
+ <item>Rate each section: <i>clear</i>, <i>incomplete</i>, <i>contradictory</i>, or <i>redundant</i>.</item>
82
+ <item>Summarize findings under categories: structure, control, scope, format, safety.</item>
83
+ </list>
84
+ <p>This method surfaces issues such as ambiguity, contradiction, missing boundaries, and output uncertainty—core failure modes in prompting identified by the GPT-5 prompting guide.</p>
85
+ </cp>
86
+ </task>
87
+
88
+ <output-format>
89
+ Respond with a complete analysis and critique of the prompt. Be concise and direct. Less than 350 words.
90
+ </output-format>
91
+
92
+ <human-msg>
93
+ <cp caption="Prompt">
94
+ <text whiteSpace="pre">{{ prompt_template }}</text>
95
+ </cp>
96
+ <cp caption="Sample Runs of the Prompts (Historical Messages and Rewards)">
97
+ <cp for="experiment in experiments" caption="Sample Run #{{ loop.index + 1 }}">
98
+ <cp caption="Overall Status">
99
+ This run has {{ experiment.status }}. The final score is {{ experiment.final_reward }}.
100
+ </cp>
101
+ <cp caption="Messages">
102
+ <object data="{{ experiment.messages }}" />
103
+ </cp>
104
+ </cp>
105
+ </cp>
106
+ </human-msg>
107
+ </poml>
@@ -0,0 +1,262 @@
1
+ # Copyright (c) Microsoft. All rights reserved.
2
+
3
+ from __future__ import annotations
4
+
5
+ import inspect
6
+ import threading
7
+ import weakref
8
+ from typing import (
9
+ TYPE_CHECKING,
10
+ Any,
11
+ Awaitable,
12
+ ClassVar,
13
+ Dict,
14
+ Optional,
15
+ Union,
16
+ )
17
+
18
+ from gatewaysdk.adapter import TraceAdapter
19
+ from gatewaysdk.client import GatewayClient
20
+ from gatewaysdk.store.base import LightningStore
21
+ from gatewaysdk.types import Dataset, NamedResources
22
+
23
+ if TYPE_CHECKING:
24
+ from gatewaysdk.llm_proxy import LLMProxy
25
+ from gatewaysdk.trainer import Trainer
26
+
27
+
28
+ class Algorithm:
29
+ """Algorithm is the strategy, or tuner to train the agent.
30
+
31
+ Subclasses should set the class-level metadata attributes so the platform
32
+ can auto-discover algorithms and sync them to the database.
33
+ """
34
+
35
+ # Platform metadata — synced to DB via auto-discovery (__subclasses__)
36
+ name: ClassVar[str] = ""
37
+ display_name: ClassVar[str] = ""
38
+ description: ClassVar[str] = ""
39
+ requirements: ClassVar[Dict[str, Any]] = {}
40
+ config_schema: ClassVar[Optional[Dict[str, Any]]] = None
41
+ manages_containers: ClassVar[bool] = False
42
+ trainer_resources: ClassVar[Dict[str, Any]] = {}
43
+ """Container resources for the algorithm trainer process (reserved for Phase 4).
44
+
45
+ Example: ``{"gpu": 1, "memory": "8g", "cpu": 2.0}``
46
+
47
+ Used by the orchestrator to size the trainer container when
48
+ ``manages_containers=False``. Currently unused -- reserved for verl
49
+ multi-container support.
50
+ """
51
+
52
+ services: ClassVar[Dict[str, Any]] = {}
53
+ """Sidecar services the algorithm requires (reserved for Phase 4).
54
+
55
+ Example: ``{"vllm": {"image": "vllm/vllm:latest", "gpu": 1}}``
56
+
57
+ Used by Layer 2 orchestration for algorithms that need inference servers
58
+ alongside the trainer. Currently unused -- reserved for verl.
59
+ """
60
+
61
+ # Runtime state (set by Trainer)
62
+ _trainer_ref: weakref.ReferenceType[Trainer] | None = None
63
+ _llm_proxy_ref: weakref.ReferenceType["LLMProxy"] | None = None
64
+ _store: LightningStore | None = None
65
+ _initial_resources: NamedResources | None = None
66
+ _adapter_ref: weakref.ReferenceType[TraceAdapter[Any]] | None = None
67
+
68
+ # Cancellation support -- thread-safe event so the platform worker can
69
+ # signal synchronous algorithms running in a background thread.
70
+ _cancel_event: threading.Event
71
+
72
+ def __init__(self) -> None:
73
+ self._cancel_event = threading.Event()
74
+
75
+ def request_cancel(self) -> None:
76
+ """Signal the algorithm to stop as soon as possible.
77
+
78
+ Thread-safe: can be called from the async event loop while the
79
+ algorithm runs in a worker thread. Subclasses that manage their
80
+ own engine (e.g. GEPA) should override this to also stop the
81
+ inner loop.
82
+ """
83
+ self._cancel_event.set()
84
+
85
+ @property
86
+ def is_cancelled(self) -> bool:
87
+ """Check whether cancellation has been requested."""
88
+ return self._cancel_event.is_set()
89
+
90
+ def is_async(self) -> bool:
91
+ """Return True if the algorithm is asynchronous."""
92
+ return inspect.iscoroutinefunction(self.run)
93
+
94
+ def set_trainer(self, trainer: Trainer) -> None:
95
+ """
96
+ Set the trainer for this algorithm.
97
+
98
+ Args:
99
+ trainer: The Trainer instance that will handle training and validation.
100
+ """
101
+ self._trainer_ref = weakref.ref(trainer)
102
+
103
+ def get_trainer(self) -> Trainer:
104
+ """
105
+ Get the trainer for this algorithm.
106
+
107
+ Returns:
108
+ The Trainer instance associated with this agent.
109
+ """
110
+ if self._trainer_ref is None:
111
+ raise ValueError("Trainer has not been set for this agent.")
112
+ trainer = self._trainer_ref()
113
+ if trainer is None:
114
+ raise ValueError("Trainer reference is no longer valid (object has been garbage collected).")
115
+ return trainer
116
+
117
+ def set_llm_proxy(self, llm_proxy: LLMProxy | None) -> None:
118
+ """
119
+ Set the LLM proxy for this algorithm to reuse when available.
120
+
121
+ Args:
122
+ llm_proxy: The LLMProxy instance configured by the trainer, if any.
123
+ """
124
+ self._llm_proxy_ref = weakref.ref(llm_proxy) if llm_proxy is not None else None
125
+
126
+ def get_llm_proxy(self) -> Optional[LLMProxy]:
127
+ """
128
+ Retrieve the configured LLM proxy instance, if one has been set.
129
+
130
+ Returns:
131
+ The active LLMProxy instance or None when not configured.
132
+ """
133
+ if self._llm_proxy_ref is None:
134
+ return None
135
+
136
+ llm_proxy = self._llm_proxy_ref()
137
+ if llm_proxy is None:
138
+ raise ValueError("LLM proxy reference is no longer valid (object has been garbage collected).")
139
+
140
+ return llm_proxy
141
+
142
+ def set_adapter(self, adapter: TraceAdapter[Any]) -> None:
143
+ """
144
+ Set the adapter for this algorithm to collect and convert traces.
145
+ """
146
+ self._adapter_ref = weakref.ref(adapter)
147
+
148
+ def get_adapter(self) -> TraceAdapter[Any]:
149
+ """
150
+ Retrieve the adapter for this algorithm to communicate with the runners.
151
+ """
152
+ if self._adapter_ref is None:
153
+ raise ValueError("Adapter has not been set for this algorithm.")
154
+ adapter = self._adapter_ref()
155
+ if adapter is None:
156
+ raise ValueError("Adapter reference is no longer valid (object has been garbage collected).")
157
+ return adapter
158
+
159
+ def set_store(self, store: LightningStore) -> None:
160
+ """
161
+ Set the store for this algorithm to communicate with the runners.
162
+
163
+ Store is set directly instead of using weakref because its copy is meant to be
164
+ maintained throughout the algorithm's lifecycle.
165
+ """
166
+ self._store = store
167
+
168
+ def get_store(self) -> LightningStore:
169
+ """
170
+ Retrieve the store for this algorithm to communicate with the runners.
171
+ """
172
+ if self._store is None:
173
+ raise ValueError("Store has not been set for this algorithm.")
174
+ return self._store
175
+
176
+ def get_initial_resources(self) -> Optional[NamedResources]:
177
+ """
178
+ Get the initial resources for this algorithm.
179
+ """
180
+ return self._initial_resources
181
+
182
+ def set_initial_resources(self, resources: NamedResources) -> None:
183
+ """
184
+ Set the initial resources for this algorithm.
185
+ """
186
+ self._initial_resources = resources
187
+
188
+ def __call__(self, *args: Any, **kwargs: Any) -> Any:
189
+ return self.run(*args, **kwargs)
190
+
191
+ def run(
192
+ self,
193
+ train_dataset: Optional[Dataset[Any]] = None,
194
+ val_dataset: Optional[Dataset[Any]] = None,
195
+ ) -> Union[None, Awaitable[None]]:
196
+ """Subclasses should implement this method to implement the algorithm.
197
+
198
+ Args:
199
+ train_dataset: The dataset to train on. Not all algorithms require a training dataset.
200
+ val_dataset: The dataset to validate on. Not all algorithms require a validation dataset.
201
+
202
+ Returns:
203
+ Algorithm should refrain from returning anything. It should just run the algorithm.
204
+ """
205
+ raise NotImplementedError("Subclasses must implement run().")
206
+
207
+ def verify(self, config: Dict[str, Any]) -> Dict[str, Any]:
208
+ """Validate algorithm configuration before a run starts.
209
+
210
+ When ``config_schema`` is set (JSON Schema dict), the config is
211
+ validated against it automatically. Subclasses may override for
212
+ additional algorithm-specific checks.
213
+
214
+ Args:
215
+ config: The algorithm configuration to validate.
216
+
217
+ Returns:
218
+ Dict with at least ``{"valid": bool}``. May include
219
+ ``"smart_defaults"`` (defaults derived from schema) and
220
+ ``"errors"`` (list of validation error strings).
221
+ """
222
+ if self.config_schema is not None:
223
+ try:
224
+ import jsonschema
225
+
226
+ jsonschema.validate(instance=config, schema=self.config_schema)
227
+ except ImportError:
228
+ pass # jsonschema not installed — skip validation
229
+ except jsonschema.ValidationError as exc:
230
+ return {
231
+ "valid": False,
232
+ "errors": [exc.message],
233
+ "path": list(exc.absolute_path),
234
+ }
235
+
236
+ # Derive smart defaults from schema property defaults
237
+ smart_defaults: Dict[str, Any] = {}
238
+ if self.config_schema is not None:
239
+ for prop, prop_schema in self.config_schema.get("properties", {}).items():
240
+ if prop not in config and "default" in prop_schema:
241
+ smart_defaults[prop] = prop_schema["default"]
242
+
243
+ return {"valid": True, "smart_defaults": smart_defaults}
244
+
245
+ def get_client(self) -> Optional[GatewayClient]:
246
+ """Get the client to communicate with the algorithm.
247
+
248
+ .. deprecated::
249
+ ``get_client()`` is deprecated and will be removed in a future
250
+ version. Use :meth:`get_store` for communication with runners.
251
+
252
+ Returns:
253
+ None. Subclasses that still rely on GatewayClient may override.
254
+ """
255
+ import warnings
256
+
257
+ warnings.warn(
258
+ "Algorithm.get_client() is deprecated and will be removed. " "Use Algorithm.get_store() instead.",
259
+ DeprecationWarning,
260
+ stacklevel=2,
261
+ )
262
+ return None