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.
- blaxel/__init__.py +6 -3
- blaxel/core/__init__.py +44 -0
- blaxel/core/agents/__init__.py +115 -0
- blaxel/{authentication → core/authentication}/apikey.py +1 -0
- blaxel/{authentication → core/authentication}/clientcredentials.py +6 -2
- blaxel/{client → core/client}/api/agents/create_agent.py +1 -1
- blaxel/{client → core/client}/api/agents/update_agent.py +1 -1
- blaxel/{client → core/client}/api/compute/create_sandbox.py +1 -1
- blaxel/{client → core/client}/api/compute/create_sandbox_preview.py +1 -1
- blaxel/{client → core/client}/api/compute/create_sandbox_preview_token.py +1 -1
- blaxel/{client → core/client}/api/compute/update_sandbox.py +1 -1
- blaxel/{client → core/client}/api/compute/update_sandbox_preview.py +1 -1
- blaxel/{client → core/client}/api/functions/create_function.py +1 -1
- blaxel/{client → core/client}/api/functions/update_function.py +1 -1
- blaxel/{client → core/client}/api/integrations/create_integration_connection.py +1 -1
- blaxel/{client → core/client}/api/integrations/update_integration_connection.py +1 -1
- blaxel/{client → core/client}/api/jobs/create_job.py +1 -1
- blaxel/{client → core/client}/api/jobs/update_job.py +1 -1
- blaxel/{client → core/client}/api/knowledgebases/create_knowledgebase.py +1 -1
- blaxel/{client → core/client}/api/knowledgebases/update_knowledgebase.py +1 -1
- blaxel/{client → core/client}/api/models/create_model.py +1 -1
- blaxel/{client → core/client}/api/models/update_model.py +1 -1
- blaxel/{client → core/client}/api/policies/create_policy.py +1 -1
- blaxel/{client → core/client}/api/policies/update_policy.py +1 -1
- blaxel/{client → core/client}/api/service_accounts/create_api_key_for_service_account.py +1 -1
- blaxel/{client → core/client}/api/service_accounts/create_workspace_service_account.py +1 -1
- blaxel/{client → core/client}/api/service_accounts/update_workspace_service_account.py +1 -1
- blaxel/{client → core/client}/api/workspaces/check_workspace_availability.py +1 -1
- blaxel/{client → core/client}/api/workspaces/create_worspace.py +1 -1
- blaxel/{client → core/client}/api/workspaces/invite_workspace_user.py +1 -1
- blaxel/{client → core/client}/api/workspaces/update_workspace.py +1 -1
- blaxel/{client → core/client}/api/workspaces/update_workspace_user_role.py +1 -1
- blaxel/{client → core/client}/models/__init__.py +18 -0
- blaxel/{client → core/client}/models/agent.py +1 -1
- blaxel/{client → core/client}/models/agent_spec.py +2 -2
- blaxel/core/client/models/billable_time_metric.py +70 -0
- blaxel/{client → core/client}/models/core_spec.py +1 -1
- blaxel/{client → core/client}/models/function.py +1 -1
- blaxel/{client → core/client}/models/function_schema_properties.py +1 -1
- blaxel/{client → core/client}/models/function_spec.py +2 -2
- blaxel/{client → core/client}/models/integration.py +2 -2
- blaxel/{client → core/client}/models/integration_endpoints.py +1 -1
- blaxel/{client → core/client}/models/job.py +1 -1
- blaxel/{client → core/client}/models/job_spec.py +1 -1
- blaxel/{client → core/client}/models/jobs_chart_value.py +2 -2
- blaxel/{client → core/client}/models/knowledgebase.py +1 -1
- blaxel/{client → core/client}/models/location_response.py +1 -1
- blaxel/core/client/models/logs_response.py +63 -0
- blaxel/core/client/models/logs_response_data.py +99 -0
- blaxel/core/client/models/memory_allocation_by_name.py +70 -0
- blaxel/{client → core/client}/models/metadata.py +9 -0
- blaxel/{client → core/client}/models/model.py +1 -1
- blaxel/{client → core/client}/models/model_spec.py +1 -1
- blaxel/{client → core/client}/models/policy_spec.py +2 -2
- blaxel/core/client/models/resource.py +79 -0
- blaxel/core/client/models/resource_log_chart.py +133 -0
- blaxel/core/client/models/resource_log_response.py +83 -0
- blaxel/{client → core/client}/models/resource_metrics.py +27 -3
- blaxel/core/client/models/resource_trace.py +97 -0
- blaxel/{client → core/client}/models/runtime.py +1 -1
- blaxel/{client → core/client}/models/sandbox.py +1 -1
- blaxel/{client → core/client}/models/sandbox_definition.py +1 -1
- blaxel/{client → core/client}/models/sandbox_spec.py +1 -1
- blaxel/{client → core/client}/models/store_agent.py +1 -1
- blaxel/{client → core/client}/models/store_configuration.py +1 -1
- blaxel/{client → core/client}/models/template.py +1 -1
- blaxel/core/client/models/websocket_message.py +106 -0
- blaxel/core/common/__init__.py +6 -0
- blaxel/core/common/autoload.py +21 -0
- blaxel/{common → core/common}/internal.py +34 -62
- blaxel/core/common/logger.py +131 -0
- blaxel/{jobs → core/jobs}/__init__.py +41 -61
- blaxel/core/mcp/__init__.py +4 -0
- blaxel/{mcp → core/mcp}/client.py +13 -7
- blaxel/{mcp → core/mcp}/server.py +76 -17
- blaxel/core/models/__init__.py +52 -0
- blaxel/core/sandbox/__init__.py +29 -0
- blaxel/core/sandbox/action.py +79 -0
- blaxel/{sandbox → core/sandbox}/client/api/filesystem/put_filesystem_path.py +1 -1
- blaxel/{sandbox → core/sandbox}/client/api/network/post_network_process_pid_monitor.py +1 -1
- blaxel/core/sandbox/client/api/process/__init__.py +0 -0
- blaxel/{sandbox → core/sandbox}/client/api/process/delete_process_identifier_kill.py +0 -26
- blaxel/{sandbox → core/sandbox}/client/api/process/post_process.py +1 -1
- blaxel/{sandbox → core/sandbox}/client/models/__init__.py +2 -2
- blaxel/{sandbox → core/sandbox}/client/models/directory.py +2 -2
- blaxel/{sandbox → core/sandbox}/client/models/process_request.py +25 -1
- blaxel/core/sandbox/client/models/process_request_env.py +49 -0
- blaxel/core/sandbox/filesystem.py +280 -0
- blaxel/core/sandbox/network.py +10 -0
- blaxel/{sandbox → core/sandbox}/preview.py +45 -17
- blaxel/core/sandbox/process.py +159 -0
- blaxel/{sandbox → core/sandbox}/sandbox.py +62 -5
- blaxel/core/sandbox/session.py +124 -0
- blaxel/core/sandbox/types.py +103 -0
- blaxel/{tools → core/tools}/__init__.py +63 -91
- blaxel/crewai/__init__.py +4 -0
- blaxel/{models/crewai.py → crewai/model.py} +4 -2
- blaxel/crewai/py.typed +0 -0
- blaxel/crewai/tools.py +26 -0
- blaxel/googleadk/__init__.py +4 -0
- blaxel/{models/googleadk.py → googleadk/model.py} +8 -2
- blaxel/googleadk/py.typed +0 -0
- blaxel/googleadk/tools.py +72 -0
- blaxel/langgraph/__init__.py +4 -0
- blaxel/{models/langchain.py → langgraph/model.py} +8 -4
- blaxel/langgraph/py.typed +0 -0
- blaxel/{tools/langchain.py → langgraph/tools.py} +7 -3
- blaxel/livekit/__init__.py +4 -0
- blaxel/{models/livekit.py → livekit/model.py} +7 -1
- blaxel/livekit/py.typed +0 -0
- blaxel/{tools/livekit.py → livekit/tools.py} +8 -1
- blaxel/llamaindex/__init__.py +4 -0
- blaxel/{models/llamaindex.py → llamaindex/model.py} +6 -3
- blaxel/llamaindex/py.typed +0 -0
- blaxel/{tools/llamaindex.py → llamaindex/tools.py} +7 -4
- blaxel/openai/__init__.py +4 -0
- blaxel/{models/openai.py → openai/model.py} +4 -2
- blaxel/openai/py.typed +0 -0
- blaxel/{tools/openai.py → openai/tools.py} +7 -3
- blaxel/pydantic/__init__.py +4 -0
- blaxel/{models/custom/pydantic → pydantic/custom}/gemini.py +0 -1
- blaxel/{models/pydantic.py → pydantic/model.py} +6 -4
- blaxel/pydantic/py.typed +0 -0
- blaxel/{tools/pydantic.py → pydantic/tools.py} +6 -3
- blaxel/telemetry/__init__.py +6 -0
- blaxel/telemetry/instrumentation/blaxel_core.py +124 -0
- blaxel/telemetry/instrumentation/blaxel_langgraph.py +74 -0
- blaxel/telemetry/instrumentation/blaxel_langgraph_gemini.py +360 -0
- blaxel/telemetry/instrumentation/blaxel_llamaindex.py +89 -0
- blaxel/telemetry/instrumentation/map.py +61 -0
- blaxel/telemetry/instrumentation/utils.py +74 -0
- blaxel/{common → telemetry/log}/logger.py +6 -12
- blaxel/{instrumentation → telemetry}/manager.py +20 -12
- blaxel/telemetry/py.typed +0 -0
- blaxel/{instrumentation → telemetry}/span.py +12 -1
- blaxel-0.2.0rc1.dist-info/METADATA +224 -0
- blaxel-0.2.0rc1.dist-info/RECORD +408 -0
- blaxel/agents/__init__.py +0 -135
- blaxel/common/autoload.py +0 -9
- blaxel/instrumentation/map.py +0 -49
- blaxel/mcp/__init__.py +0 -3
- blaxel/models/__init__.py +0 -104
- blaxel/sandbox/base.py +0 -68
- blaxel/sandbox/client/models/process_kill_request.py +0 -60
- blaxel/sandbox/filesystem.py +0 -104
- blaxel/sandbox/process.py +0 -56
- blaxel/tools/crewai.py +0 -22
- blaxel/tools/googleadk.py +0 -66
- blaxel-0.1.21rc69.dist-info/METADATA +0 -169
- blaxel-0.1.21rc69.dist-info/RECORD +0 -370
- /blaxel/{authentication → core/authentication}/__init__.py +0 -0
- /blaxel/{authentication → core/authentication}/devicemode.py +0 -0
- /blaxel/{authentication → core/authentication}/oauth.py +0 -0
- /blaxel/{authentication → core/authentication}/types.py +0 -0
- /blaxel/{cache → core/cache}/__init__.py +0 -0
- /blaxel/{cache → core/cache}/cache.py +0 -0
- /blaxel/{client → core/client}/__init__.py +0 -0
- /blaxel/{client → core/client}/api/__init__.py +0 -0
- /blaxel/{client → core/client}/api/agents/__init__.py +0 -0
- /blaxel/{client → core/client}/api/agents/delete_agent.py +0 -0
- /blaxel/{client → core/client}/api/agents/get_agent.py +0 -0
- /blaxel/{client → core/client}/api/agents/list_agent_revisions.py +0 -0
- /blaxel/{client → core/client}/api/agents/list_agents.py +0 -0
- /blaxel/{client → core/client}/api/compute/__init__.py +0 -0
- /blaxel/{client → core/client}/api/compute/delete_sandbox.py +0 -0
- /blaxel/{client → core/client}/api/compute/delete_sandbox_preview.py +0 -0
- /blaxel/{client → core/client}/api/compute/delete_sandbox_preview_token.py +0 -0
- /blaxel/{client → core/client}/api/compute/get_sandbox.py +0 -0
- /blaxel/{client → core/client}/api/compute/get_sandbox_preview.py +0 -0
- /blaxel/{client → core/client}/api/compute/list_sandbox_preview_tokens.py +0 -0
- /blaxel/{client → core/client}/api/compute/list_sandbox_previews.py +0 -0
- /blaxel/{client → core/client}/api/compute/list_sandboxes.py +0 -0
- /blaxel/{client → core/client}/api/compute/start_sandbox.py +0 -0
- /blaxel/{client → core/client}/api/compute/stop_sandbox.py +0 -0
- /blaxel/{client → core/client}/api/configurations/__init__.py +0 -0
- /blaxel/{client → core/client}/api/configurations/get_configuration.py +0 -0
- /blaxel/{client → core/client}/api/default/__init__.py +0 -0
- /blaxel/{client → core/client}/api/default/get_template.py +0 -0
- /blaxel/{client → core/client}/api/default/list_mcp_hub_definitions.py +0 -0
- /blaxel/{client → core/client}/api/default/list_sandbox_hub_definitions.py +0 -0
- /blaxel/{client → core/client}/api/functions/__init__.py +0 -0
- /blaxel/{client → core/client}/api/functions/delete_function.py +0 -0
- /blaxel/{client → core/client}/api/functions/get_function.py +0 -0
- /blaxel/{client → core/client}/api/functions/list_function_revisions.py +0 -0
- /blaxel/{client → core/client}/api/functions/list_functions.py +0 -0
- /blaxel/{client → core/client}/api/integrations/__init__.py +0 -0
- /blaxel/{client → core/client}/api/integrations/delete_integration_connection.py +0 -0
- /blaxel/{client → core/client}/api/integrations/get_integration.py +0 -0
- /blaxel/{client → core/client}/api/integrations/get_integration_connection.py +0 -0
- /blaxel/{client → core/client}/api/integrations/get_integration_connection_model.py +0 -0
- /blaxel/{client → core/client}/api/integrations/get_integration_connection_model_endpoint_configurations.py +0 -0
- /blaxel/{client → core/client}/api/integrations/list_integration_connection_models.py +0 -0
- /blaxel/{client → core/client}/api/integrations/list_integration_connections.py +0 -0
- /blaxel/{client → core/client}/api/invitations/__init__.py +0 -0
- /blaxel/{client → core/client}/api/invitations/list_all_pending_invitations.py +0 -0
- /blaxel/{client → core/client}/api/jobs/__init__.py +0 -0
- /blaxel/{client → core/client}/api/jobs/delete_job.py +0 -0
- /blaxel/{client → core/client}/api/jobs/get_job.py +0 -0
- /blaxel/{client → core/client}/api/jobs/list_job_revisions.py +0 -0
- /blaxel/{client → core/client}/api/jobs/list_jobs.py +0 -0
- /blaxel/{client → core/client}/api/knowledgebases/__init__.py +0 -0
- /blaxel/{client → core/client}/api/knowledgebases/delete_knowledgebase.py +0 -0
- /blaxel/{client → core/client}/api/knowledgebases/get_knowledgebase.py +0 -0
- /blaxel/{client → core/client}/api/knowledgebases/list_knowledgebase_revisions.py +0 -0
- /blaxel/{client → core/client}/api/knowledgebases/list_knowledgebases.py +0 -0
- /blaxel/{client → core/client}/api/locations/__init__.py +0 -0
- /blaxel/{client → core/client}/api/locations/list_locations.py +0 -0
- /blaxel/{client → core/client}/api/models/__init__.py +0 -0
- /blaxel/{client → core/client}/api/models/delete_model.py +0 -0
- /blaxel/{client → core/client}/api/models/get_model.py +0 -0
- /blaxel/{client → core/client}/api/models/list_model_revisions.py +0 -0
- /blaxel/{client → core/client}/api/models/list_models.py +0 -0
- /blaxel/{client → core/client}/api/policies/__init__.py +0 -0
- /blaxel/{client → core/client}/api/policies/delete_policy.py +0 -0
- /blaxel/{client → core/client}/api/policies/get_policy.py +0 -0
- /blaxel/{client → core/client}/api/policies/list_policies.py +0 -0
- /blaxel/{client → core/client}/api/privateclusters/__init__.py +0 -0
- /blaxel/{client → core/client}/api/privateclusters/create_private_cluster.py +0 -0
- /blaxel/{client → core/client}/api/privateclusters/delete_private_cluster.py +0 -0
- /blaxel/{client → core/client}/api/privateclusters/get_private_cluster.py +0 -0
- /blaxel/{client → core/client}/api/privateclusters/get_private_cluster_health.py +0 -0
- /blaxel/{client → core/client}/api/privateclusters/list_private_clusters.py +0 -0
- /blaxel/{client → core/client}/api/privateclusters/update_private_cluster.py +0 -0
- /blaxel/{client → core/client}/api/privateclusters/update_private_cluster_health.py +0 -0
- /blaxel/{client → core/client}/api/service_accounts/__init__.py +0 -0
- /blaxel/{client → core/client}/api/service_accounts/delete_api_key_for_service_account.py +0 -0
- /blaxel/{client → core/client}/api/service_accounts/delete_workspace_service_account.py +0 -0
- /blaxel/{client → core/client}/api/service_accounts/get_workspace_service_accounts.py +0 -0
- /blaxel/{client → core/client}/api/service_accounts/list_api_keys_for_service_account.py +0 -0
- /blaxel/{client → core/client}/api/templates/__init__.py +0 -0
- /blaxel/{client → core/client}/api/templates/list_templates.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/__init__.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/accept_workspace_invitation.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/decline_workspace_invitation.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/delete_workspace.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/get_workspace.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/leave_workspace.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/list_workspace_users.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/list_workspaces.py +0 -0
- /blaxel/{client → core/client}/api/workspaces/remove_workspace_user.py +0 -0
- /blaxel/{client → core/client}/client.py +0 -0
- /blaxel/{client → core/client}/errors.py +0 -0
- /blaxel/{client → core/client}/models/acl.py +0 -0
- /blaxel/{client → core/client}/models/api_key.py +0 -0
- /blaxel/{client → core/client}/models/check_workspace_availability_body.py +0 -0
- /blaxel/{client → core/client}/models/configuration.py +0 -0
- /blaxel/{client → core/client}/models/continent.py +0 -0
- /blaxel/{client → core/client}/models/core_event.py +0 -0
- /blaxel/{client → core/client}/models/core_spec_configurations.py +0 -0
- /blaxel/{client → core/client}/models/country.py +0 -0
- /blaxel/{client → core/client}/models/create_api_key_for_service_account_body.py +0 -0
- /blaxel/{client → core/client}/models/create_workspace_service_account_body.py +0 -0
- /blaxel/{client → core/client}/models/create_workspace_service_account_response_200.py +0 -0
- /blaxel/{client → core/client}/models/delete_sandbox_preview_token_response_200.py +0 -0
- /blaxel/{client → core/client}/models/delete_workspace_service_account_response_200.py +0 -0
- /blaxel/{client → core/client}/models/entrypoint.py +0 -0
- /blaxel/{client → core/client}/models/entrypoint_env.py +0 -0
- /blaxel/{client → core/client}/models/flavor.py +0 -0
- /blaxel/{client → core/client}/models/form.py +0 -0
- /blaxel/{client → core/client}/models/form_config.py +0 -0
- /blaxel/{client → core/client}/models/form_oauth.py +0 -0
- /blaxel/{client → core/client}/models/form_secrets.py +0 -0
- /blaxel/{client → core/client}/models/function_kit.py +0 -0
- /blaxel/{client → core/client}/models/function_schema.py +0 -0
- /blaxel/{client → core/client}/models/function_schema_not.py +0 -0
- /blaxel/{client → core/client}/models/function_schema_or_bool.py +0 -0
- /blaxel/{client → core/client}/models/get_workspace_service_accounts_response_200_item.py +0 -0
- /blaxel/{client → core/client}/models/histogram_bucket.py +0 -0
- /blaxel/{client → core/client}/models/histogram_stats.py +0 -0
- /blaxel/{client → core/client}/models/integration_additional_infos.py +0 -0
- /blaxel/{client → core/client}/models/integration_connection.py +0 -0
- /blaxel/{client → core/client}/models/integration_connection_spec.py +0 -0
- /blaxel/{client → core/client}/models/integration_connection_spec_config.py +0 -0
- /blaxel/{client → core/client}/models/integration_connection_spec_secret.py +0 -0
- /blaxel/{client → core/client}/models/integration_endpoint.py +0 -0
- /blaxel/{client → core/client}/models/integration_endpoint_token.py +0 -0
- /blaxel/{client → core/client}/models/integration_headers.py +0 -0
- /blaxel/{client → core/client}/models/integration_model.py +0 -0
- /blaxel/{client → core/client}/models/integration_organization.py +0 -0
- /blaxel/{client → core/client}/models/integration_query_params.py +0 -0
- /blaxel/{client → core/client}/models/integration_repository.py +0 -0
- /blaxel/{client → core/client}/models/invite_workspace_user_body.py +0 -0
- /blaxel/{client → core/client}/models/job_execution_config.py +0 -0
- /blaxel/{client → core/client}/models/job_metrics.py +0 -0
- /blaxel/{client → core/client}/models/job_metrics_executions_chart.py +0 -0
- /blaxel/{client → core/client}/models/job_metrics_executions_total.py +0 -0
- /blaxel/{client → core/client}/models/job_metrics_tasks_chart.py +0 -0
- /blaxel/{client → core/client}/models/job_metrics_tasks_total.py +0 -0
- /blaxel/{client → core/client}/models/jobs_chart.py +0 -0
- /blaxel/{client → core/client}/models/jobs_executions.py +0 -0
- /blaxel/{client → core/client}/models/jobs_network_chart.py +0 -0
- /blaxel/{client → core/client}/models/jobs_success_failed_chart.py +0 -0
- /blaxel/{client → core/client}/models/jobs_tasks.py +0 -0
- /blaxel/{client → core/client}/models/jobs_total.py +0 -0
- /blaxel/{client → core/client}/models/knowledgebase_spec.py +0 -0
- /blaxel/{client → core/client}/models/knowledgebase_spec_options.py +0 -0
- /blaxel/{client → core/client}/models/last_n_requests_metric.py +0 -0
- /blaxel/{client → core/client}/models/latency_metric.py +0 -0
- /blaxel/{client → core/client}/models/mcp_definition.py +0 -0
- /blaxel/{client → core/client}/models/mcp_definition_entrypoint.py +0 -0
- /blaxel/{client → core/client}/models/mcp_definition_form.py +0 -0
- /blaxel/{client → core/client}/models/memory_allocation_metric.py +0 -0
- /blaxel/{client → core/client}/models/metadata_labels.py +0 -0
- /blaxel/{client → core/client}/models/metric.py +0 -0
- /blaxel/{client → core/client}/models/metrics.py +0 -0
- /blaxel/{client → core/client}/models/metrics_models.py +0 -0
- /blaxel/{client → core/client}/models/metrics_request_total_per_code.py +0 -0
- /blaxel/{client → core/client}/models/metrics_rps_per_code.py +0 -0
- /blaxel/{client → core/client}/models/model_private_cluster.py +0 -0
- /blaxel/{client → core/client}/models/o_auth.py +0 -0
- /blaxel/{client → core/client}/models/owner_fields.py +0 -0
- /blaxel/{client → core/client}/models/pending_invitation.py +0 -0
- /blaxel/{client → core/client}/models/pending_invitation_accept.py +0 -0
- /blaxel/{client → core/client}/models/pending_invitation_render.py +0 -0
- /blaxel/{client → core/client}/models/pending_invitation_render_invited_by.py +0 -0
- /blaxel/{client → core/client}/models/pending_invitation_render_workspace.py +0 -0
- /blaxel/{client → core/client}/models/pending_invitation_workspace_details.py +0 -0
- /blaxel/{client → core/client}/models/pod_template_spec.py +0 -0
- /blaxel/{client → core/client}/models/policy.py +0 -0
- /blaxel/{client → core/client}/models/policy_location.py +0 -0
- /blaxel/{client → core/client}/models/policy_max_tokens.py +0 -0
- /blaxel/{client → core/client}/models/port.py +0 -0
- /blaxel/{client → core/client}/models/preview.py +0 -0
- /blaxel/{client → core/client}/models/preview_metadata.py +0 -0
- /blaxel/{client → core/client}/models/preview_spec.py +0 -0
- /blaxel/{client → core/client}/models/preview_spec_request_headers.py +0 -0
- /blaxel/{client → core/client}/models/preview_spec_response_headers.py +0 -0
- /blaxel/{client → core/client}/models/preview_token.py +0 -0
- /blaxel/{client → core/client}/models/preview_token_metadata.py +0 -0
- /blaxel/{client → core/client}/models/preview_token_spec.py +0 -0
- /blaxel/{client → core/client}/models/private_cluster.py +0 -0
- /blaxel/{client → core/client}/models/private_location.py +0 -0
- /blaxel/{client → core/client}/models/repository.py +0 -0
- /blaxel/{client → core/client}/models/request_duration_over_time_metric.py +0 -0
- /blaxel/{client → core/client}/models/request_duration_over_time_metrics.py +0 -0
- /blaxel/{client → core/client}/models/request_total_by_origin_metric.py +0 -0
- /blaxel/{client → core/client}/models/request_total_by_origin_metric_request_total_by_origin.py +0 -0
- /blaxel/{client → core/client}/models/request_total_by_origin_metric_request_total_by_origin_and_code.py +0 -0
- /blaxel/{client → core/client}/models/request_total_metric.py +0 -0
- /blaxel/{client → core/client}/models/request_total_metric_request_total_per_code.py +0 -0
- /blaxel/{client → core/client}/models/request_total_metric_rps_per_code.py +0 -0
- /blaxel/{client → core/client}/models/request_total_response_data.py +0 -0
- /blaxel/{client → core/client}/models/resource_log.py +0 -0
- /blaxel/{client → core/client}/models/resource_metrics_request_total_per_code.py +0 -0
- /blaxel/{client → core/client}/models/resource_metrics_request_total_per_code_previous.py +0 -0
- /blaxel/{client → core/client}/models/resource_metrics_rps_per_code.py +0 -0
- /blaxel/{client → core/client}/models/resource_metrics_rps_per_code_previous.py +0 -0
- /blaxel/{client → core/client}/models/revision_configuration.py +0 -0
- /blaxel/{client → core/client}/models/revision_metadata.py +0 -0
- /blaxel/{client → core/client}/models/runtime_configuration.py +0 -0
- /blaxel/{client → core/client}/models/runtime_startup_probe.py +0 -0
- /blaxel/{client → core/client}/models/serverless_config.py +0 -0
- /blaxel/{client → core/client}/models/serverless_config_configuration.py +0 -0
- /blaxel/{client → core/client}/models/spec_configuration.py +0 -0
- /blaxel/{client → core/client}/models/start_sandbox.py +0 -0
- /blaxel/{client → core/client}/models/stop_sandbox.py +0 -0
- /blaxel/{client → core/client}/models/store_agent_labels.py +0 -0
- /blaxel/{client → core/client}/models/store_configuration_option.py +0 -0
- /blaxel/{client → core/client}/models/template_variable.py +0 -0
- /blaxel/{client → core/client}/models/time_fields.py +0 -0
- /blaxel/{client → core/client}/models/time_to_first_token_over_time_metrics.py +0 -0
- /blaxel/{client → core/client}/models/token_rate_metric.py +0 -0
- /blaxel/{client → core/client}/models/token_rate_metrics.py +0 -0
- /blaxel/{client → core/client}/models/token_total_metric.py +0 -0
- /blaxel/{client → core/client}/models/trace_ids_response.py +0 -0
- /blaxel/{client → core/client}/models/trigger.py +0 -0
- /blaxel/{client → core/client}/models/trigger_configuration.py +0 -0
- /blaxel/{client → core/client}/models/update_workspace_service_account_body.py +0 -0
- /blaxel/{client → core/client}/models/update_workspace_service_account_response_200.py +0 -0
- /blaxel/{client → core/client}/models/update_workspace_user_role_body.py +0 -0
- /blaxel/{client → core/client}/models/websocket_channel.py +0 -0
- /blaxel/{client → core/client}/models/workspace.py +0 -0
- /blaxel/{client → core/client}/models/workspace_labels.py +0 -0
- /blaxel/{client → core/client}/models/workspace_runtime.py +0 -0
- /blaxel/{client → core/client}/models/workspace_user.py +0 -0
- /blaxel/{client → core/client}/py.typed +0 -0
- /blaxel/{client → core/client}/types.py +0 -0
- /blaxel/{common → core/common}/env.py +0 -0
- /blaxel/{common → core/common}/settings.py +0 -0
- /blaxel/{sandbox/client/api/filesystem/__init__.py → core/py.typed} +0 -0
- /blaxel/{sandbox → core/sandbox}/client/__init__.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/__init__.py +0 -0
- /blaxel/{sandbox/client/api/network → core/sandbox/client/api/filesystem}/__init__.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/filesystem/delete_filesystem_path.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/filesystem/get_filesystem_path.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/filesystem/get_watch_filesystem_path.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/filesystem/get_ws_watch_filesystem_path.py +0 -0
- /blaxel/{sandbox/client/api/process → core/sandbox/client/api/network}/__init__.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/network/delete_network_process_pid_monitor.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/network/get_network_process_pid_ports.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/process/delete_process_identifier.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/process/get_process.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/process/get_process_identifier.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/process/get_process_identifier_logs.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/process/get_process_identifier_logs_stream.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/api/process/get_ws_process_identifier_logs_stream.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/client.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/errors.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/delete_network_process_pid_monitor_response_200.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/error_response.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/file.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/file_request.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/file_with_content.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/get_network_process_pid_ports_response_200.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/port_monitor_request.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/post_network_process_pid_monitor_response_200.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/process_logs.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/process_response.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/process_response_status.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/subdirectory.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/models/success_response.py +0 -0
- /blaxel/{sandbox → core/sandbox}/client/py.typed +0 -0
- /blaxel/{sandbox → core/sandbox}/client/types.py +0 -0
- /blaxel/{tools → core/tools}/common.py +0 -0
- /blaxel/{tools → core/tools}/types.py +0 -0
- /blaxel/{models/custom/langchain → langgraph/custom}/gemini.py +0 -0
- /blaxel/{models/custom/llamaindex → llamaindex/custom}/cohere.py +0 -0
- /blaxel/{instrumentation → telemetry}/exporters.py +0 -0
- /blaxel/{instrumentation → telemetry/log}/log.py +0 -0
- {blaxel-0.1.21rc69.dist-info → blaxel-0.2.0rc1.dist-info}/WHEEL +0 -0
- {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
|
12
|
-
|
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
|
-
|
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:
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
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
|
-
|
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)
|
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
|
@@ -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)
|
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)
|
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
|