blaxel 0.1.21rc69__py3-none-any.whl → 0.2.0__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 (421) hide show
  1. blaxel/__init__.py +6 -3
  2. blaxel/core/__init__.py +44 -0
  3. blaxel/core/agents/__init__.py +115 -0
  4. blaxel/{authentication → core/authentication}/apikey.py +1 -0
  5. blaxel/{authentication → core/authentication}/clientcredentials.py +6 -2
  6. blaxel/{client → core/client}/api/agents/create_agent.py +1 -1
  7. blaxel/{client → core/client}/api/agents/update_agent.py +1 -1
  8. blaxel/{client → core/client}/api/compute/create_sandbox.py +1 -1
  9. blaxel/{client → core/client}/api/compute/create_sandbox_preview.py +1 -1
  10. blaxel/{client → core/client}/api/compute/create_sandbox_preview_token.py +1 -1
  11. blaxel/{client → core/client}/api/compute/update_sandbox.py +1 -1
  12. blaxel/{client → core/client}/api/compute/update_sandbox_preview.py +1 -1
  13. blaxel/{client → core/client}/api/functions/create_function.py +1 -1
  14. blaxel/{client → core/client}/api/functions/update_function.py +1 -1
  15. blaxel/{client → core/client}/api/integrations/create_integration_connection.py +1 -1
  16. blaxel/{client → core/client}/api/integrations/update_integration_connection.py +1 -1
  17. blaxel/{client → core/client}/api/jobs/create_job.py +1 -1
  18. blaxel/{client → core/client}/api/jobs/update_job.py +1 -1
  19. blaxel/{client → core/client}/api/knowledgebases/create_knowledgebase.py +1 -1
  20. blaxel/{client → core/client}/api/knowledgebases/update_knowledgebase.py +1 -1
  21. blaxel/{client → core/client}/api/models/create_model.py +1 -1
  22. blaxel/{client → core/client}/api/models/update_model.py +1 -1
  23. blaxel/{client → core/client}/api/policies/create_policy.py +1 -1
  24. blaxel/{client → core/client}/api/policies/update_policy.py +1 -1
  25. blaxel/{client → core/client}/api/service_accounts/create_api_key_for_service_account.py +1 -1
  26. blaxel/{client → core/client}/api/service_accounts/create_workspace_service_account.py +1 -1
  27. blaxel/{client → core/client}/api/service_accounts/update_workspace_service_account.py +1 -1
  28. blaxel/{client → core/client}/api/workspaces/check_workspace_availability.py +1 -1
  29. blaxel/{client → core/client}/api/workspaces/create_worspace.py +1 -1
  30. blaxel/{client → core/client}/api/workspaces/invite_workspace_user.py +1 -1
  31. blaxel/{client → core/client}/api/workspaces/update_workspace.py +1 -1
  32. blaxel/{client → core/client}/api/workspaces/update_workspace_user_role.py +1 -1
  33. blaxel/{client → core/client}/models/__init__.py +18 -0
  34. blaxel/{client → core/client}/models/agent.py +1 -1
  35. blaxel/{client → core/client}/models/agent_spec.py +2 -2
  36. blaxel/core/client/models/billable_time_metric.py +70 -0
  37. blaxel/{client → core/client}/models/core_spec.py +1 -1
  38. blaxel/{client → core/client}/models/function.py +1 -1
  39. blaxel/{client → core/client}/models/function_schema_properties.py +1 -1
  40. blaxel/{client → core/client}/models/function_spec.py +2 -2
  41. blaxel/{client → core/client}/models/integration.py +2 -2
  42. blaxel/{client → core/client}/models/integration_endpoints.py +1 -1
  43. blaxel/{client → core/client}/models/job.py +1 -1
  44. blaxel/{client → core/client}/models/job_spec.py +1 -1
  45. blaxel/{client → core/client}/models/jobs_chart_value.py +2 -2
  46. blaxel/{client → core/client}/models/knowledgebase.py +1 -1
  47. blaxel/{client → core/client}/models/location_response.py +1 -1
  48. blaxel/core/client/models/logs_response.py +63 -0
  49. blaxel/core/client/models/logs_response_data.py +99 -0
  50. blaxel/core/client/models/memory_allocation_by_name.py +70 -0
  51. blaxel/{client → core/client}/models/metadata.py +9 -0
  52. blaxel/{client → core/client}/models/model.py +1 -1
  53. blaxel/{client → core/client}/models/model_spec.py +1 -1
  54. blaxel/{client → core/client}/models/policy_spec.py +2 -2
  55. blaxel/core/client/models/resource.py +79 -0
  56. blaxel/core/client/models/resource_log_chart.py +133 -0
  57. blaxel/core/client/models/resource_log_response.py +83 -0
  58. blaxel/{client → core/client}/models/resource_metrics.py +27 -3
  59. blaxel/core/client/models/resource_trace.py +97 -0
  60. blaxel/{client → core/client}/models/runtime.py +1 -1
  61. blaxel/{client → core/client}/models/sandbox.py +1 -1
  62. blaxel/{client → core/client}/models/sandbox_definition.py +1 -1
  63. blaxel/{client → core/client}/models/sandbox_spec.py +1 -1
  64. blaxel/{client → core/client}/models/store_agent.py +1 -1
  65. blaxel/{client → core/client}/models/store_configuration.py +1 -1
  66. blaxel/{client → core/client}/models/template.py +1 -1
  67. blaxel/core/client/models/websocket_message.py +106 -0
  68. blaxel/core/common/__init__.py +6 -0
  69. blaxel/core/common/autoload.py +21 -0
  70. blaxel/{common → core/common}/internal.py +34 -62
  71. blaxel/core/common/logger.py +131 -0
  72. blaxel/{jobs → core/jobs}/__init__.py +41 -61
  73. blaxel/core/mcp/__init__.py +4 -0
  74. blaxel/{mcp → core/mcp}/client.py +26 -15
  75. blaxel/{mcp → core/mcp}/server.py +12 -37
  76. blaxel/core/models/__init__.py +52 -0
  77. blaxel/core/sandbox/__init__.py +29 -0
  78. blaxel/core/sandbox/action.py +79 -0
  79. blaxel/{sandbox → core/sandbox}/client/api/filesystem/put_filesystem_path.py +1 -1
  80. blaxel/{sandbox → core/sandbox}/client/api/network/post_network_process_pid_monitor.py +1 -1
  81. blaxel/core/sandbox/client/api/process/__init__.py +0 -0
  82. blaxel/{sandbox → core/sandbox}/client/api/process/delete_process_identifier_kill.py +0 -26
  83. blaxel/{sandbox → core/sandbox}/client/api/process/post_process.py +1 -1
  84. blaxel/{sandbox → core/sandbox}/client/models/__init__.py +2 -2
  85. blaxel/{sandbox → core/sandbox}/client/models/directory.py +2 -2
  86. blaxel/{sandbox → core/sandbox}/client/models/process_request.py +25 -1
  87. blaxel/core/sandbox/client/models/process_request_env.py +49 -0
  88. blaxel/core/sandbox/filesystem.py +280 -0
  89. blaxel/core/sandbox/network.py +10 -0
  90. blaxel/{sandbox → core/sandbox}/preview.py +45 -17
  91. blaxel/core/sandbox/process.py +159 -0
  92. blaxel/{sandbox → core/sandbox}/sandbox.py +62 -5
  93. blaxel/core/sandbox/session.py +124 -0
  94. blaxel/core/sandbox/types.py +103 -0
  95. blaxel/{tools → core/tools}/__init__.py +63 -91
  96. blaxel/crewai/__init__.py +4 -0
  97. blaxel/{models/crewai.py → crewai/model.py} +4 -2
  98. blaxel/crewai/py.typed +0 -0
  99. blaxel/crewai/tools.py +26 -0
  100. blaxel/googleadk/__init__.py +4 -0
  101. blaxel/{models/googleadk.py → googleadk/model.py} +8 -2
  102. blaxel/googleadk/py.typed +0 -0
  103. blaxel/googleadk/tools.py +72 -0
  104. blaxel/langgraph/__init__.py +4 -0
  105. blaxel/{models/langchain.py → langgraph/model.py} +8 -4
  106. blaxel/langgraph/py.typed +0 -0
  107. blaxel/{tools/langchain.py → langgraph/tools.py} +7 -3
  108. blaxel/livekit/__init__.py +4 -0
  109. blaxel/{models/livekit.py → livekit/model.py} +7 -1
  110. blaxel/livekit/py.typed +0 -0
  111. blaxel/{tools/livekit.py → livekit/tools.py} +8 -1
  112. blaxel/llamaindex/__init__.py +4 -0
  113. blaxel/{models/llamaindex.py → llamaindex/model.py} +6 -3
  114. blaxel/llamaindex/py.typed +0 -0
  115. blaxel/{tools/llamaindex.py → llamaindex/tools.py} +7 -4
  116. blaxel/openai/__init__.py +4 -0
  117. blaxel/{models/openai.py → openai/model.py} +4 -2
  118. blaxel/openai/py.typed +0 -0
  119. blaxel/{tools/openai.py → openai/tools.py} +7 -3
  120. blaxel/pydantic/__init__.py +4 -0
  121. blaxel/{models/custom/pydantic → pydantic/custom}/gemini.py +0 -1
  122. blaxel/{models/pydantic.py → pydantic/model.py} +6 -4
  123. blaxel/pydantic/py.typed +0 -0
  124. blaxel/{tools/pydantic.py → pydantic/tools.py} +6 -3
  125. blaxel/telemetry/__init__.py +6 -0
  126. blaxel/telemetry/instrumentation/blaxel_core.py +125 -0
  127. blaxel/telemetry/instrumentation/blaxel_langgraph.py +99 -0
  128. blaxel/telemetry/instrumentation/blaxel_langgraph_gemini.py +346 -0
  129. blaxel/telemetry/instrumentation/blaxel_llamaindex.py +85 -0
  130. blaxel/telemetry/instrumentation/map.py +62 -0
  131. blaxel/telemetry/instrumentation/utils.py +74 -0
  132. blaxel/{common → telemetry/log}/logger.py +6 -12
  133. blaxel/{instrumentation → telemetry}/manager.py +20 -12
  134. blaxel/telemetry/py.typed +0 -0
  135. blaxel/{instrumentation → telemetry}/span.py +12 -1
  136. blaxel-0.2.0.dist-info/METADATA +224 -0
  137. blaxel-0.2.0.dist-info/RECORD +408 -0
  138. blaxel/agents/__init__.py +0 -135
  139. blaxel/common/autoload.py +0 -9
  140. blaxel/instrumentation/map.py +0 -49
  141. blaxel/mcp/__init__.py +0 -3
  142. blaxel/models/__init__.py +0 -104
  143. blaxel/sandbox/base.py +0 -68
  144. blaxel/sandbox/client/models/process_kill_request.py +0 -60
  145. blaxel/sandbox/filesystem.py +0 -104
  146. blaxel/sandbox/process.py +0 -56
  147. blaxel/tools/crewai.py +0 -22
  148. blaxel/tools/googleadk.py +0 -66
  149. blaxel-0.1.21rc69.dist-info/METADATA +0 -169
  150. blaxel-0.1.21rc69.dist-info/RECORD +0 -370
  151. /blaxel/{authentication → core/authentication}/__init__.py +0 -0
  152. /blaxel/{authentication → core/authentication}/devicemode.py +0 -0
  153. /blaxel/{authentication → core/authentication}/oauth.py +0 -0
  154. /blaxel/{authentication → core/authentication}/types.py +0 -0
  155. /blaxel/{cache → core/cache}/__init__.py +0 -0
  156. /blaxel/{cache → core/cache}/cache.py +0 -0
  157. /blaxel/{client → core/client}/__init__.py +0 -0
  158. /blaxel/{client → core/client}/api/__init__.py +0 -0
  159. /blaxel/{client → core/client}/api/agents/__init__.py +0 -0
  160. /blaxel/{client → core/client}/api/agents/delete_agent.py +0 -0
  161. /blaxel/{client → core/client}/api/agents/get_agent.py +0 -0
  162. /blaxel/{client → core/client}/api/agents/list_agent_revisions.py +0 -0
  163. /blaxel/{client → core/client}/api/agents/list_agents.py +0 -0
  164. /blaxel/{client → core/client}/api/compute/__init__.py +0 -0
  165. /blaxel/{client → core/client}/api/compute/delete_sandbox.py +0 -0
  166. /blaxel/{client → core/client}/api/compute/delete_sandbox_preview.py +0 -0
  167. /blaxel/{client → core/client}/api/compute/delete_sandbox_preview_token.py +0 -0
  168. /blaxel/{client → core/client}/api/compute/get_sandbox.py +0 -0
  169. /blaxel/{client → core/client}/api/compute/get_sandbox_preview.py +0 -0
  170. /blaxel/{client → core/client}/api/compute/list_sandbox_preview_tokens.py +0 -0
  171. /blaxel/{client → core/client}/api/compute/list_sandbox_previews.py +0 -0
  172. /blaxel/{client → core/client}/api/compute/list_sandboxes.py +0 -0
  173. /blaxel/{client → core/client}/api/compute/start_sandbox.py +0 -0
  174. /blaxel/{client → core/client}/api/compute/stop_sandbox.py +0 -0
  175. /blaxel/{client → core/client}/api/configurations/__init__.py +0 -0
  176. /blaxel/{client → core/client}/api/configurations/get_configuration.py +0 -0
  177. /blaxel/{client → core/client}/api/default/__init__.py +0 -0
  178. /blaxel/{client → core/client}/api/default/get_template.py +0 -0
  179. /blaxel/{client → core/client}/api/default/list_mcp_hub_definitions.py +0 -0
  180. /blaxel/{client → core/client}/api/default/list_sandbox_hub_definitions.py +0 -0
  181. /blaxel/{client → core/client}/api/functions/__init__.py +0 -0
  182. /blaxel/{client → core/client}/api/functions/delete_function.py +0 -0
  183. /blaxel/{client → core/client}/api/functions/get_function.py +0 -0
  184. /blaxel/{client → core/client}/api/functions/list_function_revisions.py +0 -0
  185. /blaxel/{client → core/client}/api/functions/list_functions.py +0 -0
  186. /blaxel/{client → core/client}/api/integrations/__init__.py +0 -0
  187. /blaxel/{client → core/client}/api/integrations/delete_integration_connection.py +0 -0
  188. /blaxel/{client → core/client}/api/integrations/get_integration.py +0 -0
  189. /blaxel/{client → core/client}/api/integrations/get_integration_connection.py +0 -0
  190. /blaxel/{client → core/client}/api/integrations/get_integration_connection_model.py +0 -0
  191. /blaxel/{client → core/client}/api/integrations/get_integration_connection_model_endpoint_configurations.py +0 -0
  192. /blaxel/{client → core/client}/api/integrations/list_integration_connection_models.py +0 -0
  193. /blaxel/{client → core/client}/api/integrations/list_integration_connections.py +0 -0
  194. /blaxel/{client → core/client}/api/invitations/__init__.py +0 -0
  195. /blaxel/{client → core/client}/api/invitations/list_all_pending_invitations.py +0 -0
  196. /blaxel/{client → core/client}/api/jobs/__init__.py +0 -0
  197. /blaxel/{client → core/client}/api/jobs/delete_job.py +0 -0
  198. /blaxel/{client → core/client}/api/jobs/get_job.py +0 -0
  199. /blaxel/{client → core/client}/api/jobs/list_job_revisions.py +0 -0
  200. /blaxel/{client → core/client}/api/jobs/list_jobs.py +0 -0
  201. /blaxel/{client → core/client}/api/knowledgebases/__init__.py +0 -0
  202. /blaxel/{client → core/client}/api/knowledgebases/delete_knowledgebase.py +0 -0
  203. /blaxel/{client → core/client}/api/knowledgebases/get_knowledgebase.py +0 -0
  204. /blaxel/{client → core/client}/api/knowledgebases/list_knowledgebase_revisions.py +0 -0
  205. /blaxel/{client → core/client}/api/knowledgebases/list_knowledgebases.py +0 -0
  206. /blaxel/{client → core/client}/api/locations/__init__.py +0 -0
  207. /blaxel/{client → core/client}/api/locations/list_locations.py +0 -0
  208. /blaxel/{client → core/client}/api/models/__init__.py +0 -0
  209. /blaxel/{client → core/client}/api/models/delete_model.py +0 -0
  210. /blaxel/{client → core/client}/api/models/get_model.py +0 -0
  211. /blaxel/{client → core/client}/api/models/list_model_revisions.py +0 -0
  212. /blaxel/{client → core/client}/api/models/list_models.py +0 -0
  213. /blaxel/{client → core/client}/api/policies/__init__.py +0 -0
  214. /blaxel/{client → core/client}/api/policies/delete_policy.py +0 -0
  215. /blaxel/{client → core/client}/api/policies/get_policy.py +0 -0
  216. /blaxel/{client → core/client}/api/policies/list_policies.py +0 -0
  217. /blaxel/{client → core/client}/api/privateclusters/__init__.py +0 -0
  218. /blaxel/{client → core/client}/api/privateclusters/create_private_cluster.py +0 -0
  219. /blaxel/{client → core/client}/api/privateclusters/delete_private_cluster.py +0 -0
  220. /blaxel/{client → core/client}/api/privateclusters/get_private_cluster.py +0 -0
  221. /blaxel/{client → core/client}/api/privateclusters/get_private_cluster_health.py +0 -0
  222. /blaxel/{client → core/client}/api/privateclusters/list_private_clusters.py +0 -0
  223. /blaxel/{client → core/client}/api/privateclusters/update_private_cluster.py +0 -0
  224. /blaxel/{client → core/client}/api/privateclusters/update_private_cluster_health.py +0 -0
  225. /blaxel/{client → core/client}/api/service_accounts/__init__.py +0 -0
  226. /blaxel/{client → core/client}/api/service_accounts/delete_api_key_for_service_account.py +0 -0
  227. /blaxel/{client → core/client}/api/service_accounts/delete_workspace_service_account.py +0 -0
  228. /blaxel/{client → core/client}/api/service_accounts/get_workspace_service_accounts.py +0 -0
  229. /blaxel/{client → core/client}/api/service_accounts/list_api_keys_for_service_account.py +0 -0
  230. /blaxel/{client → core/client}/api/templates/__init__.py +0 -0
  231. /blaxel/{client → core/client}/api/templates/list_templates.py +0 -0
  232. /blaxel/{client → core/client}/api/workspaces/__init__.py +0 -0
  233. /blaxel/{client → core/client}/api/workspaces/accept_workspace_invitation.py +0 -0
  234. /blaxel/{client → core/client}/api/workspaces/decline_workspace_invitation.py +0 -0
  235. /blaxel/{client → core/client}/api/workspaces/delete_workspace.py +0 -0
  236. /blaxel/{client → core/client}/api/workspaces/get_workspace.py +0 -0
  237. /blaxel/{client → core/client}/api/workspaces/leave_workspace.py +0 -0
  238. /blaxel/{client → core/client}/api/workspaces/list_workspace_users.py +0 -0
  239. /blaxel/{client → core/client}/api/workspaces/list_workspaces.py +0 -0
  240. /blaxel/{client → core/client}/api/workspaces/remove_workspace_user.py +0 -0
  241. /blaxel/{client → core/client}/client.py +0 -0
  242. /blaxel/{client → core/client}/errors.py +0 -0
  243. /blaxel/{client → core/client}/models/acl.py +0 -0
  244. /blaxel/{client → core/client}/models/api_key.py +0 -0
  245. /blaxel/{client → core/client}/models/check_workspace_availability_body.py +0 -0
  246. /blaxel/{client → core/client}/models/configuration.py +0 -0
  247. /blaxel/{client → core/client}/models/continent.py +0 -0
  248. /blaxel/{client → core/client}/models/core_event.py +0 -0
  249. /blaxel/{client → core/client}/models/core_spec_configurations.py +0 -0
  250. /blaxel/{client → core/client}/models/country.py +0 -0
  251. /blaxel/{client → core/client}/models/create_api_key_for_service_account_body.py +0 -0
  252. /blaxel/{client → core/client}/models/create_workspace_service_account_body.py +0 -0
  253. /blaxel/{client → core/client}/models/create_workspace_service_account_response_200.py +0 -0
  254. /blaxel/{client → core/client}/models/delete_sandbox_preview_token_response_200.py +0 -0
  255. /blaxel/{client → core/client}/models/delete_workspace_service_account_response_200.py +0 -0
  256. /blaxel/{client → core/client}/models/entrypoint.py +0 -0
  257. /blaxel/{client → core/client}/models/entrypoint_env.py +0 -0
  258. /blaxel/{client → core/client}/models/flavor.py +0 -0
  259. /blaxel/{client → core/client}/models/form.py +0 -0
  260. /blaxel/{client → core/client}/models/form_config.py +0 -0
  261. /blaxel/{client → core/client}/models/form_oauth.py +0 -0
  262. /blaxel/{client → core/client}/models/form_secrets.py +0 -0
  263. /blaxel/{client → core/client}/models/function_kit.py +0 -0
  264. /blaxel/{client → core/client}/models/function_schema.py +0 -0
  265. /blaxel/{client → core/client}/models/function_schema_not.py +0 -0
  266. /blaxel/{client → core/client}/models/function_schema_or_bool.py +0 -0
  267. /blaxel/{client → core/client}/models/get_workspace_service_accounts_response_200_item.py +0 -0
  268. /blaxel/{client → core/client}/models/histogram_bucket.py +0 -0
  269. /blaxel/{client → core/client}/models/histogram_stats.py +0 -0
  270. /blaxel/{client → core/client}/models/integration_additional_infos.py +0 -0
  271. /blaxel/{client → core/client}/models/integration_connection.py +0 -0
  272. /blaxel/{client → core/client}/models/integration_connection_spec.py +0 -0
  273. /blaxel/{client → core/client}/models/integration_connection_spec_config.py +0 -0
  274. /blaxel/{client → core/client}/models/integration_connection_spec_secret.py +0 -0
  275. /blaxel/{client → core/client}/models/integration_endpoint.py +0 -0
  276. /blaxel/{client → core/client}/models/integration_endpoint_token.py +0 -0
  277. /blaxel/{client → core/client}/models/integration_headers.py +0 -0
  278. /blaxel/{client → core/client}/models/integration_model.py +0 -0
  279. /blaxel/{client → core/client}/models/integration_organization.py +0 -0
  280. /blaxel/{client → core/client}/models/integration_query_params.py +0 -0
  281. /blaxel/{client → core/client}/models/integration_repository.py +0 -0
  282. /blaxel/{client → core/client}/models/invite_workspace_user_body.py +0 -0
  283. /blaxel/{client → core/client}/models/job_execution_config.py +0 -0
  284. /blaxel/{client → core/client}/models/job_metrics.py +0 -0
  285. /blaxel/{client → core/client}/models/job_metrics_executions_chart.py +0 -0
  286. /blaxel/{client → core/client}/models/job_metrics_executions_total.py +0 -0
  287. /blaxel/{client → core/client}/models/job_metrics_tasks_chart.py +0 -0
  288. /blaxel/{client → core/client}/models/job_metrics_tasks_total.py +0 -0
  289. /blaxel/{client → core/client}/models/jobs_chart.py +0 -0
  290. /blaxel/{client → core/client}/models/jobs_executions.py +0 -0
  291. /blaxel/{client → core/client}/models/jobs_network_chart.py +0 -0
  292. /blaxel/{client → core/client}/models/jobs_success_failed_chart.py +0 -0
  293. /blaxel/{client → core/client}/models/jobs_tasks.py +0 -0
  294. /blaxel/{client → core/client}/models/jobs_total.py +0 -0
  295. /blaxel/{client → core/client}/models/knowledgebase_spec.py +0 -0
  296. /blaxel/{client → core/client}/models/knowledgebase_spec_options.py +0 -0
  297. /blaxel/{client → core/client}/models/last_n_requests_metric.py +0 -0
  298. /blaxel/{client → core/client}/models/latency_metric.py +0 -0
  299. /blaxel/{client → core/client}/models/mcp_definition.py +0 -0
  300. /blaxel/{client → core/client}/models/mcp_definition_entrypoint.py +0 -0
  301. /blaxel/{client → core/client}/models/mcp_definition_form.py +0 -0
  302. /blaxel/{client → core/client}/models/memory_allocation_metric.py +0 -0
  303. /blaxel/{client → core/client}/models/metadata_labels.py +0 -0
  304. /blaxel/{client → core/client}/models/metric.py +0 -0
  305. /blaxel/{client → core/client}/models/metrics.py +0 -0
  306. /blaxel/{client → core/client}/models/metrics_models.py +0 -0
  307. /blaxel/{client → core/client}/models/metrics_request_total_per_code.py +0 -0
  308. /blaxel/{client → core/client}/models/metrics_rps_per_code.py +0 -0
  309. /blaxel/{client → core/client}/models/model_private_cluster.py +0 -0
  310. /blaxel/{client → core/client}/models/o_auth.py +0 -0
  311. /blaxel/{client → core/client}/models/owner_fields.py +0 -0
  312. /blaxel/{client → core/client}/models/pending_invitation.py +0 -0
  313. /blaxel/{client → core/client}/models/pending_invitation_accept.py +0 -0
  314. /blaxel/{client → core/client}/models/pending_invitation_render.py +0 -0
  315. /blaxel/{client → core/client}/models/pending_invitation_render_invited_by.py +0 -0
  316. /blaxel/{client → core/client}/models/pending_invitation_render_workspace.py +0 -0
  317. /blaxel/{client → core/client}/models/pending_invitation_workspace_details.py +0 -0
  318. /blaxel/{client → core/client}/models/pod_template_spec.py +0 -0
  319. /blaxel/{client → core/client}/models/policy.py +0 -0
  320. /blaxel/{client → core/client}/models/policy_location.py +0 -0
  321. /blaxel/{client → core/client}/models/policy_max_tokens.py +0 -0
  322. /blaxel/{client → core/client}/models/port.py +0 -0
  323. /blaxel/{client → core/client}/models/preview.py +0 -0
  324. /blaxel/{client → core/client}/models/preview_metadata.py +0 -0
  325. /blaxel/{client → core/client}/models/preview_spec.py +0 -0
  326. /blaxel/{client → core/client}/models/preview_spec_request_headers.py +0 -0
  327. /blaxel/{client → core/client}/models/preview_spec_response_headers.py +0 -0
  328. /blaxel/{client → core/client}/models/preview_token.py +0 -0
  329. /blaxel/{client → core/client}/models/preview_token_metadata.py +0 -0
  330. /blaxel/{client → core/client}/models/preview_token_spec.py +0 -0
  331. /blaxel/{client → core/client}/models/private_cluster.py +0 -0
  332. /blaxel/{client → core/client}/models/private_location.py +0 -0
  333. /blaxel/{client → core/client}/models/repository.py +0 -0
  334. /blaxel/{client → core/client}/models/request_duration_over_time_metric.py +0 -0
  335. /blaxel/{client → core/client}/models/request_duration_over_time_metrics.py +0 -0
  336. /blaxel/{client → core/client}/models/request_total_by_origin_metric.py +0 -0
  337. /blaxel/{client → core/client}/models/request_total_by_origin_metric_request_total_by_origin.py +0 -0
  338. /blaxel/{client → core/client}/models/request_total_by_origin_metric_request_total_by_origin_and_code.py +0 -0
  339. /blaxel/{client → core/client}/models/request_total_metric.py +0 -0
  340. /blaxel/{client → core/client}/models/request_total_metric_request_total_per_code.py +0 -0
  341. /blaxel/{client → core/client}/models/request_total_metric_rps_per_code.py +0 -0
  342. /blaxel/{client → core/client}/models/request_total_response_data.py +0 -0
  343. /blaxel/{client → core/client}/models/resource_log.py +0 -0
  344. /blaxel/{client → core/client}/models/resource_metrics_request_total_per_code.py +0 -0
  345. /blaxel/{client → core/client}/models/resource_metrics_request_total_per_code_previous.py +0 -0
  346. /blaxel/{client → core/client}/models/resource_metrics_rps_per_code.py +0 -0
  347. /blaxel/{client → core/client}/models/resource_metrics_rps_per_code_previous.py +0 -0
  348. /blaxel/{client → core/client}/models/revision_configuration.py +0 -0
  349. /blaxel/{client → core/client}/models/revision_metadata.py +0 -0
  350. /blaxel/{client → core/client}/models/runtime_configuration.py +0 -0
  351. /blaxel/{client → core/client}/models/runtime_startup_probe.py +0 -0
  352. /blaxel/{client → core/client}/models/serverless_config.py +0 -0
  353. /blaxel/{client → core/client}/models/serverless_config_configuration.py +0 -0
  354. /blaxel/{client → core/client}/models/spec_configuration.py +0 -0
  355. /blaxel/{client → core/client}/models/start_sandbox.py +0 -0
  356. /blaxel/{client → core/client}/models/stop_sandbox.py +0 -0
  357. /blaxel/{client → core/client}/models/store_agent_labels.py +0 -0
  358. /blaxel/{client → core/client}/models/store_configuration_option.py +0 -0
  359. /blaxel/{client → core/client}/models/template_variable.py +0 -0
  360. /blaxel/{client → core/client}/models/time_fields.py +0 -0
  361. /blaxel/{client → core/client}/models/time_to_first_token_over_time_metrics.py +0 -0
  362. /blaxel/{client → core/client}/models/token_rate_metric.py +0 -0
  363. /blaxel/{client → core/client}/models/token_rate_metrics.py +0 -0
  364. /blaxel/{client → core/client}/models/token_total_metric.py +0 -0
  365. /blaxel/{client → core/client}/models/trace_ids_response.py +0 -0
  366. /blaxel/{client → core/client}/models/trigger.py +0 -0
  367. /blaxel/{client → core/client}/models/trigger_configuration.py +0 -0
  368. /blaxel/{client → core/client}/models/update_workspace_service_account_body.py +0 -0
  369. /blaxel/{client → core/client}/models/update_workspace_service_account_response_200.py +0 -0
  370. /blaxel/{client → core/client}/models/update_workspace_user_role_body.py +0 -0
  371. /blaxel/{client → core/client}/models/websocket_channel.py +0 -0
  372. /blaxel/{client → core/client}/models/workspace.py +0 -0
  373. /blaxel/{client → core/client}/models/workspace_labels.py +0 -0
  374. /blaxel/{client → core/client}/models/workspace_runtime.py +0 -0
  375. /blaxel/{client → core/client}/models/workspace_user.py +0 -0
  376. /blaxel/{client → core/client}/py.typed +0 -0
  377. /blaxel/{client → core/client}/types.py +0 -0
  378. /blaxel/{common → core/common}/env.py +0 -0
  379. /blaxel/{common → core/common}/settings.py +0 -0
  380. /blaxel/{sandbox/client/api/filesystem/__init__.py → core/py.typed} +0 -0
  381. /blaxel/{sandbox → core/sandbox}/client/__init__.py +0 -0
  382. /blaxel/{sandbox → core/sandbox}/client/api/__init__.py +0 -0
  383. /blaxel/{sandbox/client/api/network → core/sandbox/client/api/filesystem}/__init__.py +0 -0
  384. /blaxel/{sandbox → core/sandbox}/client/api/filesystem/delete_filesystem_path.py +0 -0
  385. /blaxel/{sandbox → core/sandbox}/client/api/filesystem/get_filesystem_path.py +0 -0
  386. /blaxel/{sandbox → core/sandbox}/client/api/filesystem/get_watch_filesystem_path.py +0 -0
  387. /blaxel/{sandbox → core/sandbox}/client/api/filesystem/get_ws_watch_filesystem_path.py +0 -0
  388. /blaxel/{sandbox/client/api/process → core/sandbox/client/api/network}/__init__.py +0 -0
  389. /blaxel/{sandbox → core/sandbox}/client/api/network/delete_network_process_pid_monitor.py +0 -0
  390. /blaxel/{sandbox → core/sandbox}/client/api/network/get_network_process_pid_ports.py +0 -0
  391. /blaxel/{sandbox → core/sandbox}/client/api/process/delete_process_identifier.py +0 -0
  392. /blaxel/{sandbox → core/sandbox}/client/api/process/get_process.py +0 -0
  393. /blaxel/{sandbox → core/sandbox}/client/api/process/get_process_identifier.py +0 -0
  394. /blaxel/{sandbox → core/sandbox}/client/api/process/get_process_identifier_logs.py +0 -0
  395. /blaxel/{sandbox → core/sandbox}/client/api/process/get_process_identifier_logs_stream.py +0 -0
  396. /blaxel/{sandbox → core/sandbox}/client/api/process/get_ws_process_identifier_logs_stream.py +0 -0
  397. /blaxel/{sandbox → core/sandbox}/client/client.py +0 -0
  398. /blaxel/{sandbox → core/sandbox}/client/errors.py +0 -0
  399. /blaxel/{sandbox → core/sandbox}/client/models/delete_network_process_pid_monitor_response_200.py +0 -0
  400. /blaxel/{sandbox → core/sandbox}/client/models/error_response.py +0 -0
  401. /blaxel/{sandbox → core/sandbox}/client/models/file.py +0 -0
  402. /blaxel/{sandbox → core/sandbox}/client/models/file_request.py +0 -0
  403. /blaxel/{sandbox → core/sandbox}/client/models/file_with_content.py +0 -0
  404. /blaxel/{sandbox → core/sandbox}/client/models/get_network_process_pid_ports_response_200.py +0 -0
  405. /blaxel/{sandbox → core/sandbox}/client/models/port_monitor_request.py +0 -0
  406. /blaxel/{sandbox → core/sandbox}/client/models/post_network_process_pid_monitor_response_200.py +0 -0
  407. /blaxel/{sandbox → core/sandbox}/client/models/process_logs.py +0 -0
  408. /blaxel/{sandbox → core/sandbox}/client/models/process_response.py +0 -0
  409. /blaxel/{sandbox → core/sandbox}/client/models/process_response_status.py +0 -0
  410. /blaxel/{sandbox → core/sandbox}/client/models/subdirectory.py +0 -0
  411. /blaxel/{sandbox → core/sandbox}/client/models/success_response.py +0 -0
  412. /blaxel/{sandbox → core/sandbox}/client/py.typed +0 -0
  413. /blaxel/{sandbox → core/sandbox}/client/types.py +0 -0
  414. /blaxel/{tools → core/tools}/common.py +0 -0
  415. /blaxel/{tools → core/tools}/types.py +0 -0
  416. /blaxel/{models/custom/langchain → langgraph/custom}/gemini.py +0 -0
  417. /blaxel/{models/custom/llamaindex → llamaindex/custom}/cohere.py +0 -0
  418. /blaxel/{instrumentation → telemetry}/exporters.py +0 -0
  419. /blaxel/{instrumentation → telemetry/log}/log.py +0 -0
  420. {blaxel-0.1.21rc69.dist-info → blaxel-0.2.0.dist-info}/WHEEL +0 -0
  421. {blaxel-0.1.21rc69.dist-info → blaxel-0.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -2,24 +2,22 @@ import logging
2
2
  import traceback
3
3
  import uuid
4
4
  from contextlib import asynccontextmanager
5
- from typing import Dict, Literal
5
+ from typing import Literal
6
6
 
7
7
  import anyio
8
8
  import mcp.types as types
9
9
  from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
10
10
  from mcp.server.fastmcp import FastMCP as FastMCPBase
11
- from opentelemetry.trace import Span, StatusCode
12
- from websockets.server import WebSocketServerProtocol, serve
11
+ from mcp.shared.message import SessionMessage
12
+ from websockets.asyncio.server import ServerConnection, serve
13
13
 
14
14
  from ..common.env import env
15
- from ..instrumentation.span import SpanManager
16
15
 
17
16
  logger = logging.getLogger(__name__)
18
17
 
19
18
 
20
19
  class BlaxelMcpServerTransport:
21
20
  """WebSocket server transport for MCP."""
22
- spans: Dict[str, Span] = {}
23
21
 
24
22
  def __init__(self, port: int = 8080):
25
23
  """Initialize the WebSocket server transport.
@@ -33,47 +31,34 @@ class BlaxelMcpServerTransport:
33
31
  self.port = port
34
32
  self.clients = {}
35
33
  self.server = None
36
- self.span_manager = SpanManager("blaxel-tracer")
37
34
 
38
35
  @asynccontextmanager
39
36
  async def websocket_server(self):
40
37
  """Create and run a WebSocket server for MCP communication."""
41
- read_stream: MemoryObjectReceiveStream[types.JSONRPCMessage | Exception]
42
- read_stream_writer: MemoryObjectSendStream[types.JSONRPCMessage | Exception]
38
+ read_stream: MemoryObjectReceiveStream[SessionMessage | Exception]
39
+ read_stream_writer: MemoryObjectSendStream[SessionMessage | Exception]
43
40
 
44
- write_stream: MemoryObjectSendStream[types.JSONRPCMessage]
45
- write_stream_reader: MemoryObjectReceiveStream[types.JSONRPCMessage]
41
+ write_stream: MemoryObjectSendStream[SessionMessage]
42
+ write_stream_reader: MemoryObjectReceiveStream[SessionMessage]
46
43
 
47
44
  read_stream_writer, read_stream = anyio.create_memory_object_stream(0)
48
45
  write_stream, write_stream_reader = anyio.create_memory_object_stream(0)
49
46
 
50
- async def handler(websocket: WebSocketServerProtocol):
47
+ async def handler(websocket: ServerConnection):
51
48
  client_id = str(uuid.uuid4())
52
49
  self.clients[client_id] = websocket
53
50
  logger.info(f"Client connected: {client_id}")
54
51
 
55
52
  try:
56
53
  async for message in websocket:
57
- span = self.span_manager.create_span("message", {"mcp.client.id": client_id})
58
54
  try:
59
55
  msg = types.JSONRPCMessage.model_validate_json(message)
60
56
  # Modify message ID to include client ID
61
57
  if hasattr(msg, "id") and msg.id is not None:
62
58
  original_id = msg.id
63
59
  msg.id = f"{client_id}:{original_id}"
64
- span.set_attributes({
65
- "mcp.message.parsed": True,
66
- "mcp.method": getattr(msg, "method", None),
67
- "mcp.messageId": getattr(msg, "id", None),
68
- "mcp.toolName": getattr(getattr(msg, "params", None), "name", None),
69
- "span.type": "mcp.message",
70
- })
71
- self.spans[client_id+":"+msg.id] = span
72
- await read_stream_writer.send(msg)
60
+ await read_stream_writer.send(SessionMessage(message=msg))
73
61
  except Exception as exc:
74
- span.set_status(StatusCode.ERROR)
75
- span.record_exception(exc)
76
- span.end()
77
62
  logger.error(f"Failed to parse message: {exc}\n{traceback.format_exc()}")
78
63
  await read_stream_writer.send(exc)
79
64
  except Exception as e:
@@ -85,11 +70,11 @@ class BlaxelMcpServerTransport:
85
70
 
86
71
  async def message_sender():
87
72
  async with write_stream_reader:
88
- async for message in write_stream_reader:
73
+ async for session_message in write_stream_reader:
89
74
  # Extract client ID from message ID
90
75
  client_id = None
91
76
  msg_id = None
92
-
77
+ message = session_message.message
93
78
  if hasattr(message, "id") and message.id is not None:
94
79
  parts = str(message.id).split(":", 1)
95
80
  if len(parts) == 2:
@@ -102,23 +87,12 @@ class BlaxelMcpServerTransport:
102
87
  if client_id and client_id in self.clients:
103
88
  # Send to specific client
104
89
  websocket = self.clients[client_id]
105
- span = self.spans.get(client_id+":"+msg_id)
106
90
  try:
107
91
  await websocket.send(data)
108
- if span:
109
- span.set_attributes({
110
- "mcp.message.response_sent": True,
111
- })
112
92
  except Exception as e:
113
- if span:
114
- span.set_status(StatusCode.ERROR)
115
- span.record_exception(e)
116
93
  logger.error(f"Failed to send message to client {client_id}: {e}")
117
94
  if client_id in self.clients:
118
95
  del self.clients[client_id]
119
- finally:
120
- if span:
121
- span.end()
122
96
  else:
123
97
  # Broadcast to all clients
124
98
  dead_clients = []
@@ -140,6 +114,7 @@ class BlaxelMcpServerTransport:
140
114
  tg.start_soon(message_sender)
141
115
  yield read_stream, write_stream
142
116
 
117
+
143
118
  class FastMCP(FastMCPBase):
144
119
  def run(self, transport: Literal["stdio", "sse", "ws"] = "stdio") -> None:
145
120
  """Run the FastMCP server. Note this is a synchronous function.
@@ -0,0 +1,52 @@
1
+
2
+ from ..cache import find_from_cache
3
+ from ..client import client
4
+ from ..client.api.models import get_model
5
+ from ..client.models import Model
6
+ from ..common import settings
7
+
8
+
9
+ class BLModel:
10
+ models = {}
11
+
12
+ def __init__(self, model_name, **kwargs):
13
+ self.model_name = model_name
14
+ self.kwargs = kwargs
15
+
16
+ async def get_parameters(self) -> tuple[str, str, str]:
17
+ if self.model_name in self.models:
18
+ # We get the headers in case we need to refresh the token
19
+ settings.auth.get_headers()
20
+ model = self.models[self.model_name]
21
+ return model["url"], model["type"], model["model"]
22
+ url = f"{settings.run_url}/{settings.auth.workspace_name}/models/{self.model_name}"
23
+ model_data = await self._get_model_metadata()
24
+ if not model_data:
25
+ raise Exception(f"Model {self.model_name} not found")
26
+ runtime = (model_data.spec and model_data.spec.runtime)
27
+ if not runtime:
28
+ raise Exception(f"Model {self.model_name} has no runtime")
29
+
30
+ type = runtime.type_ or 'openai'
31
+ model = runtime.model
32
+ self.models[self.model_name] = {
33
+ "url": url,
34
+ "type": type,
35
+ "model": model
36
+ }
37
+ return url, type, model
38
+
39
+ async def _get_model_metadata(self) -> Model | None:
40
+ cache_data = await find_from_cache('Model', self.model_name)
41
+ if cache_data:
42
+ return Model.from_dict(cache_data)
43
+
44
+ try:
45
+ return await get_model.asyncio(client=client, model_name=self.model_name)
46
+ except Exception:
47
+ return None
48
+
49
+ def bl_model(model_name, **kwargs):
50
+ return BLModel(model_name, **kwargs)
51
+
52
+ __all__ = ["bl_model"]
@@ -0,0 +1,29 @@
1
+ from .sandbox import (
2
+ Sandbox,
3
+ SandboxFileSystem,
4
+ SandboxInstance,
5
+ SandboxPreviews,
6
+ SandboxProcess,
7
+ )
8
+ from .types import (
9
+ CopyResponse,
10
+ SandboxConfiguration,
11
+ SandboxFilesystemFile,
12
+ SessionCreateOptions,
13
+ SessionWithToken,
14
+ WatchEvent,
15
+ )
16
+
17
+ __all__ = [
18
+ "SandboxInstance",
19
+ "SessionCreateOptions",
20
+ "SessionWithToken",
21
+ "SandboxConfiguration",
22
+ "WatchEvent",
23
+ "SandboxFilesystemFile",
24
+ "CopyResponse",
25
+ "Sandbox",
26
+ "SandboxFileSystem",
27
+ "SandboxPreviews",
28
+ "SandboxProcess",
29
+ ]
@@ -0,0 +1,79 @@
1
+ from typing import Any, Optional
2
+
3
+ import httpx
4
+
5
+ from ..common.internal import get_forced_url, get_global_unique_hash
6
+ from ..common.settings import settings
7
+ from .types import SandboxConfiguration
8
+
9
+
10
+ class ResponseError(Exception):
11
+ def __init__(self, response: httpx.Response, data: Any = None, error: Any = None):
12
+ data_error = {}
13
+ if isinstance(data, dict) and "error" in data:
14
+ data_error = data
15
+ if isinstance(error, dict) and "error" in error:
16
+ data_error["error"] = error["error"]
17
+ if response.status_code:
18
+ data_error["status"] = response.status_code
19
+ if response.reason_phrase:
20
+ data_error["statusText"] = response.reason_phrase
21
+
22
+ super().__init__(str(data_error))
23
+ self.response = response
24
+ self.data = data
25
+ self.error = error
26
+
27
+
28
+ class SandboxAction:
29
+ def __init__(self, sandbox_config: SandboxConfiguration):
30
+ self.sandbox_config = sandbox_config
31
+
32
+ @property
33
+ def name(self) -> str:
34
+ return self.sandbox_config.metadata.name if self.sandbox_config.metadata else ""
35
+
36
+ @property
37
+ def external_url(self) -> str:
38
+ return f"{settings.run_url}/{settings.workspace}/sandboxes/{self.name}"
39
+
40
+ @property
41
+ def internal_url(self) -> str:
42
+ hash_value = get_global_unique_hash(settings.workspace, "sandbox", self.name)
43
+ return f"{settings.run_internal_protocol}://bl-{settings.env}-{hash_value}.{settings.run_internal_hostname}"
44
+
45
+ @property
46
+ def forced_url(self) -> Optional[str]:
47
+ if self.sandbox_config.force_url:
48
+ return self.sandbox_config.force_url
49
+ return get_forced_url("sandbox", self.name)
50
+
51
+ @property
52
+ def url(self) -> str:
53
+ if self.forced_url:
54
+ return self.forced_url
55
+ # Uncomment when mk3 is fully available
56
+ # if settings.run_internal_hostname:
57
+ # return self.internal_url
58
+ return self.external_url
59
+
60
+ @property
61
+ def fallback_url(self) -> Optional[str]:
62
+ if self.external_url != self.url:
63
+ return self.external_url
64
+ return None
65
+
66
+ def get_client(self) -> httpx.AsyncClient:
67
+ if self.sandbox_config.force_url:
68
+ return httpx.AsyncClient(
69
+ base_url=self.sandbox_config.force_url, headers=self.sandbox_config.headers
70
+ )
71
+ # Create a new client instance each time to avoid "Cannot open a client instance more than once" error
72
+ return httpx.AsyncClient(
73
+ base_url=self.url,
74
+ headers={**settings.headers, **self.sandbox_config.headers},
75
+ )
76
+
77
+ def handle_response_error(self, response: httpx.Response, data: Any, error: Any):
78
+ if not response.is_success or not data:
79
+ raise ResponseError(response, data, error)
@@ -23,7 +23,7 @@ def _get_kwargs(
23
23
  "url": f"/filesystem/{path}",
24
24
  }
25
25
 
26
- if type(body) == dict:
26
+ if type(body) is dict:
27
27
  _body = body
28
28
  else:
29
29
  _body = body.to_dict()
@@ -25,7 +25,7 @@ def _get_kwargs(
25
25
  "url": f"/network/process/{pid}/monitor",
26
26
  }
27
27
 
28
- if type(body) == dict:
28
+ if type(body) is dict:
29
29
  _body = body
30
30
  else:
31
31
  _body = body.to_dict()
File without changes
@@ -6,32 +6,18 @@ import httpx
6
6
  from ... import errors
7
7
  from ...client import Client
8
8
  from ...models.error_response import ErrorResponse
9
- from ...models.process_kill_request import ProcessKillRequest
10
9
  from ...models.success_response import SuccessResponse
11
10
  from ...types import Response
12
11
 
13
12
 
14
13
  def _get_kwargs(
15
14
  identifier: str,
16
- *,
17
- body: ProcessKillRequest,
18
15
  ) -> dict[str, Any]:
19
- headers: dict[str, Any] = {}
20
-
21
16
  _kwargs: dict[str, Any] = {
22
17
  "method": "delete",
23
18
  "url": f"/process/{identifier}/kill",
24
19
  }
25
20
 
26
- if type(body) == dict:
27
- _body = body
28
- else:
29
- _body = body.to_dict()
30
-
31
- _kwargs["json"] = _body
32
- headers["Content-Type"] = "application/json"
33
-
34
- _kwargs["headers"] = headers
35
21
  return _kwargs
36
22
 
37
23
 
@@ -71,7 +57,6 @@ def sync_detailed(
71
57
  identifier: str,
72
58
  *,
73
59
  client: Union[Client],
74
- body: ProcessKillRequest,
75
60
  ) -> Response[Union[ErrorResponse, SuccessResponse]]:
76
61
  """Kill a process
77
62
 
@@ -79,7 +64,6 @@ def sync_detailed(
79
64
 
80
65
  Args:
81
66
  identifier (str):
82
- body (ProcessKillRequest):
83
67
 
84
68
  Raises:
85
69
  errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -91,7 +75,6 @@ def sync_detailed(
91
75
 
92
76
  kwargs = _get_kwargs(
93
77
  identifier=identifier,
94
- body=body,
95
78
  )
96
79
 
97
80
  response = client.get_httpx_client().request(
@@ -105,7 +88,6 @@ def sync(
105
88
  identifier: str,
106
89
  *,
107
90
  client: Union[Client],
108
- body: ProcessKillRequest,
109
91
  ) -> Optional[Union[ErrorResponse, SuccessResponse]]:
110
92
  """Kill a process
111
93
 
@@ -113,7 +95,6 @@ def sync(
113
95
 
114
96
  Args:
115
97
  identifier (str):
116
- body (ProcessKillRequest):
117
98
 
118
99
  Raises:
119
100
  errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -126,7 +107,6 @@ def sync(
126
107
  return sync_detailed(
127
108
  identifier=identifier,
128
109
  client=client,
129
- body=body,
130
110
  ).parsed
131
111
 
132
112
 
@@ -134,7 +114,6 @@ async def asyncio_detailed(
134
114
  identifier: str,
135
115
  *,
136
116
  client: Union[Client],
137
- body: ProcessKillRequest,
138
117
  ) -> Response[Union[ErrorResponse, SuccessResponse]]:
139
118
  """Kill a process
140
119
 
@@ -142,7 +121,6 @@ async def asyncio_detailed(
142
121
 
143
122
  Args:
144
123
  identifier (str):
145
- body (ProcessKillRequest):
146
124
 
147
125
  Raises:
148
126
  errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -154,7 +132,6 @@ async def asyncio_detailed(
154
132
 
155
133
  kwargs = _get_kwargs(
156
134
  identifier=identifier,
157
- body=body,
158
135
  )
159
136
 
160
137
  response = await client.get_async_httpx_client().request(**kwargs)
@@ -166,7 +143,6 @@ async def asyncio(
166
143
  identifier: str,
167
144
  *,
168
145
  client: Union[Client],
169
- body: ProcessKillRequest,
170
146
  ) -> Optional[Union[ErrorResponse, SuccessResponse]]:
171
147
  """Kill a process
172
148
 
@@ -174,7 +150,6 @@ async def asyncio(
174
150
 
175
151
  Args:
176
152
  identifier (str):
177
- body (ProcessKillRequest):
178
153
 
179
154
  Raises:
180
155
  errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
@@ -188,6 +163,5 @@ async def asyncio(
188
163
  await asyncio_detailed(
189
164
  identifier=identifier,
190
165
  client=client,
191
- body=body,
192
166
  )
193
167
  ).parsed
@@ -22,7 +22,7 @@ def _get_kwargs(
22
22
  "url": "/process",
23
23
  }
24
24
 
25
- if type(body) == dict:
25
+ if type(body) is dict:
26
26
  _body = body
27
27
  else:
28
28
  _body = body.to_dict()
@@ -11,9 +11,9 @@ from .file_with_content import FileWithContent
11
11
  from .get_network_process_pid_ports_response_200 import GetNetworkProcessPidPortsResponse200
12
12
  from .port_monitor_request import PortMonitorRequest
13
13
  from .post_network_process_pid_monitor_response_200 import PostNetworkProcessPidMonitorResponse200
14
- from .process_kill_request import ProcessKillRequest
15
14
  from .process_logs import ProcessLogs
16
15
  from .process_request import ProcessRequest
16
+ from .process_request_env import ProcessRequestEnv
17
17
  from .process_response import ProcessResponse
18
18
  from .process_response_status import ProcessResponseStatus
19
19
  from .subdirectory import Subdirectory
@@ -29,9 +29,9 @@ __all__ = (
29
29
  "GetNetworkProcessPidPortsResponse200",
30
30
  "PortMonitorRequest",
31
31
  "PostNetworkProcessPidMonitorResponse200",
32
- "ProcessKillRequest",
33
32
  "ProcessLogs",
34
33
  "ProcessRequest",
34
+ "ProcessRequestEnv",
35
35
  "ProcessResponse",
36
36
  "ProcessResponseStatus",
37
37
  "Subdirectory",
@@ -34,7 +34,7 @@ class Directory:
34
34
  if not isinstance(self.files, Unset):
35
35
  files = []
36
36
  for files_item_data in self.files:
37
- if type(files_item_data) == dict:
37
+ if type(files_item_data) is dict:
38
38
  files_item = files_item_data
39
39
  else:
40
40
  files_item = files_item_data.to_dict()
@@ -48,7 +48,7 @@ class Directory:
48
48
  if not isinstance(self.subdirectories, Unset):
49
49
  subdirectories = []
50
50
  for subdirectories_item_data in self.subdirectories:
51
- if type(subdirectories_item_data) == dict:
51
+ if type(subdirectories_item_data) is dict:
52
52
  subdirectories_item = subdirectories_item_data
53
53
  else:
54
54
  subdirectories_item = subdirectories_item_data.to_dict()
@@ -1,10 +1,14 @@
1
- from typing import Any, TypeVar, Union, cast
1
+ from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
2
2
 
3
3
  from attrs import define as _attrs_define
4
4
  from attrs import field as _attrs_field
5
5
 
6
6
  from ..types import UNSET, Unset
7
7
 
8
+ if TYPE_CHECKING:
9
+ from ..models.process_request_env import ProcessRequestEnv
10
+
11
+
8
12
  T = TypeVar("T", bound="ProcessRequest")
9
13
 
10
14
 
@@ -13,6 +17,7 @@ class ProcessRequest:
13
17
  """
14
18
  Attributes:
15
19
  command (str): Example: ls -la.
20
+ env (Union[Unset, ProcessRequestEnv]): Example: {'{"PORT"': ' "3000"}'}.
16
21
  name (Union[Unset, str]): Example: my-process.
17
22
  timeout (Union[Unset, int]): Example: 30.
18
23
  wait_for_completion (Union[Unset, bool]):
@@ -21,6 +26,7 @@ class ProcessRequest:
21
26
  """
22
27
 
23
28
  command: str
29
+ env: Union[Unset, "ProcessRequestEnv"] = UNSET
24
30
  name: Union[Unset, str] = UNSET
25
31
  timeout: Union[Unset, int] = UNSET
26
32
  wait_for_completion: Union[Unset, bool] = UNSET
@@ -31,6 +37,12 @@ class ProcessRequest:
31
37
  def to_dict(self) -> dict[str, Any]:
32
38
  command = self.command
33
39
 
40
+ env: Union[Unset, dict[str, Any]] = UNSET
41
+ if self.env and not isinstance(self.env, Unset) and not isinstance(self.env, dict):
42
+ env = self.env.to_dict()
43
+ elif self.env and isinstance(self.env, dict):
44
+ env = self.env
45
+
34
46
  name = self.name
35
47
 
36
48
  timeout = self.timeout
@@ -50,6 +62,8 @@ class ProcessRequest:
50
62
  "command": command,
51
63
  }
52
64
  )
65
+ if env is not UNSET:
66
+ field_dict["env"] = env
53
67
  if name is not UNSET:
54
68
  field_dict["name"] = name
55
69
  if timeout is not UNSET:
@@ -65,11 +79,20 @@ class ProcessRequest:
65
79
 
66
80
  @classmethod
67
81
  def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
82
+ from ..models.process_request_env import ProcessRequestEnv
83
+
68
84
  if not src_dict:
69
85
  return None
70
86
  d = src_dict.copy()
71
87
  command = d.pop("command")
72
88
 
89
+ _env = d.pop("env", UNSET)
90
+ env: Union[Unset, ProcessRequestEnv]
91
+ if isinstance(_env, Unset):
92
+ env = UNSET
93
+ else:
94
+ env = ProcessRequestEnv.from_dict(_env)
95
+
73
96
  name = d.pop("name", UNSET)
74
97
 
75
98
  timeout = d.pop("timeout", UNSET)
@@ -82,6 +105,7 @@ class ProcessRequest:
82
105
 
83
106
  process_request = cls(
84
107
  command=command,
108
+ env=env,
85
109
  name=name,
86
110
  timeout=timeout,
87
111
  wait_for_completion=wait_for_completion,
@@ -0,0 +1,49 @@
1
+ from typing import Any, TypeVar
2
+
3
+ from attrs import define as _attrs_define
4
+ from attrs import field as _attrs_field
5
+
6
+ T = TypeVar("T", bound="ProcessRequestEnv")
7
+
8
+
9
+ @_attrs_define
10
+ class ProcessRequestEnv:
11
+ """
12
+ Example:
13
+ {'{"PORT"': ' "3000"}'}
14
+
15
+ """
16
+
17
+ additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict)
18
+
19
+ def to_dict(self) -> dict[str, Any]:
20
+ field_dict: dict[str, Any] = {}
21
+ field_dict.update(self.additional_properties)
22
+
23
+ return field_dict
24
+
25
+ @classmethod
26
+ def from_dict(cls: type[T], src_dict: dict[str, Any]) -> T:
27
+ if not src_dict:
28
+ return None
29
+ d = src_dict.copy()
30
+ process_request_env = cls()
31
+
32
+ process_request_env.additional_properties = d
33
+ return process_request_env
34
+
35
+ @property
36
+ def additional_keys(self) -> list[str]:
37
+ return list(self.additional_properties.keys())
38
+
39
+ def __getitem__(self, key: str) -> str:
40
+ return self.additional_properties[key]
41
+
42
+ def __setitem__(self, key: str, value: str) -> None:
43
+ self.additional_properties[key] = value
44
+
45
+ def __delitem__(self, key: str) -> None:
46
+ del self.additional_properties[key]
47
+
48
+ def __contains__(self, key: str) -> bool:
49
+ return key in self.additional_properties