blaxel 0.1.21rc69__py3-none-any.whl → 0.2.0rc1__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 +13 -7
  75. blaxel/{mcp → core/mcp}/server.py +76 -17
  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 +124 -0
  127. blaxel/telemetry/instrumentation/blaxel_langgraph.py +74 -0
  128. blaxel/telemetry/instrumentation/blaxel_langgraph_gemini.py +360 -0
  129. blaxel/telemetry/instrumentation/blaxel_llamaindex.py +89 -0
  130. blaxel/telemetry/instrumentation/map.py +61 -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.0rc1.dist-info/METADATA +224 -0
  137. blaxel-0.2.0rc1.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.0rc1.dist-info}/WHEEL +0 -0
  421. {blaxel-0.1.21rc69.dist-info → blaxel-0.2.0rc1.dist-info}/licenses/LICENSE +0 -0
@@ -8,17 +8,63 @@ 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 websockets.asyncio.server import ServerConnection, serve
12
+
13
+ try:
14
+ from opentelemetry.trace import Span, StatusCode
15
+
16
+ HAS_OPENTELEMETRY = True
17
+ except ImportError:
18
+ HAS_OPENTELEMETRY = False
19
+
20
+ # Create dummy classes for when opentelemetry is not available
21
+ class Span:
22
+ def set_attributes(self, *args, **kwargs):
23
+ pass
24
+
25
+ def set_status(self, *args, **kwargs):
26
+ pass
27
+
28
+ def record_exception(self, *args, **kwargs):
29
+ pass
30
+
31
+ def end(self, *args, **kwargs):
32
+ pass
33
+
34
+ def add_event(self, *args, **kwargs):
35
+ pass
36
+
37
+ def get_span_context(self, *args, **kwargs):
38
+ return None
39
+
40
+ def is_recording(self, *args, **kwargs):
41
+ return False
42
+
43
+ def set_attribute(self, *args, **kwargs):
44
+ pass
45
+
46
+ def update_name(self, *args, **kwargs):
47
+ pass
48
+
49
+ class StatusCode:
50
+ ERROR = "ERROR"
51
+
13
52
 
14
53
  from ..common.env import env
15
- from ..instrumentation.span import SpanManager
16
54
 
17
55
  logger = logging.getLogger(__name__)
18
56
 
19
57
 
58
+ class DummySpanManager:
59
+ """Dummy span manager for when opentelemetry is not available."""
60
+
61
+ def create_span(self, name: str, attributes: dict = None):
62
+ return Span()
63
+
64
+
20
65
  class BlaxelMcpServerTransport:
21
66
  """WebSocket server transport for MCP."""
67
+
22
68
  spans: Dict[str, Span] = {}
23
69
 
24
70
  def __init__(self, port: int = 8080):
@@ -33,7 +79,13 @@ class BlaxelMcpServerTransport:
33
79
  self.port = port
34
80
  self.clients = {}
35
81
  self.server = None
36
- self.span_manager = SpanManager("blaxel-tracer")
82
+
83
+ # Initialize span manager
84
+ if HAS_OPENTELEMETRY:
85
+ # TODO: Implement proper OpenTelemetry span manager when telemetry is available
86
+ self.span_manager = DummySpanManager()
87
+ else:
88
+ self.span_manager = DummySpanManager()
37
89
 
38
90
  @asynccontextmanager
39
91
  async def websocket_server(self):
@@ -47,7 +99,7 @@ class BlaxelMcpServerTransport:
47
99
  read_stream_writer, read_stream = anyio.create_memory_object_stream(0)
48
100
  write_stream, write_stream_reader = anyio.create_memory_object_stream(0)
49
101
 
50
- async def handler(websocket: WebSocketServerProtocol):
102
+ async def handler(websocket: ServerConnection):
51
103
  client_id = str(uuid.uuid4())
52
104
  self.clients[client_id] = websocket
53
105
  logger.info(f"Client connected: {client_id}")
@@ -61,14 +113,18 @@ class BlaxelMcpServerTransport:
61
113
  if hasattr(msg, "id") and msg.id is not None:
62
114
  original_id = msg.id
63
115
  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
116
+ span.set_attributes(
117
+ {
118
+ "mcp.message.parsed": True,
119
+ "mcp.method": getattr(msg, "method", None),
120
+ "mcp.messageId": getattr(msg, "id", None),
121
+ "mcp.toolName": getattr(
122
+ getattr(msg, "params", None), "name", None
123
+ ),
124
+ "span.type": "mcp.message",
125
+ }
126
+ )
127
+ self.spans[client_id + ":" + msg.id] = span
72
128
  await read_stream_writer.send(msg)
73
129
  except Exception as exc:
74
130
  span.set_status(StatusCode.ERROR)
@@ -102,13 +158,15 @@ class BlaxelMcpServerTransport:
102
158
  if client_id and client_id in self.clients:
103
159
  # Send to specific client
104
160
  websocket = self.clients[client_id]
105
- span = self.spans.get(client_id+":"+msg_id)
161
+ span = self.spans.get(client_id + ":" + msg_id)
106
162
  try:
107
163
  await websocket.send(data)
108
164
  if span:
109
- span.set_attributes({
110
- "mcp.message.response_sent": True,
111
- })
165
+ span.set_attributes(
166
+ {
167
+ "mcp.message.response_sent": True,
168
+ }
169
+ )
112
170
  except Exception as e:
113
171
  if span:
114
172
  span.set_status(StatusCode.ERROR)
@@ -140,6 +198,7 @@ class BlaxelMcpServerTransport:
140
198
  tg.start_soon(message_sender)
141
199
  yield read_stream, write_stream
142
200
 
201
+
143
202
  class FastMCP(FastMCPBase):
144
203
  def run(self, transport: Literal["stdio", "sse", "ws"] = "stdio") -> None:
145
204
  """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