From bda9371308b3eb8ba98d19db2e5de28b2d00fd01 Mon Sep 17 00:00:00 2001 From: Yash Gorana Date: Mon, 18 Mar 2024 14:15:40 +0530 Subject: [PATCH 01/24] [helm] make common.secrets.set more robust --- .../grid/helm/syft/templates/_secrets.tpl | 25 ++++++++++++------- .../templates/backend/backend-secret.yaml | 3 ++- .../syft/templates/mongo/mongo-secret.yaml | 3 ++- .../templates/seaweedfs/seaweedfs-secret.yaml | 3 ++- packages/grid/helm/syft/values.yaml | 24 +++++++++--------- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/packages/grid/helm/syft/templates/_secrets.tpl b/packages/grid/helm/syft/templates/_secrets.tpl index 4d0ad6bd153..8a7d57f3bb8 100644 --- a/packages/grid/helm/syft/templates/_secrets.tpl +++ b/packages/grid/helm/syft/templates/_secrets.tpl @@ -24,17 +24,24 @@ Params: {{- end -}} {{/* -Re-use or set a new randomly generated secret value from an existing secret. -If global.useDefaultSecrets is set to true, the default value will be used if the secret does not exist. +Set a value for a Secret. +- If the secret exists, the existing value will be re-used. +- If "randomDefault"=true, a random value will be generated. +- If "randomDefault"=false, the "default" value will be used. Usage: - {{- include "common.secrets.set " (dict "secret" "some-secret-name" "default" "default-value" "context" $ ) }} + Generate random secret of length 64 + {{- include "common.secrets.set " (dict "secret" "some-secret-name" "randomDefault" true "randomLength" 64 "context" $ ) }} + + Use a static default value (with random disabled) + {{- include "common.secrets.set " (dict "secret" "some-secret-name" "default" "default-value" "randomDefault" false "context" $ ) }} Params: secret - String (Required) - Name of the 'Secret' resource where the key is stored. key - String - (Required) - Name of the key in the secret. - default - String - (Optional) - Default value to use if the secret does not exist. - length - Int - (Optional) - The length of the generated secret. Default is 32. + randomDefault - Bool - (Optional) - If true, a random value will be generated if secret does note exit. + randomLength - Int - (Optional) - The length of the generated secret. Default is 32. + default - String - (Optional) - Default value to use if the secret does not exist if "randomDefault" is set to false. context - Context (Required) - Parent context. */}} {{- define "common.secrets.set" -}} @@ -43,11 +50,11 @@ Params: {{- if $existingSecret -}} {{- $secretVal = $existingSecret -}} - {{- else if .context.Values.global.useDefaultSecrets -}} - {{- $secretVal = .default | b64enc -}} - {{- else -}} - {{- $length := .length | default 32 -}} + {{- else if .randomDefault -}} + {{- $length := .randomLength | default 32 -}} {{- $secretVal = randAlphaNum $length | b64enc -}} + {{- else -}} + {{- $secretVal = .default | required (printf "default value required for secret=%s key=%s" .secret .key) |b64enc -}} {{- end -}} {{- printf "%s" $secretVal -}} diff --git a/packages/grid/helm/syft/templates/backend/backend-secret.yaml b/packages/grid/helm/syft/templates/backend/backend-secret.yaml index 12b14be20bd..1aec7d9bbc9 100644 --- a/packages/grid/helm/syft/templates/backend/backend-secret.yaml +++ b/packages/grid/helm/syft/templates/backend/backend-secret.yaml @@ -11,6 +11,7 @@ data: defaultRootPassword: {{ include "common.secrets.set" (dict "secret" $secretName "key" "defaultRootPassword" - "default" .Values.node.defaultSecret.defaultRootPassword + "randomDefault" .Values.global.randomizedSecrets + "default" .Values.node.secret.defaultRootPassword "context" $) }} diff --git a/packages/grid/helm/syft/templates/mongo/mongo-secret.yaml b/packages/grid/helm/syft/templates/mongo/mongo-secret.yaml index a58fb2b72c6..02c58d276ca 100644 --- a/packages/grid/helm/syft/templates/mongo/mongo-secret.yaml +++ b/packages/grid/helm/syft/templates/mongo/mongo-secret.yaml @@ -11,6 +11,7 @@ data: rootPassword: {{ include "common.secrets.set" (dict "secret" $secretName "key" "rootPassword" - "default" .Values.mongo.defaultSecret.rootPassword + "randomDefault" .Values.global.randomizedSecrets + "default" .Values.mongo.secret.rootPassword "context" $) }} diff --git a/packages/grid/helm/syft/templates/seaweedfs/seaweedfs-secret.yaml b/packages/grid/helm/syft/templates/seaweedfs/seaweedfs-secret.yaml index c4a0e9b5b09..b0183765115 100644 --- a/packages/grid/helm/syft/templates/seaweedfs/seaweedfs-secret.yaml +++ b/packages/grid/helm/syft/templates/seaweedfs/seaweedfs-secret.yaml @@ -12,7 +12,8 @@ data: s3RootPassword: {{ include "common.secrets.set" (dict "secret" $secretName "key" "s3RootPassword" - "default" .Values.seaweedfs.defaultSecret.s3RootPassword + "randomDefault" .Values.global.randomizedSecrets + "default" .Values.seaweedfs.secret.s3RootPassword "context" $) }} {{ end }} diff --git a/packages/grid/helm/syft/values.yaml b/packages/grid/helm/syft/values.yaml index 2b64a8998d1..324b119c476 100644 --- a/packages/grid/helm/syft/values.yaml +++ b/packages/grid/helm/syft/values.yaml @@ -3,8 +3,8 @@ global: registry: docker.io version: 0.8.5-beta.9 - # Force default secret values for development. DO NOT USE IN PRODUCTION - useDefaultSecrets: false + # Force default secret values for development. DO NOT SET THIS TO FALSE IN PRODUCTION + randomizedSecrets: true mongo: # MongoDB config @@ -24,9 +24,9 @@ mongo: # Mongo secret name. Override this if you want to use a self-managed secret. secretKeyName: mongo-secret - # Dev mode default passwords - defaultSecret: - rootPassword: example + # custom secret values + secret: + rootPassword: null frontend: # Extra environment vars @@ -62,9 +62,9 @@ seaweedfs: resourcesPreset: nano resources: null - # Dev mode default passwords - defaultSecret: - s3RootPassword: admin + # custom secret values + secret: + s3RootPassword: null proxy: # Extra environment vars @@ -122,9 +122,9 @@ node: # - defaultRootPassword secretKeyName: backend-secret - # Dev mode default passwords - defaultSecret: - defaultRootPassword: changethis + # custom secret values + secret: + defaultRootPassword: null ingress: hostname: null # do not make this localhost @@ -161,4 +161,4 @@ veilid: # Pod Resource Limits resourcesPreset: nano - resources: null \ No newline at end of file + resources: null From 91b166d44f4a3981689c6488a493f6767a3193ae Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Mon, 18 Mar 2024 14:53:02 +0530 Subject: [PATCH 02/24] refactor input policy to define a _is_valid method - define _is_valid method for InputPolicy --- .../src/syft/service/action/action_service.py | 40 ++++------ .../syft/src/syft/service/policy/policy.py | 74 ++++++++++++++++--- 2 files changed, 79 insertions(+), 35 deletions(-) diff --git a/packages/syft/src/syft/service/action/action_service.py b/packages/syft/src/syft/service/action/action_service.py index b75dda52bf8..1aae74c1d62 100644 --- a/packages/syft/src/syft/service/action/action_service.py +++ b/packages/syft/src/syft/service/action/action_service.py @@ -302,45 +302,33 @@ def _user_code_execute( context.has_execute_permissions or context.role == ServiceRole.ADMIN ) + input_policy = code_item.get_input_policy(context) + if not override_execution_permission: - input_policy = code_item.get_input_policy(context) if input_policy is None: if not code_item.output_policy_approved: return Err("Execution denied: Your code is waiting for approval") - return Err(f"No input poliicy defined for user code: {code_item.id}") + return Err(f"No input policy defined for user code: {code_item.id}") + + # Filter input kwargs based on policy filtered_kwargs = input_policy.filter_kwargs( kwargs=kwargs, context=context, code_item_id=code_item.id ) - if isinstance(filtered_kwargs, SyftError) or filtered_kwargs.is_err(): + if filtered_kwargs.is_err(): return filtered_kwargs filtered_kwargs = filtered_kwargs.ok() + + # validate input policy + is_approved = input_policy._is_valid( + usr_input_kwargs=kwargs, + user_code_id=code_item.id, + ) + if is_approved.is_err(): + return is_approved else: filtered_kwargs = retrieve_from_db(code_item.id, kwargs, context).ok() # update input policy to track any input state - if ( - not override_execution_permission - and code_item.get_input_policy(context) is not None - ): - expected_input_kwargs = set() - for _inp_kwarg in code_item.get_input_policy(context).inputs.values(): # type: ignore - keys = _inp_kwarg.keys() - for k in keys: - if k not in kwargs: - return Err( - f"{code_item.service_func_name}() missing required keyword argument: '{k}'" - ) - expected_input_kwargs.update(keys) - - permitted_input_kwargs = list(filtered_kwargs.keys()) - not_approved_kwargs = set(expected_input_kwargs) - set( - permitted_input_kwargs - ) - if len(not_approved_kwargs) > 0: - return Err( - f"Input arguments: {not_approved_kwargs} to the function are not approved yet." - ) - has_twin_inputs = False real_kwargs = {} diff --git a/packages/syft/src/syft/service/policy/policy.py b/packages/syft/src/syft/service/policy/policy.py index d0f8b2f7ce2..be2abe70625 100644 --- a/packages/syft/src/syft/service/policy/policy.py +++ b/packages/syft/src/syft/service/policy/policy.py @@ -18,7 +18,9 @@ # third party from RestrictedPython import compile_restricted +from result import Err from result import Ok +from result import Result # relative from ...abstract_node import AbstractNode @@ -177,8 +179,19 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: init_kwargs = partition_by_node(kwargs) super().__init__(*args, init_kwargs=init_kwargs, **kwargs) + def _is_valid( + self, + context: AuthedServiceContext, + usr_input_kwargs: dict, + user_code_id: UID, + ) -> bool: + raise NotImplementedError + def filter_kwargs( - self, kwargs: dict[Any, Any], context: AuthedServiceContext, code_item_id: UID + self, + kwargs: dict[Any, Any], + context: AuthedServiceContext, + code_item_id: UID, ) -> dict[Any, Any]: raise NotImplementedError @@ -213,7 +226,7 @@ def _inputs_for_context(self, context: ChangeContext) -> dict | SyftError: def retrieve_from_db( code_item_id: UID, allowed_inputs: dict[str, UID], context: AuthedServiceContext -) -> dict: +) -> Result[dict[str, Any], str]: # relative from ...service.action.action_object import TwinMode @@ -239,13 +252,13 @@ def retrieve_from_db( has_permission=True, ) if kwarg_value.is_err(): - return SyftError(message=kwarg_value.err()) + return Err(kwarg_value.err()) code_inputs[var_name] = kwarg_value.ok() elif context.node.node_type == NodeType.ENCLAVE: dict_object = action_service.get(context=root_context, uid=code_item_id) if dict_object.is_err(): - return SyftError(message=dict_object.err()) + return Err(dict_object.err()) for value in dict_object.ok().syft_action_data.values(): code_inputs.update(value) @@ -301,16 +314,59 @@ class ExactMatch(InputPolicy): __version__ = SYFT_OBJECT_VERSION_2 def filter_kwargs( - self, kwargs: dict[Any, Any], context: AuthedServiceContext, code_item_id: UID - ) -> dict[Any, Any]: + self, + kwargs: dict[Any, Any], + context: AuthedServiceContext, + code_item_id: UID, + ) -> Result[dict[Any, Any], str]: allowed_inputs = allowed_ids_only( allowed_inputs=self.inputs, kwargs=kwargs, context=context ) - results = retrieve_from_db( - code_item_id=code_item_id, allowed_inputs=allowed_inputs, context=context - ) + + try: + results = retrieve_from_db( + code_item_id=code_item_id, + allowed_inputs=allowed_inputs, + context=context, + ) + except Exception as e: + return Err(str(e)) return results + def _is_valid( + self, + context: AuthedServiceContext, + usr_input_kwargs: dict, + user_code_id: UID, + ) -> Result[bool, str]: + filtered_input_kwargs = self.filter_kwargs( + kwargs=usr_input_kwargs, + context=context, + code_item_id=user_code_id, + ) + + if filtered_input_kwargs.is_err(): + return filtered_input_kwargs + + filtered_input_kwargs = filtered_input_kwargs.ok() + + expected_input_kwargs = set() + for _inp_kwargs in self.inputs.values(): + for k in _inp_kwargs.keys(): + if k not in usr_input_kwargs: + return Err( + message=f"Function missing required keyword argument: '{k}'" + ) + expected_input_kwargs.update(_inp_kwargs.keys()) + + permitted_input_kwargs = list(filtered_input_kwargs.keys()) + not_approved_kwargs = set(expected_input_kwargs) - set(permitted_input_kwargs) + if len(not_approved_kwargs) > 0: + return Err( + f"Input arguments: {not_approved_kwargs} to the function are not approved yet." + ) + return Ok(True) + @serializable() class OutputHistory(SyftObject): From 14c357cf7b9b040b3c13cb0b85c68f1a9cff2ca2 Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Mon, 18 Mar 2024 15:12:15 +0530 Subject: [PATCH 03/24] add a check for input policy before executing user custom code --- .../syft/src/syft/service/code/user_code_service.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/syft/src/syft/service/code/user_code_service.py b/packages/syft/src/syft/service/code/user_code_service.py index 9e8961eb432..513da26db9b 100644 --- a/packages/syft/src/syft/service/code/user_code_service.py +++ b/packages/syft/src/syft/service/code/user_code_service.py @@ -409,6 +409,17 @@ def _call( # We do not read from output policy cache if there are mock arguments skip_read_cache = len(self.keep_owned_kwargs(kwargs, context)) > 0 + # Check input policy + input_policy = code.get_input_policy(context) + if input_policy is not None: + inputs_allowed = input_policy._is_valid( + context, + usr_input_kwargs=kwargs, + user_code_id=code.id, + ) + if inputs_allowed.is_err(): + return inputs_allowed + # Check output policy output_policy = code.get_output_policy(context) if not override_execution_permission: From 44aa77e2c0d726cdc9e801884804b407d3b971ef Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Mon, 18 Mar 2024 15:27:06 +0530 Subject: [PATCH 04/24] fix missing context argument to _is_valid for input policy in user code exec --- packages/syft/src/syft/service/action/action_service.py | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/syft/src/syft/service/action/action_service.py b/packages/syft/src/syft/service/action/action_service.py index 1aae74c1d62..2c8de34ebaa 100644 --- a/packages/syft/src/syft/service/action/action_service.py +++ b/packages/syft/src/syft/service/action/action_service.py @@ -320,6 +320,7 @@ def _user_code_execute( # validate input policy is_approved = input_policy._is_valid( + context=context, usr_input_kwargs=kwargs, user_code_id=code_item.id, ) From 9f28ff24ea60bba70accd2eb61848277b195eaa2 Mon Sep 17 00:00:00 2001 From: Yash Gorana Date: Mon, 18 Mar 2024 16:38:42 +0530 Subject: [PATCH 05/24] [helm] use values.dev.yaml --- packages/grid/devspace.yaml | 11 ++--- packages/grid/helm/values.dev.yaml | 26 ++++++++++++ tox.ini | 67 ++++++++++-------------------- 3 files changed, 51 insertions(+), 53 deletions(-) create mode 100644 packages/grid/helm/values.dev.yaml diff --git a/packages/grid/devspace.yaml b/packages/grid/devspace.yaml index effde818d9c..a03eb00ab9c 100644 --- a/packages/grid/devspace.yaml +++ b/packages/grid/devspace.yaml @@ -74,16 +74,11 @@ deployments: global: registry: ${CONTAINER_REGISTRY} version: dev-${DEVSPACE_TIMESTAMP} - useDefaultSecrets: true - registry: - storageSize: "5Gi" node: name: ${NODE_NAME} - rootEmail: info@openmined.org - defaultWorkerPoolCount: 1 - resourcesPreset: micro - veilid: - enabled: true + # anything that does not need devspace $env vars should go in values.dev.yaml + valuesFiles: + - ./helm/values.dev.yaml dev: mongo: diff --git a/packages/grid/helm/values.dev.yaml b/packages/grid/helm/values.dev.yaml new file mode 100644 index 00000000000..bfe83819892 --- /dev/null +++ b/packages/grid/helm/values.dev.yaml @@ -0,0 +1,26 @@ +# Helm chart values used development and testing +# Can directly be used in helm install or devspace valuesFiles + +global: + randomizedSecrets: false + +registry: + storageSize: "5Gi" + +node: + rootEmail: info@openmined.org + defaultWorkerPoolCount: 1 + + secret: + defaultRootPassword: changethis + +mongo: + secret: + rootPassword: example + +seaweedfs: + secret: + s3RootPassword: admin + +veilid: + enabled: true diff --git a/tox.ini b/tox.ini index c1e43611f1f..fc6843f311e 100644 --- a/tox.ini +++ b/tox.ini @@ -797,11 +797,9 @@ commands = [testenv:syft.test.helm] description = Test Helm Chart for Kubernetes -changedir = {toxinidir} -passenv=HOME,USER,EXTERNAL_REGISTRY_USERNAME,EXTERNAL_REGISTRY_PASSWORD +changedir = {toxinidir}/packages/grid +passenv=HOME, USER, EXTERNAL_REGISTRY_USERNAME, EXTERNAL_REGISTRY_PASSWORD allowlist_externals = - grep - sleep bash tox setenv = @@ -811,59 +809,38 @@ setenv = EXCLUDE_NOTEBOOKS = {env:EXCLUDE_NOTEBOOKS:not 10-container-images.ipynb} SYFT_VERSION = {env:SYFT_VERSION:local} EXTERNAL_REGISTRY = {env:EXTERNAL_REGISTRY:k3d-registry.localhost:5800} + ; env vars for dev.k8s.start + CLUSTER_NAME = testdomain + CLUSTER_HTTP_PORT = {env:NODE_PORT:8080} commands = - bash -c "echo Running with ORCHESTRA_DEPLOYMENT_TYPE=$ORCHESTRA_DEPLOYMENT_TYPE NODE_PORT=$NODE_PORT NODE_URL=$NODE_URL \ - Excluding notebooks: $EXCLUDE_NOTEBOOKS SYFT_VERSION=$SYFT_VERSION \ - EXTERNAL_REGISTRY=$EXTERNAL_REGISTRY; date" + bash -c "env; date; k3d version" + bash -c "k3d cluster delete ${CLUSTER_NAME} || true" - bash -c "k3d version" + tox -e dev.k8s.start - # Remvoing old clusters and volumes and registry - ; bash -c "docker rm $(docker ps -aq) --force || true" - bash -c "k3d cluster delete syft || true" - bash -c "docker volume rm k3d-syft-images --force || true" - bash -c "k3d registry delete k3d-registry.localhost || true" - - # Creating registry - bash -c '\ - export CLUSTER_NAME=syft CLUSTER_HTTP_PORT=${NODE_PORT} && \ - tox -e dev.k8s.start' - - # Creating registry and cluster - bash -c 'NODE_NAME=syft NODE_PORT=${NODE_PORT} && \ - k3d cluster create syft -p "$NODE_PORT:80@loadbalancer" --registry-use k3d-registry.localhost || true \ - k3d cluster start syft' - - sleep 10 - bash -c "kubectl --context k3d-syft create namespace syft || true" - - # if syft version is local, then install local helm charts - # else install the helm charts from the openmined gh-pages branch bash -c 'if [[ $SYFT_VERSION == "local" ]]; then \ echo "Installing local helm charts"; \ - bash -c "cd packages/grid/helm && helm install --kube-context k3d-syft --namespace syft syft ./syft --set global.useDefaultSecrets=true"; \ + helm install ${CLUSTER_NAME} ./helm/syft -f ./helm/values.dev.yaml --kube-context k3d-${CLUSTER_NAME} --namespace syft --create-namespace; \ else \ echo "Installing helm charts from repo for syft version: ${SYFT_VERSION}"; \ - bash -c "helm repo add openmined https://openmined.github.io/PySyft/helm && helm repo update openmined"; \ - bash -c "helm install --kube-context k3d-syft --namespace syft syft openmined/syft --version=${SYFT_VERSION} --set global.useDefaultSecrets=true"; \ + helm repo add openmined https://openmined.github.io/PySyft/helm; \ + helm repo update openmined; \ + helm install ${CLUSTER_NAME} openmined/syft --version=${SYFT_VERSION} -f ./helm/values.dev.yaml --kube-context k3d-${CLUSTER_NAME} --namespace syft --create-namespace; \ fi' ; wait for everything else to be loaded - bash packages/grid/scripts/wait_for.sh service frontend --context k3d-syft --namespace syft - bash -c '(kubectl logs service/frontend --context k3d-syft --namespace syft -f &) | grep -q -E "Network:\s+https?://[a-zA-Z0-9.-]+:[0-9]+/" || true' - bash packages/grid/scripts/wait_for.sh service mongo --context k3d-syft --namespace syft - bash packages/grid/scripts/wait_for.sh service backend --context k3d-syft --namespace syft - bash packages/grid/scripts/wait_for.sh service proxy --context k3d-syft --namespace syft - bash -c '(kubectl logs service/backend --context k3d-syft --namespace syft -f &) | grep -q "Application startup complete" || true' - + bash -c './scripts/wait_for.sh service frontend --context k3d-$CLUSTER_NAME --namespace syft' + bash -c '(kubectl logs service/frontend --context k3d-$CLUSTER_NAME --namespace syft -f &) | grep -q -E "Network:\s+https?://[a-zA-Z0-9.-]+:[0-9]+/" || true' + bash -c './scripts/wait_for.sh service mongo --context k3d-$CLUSTER_NAME --namespace syft' + bash -c './scripts/wait_for.sh service backend --context k3d-$CLUSTER_NAME --namespace syft' + bash -c './scripts/wait_for.sh service proxy --context k3d-$CLUSTER_NAME --namespace syft' + bash -c '(kubectl logs service/backend --context k3d-$CLUSTER_NAME --namespace syft -f &) | grep -q "Application startup complete" || true' # Run Notebook tests tox -e e2e.test.notebook - # Cleanup - bash -c "k3d cluster delete syft || true" - bash -c "docker volume rm k3d-syft-images --force || true" + bash -c "k3d cluster delete ${CLUSTER_NAME} || true" [testenv:syft.test.helm.upgrade] description = Test helm upgrade @@ -925,7 +902,7 @@ commands = [testenv:dev.k8s.start] description = Start local Kubernetes registry & cluster with k3d changedir = {toxinidir} -passenv = * +passenv = HOME, USER setenv = CLUSTER_NAME = {env:CLUSTER_NAME:syft-dev} CLUSTER_HTTP_PORT = {env:CLUSTER_HTTP_PORT:8080} @@ -1017,7 +994,7 @@ commands = ; destroy cluster bash -c '\ rm -rf .devspace; echo ""; \ - k3d cluster delete ${CLUSTER_NAME}' + k3d cluster delete ${CLUSTER_NAME};' [testenv:dev.k8s.destroyall] description = Destroy both local Kubernetes cluster and registry @@ -1103,7 +1080,7 @@ commands = # If the syft version is local install the local version # else install the version of syft specified - bash -c " if [[ $SYFT_VERSION == 'local' ]]; then \ + bash -c "if [[ $SYFT_VERSION == 'local' ]]; then \ echo 'Using local syft'; \ else \ echo 'Installing syft version: ${SYFT_VERSION}'; \ From 99c124f1d15b1ec1567f36f05f9f014650f3a1ca Mon Sep 17 00:00:00 2001 From: Yash Gorana Date: Mon, 18 Mar 2024 16:48:48 +0530 Subject: [PATCH 06/24] [helm] some veilid cleanup --- .../grid/helm/syft/templates/veilid/veilid-deployment.yaml | 6 ++++-- .../grid/helm/syft/templates/veilid/veilid-service.yaml | 4 ++-- packages/grid/helm/syft/values.yaml | 2 +- packages/grid/veilid/start.sh | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/grid/helm/syft/templates/veilid/veilid-deployment.yaml b/packages/grid/helm/syft/templates/veilid/veilid-deployment.yaml index 1b05569837a..58aef67597a 100644 --- a/packages/grid/helm/syft/templates/veilid/veilid-deployment.yaml +++ b/packages/grid/helm/syft/templates/veilid/veilid-deployment.yaml @@ -27,12 +27,14 @@ spec: resources: {{ include "common.resources.set" (dict "resources" .Values.veilid.resources "preset" .Values.veilid.resourcesPreset) | nindent 12 }} env: - - name: VEILID_FLAGS - value: {{ .Values.veilid.serverFlags | quote }} - name: UVICORN_LOG_LEVEL value: {{ .Values.veilid.uvicornLogLevel }} - name: APP_LOG_LEVEL value: {{ .Values.veilid.appLogLevel }} + {{- if .Values.veilid.serverFlags }} + - name: VEILID_FLAGS + value: {{ .Values.veilid.serverFlags | quote }} + {{- end }} {{- if .Values.veilid.env }} {{- toYaml .Values.veilid.env | nindent 12 }} {{- end }} diff --git a/packages/grid/helm/syft/templates/veilid/veilid-service.yaml b/packages/grid/helm/syft/templates/veilid/veilid-service.yaml index 4b71381b9cc..dc2beb5ec99 100644 --- a/packages/grid/helm/syft/templates/veilid/veilid-service.yaml +++ b/packages/grid/helm/syft/templates/veilid/veilid-service.yaml @@ -13,7 +13,7 @@ spec: app.kubernetes.io/component: veilid ports: - name: python-server - port: 80 protocol: TCP + port: 80 targetPort: 4000 -{{ end }} \ No newline at end of file +{{ end }} diff --git a/packages/grid/helm/syft/values.yaml b/packages/grid/helm/syft/values.yaml index 324b119c476..a53e5b3cf1e 100644 --- a/packages/grid/helm/syft/values.yaml +++ b/packages/grid/helm/syft/values.yaml @@ -152,7 +152,7 @@ ingress: # ---------------------------------------- veilid: enabled: false - serverFlags: "" + serverFlags: null appLogLevel: "info" uvicornLogLevel: "info" diff --git a/packages/grid/veilid/start.sh b/packages/grid/veilid/start.sh index 86572d98e66..0675243d3d4 100644 --- a/packages/grid/veilid/start.sh +++ b/packages/grid/veilid/start.sh @@ -16,6 +16,6 @@ then RELOAD="--reload" fi -/veilid/veilid-server -c /veilid/veilid-server.conf $VEILID_FLAGS & +/veilid/veilid-server -c /veilid/veilid-server.conf $VEILID_FLAGS & exec uvicorn $RELOAD --host $HOST --port $PORT --log-level $UVICORN_LOG_LEVEL "$APP_MODULE" \ No newline at end of file From 86b01b4ecfa97618f82dc1b4fbc64ef7efdfaa60 Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Mon, 18 Mar 2024 16:55:44 +0530 Subject: [PATCH 07/24] add a CachedExecutionResult class to represent cache value and store error messages - prompt a warning message if values are picked from cache --- packages/syft/src/syft/client/api.py | 8 ++++++++ packages/syft/src/syft/service/code/user_code.py | 10 ++++++++++ .../syft/src/syft/service/code/user_code_service.py | 12 +++++++++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/syft/src/syft/client/api.py b/packages/syft/src/syft/client/api.py index d9a19dbb1a5..d0558328ff4 100644 --- a/packages/syft/src/syft/client/api.py +++ b/packages/syft/src/syft/client/api.py @@ -36,6 +36,7 @@ from ..serde.signature import Signature from ..serde.signature import signature_remove_context from ..serde.signature import signature_remove_self +from ..service.code.user_code import CachedExecutionResult from ..service.context import AuthedServiceContext from ..service.context import ChangeContext from ..service.response import SyftAttributeError @@ -55,6 +56,7 @@ from ..types.uid import UID from ..util.autoreload import autoreload_enabled from ..util.telemetry import instrument +from ..util.util import prompt_warning_message from .connection import NodeConnection if TYPE_CHECKING: @@ -739,6 +741,12 @@ def make_call(self, api_call: SyftAPICall) -> Result: result = debox_signed_syftapicall_response(signed_result=signed_result) + if isinstance(result, CachedExecutionResult): + result = result.result + if result.error_msg is not None: + prompt_warning_message( + message=f"{result.error_msg}. Loading results from cache." + ) if isinstance(result, OkErr): if result.is_ok(): res = result.ok() diff --git a/packages/syft/src/syft/service/code/user_code.py b/packages/syft/src/syft/service/code/user_code.py index 062dbc2b424..2151878d843 100644 --- a/packages/syft/src/syft/service/code/user_code.py +++ b/packages/syft/src/syft/service/code/user_code.py @@ -1552,3 +1552,13 @@ def load_approved_policy_code( load_policy_code(user_code.output_policy_type) except Exception as e: raise Exception(f"Failed to load code: {user_code}: {e}") + + +class CachedExecutionResult(SyftObject): + """This class is used to represent the cached result of a user code execution.""" + + __canonical_name__ = "CachedUserCodeResult" + __version__ = SYFT_OBJECT_VERSION_1 + + result: ActionObject + error_msg: str | None = None diff --git a/packages/syft/src/syft/service/code/user_code_service.py b/packages/syft/src/syft/service/code/user_code_service.py index 513da26db9b..01edf0572cf 100644 --- a/packages/syft/src/syft/service/code/user_code_service.py +++ b/packages/syft/src/syft/service/code/user_code_service.py @@ -40,6 +40,7 @@ from ..user.user_roles import DATA_SCIENTIST_ROLE_LEVEL from ..user.user_roles import GUEST_ROLE_LEVEL from ..user.user_roles import ServiceRole +from .user_code import CachedExecutionResult from .user_code import SubmitUserCode from .user_code import UserCode from .user_code import UserCodeStatus @@ -369,7 +370,7 @@ def is_execution_on_owned_args( @service_method(path="code.call", name="call", roles=GUEST_ROLE_LEVEL) def call( self, context: AuthedServiceContext, uid: UID, **kwargs: Any - ) -> SyftSuccess | SyftError: + ) -> CachedExecutionResult | ActionObject | SyftSuccess | SyftError: """Call a User Code Function""" kwargs.pop("result_id", None) result = self._call(context, uid, **kwargs) @@ -446,9 +447,14 @@ def _call( return result res = delist_if_single(result.ok()) - return Ok(res) + return Ok( + CachedExecutionResult( + result=res, + error_msg=is_valid.message, + ) + ) else: - return is_valid.to_result() + return cast(Err, is_valid.to_result()) return can_execute.to_result() # type: ignore # Execute the code item From ca54d5f9f69f86f565d5bbb05ef4e57fdd240518 Mon Sep 17 00:00:00 2001 From: Yash Date: Mon, 18 Mar 2024 16:58:37 +0530 Subject: [PATCH 08/24] Update values.dev.yaml --- packages/grid/helm/values.dev.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/grid/helm/values.dev.yaml b/packages/grid/helm/values.dev.yaml index bfe83819892..62e4d16b234 100644 --- a/packages/grid/helm/values.dev.yaml +++ b/packages/grid/helm/values.dev.yaml @@ -1,5 +1,5 @@ -# Helm chart values used development and testing -# Can directly be used in helm install or devspace valuesFiles +# Helm chart values used for development and testing +# Can be used through `helm install -f values.dev.yaml` or devspace `valuesFiles` global: randomizedSecrets: false From 7d3b981eeccc0fa2795640baddc6c3648772b07e Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Mon, 18 Mar 2024 18:52:47 +0530 Subject: [PATCH 09/24] rename a CachedExecutionResult to CachedSyftObject - make CachedSyftObject a new syft type - extract ids from kwargs before passing it input policy --- packages/syft/src/syft/client/api.py | 7 +++-- .../src/syft/protocol/protocol_version.json | 30 +++++++++---------- .../src/syft/service/action/action_service.py | 2 +- .../syft/src/syft/service/code/user_code.py | 10 ------- .../syft/service/code/user_code_service.py | 14 +++++---- .../syft/src/syft/service/policy/policy.py | 6 ++-- packages/syft/src/syft/types/cache_object.py | 14 +++++++++ 7 files changed, 45 insertions(+), 38 deletions(-) create mode 100644 packages/syft/src/syft/types/cache_object.py diff --git a/packages/syft/src/syft/client/api.py b/packages/syft/src/syft/client/api.py index d0558328ff4..c0d48b345f4 100644 --- a/packages/syft/src/syft/client/api.py +++ b/packages/syft/src/syft/client/api.py @@ -36,7 +36,6 @@ from ..serde.signature import Signature from ..serde.signature import signature_remove_context from ..serde.signature import signature_remove_self -from ..service.code.user_code import CachedExecutionResult from ..service.context import AuthedServiceContext from ..service.context import ChangeContext from ..service.response import SyftAttributeError @@ -47,6 +46,7 @@ from ..service.user.user_roles import ServiceRole from ..service.warnings import APIEndpointWarning from ..service.warnings import WarningContext +from ..types.cache_object import CachedSyftObject from ..types.identity import Identity from ..types.syft_object import SYFT_OBJECT_VERSION_2 from ..types.syft_object import SyftBaseObject @@ -741,12 +741,13 @@ def make_call(self, api_call: SyftAPICall) -> Result: result = debox_signed_syftapicall_response(signed_result=signed_result) - if isinstance(result, CachedExecutionResult): - result = result.result + if isinstance(result, CachedSyftObject): if result.error_msg is not None: prompt_warning_message( message=f"{result.error_msg}. Loading results from cache." ) + result = result.result + if isinstance(result, OkErr): if result.is_ok(): res = result.ok() diff --git a/packages/syft/src/syft/protocol/protocol_version.json b/packages/syft/src/syft/protocol/protocol_version.json index aca46a853dc..54450c79fe1 100644 --- a/packages/syft/src/syft/protocol/protocol_version.json +++ b/packages/syft/src/syft/protocol/protocol_version.json @@ -23,7 +23,7 @@ }, "3": { "version": 3, - "hash": "18785a4cce6f25f1900b82f30acb2298b4afeab92bd00d0be358cfbf5a93d97e", + "hash": "37bb8f0f87b1da2525da8f6873e6257dff4a732f2dba293b62931ad0b85ef9e2", "action": "add" } }, @@ -40,7 +40,7 @@ }, "3": { "version": 3, - "hash": "4fd4c5b29e395b7a1af3b820166e69af7f267b6e3234fb8329bd0d74adc6e828", + "hash": "7c55461e3c6ba36ff999c64eb1b97a65b5a1f27193a973b1355ee2675f14c313", "action": "add" } }, @@ -52,7 +52,7 @@ }, "2": { "version": 2, - "hash": "1b04f527fdabaf329786b6bb38209f6ca82d622fe691d33c47ed1addccaaac02", + "hash": "1ab941c7669572a41067a17e0e3f2d9c7056f7a4df8f899e87ae2358d9113b02", "action": "add" } }, @@ -148,7 +148,7 @@ }, "3": { "version": 3, - "hash": "5922c1253370861185c53161ad31e488319f46ea5faee2d1802ca94657c428dc", + "hash": "709dc84a946267444a3f9968acf4a5e9807d6aa5143626c3fb635c9282108cc1", "action": "add" } }, @@ -165,7 +165,7 @@ }, "3": { "version": 3, - "hash": "dbb72f43add3141d13a76e18a2a0903a6937966632f0def452ca264f3f70d81b", + "hash": "5e84c9905a1816d51c0dfb1eedbfb4d831095ca6c89956c6fe200c2a193cbb8f", "action": "add" } }, @@ -182,7 +182,7 @@ }, "3": { "version": 3, - "hash": "cf831130f66f9addf8f68a8c9df0b67775e53322c8a32e8babc7f21631845608", + "hash": "bf936c1923ceee4def4cded06d41766998ea472322b0738bade7b85298e469da", "action": "add" } }, @@ -199,7 +199,7 @@ }, "3": { "version": 3, - "hash": "78334b746e5230ac156e47960e91ce449543d1a77a62d9b8be141882e4b549aa", + "hash": "daf3629fb7d26f41f96cd7f9200d7327a4b74d800b3e02afa75454d11bd47d78", "action": "add" } }, @@ -216,7 +216,7 @@ }, "3": { "version": 3, - "hash": "0007e86c39ede0f5756ba348083f809c5b6e3bb3a0a9ed6b94570d808467041f", + "hash": "4747a220d1587e99e6ac076496a2aa7217e2700205ac80fc24fe4768a313da78", "action": "add" } }, @@ -300,7 +300,7 @@ }, "2": { "version": 2, - "hash": "9eaed0a784525dea0018d95de74d70ed212f20f6ead2b50c66e59467c42bbe68", + "hash": "b35897295822f061fbc70522ca8967cd2be53a5c01b19e24c587cd7b0c4aa3e8", "action": "add" } }, @@ -574,7 +574,7 @@ }, "4": { "version": 4, - "hash": "077987cfc94d617f746f27fb468210330c328bad06eee09a89226759e5745a5f", + "hash": "c37bc1c6303c467050ce4f8faa088a2f66ef1781437ffe34f15aadf5477ac25b", "action": "add" } }, @@ -608,7 +608,7 @@ }, "3": { "version": 3, - "hash": "8a8e721a4ca8aa9107403368851acbe59f8d7bdc1eeff0ff101a44e325a058ff", + "hash": "4159d6ea45bc82577828bc19d668196422ff29bb8cc298b84623e6f4f476aaf3", "action": "add" } }, @@ -630,7 +630,7 @@ }, "4": { "version": 4, - "hash": "9b0dd1a64d64b1e824746e93aae0ca14863d2430aea2e2a758945edbfcb79bc9", + "hash": "dae431b87cadacfd30613519b5dd25d2e4ff59d2a971e21a31d56901103b9420", "action": "add" } }, @@ -1225,7 +1225,7 @@ }, "2": { "version": 2, - "hash": "747c87b947346fb0fc0466a912e2dc743ee082ef6254079176349d6b63748c32", + "hash": "93c75b45b9b74c69243cc2f2ef2d661e11eef5c23ecf71692ffdbd467d11efe6", "action": "add" } }, @@ -1513,7 +1513,7 @@ }, "2": { "version": 2, - "hash": "ac452023b98534eb13cb99a86fa7e379c08316353fc0837d1b788e0050e13ab9", + "hash": "24b7c302f9821afe073534d4ed02c377bd4f7cb691f66ca92b94c38c92dc78c2", "action": "add" } }, @@ -1525,7 +1525,7 @@ }, "2": { "version": 2, - "hash": "c9fdefdc622131c3676243aafadc30b7e67ee155793791bf1000bf742c1a251a", + "hash": "6d2e2f64c00dcda74a2545c77abbcf1630c56c26014987038feab174d15bd9d7", "action": "add" } }, diff --git a/packages/syft/src/syft/service/action/action_service.py b/packages/syft/src/syft/service/action/action_service.py index 2c8de34ebaa..614b0db1cc5 100644 --- a/packages/syft/src/syft/service/action/action_service.py +++ b/packages/syft/src/syft/service/action/action_service.py @@ -322,7 +322,7 @@ def _user_code_execute( is_approved = input_policy._is_valid( context=context, usr_input_kwargs=kwargs, - user_code_id=code_item.id, + code_item_id=code_item.id, ) if is_approved.is_err(): return is_approved diff --git a/packages/syft/src/syft/service/code/user_code.py b/packages/syft/src/syft/service/code/user_code.py index 2151878d843..062dbc2b424 100644 --- a/packages/syft/src/syft/service/code/user_code.py +++ b/packages/syft/src/syft/service/code/user_code.py @@ -1552,13 +1552,3 @@ def load_approved_policy_code( load_policy_code(user_code.output_policy_type) except Exception as e: raise Exception(f"Failed to load code: {user_code}: {e}") - - -class CachedExecutionResult(SyftObject): - """This class is used to represent the cached result of a user code execution.""" - - __canonical_name__ = "CachedUserCodeResult" - __version__ = SYFT_OBJECT_VERSION_1 - - result: ActionObject - error_msg: str | None = None diff --git a/packages/syft/src/syft/service/code/user_code_service.py b/packages/syft/src/syft/service/code/user_code_service.py index 01edf0572cf..14f42fd9950 100644 --- a/packages/syft/src/syft/service/code/user_code_service.py +++ b/packages/syft/src/syft/service/code/user_code_service.py @@ -15,6 +15,7 @@ from ...serde.serializable import serializable from ...store.document_store import DocumentStore from ...store.linked_obj import LinkedObject +from ...types.cache_object import CachedSyftObject from ...types.twin_object import TwinObject from ...types.uid import UID from ...util.telemetry import instrument @@ -40,7 +41,6 @@ from ..user.user_roles import DATA_SCIENTIST_ROLE_LEVEL from ..user.user_roles import GUEST_ROLE_LEVEL from ..user.user_roles import ServiceRole -from .user_code import CachedExecutionResult from .user_code import SubmitUserCode from .user_code import UserCode from .user_code import UserCodeStatus @@ -370,7 +370,7 @@ def is_execution_on_owned_args( @service_method(path="code.call", name="call", roles=GUEST_ROLE_LEVEL) def call( self, context: AuthedServiceContext, uid: UID, **kwargs: Any - ) -> CachedExecutionResult | ActionObject | SyftSuccess | SyftError: + ) -> CachedSyftObject | ActionObject | SyftSuccess | SyftError: """Call a User Code Function""" kwargs.pop("result_id", None) result = self._call(context, uid, **kwargs) @@ -410,13 +410,16 @@ def _call( # We do not read from output policy cache if there are mock arguments skip_read_cache = len(self.keep_owned_kwargs(kwargs, context)) > 0 + # Extract ids from kwargs + kwarg2id = map_kwargs_to_id(kwargs) + # Check input policy input_policy = code.get_input_policy(context) if input_policy is not None: inputs_allowed = input_policy._is_valid( context, - usr_input_kwargs=kwargs, - user_code_id=code.id, + usr_input_kwargs=kwarg2id, + code_item_id=code.id, ) if inputs_allowed.is_err(): return inputs_allowed @@ -448,7 +451,7 @@ def _call( res = delist_if_single(result.ok()) return Ok( - CachedExecutionResult( + CachedSyftObject( result=res, error_msg=is_valid.message, ) @@ -462,7 +465,6 @@ def _call( action_service = context.node.get_service("actionservice") - kwarg2id = map_kwargs_to_id(kwargs) result_action_object: Result[ActionObject | TwinObject, str] = ( action_service._user_code_execute( context, code, kwarg2id, result_id=result_id diff --git a/packages/syft/src/syft/service/policy/policy.py b/packages/syft/src/syft/service/policy/policy.py index be2abe70625..d40895afc12 100644 --- a/packages/syft/src/syft/service/policy/policy.py +++ b/packages/syft/src/syft/service/policy/policy.py @@ -183,7 +183,7 @@ def _is_valid( self, context: AuthedServiceContext, usr_input_kwargs: dict, - user_code_id: UID, + code_item_id: UID, ) -> bool: raise NotImplementedError @@ -337,12 +337,12 @@ def _is_valid( self, context: AuthedServiceContext, usr_input_kwargs: dict, - user_code_id: UID, + code_item_id: UID, ) -> Result[bool, str]: filtered_input_kwargs = self.filter_kwargs( kwargs=usr_input_kwargs, context=context, - code_item_id=user_code_id, + code_item_id=code_item_id, ) if filtered_input_kwargs.is_err(): diff --git a/packages/syft/src/syft/types/cache_object.py b/packages/syft/src/syft/types/cache_object.py new file mode 100644 index 00000000000..ddee2e32a6d --- /dev/null +++ b/packages/syft/src/syft/types/cache_object.py @@ -0,0 +1,14 @@ +# stdlib +from typing import Any + +# relative +from ..serde.serializable import serializable +from .base import SyftBaseModel + + +@serializable() +class CachedSyftObject(SyftBaseModel): + """This class is used to represent the cached result.""" + + result: Any + error_msg: str | None = None From dcfbb99da71237c8e47b3ba9c2d7dd1eaa7c1e2e Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Mon, 18 Mar 2024 19:10:45 +0530 Subject: [PATCH 10/24] fix propogation of error when input policy doesn't match --- packages/syft/src/syft/service/policy/policy.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/syft/src/syft/service/policy/policy.py b/packages/syft/src/syft/service/policy/policy.py index d40895afc12..3f38946880c 100644 --- a/packages/syft/src/syft/service/policy/policy.py +++ b/packages/syft/src/syft/service/policy/policy.py @@ -301,7 +301,7 @@ def allowed_ids_only( if uid != allowed_inputs[key]: raise Exception( - f"Input {type(value)} for {key} not in allowed {allowed_inputs}" + f"Input with uid: {uid} for `{key}` not in allowed inputs: {allowed_inputs}" ) filtered_kwargs[key] = value return filtered_kwargs @@ -319,11 +319,11 @@ def filter_kwargs( context: AuthedServiceContext, code_item_id: UID, ) -> Result[dict[Any, Any], str]: - allowed_inputs = allowed_ids_only( - allowed_inputs=self.inputs, kwargs=kwargs, context=context - ) - try: + allowed_inputs = allowed_ids_only( + allowed_inputs=self.inputs, kwargs=kwargs, context=context + ) + results = retrieve_from_db( code_item_id=code_item_id, allowed_inputs=allowed_inputs, From 87a08c17b3e13b84e9e8db8f1c974314c6606a7f Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Mon, 18 Mar 2024 19:34:08 +0530 Subject: [PATCH 11/24] fix variable is_approved scope in _user_execute_code - check for overrides during input policy validation --- packages/syft/src/syft/service/action/action_service.py | 4 ++-- packages/syft/src/syft/service/code/user_code_service.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/syft/src/syft/service/action/action_service.py b/packages/syft/src/syft/service/action/action_service.py index 614b0db1cc5..513ca48ff94 100644 --- a/packages/syft/src/syft/service/action/action_service.py +++ b/packages/syft/src/syft/service/action/action_service.py @@ -324,8 +324,8 @@ def _user_code_execute( usr_input_kwargs=kwargs, code_item_id=code_item.id, ) - if is_approved.is_err(): - return is_approved + if is_approved.is_err(): + return is_approved else: filtered_kwargs = retrieve_from_db(code_item.id, kwargs, context).ok() # update input policy to track any input state diff --git a/packages/syft/src/syft/service/code/user_code_service.py b/packages/syft/src/syft/service/code/user_code_service.py index 14f42fd9950..9664eec41c7 100644 --- a/packages/syft/src/syft/service/code/user_code_service.py +++ b/packages/syft/src/syft/service/code/user_code_service.py @@ -415,7 +415,7 @@ def _call( # Check input policy input_policy = code.get_input_policy(context) - if input_policy is not None: + if not override_execution_permission and input_policy is not None: inputs_allowed = input_policy._is_valid( context, usr_input_kwargs=kwarg2id, From 0353be8fb00e470cbb4cc9bc572bfe2618498a8c Mon Sep 17 00:00:00 2001 From: teo Date: Tue, 19 Mar 2024 10:45:06 +0200 Subject: [PATCH 12/24] fix bug with hello-syft nb --- notebooks/tutorials/hello-syft/01-hello-syft.ipynb | 4 ++-- packages/syft/src/syft/service/policy/policy.py | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/notebooks/tutorials/hello-syft/01-hello-syft.ipynb b/notebooks/tutorials/hello-syft/01-hello-syft.ipynb index 2ca52414c0e..b7354b469b1 100644 --- a/notebooks/tutorials/hello-syft/01-hello-syft.ipynb +++ b/notebooks/tutorials/hello-syft/01-hello-syft.ipynb @@ -262,7 +262,7 @@ "metadata": {}, "outputs": [], "source": [ - "@sy.syft_function_single_use(data=asset)\n", + "@sy.syft_function_single_use(df=asset)\n", "def get_mean_age(df):\n", " return df[\"Age\"].mean()" ] @@ -557,7 +557,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.4" }, "toc": { "base_numbering": 1, diff --git a/packages/syft/src/syft/service/policy/policy.py b/packages/syft/src/syft/service/policy/policy.py index 3f38946880c..7da9edebb38 100644 --- a/packages/syft/src/syft/service/policy/policy.py +++ b/packages/syft/src/syft/service/policy/policy.py @@ -354,9 +354,7 @@ def _is_valid( for _inp_kwargs in self.inputs.values(): for k in _inp_kwargs.keys(): if k not in usr_input_kwargs: - return Err( - message=f"Function missing required keyword argument: '{k}'" - ) + return Err(f"Function missing required keyword argument: '{k}'") expected_input_kwargs.update(_inp_kwargs.keys()) permitted_input_kwargs = list(filtered_input_kwargs.keys()) From c38ac050a0f23876839dce7127754134cdb294e9 Mon Sep 17 00:00:00 2001 From: Yash Gorana Date: Wed, 20 Mar 2024 18:06:28 +0530 Subject: [PATCH 13/24] [syft] cleanup node services init --- packages/syft/src/syft/__init__.py | 4 +- packages/syft/src/syft/external/__init__.py | 13 +- packages/syft/src/syft/node/node.py | 290 +++++++----------- .../syft/service/enclave/enclave_service.py | 4 +- .../syft/src/syft/service/veilid/__init__.py | 11 + 5 files changed, 141 insertions(+), 181 deletions(-) diff --git a/packages/syft/src/syft/__init__.py b/packages/syft/src/syft/__init__.py index b1501b2a5aa..d45e76b755b 100644 --- a/packages/syft/src/syft/__init__.py +++ b/packages/syft/src/syft/__init__.py @@ -26,7 +26,7 @@ from .client.user_settings import UserSettings # noqa: F401 from .client.user_settings import settings # noqa: F401 from .custom_worker.config import DockerWorkerConfig # noqa: F401 -from .external import OBLV # noqa: F401 +from .external import OBLV_ENABLED # noqa: F401 from .external import enable_external_lib # noqa: F401 from .node.credentials import SyftSigningKey # noqa: F401 from .node.domain import Domain # noqa: F401 @@ -108,7 +108,7 @@ pass # nosec # For server-side, to enable by environment variable -if OBLV: +if OBLV_ENABLED: enable_external_lib("oblv") diff --git a/packages/syft/src/syft/external/__init__.py b/packages/syft/src/syft/external/__init__.py index 552a4759d14..b03c6594322 100644 --- a/packages/syft/src/syft/external/__init__.py +++ b/packages/syft/src/syft/external/__init__.py @@ -5,10 +5,12 @@ # stdlib import importlib import os +from typing import Any # relative from ..service.response import SyftError from ..service.response import SyftSuccess +from ..service.service import AbstractService from ..util.util import str_to_bool # Contains all the external libraries that Syft supports. @@ -16,7 +18,7 @@ # if the external library is not installed, we prompt the user # to install it with the pip package name. -OBLV = str_to_bool(os.getenv("OBLV_ENABLED", "false")) +OBLV_ENABLED = str_to_bool(os.getenv("OBLV_ENABLED", "false")) EXTERNAL_LIBS = { "oblv": { @@ -26,6 +28,15 @@ } +def OblvServiceProvider(*args: Any, **kwargs: Any) -> type[AbstractService] | None: + if OBLV_ENABLED: + # relative + from .oblv.oblv_service import OblvService + + return OblvService(*args, **kwargs) + return None + + def package_exists(package_name: str) -> bool: try: importlib.import_module(package_name) diff --git a/packages/syft/src/syft/node/node.py b/packages/syft/src/syft/node/node.py index cd7ff468491..d97b3b336c9 100644 --- a/packages/syft/src/syft/node/node.py +++ b/packages/syft/src/syft/node/node.py @@ -7,7 +7,6 @@ from datetime import datetime from functools import partial import hashlib -from multiprocessing import current_process import os from pathlib import Path import shutil @@ -35,7 +34,7 @@ from ..client.api import debox_signed_syftapicall_response from ..client.client import SyftClient from ..exceptions.exception import PySyftException -from ..external import OBLV +from ..external import OblvServiceProvider from ..protocol.data_protocol import PROTOCOL_TYPE from ..protocol.data_protocol import get_data_protocol from ..service.action.action_object import Action @@ -97,7 +96,7 @@ from ..service.user.user_roles import ServiceRole from ..service.user.user_service import UserService from ..service.user.user_stash import UserStash -from ..service.veilid import VEILID_ENABLED +from ..service.veilid import VeilidServiceProvider from ..service.worker.image_registry_service import SyftImageRegistryService from ..service.worker.utils import DEFAULT_WORKER_IMAGE_TAG from ..service.worker.utils import DEFAULT_WORKER_POOL_NAME @@ -289,7 +288,6 @@ def __init__( *, # Trasterisk name: str | None = None, id: UID | None = None, - services: list[type[AbstractService]] | None = None, signing_key: SyftSigningKey | SigningKey | None = None, action_store_config: StoreConfig | None = None, document_store_config: StoreConfig | None = None, @@ -321,68 +319,46 @@ def __init__( # 🟡 TODO 22: change our ENV variable format and default init args to make this # less horrible or add some convenience functions self.dev_mode = dev_mode or get_dev_mode() - if node_uid_env is not None: - self.id = UID.from_string(node_uid_env) - else: - if id is None: - id = UID() - self.id = id - + self.id = UID.from_string(node_uid_env) if node_uid_env else (id or UID()) self.packages = "" + self.processes = processes + self.is_subprocess = is_subprocess + self.name = name or random_name() + self.enable_warnings = enable_warnings + self.in_memory_workers = in_memory_workers + self.node_type = NodeType(node_type) + self.node_side_type = NodeSideType(node_side_type) + self.client_cache: dict = {} + self.peer_client_cache: dict = {} - self.signing_key = None - if signing_key_env is not None: - self.signing_key = SyftSigningKey.from_string(signing_key_env) - else: - if isinstance(signing_key, SigningKey): - signing_key = SyftSigningKey(signing_key=signing_key) - self.signing_key = signing_key + if isinstance(node_type, str): + node_type = NodeType(node_type) + self.node_type = node_type - if self.signing_key is None: - self.signing_key = SyftSigningKey.generate() + if isinstance(node_side_type, str): + node_side_type = NodeSideType(node_side_type) + self.node_side_type = node_side_type - if reset: - self.remove_temp_dir() + skey = None + if signing_key_env: + skey = SyftSigningKey.from_string(signing_key_env) + elif isinstance(signing_key, SigningKey): + skey = SyftSigningKey(signing_key=signing_key) + else: + skey = signing_key + self.signing_key = skey or SyftSigningKey.generate() - self.processes = processes - self.is_subprocess = is_subprocess - self.name = random_name() if name is None else name - services = ( - [ - UserService, - WorkerService, - SettingsService, - ActionService, - LogService, - DatasetService, - UserCodeService, - QueueService, - JobService, - RequestService, - DataSubjectService, - NetworkService, - PolicyService, - NotifierService, - NotificationService, - DataSubjectMemberService, - ProjectService, - EnclaveService, - CodeHistoryService, - MetadataService, - BlobStorageService, - MigrateStateService, - SyftWorkerImageService, - SyftWorkerPoolService, - SyftImageRegistryService, - SyncService, - OutputService, - UserCodeStatusService, - ] - if services is None - else services + self.queue_config = self.create_queue_config( + n_consumers=n_consumers, + create_producer=create_producer, + thread_workers=thread_workers, + queue_port=queue_port, + queue_config=queue_config, ) - self.service_config = ServiceConfigRegistry.get_registered_configs() + # must call before initializing stores + if reset: + self.remove_temp_dir() use_sqlite = local_db or (processes > 0 and not is_subprocess) document_store_config = document_store_config or self.get_default_store( @@ -396,23 +372,7 @@ def __init__( document_store_config=document_store_config, ) - if OBLV: - # relative - from ..external.oblv.oblv_service import OblvService - - services += [OblvService] - create_oblv_key_pair(worker=self) - - if VEILID_ENABLED: - # relative - from ..service.veilid.veilid_service import VeilidService - - services += [VeilidService] - - self.enable_warnings = enable_warnings - self.in_memory_workers = in_memory_workers - - self.services = services + # construct services only after init stores self._construct_services() create_admin_new( # nosec B106 @@ -431,26 +391,9 @@ def __init__( smtp_host=smtp_host, ) - self.peer_client_cache: dict = {} - - if isinstance(node_type, str): - node_type = NodeType(node_type) - self.node_type = node_type - - if isinstance(node_side_type, str): - node_side_type = NodeSideType(node_side_type) - self.node_side_type = node_side_type - self.post_init() - self.create_initial_settings(admin_email=root_email) - self.queue_config = self.create_queue_config( - n_consumers=n_consumers, - create_producer=create_producer, - thread_workers=thread_workers, - queue_port=queue_port, - queue_config=queue_config, - ) + self.create_initial_settings(admin_email=root_email) self.init_queue_manager(queue_config=self.queue_config) @@ -834,14 +777,6 @@ def post_init(self) -> None: user_code_service = self.get_service(UserCodeService) user_code_service.load_user_code(context=context) - if self.is_subprocess or current_process().name != "MainProcess": - # print(f"> Starting Subprocess {self}") - pass - else: - pass - # why would we do this? - # print(f"> {self}") - def reload_user_code() -> None: user_code_service.load_user_code(context=context) @@ -869,6 +804,8 @@ def init_stores( ) if isinstance(action_store_config, SQLiteStoreConfig): + # override the filename to node id + action_store_config.client_config.filename = f"{self.id}.sqlite" self.action_store: ActionStore = SQLiteActionStore( node_uid=self.id, store_config=action_store_config, @@ -904,59 +841,60 @@ def worker_stash(self) -> WorkerStash: return self.get_service("workerservice").stash def _construct_services(self) -> None: - self.service_path_map = {} - - for service_klass in self.services: - kwargs = {} - if service_klass == ActionService: - kwargs["store"] = self.action_store - store_services = [ - UserService, - WorkerService, - SettingsService, - DatasetService, - UserCodeService, - LogService, - RequestService, - QueueService, - JobService, - DataSubjectService, - NetworkService, - PolicyService, - NotifierService, - NotificationService, - DataSubjectMemberService, - ProjectService, - EnclaveService, - CodeHistoryService, - MetadataService, - BlobStorageService, - MigrateStateService, - SyftWorkerImageService, - SyftWorkerPoolService, - SyftImageRegistryService, - SyncService, - OutputService, - UserCodeStatusService, - ] - - if OBLV: - # relative - from ..external.oblv.oblv_service import OblvService + service_path_map: dict[str, AbstractService] = {} + initialized_services: list[AbstractService] = [] + + # a tuple of service and kwargs to initialize it with + # by default all services get default document store + # pass a dict with "store" key to override this + # pass a dict with "enabled" key to disable the service + default_services: list[dict] = [ + {"svc": ActionService, "store": self.action_store}, + {"svc": UserService}, + {"svc": WorkerService}, + {"svc": SettingsService}, + {"svc": DatasetService}, + {"svc": UserCodeService}, + {"svc": LogService}, + {"svc": RequestService}, + {"svc": QueueService}, + {"svc": JobService}, + {"svc": DataSubjectService}, + {"svc": NetworkService}, + {"svc": PolicyService}, + {"svc": NotifierService}, + {"svc": NotificationService}, + {"svc": DataSubjectMemberService}, + {"svc": ProjectService}, + {"svc": EnclaveService}, + {"svc": CodeHistoryService}, + {"svc": MetadataService}, + {"svc": BlobStorageService}, + {"svc": MigrateStateService}, + {"svc": SyftWorkerImageService}, + {"svc": SyftWorkerPoolService}, + {"svc": SyftImageRegistryService}, + {"svc": SyncService}, + {"svc": OutputService}, + {"svc": UserCodeStatusService}, + {"svc": VeilidServiceProvider}, + {"svc": OblvServiceProvider}, + ] - store_services += [OblvService] + for svc_kwargs in default_services: + ServiceCls = svc_kwargs.pop("svc") + svc_kwargs.setdefault("store", self.document_store) - if VEILID_ENABLED: - # relative - from ..service.veilid.veilid_service import VeilidService + # instantiate service + svc_instance = ServiceCls(**svc_kwargs) + if not svc_instance: + continue - store_services += [VeilidService] + service_path_map[ServiceCls.__name__.lower()] = svc_instance + initialized_services.append(ServiceCls) - if service_klass in store_services: - kwargs["store"] = self.document_store # type: ignore[assignment] - self.service_path_map[service_klass.__name__.lower()] = service_klass( - **kwargs - ) + self.services = initialized_services + self.service_path_map = service_path_map def get_service_method(self, path_or_func: str | Callable) -> Callable: if callable(path_or_func): @@ -1565,31 +1503,31 @@ def create_admin_new( return None -def create_oblv_key_pair( - worker: Node, -) -> str | None: - try: - # relative - from ..external.oblv.oblv_keys_stash import OblvKeys - from ..external.oblv.oblv_keys_stash import OblvKeysStash - from ..external.oblv.oblv_service import generate_oblv_key - - oblv_keys_stash = OblvKeysStash(store=worker.document_store) - - if not len(oblv_keys_stash) and worker.signing_key: - public_key, private_key = generate_oblv_key(oblv_key_name=worker.name) - oblv_keys = OblvKeys(public_key=public_key, private_key=private_key) - res = oblv_keys_stash.set(worker.signing_key.verify_key, oblv_keys) - if res.is_ok(): - print("Successfully generated Oblv Key pair at startup") - return res.err() - else: - print(f"Using Existing Public/Private Key pair: {len(oblv_keys_stash)}") - except Exception as e: - print("Unable to create Oblv Keys.", e) - return None - - return None +# def create_oblv_key_pair( +# worker: Node, +# ) -> str | None: +# try: +# # relative +# from ..external.oblv.oblv_keys_stash import OblvKeys +# from ..external.oblv.oblv_keys_stash import OblvKeysStash +# from ..external.oblv.oblv_service import generate_oblv_key + +# oblv_keys_stash = OblvKeysStash(store=worker.document_store) + +# if not len(oblv_keys_stash) and worker.signing_key: +# public_key, private_key = generate_oblv_key(oblv_key_name=worker.name) +# oblv_keys = OblvKeys(public_key=public_key, private_key=private_key) +# res = oblv_keys_stash.set(worker.signing_key.verify_key, oblv_keys) +# if res.is_ok(): +# print("Successfully generated Oblv Key pair at startup") +# return res.err() +# else: +# print(f"Using Existing Public/Private Key pair: {len(oblv_keys_stash)}") +# except Exception as e: +# print("Unable to create Oblv Keys.", e) +# return None + +# return None class NodeRegistry: diff --git a/packages/syft/src/syft/service/enclave/enclave_service.py b/packages/syft/src/syft/service/enclave/enclave_service.py index 73923ad8bd4..052b81efa32 100644 --- a/packages/syft/src/syft/service/enclave/enclave_service.py +++ b/packages/syft/src/syft/service/enclave/enclave_service.py @@ -96,9 +96,9 @@ def send_user_code_inputs_to_enclave( def get_oblv_service() -> type[AbstractService] | SyftError: # relative - from ...external import OBLV + from ...external import OBLV_ENABLED - if OBLV: + if OBLV_ENABLED: # relative from ...external.oblv.oblv_service import OblvService diff --git a/packages/syft/src/syft/service/veilid/__init__.py b/packages/syft/src/syft/service/veilid/__init__.py index e07b6b857c9..93f60cd6213 100644 --- a/packages/syft/src/syft/service/veilid/__init__.py +++ b/packages/syft/src/syft/service/veilid/__init__.py @@ -1,7 +1,18 @@ # stdlib import os +from typing import Any # relative from ...util.util import str_to_bool VEILID_ENABLED: bool = str_to_bool(os.environ.get("VEILID_ENABLED", "False")) + + +# Any because circular import +def VeilidServiceProvider(*args: Any, **kwargs: Any) -> Any | None: + if VEILID_ENABLED: + # relative + from .veilid_service import VeilidService + + return VeilidService(*args, **kwargs) + return None From 255427f0be4f1159eb806ad92ba6034d4fa7fa4e Mon Sep 17 00:00:00 2001 From: Yash Gorana Date: Thu, 21 Mar 2024 03:43:53 +0530 Subject: [PATCH 14/24] [syft] validate service instance --- packages/syft/src/syft/node/node.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/syft/src/syft/node/node.py b/packages/syft/src/syft/node/node.py index d97b3b336c9..5c85a3bc755 100644 --- a/packages/syft/src/syft/node/node.py +++ b/packages/syft/src/syft/node/node.py @@ -844,10 +844,12 @@ def _construct_services(self) -> None: service_path_map: dict[str, AbstractService] = {} initialized_services: list[AbstractService] = [] - # a tuple of service and kwargs to initialize it with - # by default all services get default document store - # pass a dict with "store" key to override this - # pass a dict with "enabled" key to disable the service + # A dict of service and init kwargs. + # - "svc" expects a callable (class or function) + # - The callable must return AbstractService or None + # - "store" expects a store type + # - By default all services get the document store + # - Pass a custom "store" to override this default_services: list[dict] = [ {"svc": ActionService, "store": self.action_store}, {"svc": UserService}, @@ -877,18 +879,21 @@ def _construct_services(self) -> None: {"svc": SyncService}, {"svc": OutputService}, {"svc": UserCodeStatusService}, - {"svc": VeilidServiceProvider}, - {"svc": OblvServiceProvider}, + {"svc": VeilidServiceProvider}, # this is lazy + {"svc": OblvServiceProvider}, # this is lazy ] for svc_kwargs in default_services: ServiceCls = svc_kwargs.pop("svc") svc_kwargs.setdefault("store", self.document_store) - # instantiate service svc_instance = ServiceCls(**svc_kwargs) if not svc_instance: continue + elif not isinstance(svc_instance, AbstractService): + raise ValueError( + f"Service {ServiceCls.__name__} must be an instance of AbstractService" + ) service_path_map[ServiceCls.__name__.lower()] = svc_instance initialized_services.append(ServiceCls) From c318570894f53fdb5af5bb142c67157aa837ccad Mon Sep 17 00:00:00 2001 From: Yash Gorana Date: Thu, 21 Mar 2024 03:52:44 +0530 Subject: [PATCH 15/24] mypy fixes --- packages/syft/src/syft/node/node.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/syft/src/syft/node/node.py b/packages/syft/src/syft/node/node.py index 5c85a3bc755..ec1f9b198aa 100644 --- a/packages/syft/src/syft/node/node.py +++ b/packages/syft/src/syft/node/node.py @@ -773,7 +773,7 @@ def post_init(self) -> None: node_uid=self.id, user_verify_key=self.verify_key, context=context ) - if UserCodeService in self.services: + if "usercodeservice" in self.service_path_map: user_code_service = self.get_service(UserCodeService) user_code_service.load_user_code(context=context) @@ -804,8 +804,6 @@ def init_stores( ) if isinstance(action_store_config, SQLiteStoreConfig): - # override the filename to node id - action_store_config.client_config.filename = f"{self.id}.sqlite" self.action_store: ActionStore = SQLiteActionStore( node_uid=self.id, store_config=action_store_config, @@ -1039,7 +1037,7 @@ def forward_message( self, api_call: SyftAPICall | SignedSyftAPICall ) -> Result[QueueItem | SyftObject, Err]: node_uid = api_call.message.node_uid - if NetworkService not in self.services: + if "networkservice" not in self.service_path_map: return SyftError( message=( "Node has no network service so we can't " From a4b415c7c8f56ca4afa151f56fe44a52bb48eec8 Mon Sep 17 00:00:00 2001 From: Madhava Jay Date: Thu, 21 Mar 2024 14:40:10 +1000 Subject: [PATCH 16/24] Improve .dockerignore files --- packages/.dockerignore | 8 +++++--- packages/grid/veilid/.dockerignore | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 packages/grid/veilid/.dockerignore diff --git a/packages/.dockerignore b/packages/.dockerignore index a8628d4acb1..ba9aa4b6829 100644 --- a/packages/.dockerignore +++ b/packages/.dockerignore @@ -1,9 +1,11 @@ **/*.pyc -grid/data -grid/packer -grid/.devspace +grid/* +!grid/backend + syftcli syft/tests syft/README.md + +hagrid \ No newline at end of file diff --git a/packages/grid/veilid/.dockerignore b/packages/grid/veilid/.dockerignore new file mode 100644 index 00000000000..cc8cc888f79 --- /dev/null +++ b/packages/grid/veilid/.dockerignore @@ -0,0 +1 @@ +veilid \ No newline at end of file From d2dc4a8d872679b8415fc62dc6053a98c469ddfb Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Thu, 21 Mar 2024 14:56:37 +0530 Subject: [PATCH 17/24] save input_ids as part of ExecutionOutput - pass input kwargs to apply_output in code.call service - default to policy input kwargs as execution inputs during accept by depositing results --- .../syft/src/syft/protocol/protocol_version.json | 2 +- packages/syft/src/syft/service/code/user_code.py | 2 ++ .../syft/src/syft/service/code/user_code_service.py | 13 +++++++++++-- .../syft/src/syft/service/output/output_service.py | 5 +++++ packages/syft/src/syft/service/request/request.py | 10 +++++++++- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/packages/syft/src/syft/protocol/protocol_version.json b/packages/syft/src/syft/protocol/protocol_version.json index 54450c79fe1..3c29112d00b 100644 --- a/packages/syft/src/syft/protocol/protocol_version.json +++ b/packages/syft/src/syft/protocol/protocol_version.json @@ -71,7 +71,7 @@ "ExecutionOutput": { "1": { "version": 1, - "hash": "abb4ce9172fbba0ea03fcbea7addb06176c8dba6dbcb7143cde350617528a5b7", + "hash": "201c8abcb6595a64140ad0c3b058557229c7790a25fb55ed229ae0efcb63ad07", "action": "add" } }, diff --git a/packages/syft/src/syft/service/code/user_code.py b/packages/syft/src/syft/service/code/user_code.py index 062dbc2b424..9c680dd288d 100644 --- a/packages/syft/src/syft/service/code/user_code.py +++ b/packages/syft/src/syft/service/code/user_code.py @@ -540,6 +540,7 @@ def apply_output( context: AuthedServiceContext, outputs: Any, job_id: UID | None = None, + input_ids: dict[str, UID] | None = None, ) -> ExecutionOutput | SyftError: output_policy = self.get_output_policy(context) if output_policy is None: @@ -558,6 +559,7 @@ def apply_output( executing_user_verify_key=self.user_verify_key, job_id=job_id, output_policy_id=output_policy.id, + input_ids=input_ids, ) if isinstance(execution_result, SyftError): return execution_result diff --git a/packages/syft/src/syft/service/code/user_code_service.py b/packages/syft/src/syft/service/code/user_code_service.py index 9664eec41c7..b174fd92444 100644 --- a/packages/syft/src/syft/service/code/user_code_service.py +++ b/packages/syft/src/syft/service/code/user_code_service.py @@ -489,7 +489,10 @@ def _call( # and admins executing on high side (TODO, decide if we want to increment counter) if not skip_fill_cache and output_policy is not None: res = code.apply_output( - context=context, outputs=result, job_id=context.job_id + context=context, + outputs=result, + job_id=context.job_id, + input_ids=kwarg2id, ) if isinstance(res, SyftError): return Err(res.message) @@ -537,6 +540,7 @@ def apply_output( context: AuthedServiceContext, user_code_id: UID, outputs: Any, + input_ids: dict[str, UID] | None = None, job_id: UID | None = None, ) -> ExecutionOutput | SyftError: code_result = self.stash.get_by_uid(context.credentials, user_code_id) @@ -547,7 +551,12 @@ def apply_output( if not code.get_status(context).approved: return SyftError(message="Code is not approved") - res = code.apply_output(context=context, outputs=outputs, job_id=job_id) + res = code.apply_output( + context=context, + outputs=outputs, + job_id=job_id, + input_ids=input_ids, + ) return res diff --git a/packages/syft/src/syft/service/output/output_service.py b/packages/syft/src/syft/service/output/output_service.py index 6572cafbe7f..e01e6a3acb4 100644 --- a/packages/syft/src/syft/service/output/output_service.py +++ b/packages/syft/src/syft/service/output/output_service.py @@ -44,6 +44,7 @@ class ExecutionOutput(SyncableSyftObject): output_ids: list[UID] | dict[str, UID] | None = None job_link: LinkedObject | None = None created_at: DateTime = DateTime.now() + input_ids: dict[str, UID] | None = None # Required for __attr_searchable__, set by model_validator user_code_id: UID @@ -79,6 +80,7 @@ def from_ids( node_uid: UID, job_id: UID | None = None, output_policy_id: UID | None = None, + input_ids: dict[str, UID] | None = None, ) -> "ExecutionOutput": # relative from ..code.user_code_service import UserCode @@ -111,6 +113,7 @@ def from_ids( job_link=job_link, executing_user_verify_key=executing_user_verify_key, output_policy_id=output_policy_id, + input_ids=input_ids, ) @property @@ -216,6 +219,7 @@ def create( executing_user_verify_key: SyftVerifyKey, job_id: UID | None = None, output_policy_id: UID | None = None, + input_ids: dict[str, UID] | None = None, ) -> ExecutionOutput | SyftError: output = ExecutionOutput.from_ids( output_ids=output_ids, @@ -224,6 +228,7 @@ def create( node_uid=context.node.id, # type: ignore job_id=job_id, output_policy_id=output_policy_id, + input_ids=input_ids, ) res = self.stash.set(context.credentials, output) diff --git a/packages/syft/src/syft/service/request/request.py b/packages/syft/src/syft/service/request/request.py index 4180dd1db10..fea214c4904 100644 --- a/packages/syft/src/syft/service/request/request.py +++ b/packages/syft/src/syft/service/request/request.py @@ -837,8 +837,16 @@ def accept_by_depositing_result( if isinstance(approved, SyftError): return approved + input_ids = {} + if code.input_policy is not None: + for inps in code.input_policy.inputs.values(): + input_ids.update(inps) + res = api.services.code.apply_output( - user_code_id=code.id, outputs=result, job_id=job.id + user_code_id=code.id, + outputs=result, + job_id=job.id, + input_ids=input_ids, ) if isinstance(res, SyftError): return res From 415d5ca2d7bd1508fafbfd154df0a0a978264daa Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Thu, 21 Mar 2024 15:40:09 +0530 Subject: [PATCH 18/24] check for inputs before loading output from cache in user code execution --- .../src/syft/protocol/protocol_version.json | 2 +- .../syft/service/code/user_code_service.py | 25 +++++++++++-------- .../src/syft/service/output/output_service.py | 24 ++++++++++++++++++ 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/packages/syft/src/syft/protocol/protocol_version.json b/packages/syft/src/syft/protocol/protocol_version.json index 3c29112d00b..bed58fa0a4c 100644 --- a/packages/syft/src/syft/protocol/protocol_version.json +++ b/packages/syft/src/syft/protocol/protocol_version.json @@ -659,7 +659,7 @@ }, "2": { "version": 2, - "hash": "6cd89ed24027ed94b3e2bb7a07e8932060e07e481ceb35eb7ee4d2d0b6e34f43", + "hash": "bc4bbe67d75d5214e79ff57077dac5762bba98760e152f9613a4f8975488d960", "action": "add" } }, diff --git a/packages/syft/src/syft/service/code/user_code_service.py b/packages/syft/src/syft/service/code/user_code_service.py index b174fd92444..2febdfc8d4d 100644 --- a/packages/syft/src/syft/service/code/user_code_service.py +++ b/packages/syft/src/syft/service/code/user_code_service.py @@ -413,16 +413,7 @@ def _call( # Extract ids from kwargs kwarg2id = map_kwargs_to_id(kwargs) - # Check input policy input_policy = code.get_input_policy(context) - if not override_execution_permission and input_policy is not None: - inputs_allowed = input_policy._is_valid( - context, - usr_input_kwargs=kwarg2id, - code_item_id=code.id, - ) - if inputs_allowed.is_err(): - return inputs_allowed # Check output policy output_policy = code.get_output_policy(context) @@ -442,9 +433,23 @@ def _call( ) if not (is_valid := output_policy._is_valid(context)): # type: ignore if len(output_history) > 0 and not skip_read_cache: + last_executed_output = output_history[-1] + # Check if the inputs of the last executed output match + # against the current input + if not last_executed_output.check_input_ids( + kwargs=kwarg2id + ): + inp_policy_validation = input_policy._is_valid( + context, + usr_input_kwargs=kwarg2id, + code_item_id=code.id, + ) + if inp_policy_validation.is_err(): + return inp_policy_validation + result: Result[ActionObject, str] = resolve_outputs( context=context, - output_ids=output_history[-1].output_ids, + output_ids=last_executed_output.output_ids, ) if result.is_err(): return result diff --git a/packages/syft/src/syft/service/output/output_service.py b/packages/syft/src/syft/service/output/output_service.py index e01e6a3acb4..3e8ed9e8ffd 100644 --- a/packages/syft/src/syft/service/output/output_service.py +++ b/packages/syft/src/syft/service/output/output_service.py @@ -145,6 +145,30 @@ def output_id_list(self) -> list[UID]: return ids return [] + @property + def input_id_list(self) -> list[UID]: + ids = self.input_ids + if isinstance(ids, dict): + return list(ids.values()) + return [] + + def check_input_ids(self, kwargs: dict[str, UID]) -> bool: + """ + Checks the input IDs against the stored input IDs. + + Args: + kwargs (dict[str, UID]): A dictionary containing the input IDs to be checked. + + Returns: + bool: True if the input IDs are valid, False otherwise. + """ + if not self.input_ids: + return True + for key, value in kwargs.items(): # Iterate over items of kwargs dictionary + if key not in self.input_ids or self.input_ids[key] != value: + return False + return True + @property def job_id(self) -> UID | None: return self.job_link.object_uid if self.job_link else None From e9cebfdce4246c32af00e830df5fe1620e6cee34 Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Thu, 21 Mar 2024 15:48:00 +0530 Subject: [PATCH 19/24] update test to validate results are cached --- packages/syft/tests/syft/users/user_code_test.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/syft/tests/syft/users/user_code_test.py b/packages/syft/tests/syft/users/user_code_test.py index 5703703515c..20d7bc50df4 100644 --- a/packages/syft/tests/syft/users/user_code_test.py +++ b/packages/syft/tests/syft/users/user_code_test.py @@ -60,6 +60,12 @@ def test_user_code(worker) -> None: real_result = result.get() assert isinstance(real_result, int) + # Validate that the result is cached + for _ in range(10): + multi_call_res = guest_client.api.services.code.mock_syft_func() + assert isinstance(result, ActionObject) + assert multi_call_res.get() == result.get() + def test_duplicated_user_code(worker, guest_client: User) -> None: # mock_syft_func() From 7d83e33702d4e05db7518bb70b54bdaf8a271fb4 Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Thu, 21 Mar 2024 15:59:39 +0530 Subject: [PATCH 20/24] add check in notebook to test for different inputs for given approved function --- .../api/0.8/06-multiple-code-requests.ipynb | 122 ++++++++++++------ 1 file changed, 84 insertions(+), 38 deletions(-) diff --git a/notebooks/api/0.8/06-multiple-code-requests.ipynb b/notebooks/api/0.8/06-multiple-code-requests.ipynb index 750ae7f4e8b..868cb20b91b 100644 --- a/notebooks/api/0.8/06-multiple-code-requests.ipynb +++ b/notebooks/api/0.8/06-multiple-code-requests.ipynb @@ -41,7 +41,7 @@ }, "outputs": [], "source": [ - "node = sy.orchestra.launch(name=\"test-domain-1\", port=\"auto\", dev_mode=True)" + "node = sy.orchestra.launch(name=\"test-domain-1\", port=\"auto\", reset=True, dev_mode=True)" ] }, { @@ -90,18 +90,34 @@ "cell_type": "code", "execution_count": null, "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "dataset2 = sy.Dataset(name=\"My Sample Dataset - II\")\n", + "asset2 = sy.Asset(name=\"Sample Data - II\")\n", + "asset2.set_obj(sample_data * 10)\n", + "asset2.set_mock(mock_sample_data * 10, mock_is_real=False)\n", + "asset2.set_shape(sample_data.shape)\n", + "dataset2.add_asset(asset2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7", "metadata": { "tags": [] }, "outputs": [], "source": [ - "root_client.upload_dataset(dataset)" + "for dset in [dataset, dataset2]:\n", + " root_client.upload_dataset(dset)" ] }, { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "8", "metadata": { "tags": [] }, @@ -120,7 +136,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "9", "metadata": { "tags": [] }, @@ -132,7 +148,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9", + "id": "10", "metadata": { "tags": [] }, @@ -144,7 +160,7 @@ { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -154,11 +170,11 @@ { "cell_type": "code", "execution_count": null, - "id": "11", + "id": "12", "metadata": {}, "outputs": [], "source": [ - "assert len(datasets) == 1\n", + "assert len(datasets) == 2\n", "dataset_ptr = datasets[0]\n", "dataset_ptr" ] @@ -166,7 +182,7 @@ { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "13", "metadata": { "tags": [] }, @@ -199,7 +215,7 @@ { "cell_type": "code", "execution_count": null, - "id": "13", + "id": "14", "metadata": { "tags": [] }, @@ -216,7 +232,7 @@ { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "15", "metadata": { "tags": [] }, @@ -228,7 +244,7 @@ { "cell_type": "code", "execution_count": null, - "id": "15", + "id": "16", "metadata": { "tags": [] }, @@ -242,7 +258,7 @@ { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "17", "metadata": { "tags": [] }, @@ -254,7 +270,7 @@ { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "18", "metadata": { "tags": [] }, @@ -267,7 +283,7 @@ { "cell_type": "code", "execution_count": null, - "id": "18", + "id": "19", "metadata": { "tags": [] }, @@ -300,7 +316,7 @@ { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "20", "metadata": { "tags": [] }, @@ -313,7 +329,7 @@ { "cell_type": "code", "execution_count": null, - "id": "20", + "id": "21", "metadata": { "tags": [] }, @@ -325,7 +341,7 @@ { "cell_type": "code", "execution_count": null, - "id": "21", + "id": "22", "metadata": { "tags": [] }, @@ -338,7 +354,7 @@ { "cell_type": "code", "execution_count": null, - "id": "22", + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -350,7 +366,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23", + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -360,7 +376,7 @@ { "cell_type": "code", "execution_count": null, - "id": "24", + "id": "25", "metadata": { "tags": [] }, @@ -374,7 +390,7 @@ { "cell_type": "code", "execution_count": null, - "id": "25", + "id": "26", "metadata": { "tags": [] }, @@ -386,7 +402,7 @@ { "cell_type": "code", "execution_count": null, - "id": "26", + "id": "27", "metadata": { "tags": [] }, @@ -399,7 +415,7 @@ { "cell_type": "code", "execution_count": null, - "id": "27", + "id": "28", "metadata": { "tags": [] }, @@ -408,16 +424,6 @@ "assert isinstance(request_2, sy.SyftSuccess)" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "28", - "metadata": {}, - "outputs": [], - "source": [ - "ds_client.datasets" - ] - }, { "cell_type": "code", "execution_count": null, @@ -468,6 +474,38 @@ "cell_type": "code", "execution_count": null, "id": "33", + "metadata": {}, + "outputs": [], + "source": [ + "datasets = ds_client.datasets.search(name=\"My Sample Dataset - II\")\n", + "dataset_ptr2 = datasets[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34", + "metadata": {}, + "outputs": [], + "source": [ + "# Validate if input policy is violated\n", + "sum_ptr = ds_client.code.calculate_sum(data=dataset_ptr2.assets[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "35", + "metadata": {}, + "outputs": [], + "source": [ + "assert isinstance(sum_ptr, sy.SyftError), sum_ptr" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36", "metadata": { "tags": [] }, @@ -479,7 +517,7 @@ { "cell_type": "code", "execution_count": null, - "id": "34", + "id": "37", "metadata": { "tags": [] }, @@ -491,7 +529,7 @@ { "cell_type": "code", "execution_count": null, - "id": "35", + "id": "38", "metadata": { "tags": [] }, @@ -503,7 +541,7 @@ { "cell_type": "code", "execution_count": null, - "id": "36", + "id": "39", "metadata": { "tags": [] }, @@ -512,6 +550,14 @@ "if node.node_type.value == \"python\":\n", " node.land()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "40", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -530,7 +576,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.11.5" }, "toc": { "base_numbering": 1, From b146b668beda0119fcbec73a7dfc3b87734266e6 Mon Sep 17 00:00:00 2001 From: Shubham Gupta Date: Thu, 21 Mar 2024 16:13:19 +0530 Subject: [PATCH 21/24] fix return typing for _is_valid - add check for input policy is not None --- packages/syft/src/syft/protocol/protocol_version.json | 2 +- packages/syft/src/syft/service/code/user_code_service.py | 7 +++++-- packages/syft/src/syft/service/policy/policy.py | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/syft/src/syft/protocol/protocol_version.json b/packages/syft/src/syft/protocol/protocol_version.json index bed58fa0a4c..3c29112d00b 100644 --- a/packages/syft/src/syft/protocol/protocol_version.json +++ b/packages/syft/src/syft/protocol/protocol_version.json @@ -659,7 +659,7 @@ }, "2": { "version": 2, - "hash": "bc4bbe67d75d5214e79ff57077dac5762bba98760e152f9613a4f8975488d960", + "hash": "6cd89ed24027ed94b3e2bb7a07e8932060e07e481ceb35eb7ee4d2d0b6e34f43", "action": "add" } }, diff --git a/packages/syft/src/syft/service/code/user_code_service.py b/packages/syft/src/syft/service/code/user_code_service.py index 2febdfc8d4d..f843e446038 100644 --- a/packages/syft/src/syft/service/code/user_code_service.py +++ b/packages/syft/src/syft/service/code/user_code_service.py @@ -436,8 +436,11 @@ def _call( last_executed_output = output_history[-1] # Check if the inputs of the last executed output match # against the current input - if not last_executed_output.check_input_ids( - kwargs=kwarg2id + if ( + input_policy is not None + and not last_executed_output.check_input_ids( + kwargs=kwarg2id + ) ): inp_policy_validation = input_policy._is_valid( context, diff --git a/packages/syft/src/syft/service/policy/policy.py b/packages/syft/src/syft/service/policy/policy.py index 7da9edebb38..95dc78241eb 100644 --- a/packages/syft/src/syft/service/policy/policy.py +++ b/packages/syft/src/syft/service/policy/policy.py @@ -184,7 +184,7 @@ def _is_valid( context: AuthedServiceContext, usr_input_kwargs: dict, code_item_id: UID, - ) -> bool: + ) -> Result[bool, str]: raise NotImplementedError def filter_kwargs( From 95c17b2d0d4d2ab97727315eb1545b3fd74f8fdc Mon Sep 17 00:00:00 2001 From: alfred-openmined-bot <145415986+alfred-openmined-bot@users.noreply.github.com> Date: Thu, 21 Mar 2024 11:16:28 +0000 Subject: [PATCH 22/24] bump protocol and remove notebooks --- .../src/syft/protocol/protocol_version.json | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/syft/src/syft/protocol/protocol_version.json b/packages/syft/src/syft/protocol/protocol_version.json index 3c29112d00b..7d73092daa4 100644 --- a/packages/syft/src/syft/protocol/protocol_version.json +++ b/packages/syft/src/syft/protocol/protocol_version.json @@ -23,7 +23,7 @@ }, "3": { "version": 3, - "hash": "37bb8f0f87b1da2525da8f6873e6257dff4a732f2dba293b62931ad0b85ef9e2", + "hash": "18785a4cce6f25f1900b82f30acb2298b4afeab92bd00d0be358cfbf5a93d97e", "action": "add" } }, @@ -40,7 +40,7 @@ }, "3": { "version": 3, - "hash": "7c55461e3c6ba36ff999c64eb1b97a65b5a1f27193a973b1355ee2675f14c313", + "hash": "4fd4c5b29e395b7a1af3b820166e69af7f267b6e3234fb8329bd0d74adc6e828", "action": "add" } }, @@ -52,7 +52,7 @@ }, "2": { "version": 2, - "hash": "1ab941c7669572a41067a17e0e3f2d9c7056f7a4df8f899e87ae2358d9113b02", + "hash": "1b04f527fdabaf329786b6bb38209f6ca82d622fe691d33c47ed1addccaaac02", "action": "add" } }, @@ -148,7 +148,7 @@ }, "3": { "version": 3, - "hash": "709dc84a946267444a3f9968acf4a5e9807d6aa5143626c3fb635c9282108cc1", + "hash": "5922c1253370861185c53161ad31e488319f46ea5faee2d1802ca94657c428dc", "action": "add" } }, @@ -165,7 +165,7 @@ }, "3": { "version": 3, - "hash": "5e84c9905a1816d51c0dfb1eedbfb4d831095ca6c89956c6fe200c2a193cbb8f", + "hash": "dbb72f43add3141d13a76e18a2a0903a6937966632f0def452ca264f3f70d81b", "action": "add" } }, @@ -182,7 +182,7 @@ }, "3": { "version": 3, - "hash": "bf936c1923ceee4def4cded06d41766998ea472322b0738bade7b85298e469da", + "hash": "cf831130f66f9addf8f68a8c9df0b67775e53322c8a32e8babc7f21631845608", "action": "add" } }, @@ -199,7 +199,7 @@ }, "3": { "version": 3, - "hash": "daf3629fb7d26f41f96cd7f9200d7327a4b74d800b3e02afa75454d11bd47d78", + "hash": "78334b746e5230ac156e47960e91ce449543d1a77a62d9b8be141882e4b549aa", "action": "add" } }, @@ -216,7 +216,7 @@ }, "3": { "version": 3, - "hash": "4747a220d1587e99e6ac076496a2aa7217e2700205ac80fc24fe4768a313da78", + "hash": "0007e86c39ede0f5756ba348083f809c5b6e3bb3a0a9ed6b94570d808467041f", "action": "add" } }, @@ -300,7 +300,7 @@ }, "2": { "version": 2, - "hash": "b35897295822f061fbc70522ca8967cd2be53a5c01b19e24c587cd7b0c4aa3e8", + "hash": "9eaed0a784525dea0018d95de74d70ed212f20f6ead2b50c66e59467c42bbe68", "action": "add" } }, @@ -574,7 +574,7 @@ }, "4": { "version": 4, - "hash": "c37bc1c6303c467050ce4f8faa088a2f66ef1781437ffe34f15aadf5477ac25b", + "hash": "077987cfc94d617f746f27fb468210330c328bad06eee09a89226759e5745a5f", "action": "add" } }, @@ -608,7 +608,7 @@ }, "3": { "version": 3, - "hash": "4159d6ea45bc82577828bc19d668196422ff29bb8cc298b84623e6f4f476aaf3", + "hash": "8a8e721a4ca8aa9107403368851acbe59f8d7bdc1eeff0ff101a44e325a058ff", "action": "add" } }, @@ -630,7 +630,7 @@ }, "4": { "version": 4, - "hash": "dae431b87cadacfd30613519b5dd25d2e4ff59d2a971e21a31d56901103b9420", + "hash": "9b0dd1a64d64b1e824746e93aae0ca14863d2430aea2e2a758945edbfcb79bc9", "action": "add" } }, @@ -1225,7 +1225,7 @@ }, "2": { "version": 2, - "hash": "93c75b45b9b74c69243cc2f2ef2d661e11eef5c23ecf71692ffdbd467d11efe6", + "hash": "747c87b947346fb0fc0466a912e2dc743ee082ef6254079176349d6b63748c32", "action": "add" } }, @@ -1513,7 +1513,7 @@ }, "2": { "version": 2, - "hash": "24b7c302f9821afe073534d4ed02c377bd4f7cb691f66ca92b94c38c92dc78c2", + "hash": "ac452023b98534eb13cb99a86fa7e379c08316353fc0837d1b788e0050e13ab9", "action": "add" } }, @@ -1525,7 +1525,7 @@ }, "2": { "version": 2, - "hash": "6d2e2f64c00dcda74a2545c77abbcf1630c56c26014987038feab174d15bd9d7", + "hash": "c9fdefdc622131c3676243aafadc30b7e67ee155793791bf1000bf742c1a251a", "action": "add" } }, From 0bcf0471865fccc11ac9ce3dc1995b33a9f27829 Mon Sep 17 00:00:00 2001 From: alfred-openmined-bot <145415986+alfred-openmined-bot@users.noreply.github.com> Date: Thu, 21 Mar 2024 15:02:42 +0000 Subject: [PATCH 23/24] [syft]bump version --- .bumpversion.cfg | 2 +- VERSION | 2 +- packages/grid/VERSION | 2 +- packages/grid/backend/worker_cpu.dockerfile | 2 +- packages/grid/devspace.yaml | 2 +- packages/grid/frontend/package.json | 2 +- packages/grid/helm/repo/index.yaml | 157 ++++++++++-------- .../grid/helm/repo/syft-0.8.5-beta.10.tgz | Bin 0 -> 20759 bytes packages/grid/helm/syft/Chart.yaml | 4 +- packages/grid/helm/syft/templates/NOTES.txt | 2 +- packages/grid/helm/syft/values.yaml | 2 +- .../podman-kube/podman-syft-kube-config.yaml | 2 +- .../podman/podman-kube/podman-syft-kube.yaml | 4 +- packages/hagrid/hagrid/deps.py | 2 +- packages/hagrid/hagrid/manifest_template.yml | 6 +- packages/syft/setup.cfg | 2 +- packages/syft/src/syft/VERSION | 2 +- packages/syft/src/syft/__init__.py | 2 +- .../src/syft/protocol/protocol_version.json | 30 ++-- packages/syftcli/manifest.yml | 8 +- 20 files changed, 124 insertions(+), 111 deletions(-) create mode 100644 packages/grid/helm/repo/syft-0.8.5-beta.10.tgz diff --git a/.bumpversion.cfg b/.bumpversion.cfg index b05f90042b4..f2017a5fea8 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.8.5-beta.9 +current_version = 0.8.5-beta.10 tag = False tag_name = {new_version} commit = True diff --git a/VERSION b/VERSION index 89e9dc41ee9..7e223c385b9 100644 --- a/VERSION +++ b/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.8.5-beta.9" +__version__ = "0.8.5-beta.10" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/packages/grid/VERSION b/packages/grid/VERSION index 384b842bcb3..3a6b1b83053 100644 --- a/packages/grid/VERSION +++ b/packages/grid/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.8.5-beta.9" +__version__ = "0.8.5-beta.10" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/packages/grid/backend/worker_cpu.dockerfile b/packages/grid/backend/worker_cpu.dockerfile index 2c859f30676..25817600671 100644 --- a/packages/grid/backend/worker_cpu.dockerfile +++ b/packages/grid/backend/worker_cpu.dockerfile @@ -9,7 +9,7 @@ # Later we'd want to uninstall old python, and then install a new python runtime... # ... but pre-built syft deps may break! -ARG SYFT_VERSION_TAG="0.8.5-beta.9" +ARG SYFT_VERSION_TAG="0.8.5-beta.10" FROM openmined/grid-backend:${SYFT_VERSION_TAG} ARG PYTHON_VERSION="3.12" diff --git a/packages/grid/devspace.yaml b/packages/grid/devspace.yaml index a03eb00ab9c..8624875b09f 100644 --- a/packages/grid/devspace.yaml +++ b/packages/grid/devspace.yaml @@ -25,7 +25,7 @@ vars: DEVSPACE_ENV_FILE: "default.env" CONTAINER_REGISTRY: "docker.io" NODE_NAME: "mynode" - VERSION: "0.8.5-beta.9" + VERSION: "0.8.5-beta.10" # This is a list of `images` that DevSpace can build for this project # We recommend to skip image building during development (devspace dev) as much as possible diff --git a/packages/grid/frontend/package.json b/packages/grid/frontend/package.json index fac449295a7..3c6c53e5797 100644 --- a/packages/grid/frontend/package.json +++ b/packages/grid/frontend/package.json @@ -1,6 +1,6 @@ { "name": "pygrid-ui", - "version": "0.8.5-beta.9", + "version": "0.8.5-beta.10", "private": true, "scripts": { "dev": "pnpm i && vite dev --host --port 80", diff --git a/packages/grid/helm/repo/index.yaml b/packages/grid/helm/repo/index.yaml index 5d3627d58ae..1532760978d 100644 --- a/packages/grid/helm/repo/index.yaml +++ b/packages/grid/helm/repo/index.yaml @@ -1,9 +1,22 @@ apiVersion: v1 entries: syft: + - apiVersion: v2 + appVersion: 0.8.5-beta.10 + created: "2024-03-21T15:00:20.222095749Z" + description: Perform numpy-like analysis on data that remains in someone elses + server + digest: 9cfe01e8f57eca462261a24a805b41509be2de9a0fee76e331d124ed98c4bc49 + home: https://github.com/OpenMined/PySyft/ + icon: https://raw.githubusercontent.com/OpenMined/PySyft/dev/docs/img/title_syft_light.png + name: syft + type: application + urls: + - https://openmined.github.io/PySyft/helm/syft-0.8.5-beta.10.tgz + version: 0.8.5-beta.10 - apiVersion: v2 appVersion: 0.8.5-beta.9 - created: "2024-03-18T06:45:00.093658129Z" + created: "2024-03-21T15:00:20.228932758Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 057f1733f2bc966e15618f62629315c8207773ef6211c79c4feb557dae15c32b @@ -16,7 +29,7 @@ entries: version: 0.8.5-beta.9 - apiVersion: v2 appVersion: 0.8.5-beta.8 - created: "2024-03-18T06:45:00.092852802Z" + created: "2024-03-21T15:00:20.228179463Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 921cbce836c3032ef62b48cc82b5b4fcbe44fb81d473cf4d69a4bf0f806eb298 @@ -29,7 +42,7 @@ entries: version: 0.8.5-beta.8 - apiVersion: v2 appVersion: 0.8.5-beta.7 - created: "2024-03-18T06:45:00.091404602Z" + created: "2024-03-21T15:00:20.227422221Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 75482e955b2b9853a80bd653afb1d56535f78f3bfb7726798522307eb3effbbd @@ -42,7 +55,7 @@ entries: version: 0.8.5-beta.7 - apiVersion: v2 appVersion: 0.8.5-beta.6 - created: "2024-03-18T06:45:00.09065511Z" + created: "2024-03-21T15:00:20.226000452Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 6a2dfaf65ca855e1b3d7b966d4ff291e6fcbe761e2fc2a78033211ccd3a75de0 @@ -55,7 +68,7 @@ entries: version: 0.8.5-beta.6 - apiVersion: v2 appVersion: 0.8.5-beta.5 - created: "2024-03-18T06:45:00.089881312Z" + created: "2024-03-21T15:00:20.22516844Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: fead03823bef04d66901d563aa755c68ab277f72b126aaa6f0dce76a6f3bdb6d @@ -68,7 +81,7 @@ entries: version: 0.8.5-beta.5 - apiVersion: v2 appVersion: 0.8.5-beta.4 - created: "2024-03-18T06:45:00.089125819Z" + created: "2024-03-21T15:00:20.224413643Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 93e4539d5726a7fd0d6a3e93d1c17c6a358a923ddc01d102eab22f37377502ab @@ -81,7 +94,7 @@ entries: version: 0.8.5-beta.4 - apiVersion: v2 appVersion: 0.8.5-beta.3 - created: "2024-03-18T06:45:00.088342233Z" + created: "2024-03-21T15:00:20.223612789Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: f91e9390edf3441469048f5da646099af98f8b6d199409d0e2c1e6da3a51f054 @@ -94,7 +107,7 @@ entries: version: 0.8.5-beta.3 - apiVersion: v2 appVersion: 0.8.5-beta.2 - created: "2024-03-18T06:45:00.087573506Z" + created: "2024-03-21T15:00:20.22286839Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 59159c3aa4888038edc3c0135c83402363d7a0639fe62966a1e9d4928a364fa8 @@ -107,7 +120,7 @@ entries: version: 0.8.5-beta.2 - apiVersion: v2 appVersion: 0.8.5-beta.1 - created: "2024-03-18T06:45:00.086811641Z" + created: "2024-03-21T15:00:20.221280499Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 65aeb74c52ed8ba5474af500b4c1188a570ee4cb1f2a2da356b3488d28356ed9 @@ -119,7 +132,7 @@ entries: version: 0.8.5-beta.1 - apiVersion: v2 appVersion: 0.8.4 - created: "2024-03-18T06:45:00.086392947Z" + created: "2024-03-21T15:00:20.220902524Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 08afea8e3a9eef225b7e611f0bc1216c140053ef8e51439b02337faeac621fd0 @@ -131,7 +144,7 @@ entries: version: 0.8.4 - apiVersion: v2 appVersion: 0.8.4-beta.31 - created: "2024-03-18T06:45:00.083232335Z" + created: "2024-03-21T15:00:20.217749079Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: fabf3e2f37e53fa623f5d3d99b00feae06e278e5cd63bce419089946312ab1fc @@ -143,7 +156,7 @@ entries: version: 0.8.4-beta.31 - apiVersion: v2 appVersion: 0.8.4-beta.30 - created: "2024-03-18T06:45:00.082831405Z" + created: "2024-03-21T15:00:20.217313116Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 6e8f792709f73ec14eab48a268bdf50a4505b340bd142cddd7c7bfffd94009ad @@ -155,7 +168,7 @@ entries: version: 0.8.4-beta.30 - apiVersion: v2 appVersion: 0.8.4-beta.29 - created: "2024-03-18T06:45:00.082010139Z" + created: "2024-03-21T15:00:20.216572915Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 4c985d6a9b3456769c4013f9e85e7374c0f963d2d27627e61f914f5537de1971 @@ -167,7 +180,7 @@ entries: version: 0.8.4-beta.29 - apiVersion: v2 appVersion: 0.8.4-beta.28 - created: "2024-03-18T06:45:00.081610241Z" + created: "2024-03-21T15:00:20.216175785Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: bd2aa3c92c768c47c502e31a326f341addcb34e64d22cdcbf5cc3f19689d859c @@ -179,7 +192,7 @@ entries: version: 0.8.4-beta.28 - apiVersion: v2 appVersion: 0.8.4-beta.27 - created: "2024-03-18T06:45:00.081212608Z" + created: "2024-03-21T15:00:20.215773945Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: e8ad0869993af39d7adda8cb868dc0b24cfb63b4bb9820dc579939c1007a60ba @@ -191,7 +204,7 @@ entries: version: 0.8.4-beta.27 - apiVersion: v2 appVersion: 0.8.4-beta.26 - created: "2024-03-18T06:45:00.080810375Z" + created: "2024-03-21T15:00:20.215370693Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 30dccf630aa25a86a03c67572fe5411687d8ce6d58def448ea10efdba2b85e3a @@ -203,7 +216,7 @@ entries: version: 0.8.4-beta.26 - apiVersion: v2 appVersion: 0.8.4-beta.25 - created: "2024-03-18T06:45:00.080402933Z" + created: "2024-03-21T15:00:20.214958544Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: b6e2043bcf5a0335967d770c7939f5a7832955359a7d871c90b265660ff26e5f @@ -215,7 +228,7 @@ entries: version: 0.8.4-beta.25 - apiVersion: v2 appVersion: 0.8.4-beta.24 - created: "2024-03-18T06:45:00.079991824Z" + created: "2024-03-21T15:00:20.214533872Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: b19efa95394d50bb8d76da6ec306de5d3bb9ea55371fafea95a1282a697fa33e @@ -227,7 +240,7 @@ entries: version: 0.8.4-beta.24 - apiVersion: v2 appVersion: 0.8.4-beta.23 - created: "2024-03-18T06:45:00.079559104Z" + created: "2024-03-21T15:00:20.214110573Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 5c5d05c15bff548574896118ce92335ae10c5b78f5307fe9b2618e5a5aa71a5c @@ -239,7 +252,7 @@ entries: version: 0.8.4-beta.23 - apiVersion: v2 appVersion: 0.8.4-beta.22 - created: "2024-03-18T06:45:00.078779838Z" + created: "2024-03-21T15:00:20.213604048Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 0160dbce938198132ca9cd2a5cb362816344687291f5b6d7cf6de8f2855e9414 @@ -251,7 +264,7 @@ entries: version: 0.8.4-beta.22 - apiVersion: v2 appVersion: 0.8.4-beta.21 - created: "2024-03-18T06:45:00.077924749Z" + created: "2024-03-21T15:00:20.212845636Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 7dce153d2fcae7513e9c132e139b2721fd975ea3cc43a370e34dbeb2a1b7f683 @@ -263,7 +276,7 @@ entries: version: 0.8.4-beta.21 - apiVersion: v2 appVersion: 0.8.4-beta.20 - created: "2024-03-18T06:45:00.077516425Z" + created: "2024-03-21T15:00:20.211987616Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: c51189a187bbf24135382e25cb00964e0330dfcd3b2f0c884581a6686f05dd28 @@ -275,7 +288,7 @@ entries: version: 0.8.4-beta.20 - apiVersion: v2 appVersion: 0.8.4-beta.19 - created: "2024-03-18T06:45:00.076539929Z" + created: "2024-03-21T15:00:20.211025982Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 8219575dedb42fa2ddbf2768a4e9afbfacbc2dff7e953d77c7b10a41b78dc687 @@ -287,7 +300,7 @@ entries: version: 0.8.4-beta.19 - apiVersion: v2 appVersion: 0.8.4-beta.18 - created: "2024-03-18T06:45:00.076146062Z" + created: "2024-03-21T15:00:20.210629462Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 6418cde559cf12f1f7fea5a2b123bba950e50eeb3be002441827d2ab7f9e4ef7 @@ -299,7 +312,7 @@ entries: version: 0.8.4-beta.18 - apiVersion: v2 appVersion: 0.8.4-beta.17 - created: "2024-03-18T06:45:00.075743018Z" + created: "2024-03-21T15:00:20.21023145Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 71b39c5a4c64037eadbb154f7029282ba90d9a0d703f8d4c7dfc1ba2f5d81498 @@ -311,7 +324,7 @@ entries: version: 0.8.4-beta.17 - apiVersion: v2 appVersion: 0.8.4-beta.16 - created: "2024-03-18T06:45:00.075308245Z" + created: "2024-03-21T15:00:20.209822517Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 9c9840a7c9476dbb08e0ac83926330718fe50c89879752dd8f92712b036109c0 @@ -323,7 +336,7 @@ entries: version: 0.8.4-beta.16 - apiVersion: v2 appVersion: 0.8.4-beta.15 - created: "2024-03-18T06:45:00.074635476Z" + created: "2024-03-21T15:00:20.209371426Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 0955fd22da028315e30c68132cbfa4bdc82bae622039bcfce0de339707bb82eb @@ -335,7 +348,7 @@ entries: version: 0.8.4-beta.15 - apiVersion: v2 appVersion: 0.8.4-beta.14 - created: "2024-03-18T06:45:00.073825221Z" + created: "2024-03-21T15:00:20.208975868Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 56208571956abe20ed7a5cc1867cab2667ed792c63e53d0e8bb70a9b438b7bf6 @@ -347,7 +360,7 @@ entries: version: 0.8.4-beta.14 - apiVersion: v2 appVersion: 0.8.4-beta.13 - created: "2024-03-18T06:45:00.073159866Z" + created: "2024-03-21T15:00:20.208629121Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: d7222c72412b6ee5833fbb07d2549be179cdfc7ccd89e0ad947d112fce799b83 @@ -359,7 +372,7 @@ entries: version: 0.8.4-beta.13 - apiVersion: v2 appVersion: 0.8.4-beta.12 - created: "2024-03-18T06:45:00.072485514Z" + created: "2024-03-21T15:00:20.208282234Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: af08c723756e397962b2d5190dedfd50797b771c5caf58b93a6f65d8fa24785c @@ -371,7 +384,7 @@ entries: version: 0.8.4-beta.12 - apiVersion: v2 appVersion: 0.8.4-beta.11 - created: "2024-03-18T06:45:00.071834006Z" + created: "2024-03-21T15:00:20.2079366Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: a0235835ba57d185a83dd8a26281fa37b2077c3a37fe3a1c50585005695927e3 @@ -383,7 +396,7 @@ entries: version: 0.8.4-beta.11 - apiVersion: v2 appVersion: 0.8.4-beta.10 - created: "2024-03-18T06:45:00.07089251Z" + created: "2024-03-21T15:00:20.207586717Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 910ddfeba0c5e66651500dd11404afff092adc0f768ed68e0d93b04b83aa4388 @@ -395,7 +408,7 @@ entries: version: 0.8.4-beta.10 - apiVersion: v2 appVersion: 0.8.4-beta.9 - created: "2024-03-18T06:45:00.085950099Z" + created: "2024-03-21T15:00:20.220485005Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: c25ca8a9f072d6a5d02232448deaef5668aca05f24dfffbba3ebe30a4f75bb26 @@ -407,7 +420,7 @@ entries: version: 0.8.4-beta.9 - apiVersion: v2 appVersion: 0.8.4-beta.8 - created: "2024-03-18T06:45:00.085188244Z" + created: "2024-03-21T15:00:20.220102872Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 7249a39d4137e457b369384ba0a365c271c780d93a8327ce25083df763c39999 @@ -419,7 +432,7 @@ entries: version: 0.8.4-beta.8 - apiVersion: v2 appVersion: 0.8.4-beta.7 - created: "2024-03-18T06:45:00.084561812Z" + created: "2024-03-21T15:00:20.219508581Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: ee750c7c8d6ea05bd447375e624fdd7f66dd87680ab81f7b7e73df7379a9024a @@ -431,7 +444,7 @@ entries: version: 0.8.4-beta.7 - apiVersion: v2 appVersion: 0.8.4-beta.6 - created: "2024-03-18T06:45:00.084235302Z" + created: "2024-03-21T15:00:20.218752641Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 0e046be9f73df7444a995608c59af16fab9030b139b2acb4d6db6185b8eb5337 @@ -443,7 +456,7 @@ entries: version: 0.8.4-beta.6 - apiVersion: v2 appVersion: 0.8.4-beta.5 - created: "2024-03-18T06:45:00.083907057Z" + created: "2024-03-21T15:00:20.218417015Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: b56e9a23d46810eccdb4cf5272cc05126da3f6db314e541959c3efb5f260620b @@ -455,7 +468,7 @@ entries: version: 0.8.4-beta.5 - apiVersion: v2 appVersion: 0.8.4-beta.4 - created: "2024-03-18T06:45:00.083578363Z" + created: "2024-03-21T15:00:20.218084014Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: 1d5808ecaf55391f3b27ae6236400066508acbd242e33db24a1ab4bffa77409e @@ -467,7 +480,7 @@ entries: version: 0.8.4-beta.4 - apiVersion: v2 appVersion: 0.8.4-beta.3 - created: "2024-03-18T06:45:00.08239541Z" + created: "2024-03-21T15:00:20.216910976Z" description: Perform numpy-like analysis on data that remains in someone elses server digest: b64efa8529d82be56c6ab60487ed24420a5614d96d2509c1f93c1003eda71a54 @@ -479,7 +492,7 @@ entries: version: 0.8.4-beta.3 - apiVersion: v2 appVersion: 0.8.4-beta.2 - created: "2024-03-18T06:45:00.07710195Z" + created: "2024-03-21T15:00:20.211575778Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -495,7 +508,7 @@ entries: version: 0.8.4-beta.2 - apiVersion: v2 appVersion: 0.8.4-beta.1 - created: "2024-03-18T06:45:00.070107121Z" + created: "2024-03-21T15:00:20.207179648Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -511,7 +524,7 @@ entries: version: 0.8.4-beta.1 - apiVersion: v2 appVersion: 0.8.3 - created: "2024-03-18T06:45:00.069563974Z" + created: "2024-03-21T15:00:20.206021034Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -527,7 +540,7 @@ entries: version: 0.8.3 - apiVersion: v2 appVersion: 0.8.3-beta.6 - created: "2024-03-18T06:45:00.068891066Z" + created: "2024-03-21T15:00:20.205337429Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -543,7 +556,7 @@ entries: version: 0.8.3-beta.6 - apiVersion: v2 appVersion: 0.8.3-beta.5 - created: "2024-03-18T06:45:00.068282147Z" + created: "2024-03-21T15:00:20.204768618Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -559,7 +572,7 @@ entries: version: 0.8.3-beta.5 - apiVersion: v2 appVersion: 0.8.3-beta.4 - created: "2024-03-18T06:45:00.067703124Z" + created: "2024-03-21T15:00:20.204198835Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -575,7 +588,7 @@ entries: version: 0.8.3-beta.4 - apiVersion: v2 appVersion: 0.8.3-beta.3 - created: "2024-03-18T06:45:00.067043941Z" + created: "2024-03-21T15:00:20.203497357Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -591,7 +604,7 @@ entries: version: 0.8.3-beta.3 - apiVersion: v2 appVersion: 0.8.3-beta.2 - created: "2024-03-18T06:45:00.066452575Z" + created: "2024-03-21T15:00:20.202958973Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -607,7 +620,7 @@ entries: version: 0.8.3-beta.2 - apiVersion: v2 appVersion: 0.8.3-beta.1 - created: "2024-03-18T06:45:00.065887718Z" + created: "2024-03-21T15:00:20.202400802Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -623,7 +636,7 @@ entries: version: 0.8.3-beta.1 - apiVersion: v2 appVersion: 0.8.2 - created: "2024-03-18T06:45:00.065045453Z" + created: "2024-03-21T15:00:20.201831791Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -639,7 +652,7 @@ entries: version: 0.8.2 - apiVersion: v2 appVersion: 0.8.2-beta.60 - created: "2024-03-18T06:45:00.06388954Z" + created: "2024-03-21T15:00:20.200428085Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -655,7 +668,7 @@ entries: version: 0.8.2-beta.60 - apiVersion: v2 appVersion: 0.8.2-beta.59 - created: "2024-03-18T06:45:00.063260423Z" + created: "2024-03-21T15:00:20.199753116Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -671,7 +684,7 @@ entries: version: 0.8.2-beta.59 - apiVersion: v2 appVersion: 0.8.2-beta.58 - created: "2024-03-18T06:45:00.062614505Z" + created: "2024-03-21T15:00:20.199123161Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -687,7 +700,7 @@ entries: version: 0.8.2-beta.58 - apiVersion: v2 appVersion: 0.8.2-beta.57 - created: "2024-03-18T06:45:00.061942157Z" + created: "2024-03-21T15:00:20.198472026Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -703,7 +716,7 @@ entries: version: 0.8.2-beta.57 - apiVersion: v2 appVersion: 0.8.2-beta.56 - created: "2024-03-18T06:45:00.061312359Z" + created: "2024-03-21T15:00:20.197838295Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -719,7 +732,7 @@ entries: version: 0.8.2-beta.56 - apiVersion: v2 appVersion: 0.8.2-beta.53 - created: "2024-03-18T06:45:00.06067629Z" + created: "2024-03-21T15:00:20.197165149Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -735,7 +748,7 @@ entries: version: 0.8.2-beta.53 - apiVersion: v2 appVersion: 0.8.2-beta.52 - created: "2024-03-18T06:45:00.060027977Z" + created: "2024-03-21T15:00:20.196519956Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -751,7 +764,7 @@ entries: version: 0.8.2-beta.52 - apiVersion: v2 appVersion: 0.8.2-beta.51 - created: "2024-03-18T06:45:00.059062379Z" + created: "2024-03-21T15:00:20.195855266Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -767,7 +780,7 @@ entries: version: 0.8.2-beta.51 - apiVersion: v2 appVersion: 0.8.2-beta.50 - created: "2024-03-18T06:45:00.058128702Z" + created: "2024-03-21T15:00:20.194420587Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -783,7 +796,7 @@ entries: version: 0.8.2-beta.50 - apiVersion: v2 appVersion: 0.8.2-beta.49 - created: "2024-03-18T06:45:00.057499185Z" + created: "2024-03-21T15:00:20.193778318Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -799,7 +812,7 @@ entries: version: 0.8.2-beta.49 - apiVersion: v2 appVersion: 0.8.2-beta.48 - created: "2024-03-18T06:45:00.056859278Z" + created: "2024-03-21T15:00:20.193098581Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -815,7 +828,7 @@ entries: version: 0.8.2-beta.48 - apiVersion: v2 appVersion: 0.8.2-beta.47 - created: "2024-03-18T06:45:00.056223188Z" + created: "2024-03-21T15:00:20.192455351Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -831,7 +844,7 @@ entries: version: 0.8.2-beta.47 - apiVersion: v2 appVersion: 0.8.2-beta.46 - created: "2024-03-18T06:45:00.05542239Z" + created: "2024-03-21T15:00:20.191899474Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -847,7 +860,7 @@ entries: version: 0.8.2-beta.46 - apiVersion: v2 appVersion: 0.8.2-beta.45 - created: "2024-03-18T06:45:00.05482359Z" + created: "2024-03-21T15:00:20.191335162Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -863,7 +876,7 @@ entries: version: 0.8.2-beta.45 - apiVersion: v2 appVersion: 0.8.2-beta.44 - created: "2024-03-18T06:45:00.05420856Z" + created: "2024-03-21T15:00:20.190762945Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -879,7 +892,7 @@ entries: version: 0.8.2-beta.44 - apiVersion: v2 appVersion: 0.8.2-beta.43 - created: "2024-03-18T06:45:00.053526184Z" + created: "2024-03-21T15:00:20.190159349Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -895,7 +908,7 @@ entries: version: 0.8.2-beta.43 - apiVersion: v2 appVersion: 0.8.2-beta.41 - created: "2024-03-18T06:45:00.05216895Z" + created: "2024-03-21T15:00:20.188907875Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -911,7 +924,7 @@ entries: version: 0.8.2-beta.41 - apiVersion: v2 appVersion: 0.8.2-beta.40 - created: "2024-03-18T06:45:00.051517321Z" + created: "2024-03-21T15:00:20.187856834Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -927,7 +940,7 @@ entries: version: 0.8.2-beta.40 - apiVersion: v2 appVersion: 0.8.2-beta.39 - created: "2024-03-18T06:45:00.050946964Z" + created: "2024-03-21T15:00:20.187315916Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -943,7 +956,7 @@ entries: version: 0.8.2-beta.39 - apiVersion: v2 appVersion: 0.8.2-beta.38 - created: "2024-03-18T06:45:00.050355949Z" + created: "2024-03-21T15:00:20.186759839Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -959,7 +972,7 @@ entries: version: 0.8.2-beta.38 - apiVersion: v2 appVersion: 0.8.2-beta.37 - created: "2024-03-18T06:45:00.049783638Z" + created: "2024-03-21T15:00:20.186183564Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -975,7 +988,7 @@ entries: version: 0.8.2-beta.37 - apiVersion: v2 appVersion: 0.8.1 - created: "2024-03-18T06:45:00.049190198Z" + created: "2024-03-21T15:00:20.185566663Z" dependencies: - name: component-chart repository: https://charts.devspace.sh @@ -989,4 +1002,4 @@ entries: urls: - https://openmined.github.io/PySyft/helm/syft-0.8.1.tgz version: 0.8.1 -generated: "2024-03-18T06:45:00.048477024Z" +generated: "2024-03-21T15:00:20.184822705Z" diff --git a/packages/grid/helm/repo/syft-0.8.5-beta.10.tgz b/packages/grid/helm/repo/syft-0.8.5-beta.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..28a2949e2309dfd4711ba23ad5ff0368d33ed84c GIT binary patch literal 20759 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 a*|&COS9axlF8@CO0RR6$1SARoya50S>)qG@ literal 0 HcmV?d00001 diff --git a/packages/grid/helm/syft/Chart.yaml b/packages/grid/helm/syft/Chart.yaml index dc28fcd8abe..88753c6c4e1 100644 --- a/packages/grid/helm/syft/Chart.yaml +++ b/packages/grid/helm/syft/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: syft description: Perform numpy-like analysis on data that remains in someone elses server type: application -version: "0.8.5-beta.9" -appVersion: "0.8.5-beta.9" +version: "0.8.5-beta.10" +appVersion: "0.8.5-beta.10" home: https://github.com/OpenMined/PySyft/ icon: https://raw.githubusercontent.com/OpenMined/PySyft/dev/docs/img/title_syft_light.png diff --git a/packages/grid/helm/syft/templates/NOTES.txt b/packages/grid/helm/syft/templates/NOTES.txt index 3f985bcdcfe..a1eec6fe2f0 100644 --- a/packages/grid/helm/syft/templates/NOTES.txt +++ b/packages/grid/helm/syft/templates/NOTES.txt @@ -71,7 +71,7 @@ "ExecutionOutput": { "1": { "version": 1, - "hash": "abb4ce9172fbba0ea03fcbea7addb06176c8dba6dbcb7143cde350617528a5b7", + "hash": "201c8abcb6595a64140ad0c3b058557229c7790a25fb55ed229ae0efcb63ad07", "action": "add" } }, diff --git a/packages/grid/helm/syft/values.yaml b/packages/grid/helm/syft/values.yaml index a53e5b3cf1e..7625c9be08e 100644 --- a/packages/grid/helm/syft/values.yaml +++ b/packages/grid/helm/syft/values.yaml @@ -1,7 +1,7 @@ global: # Affects only backend, frontend, and seaweedfs containers registry: docker.io - version: 0.8.5-beta.9 + version: 0.8.5-beta.10 # Force default secret values for development. DO NOT SET THIS TO FALSE IN PRODUCTION randomizedSecrets: true diff --git a/packages/grid/podman/podman-kube/podman-syft-kube-config.yaml b/packages/grid/podman/podman-kube/podman-syft-kube-config.yaml index 465bcf58499..0d1612eec58 100644 --- a/packages/grid/podman/podman-kube/podman-syft-kube-config.yaml +++ b/packages/grid/podman/podman-kube/podman-syft-kube-config.yaml @@ -31,7 +31,7 @@ data: RABBITMQ_VERSION: 3 SEAWEEDFS_VERSION: 3.59 DOCKER_IMAGE_SEAWEEDFS: chrislusf/seaweedfs:3.55 - VERSION: 0.8.5-beta.9 + VERSION: 0.8.5-beta.10 VERSION_HASH: unknown STACK_API_KEY: "" diff --git a/packages/grid/podman/podman-kube/podman-syft-kube.yaml b/packages/grid/podman/podman-kube/podman-syft-kube.yaml index 394724ed21a..418eaca3bc2 100644 --- a/packages/grid/podman/podman-kube/podman-syft-kube.yaml +++ b/packages/grid/podman/podman-kube/podman-syft-kube.yaml @@ -41,7 +41,7 @@ spec: - configMapRef: name: podman-syft-config - image: docker.io/openmined/grid-backend:0.8.5-beta.9 + image: docker.io/openmined/grid-backend:0.8.5-beta.10 imagePullPolicy: IfNotPresent resources: {} tty: true @@ -57,7 +57,7 @@ spec: envFrom: - configMapRef: name: podman-syft-config - image: docker.io/openmined/grid-frontend:0.8.5-beta.9 + image: docker.io/openmined/grid-frontend:0.8.5-beta.10 imagePullPolicy: IfNotPresent resources: {} tty: true diff --git a/packages/hagrid/hagrid/deps.py b/packages/hagrid/hagrid/deps.py index f650f957abb..3b6a1a657ad 100644 --- a/packages/hagrid/hagrid/deps.py +++ b/packages/hagrid/hagrid/deps.py @@ -36,7 +36,7 @@ from .nb_output import NBOutput from .version import __version__ -LATEST_BETA_SYFT = "0.8.5-beta.9" +LATEST_BETA_SYFT = "0.8.5-beta.10" DOCKER_ERROR = """ You are running an old version of docker, possibly on Linux. You need to install v2. diff --git a/packages/hagrid/hagrid/manifest_template.yml b/packages/hagrid/hagrid/manifest_template.yml index 61082ac533c..a6facca1628 100644 --- a/packages/hagrid/hagrid/manifest_template.yml +++ b/packages/hagrid/hagrid/manifest_template.yml @@ -1,9 +1,9 @@ manifestVersion: 0.1 hagrid_version: 0.3.112 -syft_version: 0.8.5-beta.9 -dockerTag: 0.8.5-beta.9 +syft_version: 0.8.5-beta.10 +dockerTag: 0.8.5-beta.10 baseUrl: https://raw.githubusercontent.com/OpenMined/PySyft/ -hash: 32e0f11a572d30d88acf5061daf7c2927ef38d7f +hash: 95c17b2d0d4d2ab97727315eb1545b3fd74f8fdc target_dir: ~/.hagrid/PySyft/ files: grid: diff --git a/packages/syft/setup.cfg b/packages/syft/setup.cfg index 2440172d448..8ab47ba1c43 100644 --- a/packages/syft/setup.cfg +++ b/packages/syft/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = syft -version = attr: "0.8.5-beta.9" +version = attr: "0.8.5-beta.10" description = Perform numpy-like analysis on data that remains in someone elses server author = OpenMined author_email = info@openmined.org diff --git a/packages/syft/src/syft/VERSION b/packages/syft/src/syft/VERSION index 384b842bcb3..3a6b1b83053 100644 --- a/packages/syft/src/syft/VERSION +++ b/packages/syft/src/syft/VERSION @@ -1,5 +1,5 @@ # Mono Repo Global Version -__version__ = "0.8.5-beta.9" +__version__ = "0.8.5-beta.10" # elsewhere we can call this file: `python VERSION` and simply take the stdout # stdlib diff --git a/packages/syft/src/syft/__init__.py b/packages/syft/src/syft/__init__.py index d45e76b755b..eaa749ec91a 100644 --- a/packages/syft/src/syft/__init__.py +++ b/packages/syft/src/syft/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.8.5-beta.9" +__version__ = "0.8.5-beta.10" # stdlib from collections.abc import Callable diff --git a/packages/syft/src/syft/protocol/protocol_version.json b/packages/syft/src/syft/protocol/protocol_version.json index 7d73092daa4..3c29112d00b 100644 --- a/packages/syft/src/syft/protocol/protocol_version.json +++ b/packages/syft/src/syft/protocol/protocol_version.json @@ -23,7 +23,7 @@ }, "3": { "version": 3, - "hash": "18785a4cce6f25f1900b82f30acb2298b4afeab92bd00d0be358cfbf5a93d97e", + "hash": "37bb8f0f87b1da2525da8f6873e6257dff4a732f2dba293b62931ad0b85ef9e2", "action": "add" } }, @@ -40,7 +40,7 @@ }, "3": { "version": 3, - "hash": "4fd4c5b29e395b7a1af3b820166e69af7f267b6e3234fb8329bd0d74adc6e828", + "hash": "7c55461e3c6ba36ff999c64eb1b97a65b5a1f27193a973b1355ee2675f14c313", "action": "add" } }, @@ -52,7 +52,7 @@ }, "2": { "version": 2, - "hash": "1b04f527fdabaf329786b6bb38209f6ca82d622fe691d33c47ed1addccaaac02", + "hash": "1ab941c7669572a41067a17e0e3f2d9c7056f7a4df8f899e87ae2358d9113b02", "action": "add" } }, @@ -148,7 +148,7 @@ }, "3": { "version": 3, - "hash": "5922c1253370861185c53161ad31e488319f46ea5faee2d1802ca94657c428dc", + "hash": "709dc84a946267444a3f9968acf4a5e9807d6aa5143626c3fb635c9282108cc1", "action": "add" } }, @@ -165,7 +165,7 @@ }, "3": { "version": 3, - "hash": "dbb72f43add3141d13a76e18a2a0903a6937966632f0def452ca264f3f70d81b", + "hash": "5e84c9905a1816d51c0dfb1eedbfb4d831095ca6c89956c6fe200c2a193cbb8f", "action": "add" } }, @@ -182,7 +182,7 @@ }, "3": { "version": 3, - "hash": "cf831130f66f9addf8f68a8c9df0b67775e53322c8a32e8babc7f21631845608", + "hash": "bf936c1923ceee4def4cded06d41766998ea472322b0738bade7b85298e469da", "action": "add" } }, @@ -199,7 +199,7 @@ }, "3": { "version": 3, - "hash": "78334b746e5230ac156e47960e91ce449543d1a77a62d9b8be141882e4b549aa", + "hash": "daf3629fb7d26f41f96cd7f9200d7327a4b74d800b3e02afa75454d11bd47d78", "action": "add" } }, @@ -216,7 +216,7 @@ }, "3": { "version": 3, - "hash": "0007e86c39ede0f5756ba348083f809c5b6e3bb3a0a9ed6b94570d808467041f", + "hash": "4747a220d1587e99e6ac076496a2aa7217e2700205ac80fc24fe4768a313da78", "action": "add" } }, @@ -300,7 +300,7 @@ }, "2": { "version": 2, - "hash": "9eaed0a784525dea0018d95de74d70ed212f20f6ead2b50c66e59467c42bbe68", + "hash": "b35897295822f061fbc70522ca8967cd2be53a5c01b19e24c587cd7b0c4aa3e8", "action": "add" } }, @@ -574,7 +574,7 @@ }, "4": { "version": 4, - "hash": "077987cfc94d617f746f27fb468210330c328bad06eee09a89226759e5745a5f", + "hash": "c37bc1c6303c467050ce4f8faa088a2f66ef1781437ffe34f15aadf5477ac25b", "action": "add" } }, @@ -608,7 +608,7 @@ }, "3": { "version": 3, - "hash": "8a8e721a4ca8aa9107403368851acbe59f8d7bdc1eeff0ff101a44e325a058ff", + "hash": "4159d6ea45bc82577828bc19d668196422ff29bb8cc298b84623e6f4f476aaf3", "action": "add" } }, @@ -630,7 +630,7 @@ }, "4": { "version": 4, - "hash": "9b0dd1a64d64b1e824746e93aae0ca14863d2430aea2e2a758945edbfcb79bc9", + "hash": "dae431b87cadacfd30613519b5dd25d2e4ff59d2a971e21a31d56901103b9420", "action": "add" } }, @@ -1225,7 +1225,7 @@ }, "2": { "version": 2, - "hash": "747c87b947346fb0fc0466a912e2dc743ee082ef6254079176349d6b63748c32", + "hash": "93c75b45b9b74c69243cc2f2ef2d661e11eef5c23ecf71692ffdbd467d11efe6", "action": "add" } }, @@ -1513,7 +1513,7 @@ }, "2": { "version": 2, - "hash": "ac452023b98534eb13cb99a86fa7e379c08316353fc0837d1b788e0050e13ab9", + "hash": "24b7c302f9821afe073534d4ed02c377bd4f7cb691f66ca92b94c38c92dc78c2", "action": "add" } }, @@ -1525,7 +1525,7 @@ }, "2": { "version": 2, - "hash": "c9fdefdc622131c3676243aafadc30b7e67ee155793791bf1000bf742c1a251a", + "hash": "6d2e2f64c00dcda74a2545c77abbcf1630c56c26014987038feab174d15bd9d7", "action": "add" } }, diff --git a/packages/syftcli/manifest.yml b/packages/syftcli/manifest.yml index 09b26153b75..01eed9ddbca 100644 --- a/packages/syftcli/manifest.yml +++ b/packages/syftcli/manifest.yml @@ -1,11 +1,11 @@ manifestVersion: 1.0 -syftVersion: 0.8.5-beta.9 -dockerTag: 0.8.5-beta.9 +syftVersion: 0.8.5-beta.10 +dockerTag: 0.8.5-beta.10 images: - - docker.io/openmined/grid-frontend:0.8.5-beta.9 - - docker.io/openmined/grid-backend:0.8.5-beta.9 + - docker.io/openmined/grid-frontend:0.8.5-beta.10 + - docker.io/openmined/grid-backend:0.8.5-beta.10 - docker.io/library/mongo:7.0.4 - docker.io/traefik:v2.10 From 632a763cf10ab619437606ff0e63420f3efb938b Mon Sep 17 00:00:00 2001 From: alfred-openmined-bot <145415986+alfred-openmined-bot@users.noreply.github.com> Date: Thu, 21 Mar 2024 15:04:42 +0000 Subject: [PATCH 24/24] bump protocol and remove notebooks --- .../src/syft/protocol/protocol_version.json | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/syft/src/syft/protocol/protocol_version.json b/packages/syft/src/syft/protocol/protocol_version.json index 3c29112d00b..7d73092daa4 100644 --- a/packages/syft/src/syft/protocol/protocol_version.json +++ b/packages/syft/src/syft/protocol/protocol_version.json @@ -23,7 +23,7 @@ }, "3": { "version": 3, - "hash": "37bb8f0f87b1da2525da8f6873e6257dff4a732f2dba293b62931ad0b85ef9e2", + "hash": "18785a4cce6f25f1900b82f30acb2298b4afeab92bd00d0be358cfbf5a93d97e", "action": "add" } }, @@ -40,7 +40,7 @@ }, "3": { "version": 3, - "hash": "7c55461e3c6ba36ff999c64eb1b97a65b5a1f27193a973b1355ee2675f14c313", + "hash": "4fd4c5b29e395b7a1af3b820166e69af7f267b6e3234fb8329bd0d74adc6e828", "action": "add" } }, @@ -52,7 +52,7 @@ }, "2": { "version": 2, - "hash": "1ab941c7669572a41067a17e0e3f2d9c7056f7a4df8f899e87ae2358d9113b02", + "hash": "1b04f527fdabaf329786b6bb38209f6ca82d622fe691d33c47ed1addccaaac02", "action": "add" } }, @@ -148,7 +148,7 @@ }, "3": { "version": 3, - "hash": "709dc84a946267444a3f9968acf4a5e9807d6aa5143626c3fb635c9282108cc1", + "hash": "5922c1253370861185c53161ad31e488319f46ea5faee2d1802ca94657c428dc", "action": "add" } }, @@ -165,7 +165,7 @@ }, "3": { "version": 3, - "hash": "5e84c9905a1816d51c0dfb1eedbfb4d831095ca6c89956c6fe200c2a193cbb8f", + "hash": "dbb72f43add3141d13a76e18a2a0903a6937966632f0def452ca264f3f70d81b", "action": "add" } }, @@ -182,7 +182,7 @@ }, "3": { "version": 3, - "hash": "bf936c1923ceee4def4cded06d41766998ea472322b0738bade7b85298e469da", + "hash": "cf831130f66f9addf8f68a8c9df0b67775e53322c8a32e8babc7f21631845608", "action": "add" } }, @@ -199,7 +199,7 @@ }, "3": { "version": 3, - "hash": "daf3629fb7d26f41f96cd7f9200d7327a4b74d800b3e02afa75454d11bd47d78", + "hash": "78334b746e5230ac156e47960e91ce449543d1a77a62d9b8be141882e4b549aa", "action": "add" } }, @@ -216,7 +216,7 @@ }, "3": { "version": 3, - "hash": "4747a220d1587e99e6ac076496a2aa7217e2700205ac80fc24fe4768a313da78", + "hash": "0007e86c39ede0f5756ba348083f809c5b6e3bb3a0a9ed6b94570d808467041f", "action": "add" } }, @@ -300,7 +300,7 @@ }, "2": { "version": 2, - "hash": "b35897295822f061fbc70522ca8967cd2be53a5c01b19e24c587cd7b0c4aa3e8", + "hash": "9eaed0a784525dea0018d95de74d70ed212f20f6ead2b50c66e59467c42bbe68", "action": "add" } }, @@ -574,7 +574,7 @@ }, "4": { "version": 4, - "hash": "c37bc1c6303c467050ce4f8faa088a2f66ef1781437ffe34f15aadf5477ac25b", + "hash": "077987cfc94d617f746f27fb468210330c328bad06eee09a89226759e5745a5f", "action": "add" } }, @@ -608,7 +608,7 @@ }, "3": { "version": 3, - "hash": "4159d6ea45bc82577828bc19d668196422ff29bb8cc298b84623e6f4f476aaf3", + "hash": "8a8e721a4ca8aa9107403368851acbe59f8d7bdc1eeff0ff101a44e325a058ff", "action": "add" } }, @@ -630,7 +630,7 @@ }, "4": { "version": 4, - "hash": "dae431b87cadacfd30613519b5dd25d2e4ff59d2a971e21a31d56901103b9420", + "hash": "9b0dd1a64d64b1e824746e93aae0ca14863d2430aea2e2a758945edbfcb79bc9", "action": "add" } }, @@ -1225,7 +1225,7 @@ }, "2": { "version": 2, - "hash": "93c75b45b9b74c69243cc2f2ef2d661e11eef5c23ecf71692ffdbd467d11efe6", + "hash": "747c87b947346fb0fc0466a912e2dc743ee082ef6254079176349d6b63748c32", "action": "add" } }, @@ -1513,7 +1513,7 @@ }, "2": { "version": 2, - "hash": "24b7c302f9821afe073534d4ed02c377bd4f7cb691f66ca92b94c38c92dc78c2", + "hash": "ac452023b98534eb13cb99a86fa7e379c08316353fc0837d1b788e0050e13ab9", "action": "add" } }, @@ -1525,7 +1525,7 @@ }, "2": { "version": 2, - "hash": "6d2e2f64c00dcda74a2545c77abbcf1630c56c26014987038feab174d15bd9d7", + "hash": "c9fdefdc622131c3676243aafadc30b7e67ee155793791bf1000bf742c1a251a", "action": "add" } },