models.py•17.8 kB
from typing import Dict, List, Optional, Literal, Callable, Awaitable
from pydantic import BaseModel, Field
from datetime import datetime
from enum import Enum
from mcp.types import Tool, TextContent
class Quota(BaseModel):
id: Optional[str] = None
name: Optional[str] = None
maximum: Optional[int] = None
current: Optional[int] = None
unit: Optional[str] = None
class InstanceTypeQuota(BaseModel):
on_demand: Optional[Quota] = Field(None, alias="onDemand")
spot: Optional[Quota] = None
reserved: Optional[Quota] = None
class Config:
populate_by_name = True
class InstanceTypePrice(BaseModel):
instance_type_price_id: Optional[str] = Field(None, alias="instanceTypePriceId")
operating_system: Optional[str] = Field(None, alias="operatingSystem")
instance_type: Optional[str] = Field(None, alias="instanceType")
term_type: Optional[str] = Field(None, alias="termType")
term_attributes: Optional[Dict[str, str]] = Field(None, alias="termAttributes")
unit: Optional[str] = None
price_usd: Optional[str] = Field(None, alias="priceUsd")
usage_type: Optional[str] = Field(None, alias="usageType")
class Config:
populate_by_name = True
class CurrencyAmount(BaseModel):
currency: Optional[str] = None
amount: Optional[str] = None
class Storage(BaseModel):
count: Optional[int] = None
size: Optional[str] = None
type: Optional[str] = None
min_size: Optional[str] = Field(None, alias="minSize")
max_size: Optional[str] = Field(None, alias="maxSize")
price_per_gb_hr: Optional[CurrencyAmount] = Field(None, alias="pricePerGbHr")
class Config:
populate_by_name = True
class Gpu(BaseModel):
count: Optional[int] = None
memory: Optional[str] = None
manufacturer: Optional[str] = None
name: Optional[str] = None
network_details: Optional[str] = Field(None, alias="networkDetails")
memory_details: Optional[str] = Field(None, alias="memoryDetails")
class Config:
populate_by_name = True
class WorkspaceGroupPlatform(str, Enum):
NOOP = "noop"
AWS = "aws"
DEV_PLANE = "dev-plane"
AWS_EC2_SPOT = "aws:ec2:spot"
class WorkspaceGroupStatus(str, Enum):
DEPLOYING = "DEPLOYING"
RUNNING = "RUNNING"
DEPRECATED = "DEPRECATED"
DELETING = "DELETING"
FAILURE = "FAILURE"
class TenantType(str, Enum):
SHARED = "shared"
ISOLATED = "isolated"
class Metadata(BaseModel):
created_at: Optional[datetime] = Field(None, alias="createdAt")
updated_at: Optional[datetime] = Field(None, alias="updatedAt")
deleted_at: Optional[datetime] = Field(None, alias="deletedAt")
id: Optional[str] = None
org_id: Optional[str] = Field(None, alias="orgId")
class Config:
populate_by_name = True
class Workspace(BaseModel):
# Add workspace fields based on your needs
pass
class WorkspaceGroup(BaseModel):
metadata: Optional[Metadata] = None
name: Optional[str] = None
host: Optional[str] = None # Assuming uri.Host is a string
platform: Optional[WorkspaceGroupPlatform] = None
platform_id: Optional[str] = Field(None, alias="platformId")
platform_region: Optional[str] = Field(None, alias="platformRegion")
platform_type: Optional[str] = Field(None, alias="platformType")
usable_regions: Optional[List[str]] = Field(None, alias="usableRegions")
status: Optional[WorkspaceGroupStatus] = None
workspaces: Optional[List[Workspace]] = None
tenant_type: Optional[TenantType] = Field(None, alias="tenantType")
version: Optional[str] = None
tags: Optional[Dict[str, List[str]]] = None
class Config:
populate_by_name = True
class Location(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
available: Optional[bool] = None
endpoint: Optional[str] = None
country: Optional[str] = None
class WorkspaceGroupWithLocations(WorkspaceGroup):
locations: Optional[List[Location]] = None
class InstanceType(BaseModel):
type: Optional[str] = None
supported_gpus: Optional[List[Gpu]] = Field(None, alias="supportedGpus")
supported_storage: Optional[List[Storage]] = Field(None, alias="supportedStorage")
memory: Optional[str] = None
maximum_network_interfaces: Optional[int] = Field(None, alias="maximumNetworkInterfaces")
network_performance: Optional[str] = Field(None, alias="networkPerformance")
supported_num_cores: Optional[List[int]] = Field(None, alias="supportedNumCores")
default_cores: Optional[int] = Field(None, alias="defaultCores")
vcpu: Optional[int] = None
supported_architectures: Optional[List[str]] = Field(None, alias="supportedArchitectures")
clock_speed_in_ghz: Optional[str] = Field(None, alias="clockSpeedInGhz")
sub_location: Optional[str] = Field(None, alias="subLocation")
prices: Optional[List[InstanceTypePrice]] = None
default_price: Optional[str] = Field(None, alias="defaultPrice")
elastic_root_volume: Optional[bool] = Field(None, alias="elasticRootVolume")
supported_usage_classes: Optional[List[str]] = Field(None, alias="supportedUsageClasses")
quota: Optional[InstanceTypeQuota] = None
location: Optional[str] = None
is_available: Optional[bool] = Field(None, alias="isAvailable")
variable_price: Optional[bool] = Field(None, alias="variablePrice")
rebootable: Optional[bool] = None
preemptible: Optional[bool] = None
base_price: Optional[CurrencyAmount] = Field(None, alias="basePrice")
sub_location_type_changeable: Optional[bool] = Field(None, alias="subLocationTypeChangeable")
estimated_deploy_time: Optional[str] = Field(None, alias="estimatedDeployTime")
user_privilege_escalation_disabled: Optional[bool] = Field(None, alias="userPrivilegeEscalationDisabled")
not_privileged: Optional[bool] = Field(None, alias="notPrivileged")
is_container: Optional[bool] = Field(None, alias="isContainer")
class Config:
populate_by_name = True
class InstanceTypeWorkspaceGroup(InstanceType):
workspace_groups: Optional[List[WorkspaceGroup]] = Field(None, alias="workspaceGroups")
class Config:
populate_by_name = True
class WorkspaceGroupError(BaseModel):
workspace_group: Optional[WorkspaceGroup] = Field(None, alias="workspaceGroup")
error_message: Optional[str] = Field(None, alias="errorMessage")
class Config:
populate_by_name = True
class AllInstanceTypeObj(BaseModel):
all_instance_types: Optional[List[InstanceTypeWorkspaceGroup]] = Field(None, alias="allInstanceTypes")
workspace_group_errors: Optional[List[WorkspaceGroupError]] = Field(None, alias="workspaceGroupErrors")
class Config:
populate_by_name = True
Workspace_Group_Ids: dict[str, str] = {
"aws": "devplane-brev-1",
"gcp": "GCP",
"azure": "azure-dgxc-wg",
"crusoe": "crusoe-brev-wg",
"lambda-labs": "lambda-labs-test",
"fluidstack": "FluidStack",
"launchpad": "launchpad-test-wg",
"akash": "akash-brev-wg",
"gcpalpha": "dgxc-gcp",
}
class CloudProvider(str, Enum):
AWS = "aws"
GCP = "gcp"
AZURE = "azure"
CRUSOE = "crusoe"
LAMBDA_LABS = "lambda-labs"
FLUIDSTACK = "fluidstack"
LAUNCHPAD = "launchpad"
AKASH = "akash"
GCPALPHA = "gcpalpha"
def get_workspace_group_id(self):
return Workspace_Group_Ids[self.value]
DEFAULT_VERB_CONFIG = "build:\n system_packages: []\n python_version: '3.10'\n cuda: 12.0.1\n python_packages:\n - jupyterlab\n run:\n - sh -c \"$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)\" \"\" --unattended\nuser:\n shell: zsh\n authorized_keys_path: /home/ubuntu/.ssh/authorized_keys\nports:\n - '2222:22'\nservices:\n - name: jupyter\n entrypoint: jupyter-lab --ip=0.0.0.0 --no-browser --NotebookApp.token='' --NotebookApp.password=''\n ports:\n - '8888'"
class CreateWorkspaceRequest(BaseModel):
# version: Optional[str] = None
name: str
# description: Optional[str] = None
workspace_group_id: Optional[str] = Field(None, alias="workspaceGroupId")
# workspace_template_id: Optional[str] = Field(None, alias="workspaceTemplateId")
# workspace_class: Optional[WorkspaceClassID] = Field(None, alias="workspaceClassId")
# git_repo: Optional[str] = Field(None, alias="gitRepo")
# is_stoppable: Optional[bool] = Field(None, alias="isStoppable")
# tunnel: Optional[WorkspaceTunnel] = None
# primary_application_id: Optional[str] = Field(None, alias="primaryApplicationId")
# startup_script: Optional[str] = Field(None, alias="startupScript")
# startup_script_path: Optional[str] = Field(None, alias="startupScriptPath")
# ide_config: Optional[ClientConfig] = Field(None, alias="ideConfig")
# dont_check_ssh_keys: bool = Field(False, alias="dontCheckSSHKeys")
# repos: ReposV0
# execs: ExecsV0
# init_branch: Optional[str] = Field(None, alias="initBranch")
# dot_brev_path: Optional[str] = Field(None, alias="dotBrevPath")
# repos_v1: Optional[ReposV1] = Field(None, alias="reposV1")
# execs_v1: Optional[ExecsV1] = Field(None, alias="execsV1")
instance_type: Optional[str] = Field(None, alias="instanceType")
# disk_storage: Optional[str] = Field(None, alias="diskStorage")
# region: Optional[str] = None
# image: Optional[str] = None
# architecture: Optional[Architecture] = None
# spot: bool = False
# on_container: bool = Field(False, alias="onContainer")
# initial_container_image: Optional[str] = Field(None, alias="containerImage")
verb_yaml: Optional[str] = Field(DEFAULT_VERB_CONFIG, alias="verbYaml")
# base_image: Optional[str] = Field(None, alias="baseImage")
# custom_container: Optional[CustomContainer] = Field(None, alias="customContainer")
# port_mappings: Optional[Dict[str, str]] = Field(None, alias="portMappings")
workspace_version: Optional[Literal["v1", "v0"]] = Field("v1", alias="workspaceVersion")
# retry_for: Optional[str] = Field(None, alias="retryFor")
# vm_only_mode: bool = Field(False, alias="vmOnlyMode")
# files: Optional[List[FileRequest]] = None
# labels: Optional[Dict[str, str]] = None
# launch_jupyter_on_start: bool = Field(False, alias="launchJupyterOnStart")
class Config:
populate_by_name = True
class WorkspaceStatus(str, Enum):
DEPLOYING = "DEPLOYING"
STARTING = "STARTING"
RUNNING = "RUNNING"
STOPPING = "STOPPING"
STOPPED = "STOPPED"
DELETING = "DELETING"
FAILURE = "FAILURE"
class HealthStatus(str, Enum):
UNSPECIFIED = ""
HEALTHY = "HEALTHY"
UNHEALTHY = "UNHEALTHY"
UNAVAILABLE = "UNAVAILABLE"
class ServiceType(str, Enum):
SSH = "SSH"
HTTP = "HTTP"
HTTPS = "HTTPS"
TCP = "TCP"
RDP = "RDP"
class WorkspaceCapability(str, Enum):
STOP_START_INSTANCE = "stop-start-instance"
AUTOSTOP = "autostop"
EXPOSE_PUBLIC_PORTS = "expose-public-ports"
CLONE = "clone"
RETIRE_VOLUME = "retire-volume"
MACHINE_IMAGE = "machine-image"
MODIFY_FIREWALL = "modify-firewall"
INSTANCE_USER_DATA = "instance-userdata"
VPC_SUBNETS = "vpc-subnets"
CONTAINER_CLOUD = "container-cloud"
class VerbBuildStatus(str, Enum):
UNSPECIFIED = ""
CREATE_FAILED = "CREATE_FAILED"
PENDING = "PENDING"
BUILDING = "BUILDING"
COMPLETED = "COMPLETED"
class FileType(str, Enum):
COLAB = "colab"
NOTEBOOK = "notebook"
GITHUB = "github"
GITLAB = "gitlab"
class WorkspaceStartStatus(str, Enum):
UNSPECIFIED = ""
STARTING = "STARTING"
FAILURE = "FAILURE"
STARTED = "STARTED"
class WorkspaceVersion(str, Enum):
UNSPECIFIED = ""
V0 = "v0"
V1 = "v1"
class WorkspaceApplicationAPIKey(BaseModel):
enabled: bool
id: str
client_id: str = Field(alias="clientID")
client_secret: str = Field(alias="clientSecret")
class WorkspaceApplicationPolicy(BaseModel):
allowed_user_auth_ids: List[str] = Field(alias="allowedUserAuthIDs")
allow_everyone: bool = Field(alias="allowEveryone")
api_key: WorkspaceApplicationAPIKey = Field(alias="apiKey")
allowed_user_provider_ids: List[str] = Field(alias="allowedUserProviderIDs")
class WorkspaceApplication(BaseModel):
cloudflare_application_id: str = Field(alias="cloudflareApplicationID")
cloudflare_dns_record_id: str = Field(alias="cloudflareDnsRecordID")
hostname: str
name: str
service_type: ServiceType = Field(alias="serviceType")
port: int
application_setup_bash: str = Field(alias="userApplicationSetupBash")
policy: WorkspaceApplicationPolicy
health_check_id: str = Field(alias="healthCheckID")
class WorkspaceTunnel(BaseModel):
tunnel_id: str = Field(alias="tunnelID")
applications: List[WorkspaceApplication]
tunnel_setup_bash: str = Field(alias="tunnelSetupBash")
tunnel_status: HealthStatus = Field(alias="tunnelStatus")
class Thresholds(BaseModel):
failure_threshold: int = Field(alias="failureThreshold")
success_threshold: int = Field(alias="successThreshold")
class Timestamp(BaseModel):
seconds: int
nanos: int
class HealthCheck(BaseModel):
health_check_id: str = Field(alias="healthCheckId")
create_time: Optional[Timestamp] = Field(alias="createTime")
update_time: Optional[Timestamp] = Field(alias="updateTime")
labels: Dict[str, str]
status: str
thresholds: Optional[Thresholds] = None
class FileMetadata(BaseModel):
type: FileType
class FileObject(BaseModel):
url: str
path: str
metadata: FileMetadata
class ClientConfig(BaseModel):
# Add fields based on data.ClientConfig
pass
class ReposV0(BaseModel):
# Add fields based on data.ReposV0
pass
class ExecsV0(BaseModel):
# Add fields based on data.ExecsV0
pass
class ReposV1(BaseModel):
# Add fields based on data.ReposV1
pass
class ExecsV1(BaseModel):
# Add fields based on data.ExecsV1
pass
class CustomContainer(BaseModel):
# Add fields based on data.CustomContainer
pass
class WorkspaceTemplateJSON(BaseModel):
# Add fields based on WorkspaceTemplateJSON
pass
class Workspace(BaseModel):
id: str
workspace_group_id: str = Field(alias="workspaceGroupId")
organization_id: str = Field(alias="organizationId")
name: str
description: str
created_by_user_id: str = Field(alias="createdByUserId")
dns: Optional[str] = None
password: Optional[str] = None
workspace_class: str = Field(alias="workspaceClassId")
git_repo: Optional[str] = Field(None, alias="gitRepo")
workspace_template: WorkspaceTemplateJSON = Field(alias="workspaceTemplate")
status: WorkspaceStatus
status_message: str = Field(alias="statusMessage")
health_status: HealthStatus = Field(alias="healthStatus")
last_online_at: str = Field(alias="lastOnlineAt")
created_at: str = Field(alias="createdAt")
updated_at: str = Field(alias="updatedAt")
version: str
ssh_port: int = Field(alias="sshPort")
ssh_user: str = Field(alias="sshUser")
ssh_proxy_hostname: str = Field(alias="sshProxyHostname")
host_ssh_port: int = Field(alias="hostSshPort")
host_ssh_user: str = Field(alias="hostSshUser")
host_ssh_proxy_hostname: str = Field(alias="hostSshProxyHostname")
on_container: bool = Field(alias="onContainer")
is_stoppable: bool = Field(alias="isStoppable")
tunnel: Optional[WorkspaceTunnel] = None
primary_application_id: Optional[str] = Field(None, alias="primaryApplicationId")
startup_script: str = Field(alias="startupScript")
startup_script_path: str = Field(alias="startupScriptPath")
init_branch: str = Field(alias="initBranch")
dot_brev_path: str = Field(alias="dotBrevPath")
network_id: str = Field(alias="networkId")
ide_config: ClientConfig = Field(alias="ideConfig")
# repos: ReposV0
# execs: ExecsV0
repos_v1: Optional[ReposV1] = Field(None, alias="reposV1")
execs_v1: Optional[ExecsV1] = Field(None, alias="execsV1")
stop_timeout: Optional[int] = Field(None, alias="stopTimeout")
instance_type: str = Field(alias="instanceType")
disk_storage: str = Field(alias="diskStorage")
image: str
region: str
exposed_ports: List[int] = Field(alias="exposedPorts")
spot: bool
workspace_capabilities: List[WorkspaceCapability] = Field(alias="workspaceCapabilities")
workspace_image_uri: str = Field(alias="workspaceImageUri")
verb_yaml: str = Field(None, alias="verbYaml")
verb_build_status: VerbBuildStatus = Field(alias="verbBuildStatus")
health_checks: Optional[List[HealthCheck]] = Field(alias="healthCheck")
file_objects: Optional[Dict[str, FileObject]] = Field(None, alias="fileObjects")
additional_users: Optional[List[str]] = Field(None, alias="additionalUsers")
base_image: Optional[str] = Field(None, alias="baseImage")
port_mappings: Optional[Dict[str, str]] = Field(None, alias="portMappings")
last_start_status: WorkspaceStartStatus = Field(alias="lastStartStatus")
last_start_status_message: str = Field(alias="lastStartStatusMessage")
workspace_version: WorkspaceVersion = Field(alias="workspaceVersion")
vm_only_mode: bool = Field(alias="vmOnlyMode")
custom_container: Optional[CustomContainer] = Field(None, alias="customContainer")
instance_type_info: Optional[InstanceType] = Field(None, alias="instanceTypeInfo")
class Config:
populate_by_name = True
class CredentialsFile(BaseModel):
access_token: str
refresh_token: str
class ActiveOrgFile(BaseModel):
id: str
name: str
userNetworkId: str
class ToolModel(BaseModel):
tool: Tool
call_tool: Callable[..., Awaitable[TextContent]]