diff --git a/gigl/src/common/custom_launcher.py b/gigl/src/common/custom_launcher.py new file mode 100644 index 000000000..10c3115e9 --- /dev/null +++ b/gigl/src/common/custom_launcher.py @@ -0,0 +1,96 @@ +"""Subprocess dispatch for ``CustomLauncherConfig``-backed launchers. + +Takes ``CustomLauncherConfig.command`` and ``CustomLauncherConfig.args`` +verbatim and shells out via ``subprocess.run(shell_line, shell=True)``. +The shell-style invocation honors leading ``KEY=VALUE`` env-var +assignments in ``command`` so callers can self-document required env +without forcing the dispatcher to parse env separately. + +The receiving subprocess has no special protocol — it is expected to be +a plain CLI that argparses whatever flags the YAML wires up via +``args[]``. The dispatcher performs no template substitution; any +dynamic content (runtime URIs, image refs, etc.) is the caller's +responsibility — typically resolved at YAML-load time before the +proto reaches this module. +""" + +import shlex +import subprocess +from collections.abc import Mapping +from typing import Optional + +from gigl.common import Uri +from gigl.common.logger import Logger +from gigl.src.common.constants.components import GiGLComponents +from snapchat.research.gbml.gigl_resource_config_pb2 import CustomLauncherConfig + +logger = Logger() + +_LAUNCHABLE_COMPONENTS: frozenset[GiGLComponents] = frozenset( + {GiGLComponents.Trainer, GiGLComponents.Inferencer} +) + + +def launch_custom( + custom_launcher_config: CustomLauncherConfig, + applied_task_identifier: str, + task_config_uri: Uri, + resource_config_uri: Uri, + process_command: str, + process_runtime_args: Mapping[str, str], + cpu_docker_uri: Optional[str], + cuda_docker_uri: Optional[str], + component: GiGLComponents, +) -> None: + """Shell out to ``custom_launcher_config.command`` with ``args[]`` appended. + + Composes a shell line as ``command`` followed by each ``args[]`` + element passed through ``shlex.quote``, then invokes + ``subprocess.run(shell_line, shell=True, check=True)``. + + The dispatcher takes ``command`` and ``args[]`` verbatim — no + template substitution of any kind. Any placeholder text in those + fields reaches ``subprocess.run`` literally; consumers that want + substitution should resolve it at YAML-load time before the proto + reaches this module. + + ``applied_task_identifier``, ``task_config_uri``, + ``resource_config_uri``, ``process_command``, + ``process_runtime_args``, ``cpu_docker_uri``, and ``cuda_docker_uri`` + are accepted for API symmetry with the GLT-side Vertex AI launchers + but are intentionally not plumbed into the subprocess — the + receiving CLI is expected to source whatever context it needs from + the resource config it gets handed (or from env vars inherited from + the parent process). + + Args: + custom_launcher_config: Proto whose ``command`` is the shell + snippet to execute and whose ``args`` are positional + arguments appended verbatim. + applied_task_identifier: Accepted for back-compat; ignored. + task_config_uri: Accepted for back-compat; ignored. + resource_config_uri: Accepted for back-compat; ignored. + process_command: Accepted for back-compat; ignored. + process_runtime_args: Accepted for back-compat; ignored. + cpu_docker_uri: Accepted for back-compat; ignored. + cuda_docker_uri: Accepted for back-compat; ignored. + component: Which GiGL component is being launched. Must be in + ``_LAUNCHABLE_COMPONENTS``. + + Raises: + ValueError: If ``component`` is not Trainer or Inferencer, or if + ``custom_launcher_config.command`` is empty. + subprocess.CalledProcessError: If the spawned subprocess exits + non-zero. + """ + if component not in _LAUNCHABLE_COMPONENTS: + raise ValueError(f"Invalid component: {component}") + if not custom_launcher_config.command: + raise ValueError("CustomLauncherConfig.command must be set") + + command: str = custom_launcher_config.command + args: list[str] = list(custom_launcher_config.args) + + shell_line = " ".join([command, *(shlex.quote(a) for a in args)]) + logger.info(f"Launching {component.name} via subprocess: {shell_line!r}") + subprocess.run(shell_line, shell=True, check=True) diff --git a/gigl/src/common/types/pb_wrappers/gigl_resource_config.py b/gigl/src/common/types/pb_wrappers/gigl_resource_config.py index 93eb95b8e..8d944c865 100644 --- a/gigl/src/common/types/pb_wrappers/gigl_resource_config.py +++ b/gigl/src/common/types/pb_wrappers/gigl_resource_config.py @@ -8,6 +8,7 @@ from gigl.common.logger import Logger from gigl.src.common.constants.components import GiGLComponents from snapchat.research.gbml.gigl_resource_config_pb2 import ( + CustomLauncherConfig, DataflowResourceConfig, DataPreprocessorConfig, DistributedTrainerConfig, @@ -37,12 +38,14 @@ _KFP_TRAINER_CONFIG = "kfp_trainer_config" _LOCAL_TRAINER_CONFIG = "local_trainer_config" _VERTEX_AI_GRAPH_STORE_TRAINER_CONFIG = "vertex_ai_graph_store_trainer_config" +_CUSTOM_TRAINER_CONFIG = "custom_trainer_config" _INFERENCER_CONFIG_FIELD = "inferencer_config" _VERTEX_AI_INFERENCER_CONFIG = "vertex_ai_inferencer_config" _DATAFLOW_INFERENCER_CONFIG = "dataflow_inferencer_config" _LOCAL_INFERENCER_CONFIG = "local_inferencer_config" _VERTEX_AI_GRAPH_STORE_INFERENCER_CONFIG = "vertex_ai_graph_store_inferencer_config" +_CUSTOM_INFERENCER_CONFIG = "custom_inferencer_config" @dataclass @@ -55,6 +58,7 @@ class GiglResourceConfigWrapper: KFPResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, + CustomLauncherConfig, ] ] = None _inference_config: Optional[ @@ -63,6 +67,7 @@ class GiglResourceConfigWrapper: VertexAiResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, + CustomLauncherConfig, ] ] = None @@ -283,9 +288,10 @@ def trainer_config( KFPResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, + CustomLauncherConfig, ]: """ - Returns the trainer config specified in the resource config. (e.g. Vertex AI, KFP, Local) + Returns the trainer config specified in the resource config. (e.g. Vertex AI, KFP, Local, Custom) """ if not self._trainer_config: @@ -305,6 +311,7 @@ def trainer_config( KFPResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, + CustomLauncherConfig, ] if ( deprecated_config.WhichOneof(_TRAINER_CONFIG_FIELD) # type: ignore[arg-type] @@ -365,6 +372,11 @@ def trainer_config( == _VERTEX_AI_GRAPH_STORE_TRAINER_CONFIG ): _trainer_config = config.vertex_ai_graph_store_trainer_config + elif ( + config.WhichOneof(_TRAINER_CONFIG_FIELD) # type: ignore[arg-type] + == _CUSTOM_TRAINER_CONFIG + ): + _trainer_config = config.custom_trainer_config else: raise ValueError(f"Invalid trainer_config type: {config}") else: @@ -383,9 +395,10 @@ def inferencer_config( VertexAiResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, + CustomLauncherConfig, ]: """ - Returns the inferencer config specified in the resource config. (Dataflow) + Returns the inferencer config specified in the resource config. (e.g. Dataflow, Vertex AI, Local, Custom) """ if self._inference_config is None: # TODO: (svij) Marked for deprecation @@ -421,6 +434,11 @@ def inferencer_config( self._inference_config = ( config.vertex_ai_graph_store_inferencer_config ) + elif ( + config.WhichOneof(_INFERENCER_CONFIG_FIELD) # type: ignore[arg-type] + == _CUSTOM_INFERENCER_CONFIG + ): + self._inference_config = config.custom_inferencer_config else: raise ValueError("Invalid inferencer_config type") else: diff --git a/gigl/src/validation_check/config_validator.py b/gigl/src/validation_check/config_validator.py index ec0ca4caf..bf6f3f5e1 100644 --- a/gigl/src/validation_check/config_validator.py +++ b/gigl/src/validation_check/config_validator.py @@ -16,6 +16,7 @@ assert_trained_model_exists, ) from gigl.src.validation_check.libs.gbml_and_resource_config_compatibility_checks import ( + check_custom_launcher_config_requires_glt_backend, check_inferencer_graph_store_compatibility, check_trainer_graph_store_compatibility, ) @@ -23,6 +24,7 @@ check_if_kfp_pipeline_job_name_valid, ) from gigl.src.validation_check.libs.resource_config_checks import ( + check_custom_launcher_config_shape, check_if_inferencer_resource_config_valid, check_if_preprocessor_resource_config_valid, check_if_shared_resource_config_valid, @@ -202,25 +204,31 @@ GiGLComponents.ConfigPopulator.value: [ check_trainer_graph_store_compatibility, check_inferencer_graph_store_compatibility, + check_custom_launcher_config_requires_glt_backend, ], GiGLComponents.DataPreprocessor.value: [ check_trainer_graph_store_compatibility, check_inferencer_graph_store_compatibility, + check_custom_launcher_config_requires_glt_backend, ], GiGLComponents.SubgraphSampler.value: [ check_trainer_graph_store_compatibility, check_inferencer_graph_store_compatibility, + check_custom_launcher_config_requires_glt_backend, ], GiGLComponents.SplitGenerator.value: [ check_trainer_graph_store_compatibility, check_inferencer_graph_store_compatibility, + check_custom_launcher_config_requires_glt_backend, ], GiGLComponents.Trainer.value: [ check_trainer_graph_store_compatibility, check_inferencer_graph_store_compatibility, + check_custom_launcher_config_requires_glt_backend, ], GiGLComponents.Inferencer.value: [ check_inferencer_graph_store_compatibility, + check_custom_launcher_config_requires_glt_backend, ], # PostProcessor doesn't need graph store compatibility checks } @@ -347,6 +355,15 @@ def kfp_validation_checks( resource_config_wrapper=resource_config_wrapper, ) + # Validate any populated CustomLauncherConfig has a non-empty command. + # Unconditional — the check is shape-only and does not call out to any + # external service. + for component in (GiGLComponents.Trainer, GiGLComponents.Inferencer): + check_custom_launcher_config_shape( + resource_config_pb=resource_config_pb, + component=component, + ) + # check if trained model file exist when skipping training if gbml_config_pb.shared_config.should_skip_training == True: assert_trained_model_exists(gbml_config_pb=gbml_config_pb) diff --git a/gigl/src/validation_check/libs/gbml_and_resource_config_compatibility_checks.py b/gigl/src/validation_check/libs/gbml_and_resource_config_compatibility_checks.py index fc12d1939..290a68544 100644 --- a/gigl/src/validation_check/libs/gbml_and_resource_config_compatibility_checks.py +++ b/gigl/src/validation_check/libs/gbml_and_resource_config_compatibility_checks.py @@ -135,3 +135,63 @@ def check_inferencer_graph_store_compatibility( raise AssertionError( f"If one of GbmlConfig.inferencer_config.graph_store_storage_config or GiglResourceConfig.inferencer_resource_config is set, the other must also be set. GbmlConfig.inferencer_config.graph_store_storage_config is set: {gbml_has_graph_store}, GiglResourceConfig.inferencer_resource_config is set: {resource_has_graph_store}." ) + + +def check_custom_launcher_config_requires_glt_backend( + gbml_config_pb_wrapper: GbmlConfigPbWrapper, + resource_config_wrapper: GiglResourceConfigWrapper, +) -> None: + """Enforce that ``CustomLauncherConfig`` is only used with the GLT (v2) backend. + + The v1 trainer/inferencer dispatchers never consult the + ``custom_trainer_config`` / ``custom_inferencer_config`` oneof, so pairing + a ``CustomLauncherConfig`` with a task config that has + ``should_use_glt_backend=False`` would silently fall through the v1 path + and fail at runtime. Catch it up-front here so the failure is loud and + actionable at validation time. + + Note on naming: the wrapper exposes ``should_use_glt_backend`` (bool) but + the raw YAML key users set is ``feature_flags.should_run_glt_backend``. + The wrapper translates one into the other; this check always reads the + wrapper property and never the raw map. + + Args: + gbml_config_pb_wrapper: The GbmlConfig wrapper (template config). + resource_config_wrapper: The GiglResourceConfig wrapper (resource config). + + Raises: + ValueError: If either the trainer or inferencer resource config is a + ``CustomLauncherConfig`` and ``should_use_glt_backend`` is False. + """ + logger.info( + "Config validation check: CustomLauncherConfig requires GLT (v2) backend." + ) + trainer_is_custom = isinstance( + resource_config_wrapper.trainer_config, + gigl_resource_config_pb2.CustomLauncherConfig, + ) + inferencer_is_custom = isinstance( + resource_config_wrapper.inferencer_config, + gigl_resource_config_pb2.CustomLauncherConfig, + ) + if not (trainer_is_custom or inferencer_is_custom): + return + + if not gbml_config_pb_wrapper.should_use_glt_backend: + offending: list[str] = [] + if trainer_is_custom: + offending.append("trainer_resource_config.custom_trainer_config") + if inferencer_is_custom: + offending.append("inferencer_resource_config.custom_inferencer_config") + raise ValueError( + "CustomLauncherConfig is only wired into the GLT (v2) dispatchers " + "(glt_trainer.py / glt_inferencer.py); the v1 trainer/inferencer " + "never consult the custom oneof and would fall through to an " + "'Unsupported resource config' error at runtime. The following " + f"custom resource configs were set: {offending}, but the task " + "config has should_use_glt_backend=False (raw YAML key: " + "feature_flags.should_run_glt_backend). Either set " + "feature_flags.should_run_glt_backend='True' in the task config, " + "or replace the CustomLauncherConfig with a built-in resource " + "config." + ) diff --git a/gigl/src/validation_check/libs/resource_config_checks.py b/gigl/src/validation_check/libs/resource_config_checks.py index 98a12a360..90ae2ad41 100644 --- a/gigl/src/validation_check/libs/resource_config_checks.py +++ b/gigl/src/validation_check/libs/resource_config_checks.py @@ -3,6 +3,7 @@ from google.cloud.aiplatform_v1.types.accelerator_type import AcceleratorType from gigl.common.logger import Logger +from gigl.src.common.constants.components import GiGLComponents from gigl.src.common.types.pb_wrappers.gbml_config import GbmlConfigPbWrapper from gigl.src.common.types.pb_wrappers.gigl_resource_config import ( GiglResourceConfigWrapper, @@ -149,7 +150,15 @@ def check_if_trainer_resource_config_valid( gigl_resource_config_pb2.VertexAiResourceConfig, gigl_resource_config_pb2.KFPResourceConfig, gigl_resource_config_pb2.VertexAiGraphStoreConfig, + gigl_resource_config_pb2.CustomLauncherConfig, ] = wrapper.trainer_config + if isinstance(trainer_config, gigl_resource_config_pb2.CustomLauncherConfig): + logger.info( + "Skipping trainer machine-shape validation: trainer_config is a " + "CustomLauncherConfig (launcher-pluggable; no concrete machine " + "spec to validate)." + ) + return _validate_machine_config(config=trainer_config) @@ -163,6 +172,13 @@ def check_if_inferencer_resource_config_valid( resource_config=resource_config_pb ) inferencer_config = resource_config_wrapper.inferencer_config + if isinstance(inferencer_config, gigl_resource_config_pb2.CustomLauncherConfig): + logger.info( + "Skipping inferencer machine-shape validation: inferencer_config " + "is a CustomLauncherConfig (launcher-pluggable; no concrete " + "machine spec to validate)." + ) + return _validate_machine_config(config=inferencer_config) @@ -297,6 +313,57 @@ def _validate_machine_config( ) +def check_custom_launcher_config_shape( + resource_config_pb: gigl_resource_config_pb2.GiglResourceConfig, + component: GiGLComponents, +) -> None: + """Assert the trainer / inferencer's ``CustomLauncherConfig`` is well-shaped. + + Resolves the component's resource config through the wrapper; if it is not + a ``CustomLauncherConfig`` this helper is a no-op. Otherwise it asserts + ``command`` is non-empty so the launcher's runtime guard does not fail + on a typo in the YAML. + + Args: + resource_config_pb: The resource config to inspect. The trainer or + inferencer oneof (depending on ``component``) is pulled out of the + wrapper. + component: Which GiGL component to check. Must be Trainer or + Inferencer; other components never carry a ``CustomLauncherConfig``. + + Raises: + ValueError: If ``component`` is not Trainer or Inferencer, or if a + populated ``CustomLauncherConfig`` has an empty ``command``. + """ + if component not in {GiGLComponents.Trainer, GiGLComponents.Inferencer}: + raise ValueError( + f"check_custom_launcher_config_shape only supports " + f"Trainer and Inferencer components; got {component}." + ) + + wrapper = GiglResourceConfigWrapper(resource_config=resource_config_pb) + component_config: Union[ + gigl_resource_config_pb2.LocalResourceConfig, + gigl_resource_config_pb2.VertexAiResourceConfig, + gigl_resource_config_pb2.KFPResourceConfig, + gigl_resource_config_pb2.VertexAiGraphStoreConfig, + gigl_resource_config_pb2.DataflowResourceConfig, + gigl_resource_config_pb2.CustomLauncherConfig, + ] + if component == GiGLComponents.Trainer: + component_config = wrapper.trainer_config + else: + component_config = wrapper.inferencer_config + + if not isinstance(component_config, gigl_resource_config_pb2.CustomLauncherConfig): + return + + if not component_config.command: + raise ValueError( + f"CustomLauncherConfig.command must be set for {component.value}." + ) + + def check_if_trainer_graph_store_storage_command_valid( gbml_config_pb_wrapper: GbmlConfigPbWrapper, ) -> None: diff --git a/proto/snapchat/research/gbml/gigl_resource_config.proto b/proto/snapchat/research/gbml/gigl_resource_config.proto index 0d930949b..9174b9194 100644 --- a/proto/snapchat/research/gbml/gigl_resource_config.proto +++ b/proto/snapchat/research/gbml/gigl_resource_config.proto @@ -166,6 +166,25 @@ message VertexAiResourceConfig { // If unset, and no accelerators are available, will use 1. int32 compute_cluster_local_world_size = 3; } + +// Lets user-defined launchers be piped in. +// The launcher dispatcher invokes `command` (interpreted by /bin/sh -c so +// leading "KEY=VALUE" assignments parse as inline env vars) with `args` +// appended as positional arguments. Both fields are taken verbatim by +// the dispatcher; any templating or substitution is the caller's +// responsibility (e.g. OmegaConf-resolved at YAML-load time). +message CustomLauncherConfig { + // Shell snippet invoked via /bin/sh -c. Leading "KEY=VALUE" assignments + // are honored by the shell, so callers can inline env vars (e.g. + // "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python python -m my.cli"). + string command = 1; + // Positional arguments appended after the command. Each element is + // shell-quoted by the dispatcher so values containing spaces/quotes + // survive the shell pass. + // e.g. "[--my_flag=my_value, --my_other_flag=my_other_value, --noskip_training]" + repeated string args = 2; +} + // (deprecated) // Configuration for distributed training resources message DistributedTrainerConfig { @@ -183,6 +202,7 @@ message TrainerResourceConfig { KFPResourceConfig kfp_trainer_config = 2; LocalResourceConfig local_trainer_config = 3; VertexAiGraphStoreConfig vertex_ai_graph_store_trainer_config = 4; + CustomLauncherConfig custom_trainer_config = 5; } } @@ -193,6 +213,7 @@ message InferencerResourceConfig { DataflowResourceConfig dataflow_inferencer_config = 2; LocalResourceConfig local_inferencer_config = 3; VertexAiGraphStoreConfig vertex_ai_graph_store_inferencer_config = 4; + CustomLauncherConfig custom_inferencer_config = 5; } } diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala new file mode 100644 index 000000000..4eb76518b --- /dev/null +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala @@ -0,0 +1,159 @@ +// Generated by the Scala Plugin for the Protocol Buffer Compiler. +// Do not edit! +// +// Protofile syntax: PROTO3 + +package snapchat.research.gbml.gigl_resource_config + +/** Lets user-defined launchers be piped in. + * The launcher dispatcher invokes `command` (interpreted by /bin/sh -c so + * leading "KEY=VALUE" assignments parse as inline env vars) with `args` + * appended as positional arguments. Both fields are taken verbatim by + * the dispatcher; any templating or substitution is the caller's + * responsibility (e.g. OmegaConf-resolved at YAML-load time). + * + * @param command + * Shell snippet invoked via /bin/sh -c. Leading "KEY=VALUE" assignments + * are honored by the shell, so callers can inline env vars (e.g. + * "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python python -m my.cli"). + * @param args + * Positional arguments appended after the command. Each element is + * shell-quoted by the dispatcher so values containing spaces/quotes + * survive the shell pass. + * e.g. "[--my_flag=my_value, --my_other_flag=my_other_value, --noskip_training]" + */ +@SerialVersionUID(0L) +final case class CustomLauncherConfig( + command: _root_.scala.Predef.String = "", + args: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty, + unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty + ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CustomLauncherConfig] { + @transient + private[this] var __serializedSizeMemoized: _root_.scala.Int = 0 + private[this] def __computeSerializedSize(): _root_.scala.Int = { + var __size = 0 + + { + val __value = command + if (!__value.isEmpty) { + __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value) + } + }; + args.foreach { __item => + val __value = __item + __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value) + } + __size += unknownFields.serializedSize + __size + } + override def serializedSize: _root_.scala.Int = { + var __size = __serializedSizeMemoized + if (__size == 0) { + __size = __computeSerializedSize() + 1 + __serializedSizeMemoized = __size + } + __size - 1 + + } + def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = { + { + val __v = command + if (!__v.isEmpty) { + _output__.writeString(1, __v) + } + }; + args.foreach { __v => + val __m = __v + _output__.writeString(2, __m) + }; + unknownFields.writeTo(_output__) + } + def withCommand(__v: _root_.scala.Predef.String): CustomLauncherConfig = copy(command = __v) + def clearArgs = copy(args = _root_.scala.Seq.empty) + def addArgs(__vs: _root_.scala.Predef.String *): CustomLauncherConfig = addAllArgs(__vs) + def addAllArgs(__vs: Iterable[_root_.scala.Predef.String]): CustomLauncherConfig = copy(args = args ++ __vs) + def withArgs(__v: _root_.scala.Seq[_root_.scala.Predef.String]): CustomLauncherConfig = copy(args = __v) + def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v) + def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty) + def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = { + (__fieldNumber: @_root_.scala.unchecked) match { + case 1 => { + val __t = command + if (__t != "") __t else null + } + case 2 => args + } + } + def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = { + _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor) + (__field.number: @_root_.scala.unchecked) match { + case 1 => _root_.scalapb.descriptors.PString(command) + case 2 => _root_.scalapb.descriptors.PRepeated(args.iterator.map(_root_.scalapb.descriptors.PString(_)).toVector) + } + } + def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) + def companion: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig.type = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig + // @@protoc_insertion_point(GeneratedMessage[snapchat.research.gbml.CustomLauncherConfig]) +} + +object CustomLauncherConfig extends scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] { + implicit def messageCompanion: scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = this + def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig = { + var __command: _root_.scala.Predef.String = "" + val __args: _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String] = new _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String] + var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null + var _done__ = false + while (!_done__) { + val _tag__ = _input__.readTag() + _tag__ match { + case 0 => _done__ = true + case 10 => + __command = _input__.readStringRequireUtf8() + case 18 => + __args += _input__.readStringRequireUtf8() + case tag => + if (_unknownFields__ == null) { + _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder() + } + _unknownFields__.parseField(tag, _input__) + } + } + snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( + command = __command, + args = __args.result(), + unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result() + ) + } + implicit def messageReads: _root_.scalapb.descriptors.Reads[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scalapb.descriptors.Reads{ + case _root_.scalapb.descriptors.PMessage(__fieldsMap) => + _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.") + snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( + command = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""), + args = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Seq[_root_.scala.Predef.String]]).getOrElse(_root_.scala.Seq.empty) + ) + case _ => throw new RuntimeException("Expected PMessage") + } + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(11) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(11) + def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number) + lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty + def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber) + lazy val defaultInstance = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( + command = "", + args = _root_.scala.Seq.empty + ) + implicit class CustomLauncherConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig](_l) { + def command: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.command)((c_, f_) => c_.copy(command = f_)) + def args: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[_root_.scala.Predef.String]] = field(_.args)((c_, f_) => c_.copy(args = f_)) + } + final val COMMAND_FIELD_NUMBER = 1 + final val ARGS_FIELD_NUMBER = 2 + def of( + command: _root_.scala.Predef.String, + args: _root_.scala.Seq[_root_.scala.Predef.String] + ): _root_.snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig = _root_.snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( + command, + args + ) + // @@protoc_insertion_point(GeneratedMessageCompanion[snapchat.research.gbml.CustomLauncherConfig]) +} diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/DistributedTrainerConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/DistributedTrainerConfig.scala index 676b61794..60313b1cc 100644 --- a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/DistributedTrainerConfig.scala +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/DistributedTrainerConfig.scala @@ -131,8 +131,8 @@ object DistributedTrainerConfig extends scalapb.GeneratedMessageCompanion[snapch ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(11) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(11) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(12) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(12) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfig.scala index d88d363e9..16ff1d6a6 100644 --- a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfig.scala +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfig.scala @@ -275,8 +275,8 @@ object GiglResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.res ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(15) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(15) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(16) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(16) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfigProto.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfigProto.scala index a086f6113..ffab5e503 100644 --- a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfigProto.scala +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfigProto.scala @@ -20,6 +20,7 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { snapchat.research.gbml.gigl_resource_config.KFPResourceConfig, snapchat.research.gbml.gigl_resource_config.LocalResourceConfig, snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig, + snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig, snapchat.research.gbml.gigl_resource_config.DistributedTrainerConfig, snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig, snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig, @@ -65,65 +66,70 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { AEoCzIuLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlSZXNvdXJjZUNvbmZpZ0IT4j8QEg5ncmFwaFN0b3JlUG9vbFIOZ 3JhcGhTdG9yZVBvb2wSYwoMY29tcHV0ZV9wb29sGAIgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291c mNlQ29uZmlnQhDiPw0SC2NvbXB1dGVQb29sUgtjb21wdXRlUG9vbBJpCiBjb21wdXRlX2NsdXN0ZXJfbG9jYWxfd29ybGRfc2l6Z - RgDIAEoBUIh4j8eEhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplUhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplIp0DC - hhEaXN0cmlidXRlZFRyYWluZXJDb25maWcShAEKGHZlcnRleF9haV90cmFpbmVyX2NvbmZpZxgBIAEoCzItLnNuYXBjaGF0LnJlc - 2VhcmNoLmdibWwuVmVydGV4QWlUcmFpbmVyQ29uZmlnQhriPxcSFXZlcnRleEFpVHJhaW5lckNvbmZpZ0gAUhV2ZXJ0ZXhBaVRyY - WluZXJDb25maWcSbwoSa2ZwX3RyYWluZXJfY29uZmlnGAIgASgLMiguc25hcGNoYXQucmVzZWFyY2guZ2JtbC5LRlBUcmFpbmVyQ - 29uZmlnQhXiPxISEGtmcFRyYWluZXJDb25maWdIAFIQa2ZwVHJhaW5lckNvbmZpZxJ3ChRsb2NhbF90cmFpbmVyX2NvbmZpZxgDI - AEoCzIqLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuTG9jYWxUcmFpbmVyQ29uZmlnQhfiPxQSEmxvY2FsVHJhaW5lckNvbmZpZ0gAU - hJsb2NhbFRyYWluZXJDb25maWdCEAoOdHJhaW5lcl9jb25maWcixwQKFVRyYWluZXJSZXNvdXJjZUNvbmZpZxKFAQoYdmVydGV4X - 2FpX3RyYWluZXJfY29uZmlnGAEgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291cmNlQ29uZmlnQhriP - xcSFXZlcnRleEFpVHJhaW5lckNvbmZpZ0gAUhV2ZXJ0ZXhBaVRyYWluZXJDb25maWcScAoSa2ZwX3RyYWluZXJfY29uZmlnGAIgA - SgLMikuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5LRlBSZXNvdXJjZUNvbmZpZ0IV4j8SEhBrZnBUcmFpbmVyQ29uZmlnSABSEGtmc - FRyYWluZXJDb25maWcSeAoUbG9jYWxfdHJhaW5lcl9jb25maWcYAyABKAsyKy5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLkxvY2FsU - mVzb3VyY2VDb25maWdCF+I/FBISbG9jYWxUcmFpbmVyQ29uZmlnSABSEmxvY2FsVHJhaW5lckNvbmZpZxKnAQokdmVydGV4X2FpX - 2dyYXBoX3N0b3JlX3RyYWluZXJfY29uZmlnGAQgASgLMjAuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaUdyYXBoU3Rvc - mVDb25maWdCJOI/IRIfdmVydGV4QWlHcmFwaFN0b3JlVHJhaW5lckNvbmZpZ0gAUh92ZXJ0ZXhBaUdyYXBoU3RvcmVUcmFpbmVyQ - 29uZmlnQhAKDnRyYWluZXJfY29uZmlnIocFChhJbmZlcmVuY2VyUmVzb3VyY2VDb25maWcSjgEKG3ZlcnRleF9haV9pbmZlcmVuY - 2VyX2NvbmZpZxgBIAEoCzIuLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlSZXNvdXJjZUNvbmZpZ0Id4j8aEhh2ZXJ0Z - XhBaUluZmVyZW5jZXJDb25maWdIAFIYdmVydGV4QWlJbmZlcmVuY2VyQ29uZmlnEo0BChpkYXRhZmxvd19pbmZlcmVuY2VyX2Nvb - mZpZxgCIAEoCzIuLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuRGF0YWZsb3dSZXNvdXJjZUNvbmZpZ0Id4j8aEhhkYXRhZmxvd0luZ - mVyZW5jZXJDb25maWdIAFIYZGF0YWZsb3dJbmZlcmVuY2VyQ29uZmlnEoEBChdsb2NhbF9pbmZlcmVuY2VyX2NvbmZpZxgDIAEoC - zIrLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuTG9jYWxSZXNvdXJjZUNvbmZpZ0Ia4j8XEhVsb2NhbEluZmVyZW5jZXJDb25maWdIA - FIVbG9jYWxJbmZlcmVuY2VyQ29uZmlnErABCid2ZXJ0ZXhfYWlfZ3JhcGhfc3RvcmVfaW5mZXJlbmNlcl9jb25maWcYBCABKAsyM - C5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlZlcnRleEFpR3JhcGhTdG9yZUNvbmZpZ0In4j8kEiJ2ZXJ0ZXhBaUdyYXBoU3RvcmVJb - mZlcmVuY2VyQ29uZmlnSABSInZlcnRleEFpR3JhcGhTdG9yZUluZmVyZW5jZXJDb25maWdCEwoRaW5mZXJlbmNlcl9jb25maWcil - wgKFFNoYXJlZFJlc291cmNlQ29uZmlnEn4KD3Jlc291cmNlX2xhYmVscxgBIAMoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU - 2hhcmVkUmVzb3VyY2VDb25maWcuUmVzb3VyY2VMYWJlbHNFbnRyeUIT4j8QEg5yZXNvdXJjZUxhYmVsc1IOcmVzb3VyY2VMYWJlb - HMSjgEKFWNvbW1vbl9jb21wdXRlX2NvbmZpZxgCIAEoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU2hhcmVkUmVzb3VyY2VDb - 25maWcuQ29tbW9uQ29tcHV0ZUNvbmZpZ0IY4j8VEhNjb21tb25Db21wdXRlQ29uZmlnUhNjb21tb25Db21wdXRlQ29uZmlnGpQFC - hNDb21tb25Db21wdXRlQ29uZmlnEiYKB3Byb2plY3QYASABKAlCDOI/CRIHcHJvamVjdFIHcHJvamVjdBIjCgZyZWdpb24YAiABK - AlCC+I/CBIGcmVnaW9uUgZyZWdpb24SQwoSdGVtcF9hc3NldHNfYnVja2V0GAMgASgJQhXiPxISEHRlbXBBc3NldHNCdWNrZXRSE - HRlbXBBc3NldHNCdWNrZXQSXAobdGVtcF9yZWdpb25hbF9hc3NldHNfYnVja2V0GAQgASgJQh3iPxoSGHRlbXBSZWdpb25hbEFzc - 2V0c0J1Y2tldFIYdGVtcFJlZ2lvbmFsQXNzZXRzQnVja2V0EkMKEnBlcm1fYXNzZXRzX2J1Y2tldBgFIAEoCUIV4j8SEhBwZXJtQ - XNzZXRzQnVja2V0UhBwZXJtQXNzZXRzQnVja2V0EloKG3RlbXBfYXNzZXRzX2JxX2RhdGFzZXRfbmFtZRgGIAEoCUIc4j8ZEhd0Z - W1wQXNzZXRzQnFEYXRhc2V0TmFtZVIXdGVtcEFzc2V0c0JxRGF0YXNldE5hbWUSVgoZZW1iZWRkaW5nX2JxX2RhdGFzZXRfbmFtZ - RgHIAEoCUIb4j8YEhZlbWJlZGRpbmdCcURhdGFzZXROYW1lUhZlbWJlZGRpbmdCcURhdGFzZXROYW1lElYKGWdjcF9zZXJ2aWNlX - 2FjY291bnRfZW1haWwYCCABKAlCG+I/GBIWZ2NwU2VydmljZUFjY291bnRFbWFpbFIWZ2NwU2VydmljZUFjY291bnRFbWFpbBI8C - g9kYXRhZmxvd19ydW5uZXIYCyABKAlCE+I/EBIOZGF0YWZsb3dSdW5uZXJSDmRhdGFmbG93UnVubmVyGlcKE1Jlc291cmNlTGFiZ - WxzRW50cnkSGgoDa2V5GAEgASgJQgjiPwUSA2tleVIDa2V5EiAKBXZhbHVlGAIgASgJQgriPwcSBXZhbHVlUgV2YWx1ZToCOAEi9 - wgKEkdpZ2xSZXNvdXJjZUNvbmZpZxJbChpzaGFyZWRfcmVzb3VyY2VfY29uZmlnX3VyaRgBIAEoCUIc4j8ZEhdzaGFyZWRSZXNvd - XJjZUNvbmZpZ1VyaUgAUhdzaGFyZWRSZXNvdXJjZUNvbmZpZ1VyaRJ/ChZzaGFyZWRfcmVzb3VyY2VfY29uZmlnGAIgASgLMiwuc - 25hcGNoYXQucmVzZWFyY2guZ2JtbC5TaGFyZWRSZXNvdXJjZUNvbmZpZ0IZ4j8WEhRzaGFyZWRSZXNvdXJjZUNvbmZpZ0gAUhRza - GFyZWRSZXNvdXJjZUNvbmZpZxJ4ChNwcmVwcm9jZXNzb3JfY29uZmlnGAwgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EY - XRhUHJlcHJvY2Vzc29yQ29uZmlnQhfiPxQSEnByZXByb2Nlc3NvckNvbmZpZ1IScHJlcHJvY2Vzc29yQ29uZmlnEn8KF3N1YmdyY - XBoX3NhbXBsZXJfY29uZmlnGA0gASgLMisuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5TcGFya1Jlc291cmNlQ29uZmlnQhriPxcSF - XN1YmdyYXBoU2FtcGxlckNvbmZpZ1IVc3ViZ3JhcGhTYW1wbGVyQ29uZmlnEnwKFnNwbGl0X2dlbmVyYXRvcl9jb25maWcYDiABK - AsyKy5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlNwYXJrUmVzb3VyY2VDb25maWdCGeI/FhIUc3BsaXRHZW5lcmF0b3JDb25maWdSF - HNwbGl0R2VuZXJhdG9yQ29uZmlnEm0KDnRyYWluZXJfY29uZmlnGA8gASgLMjAuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EaXN0c - mlidXRlZFRyYWluZXJDb25maWdCFBgB4j8PEg10cmFpbmVyQ29uZmlnUg10cmFpbmVyQ29uZmlnEnQKEWluZmVyZW5jZXJfY29uZ - mlnGBAgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EYXRhZmxvd1Jlc291cmNlQ29uZmlnQhcYAeI/EhIQaW5mZXJlbmNlc - kNvbmZpZ1IQaW5mZXJlbmNlckNvbmZpZxKBAQoXdHJhaW5lcl9yZXNvdXJjZV9jb25maWcYESABKAsyLS5zbmFwY2hhdC5yZXNlY - XJjaC5nYm1sLlRyYWluZXJSZXNvdXJjZUNvbmZpZ0Ia4j8XEhV0cmFpbmVyUmVzb3VyY2VDb25maWdSFXRyYWluZXJSZXNvdXJjZ - UNvbmZpZxKNAQoaaW5mZXJlbmNlcl9yZXNvdXJjZV9jb25maWcYEiABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLkluZmVyZ - W5jZXJSZXNvdXJjZUNvbmZpZ0Id4j8aEhhpbmZlcmVuY2VyUmVzb3VyY2VDb25maWdSGGluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZ - 0IRCg9zaGFyZWRfcmVzb3VyY2Uq4wMKCUNvbXBvbmVudBItChFDb21wb25lbnRfVW5rbm93bhAAGhbiPxMSEUNvbXBvbmVudF9Vb - mtub3duEj8KGkNvbXBvbmVudF9Db25maWdfVmFsaWRhdG9yEAEaH+I/HBIaQ29tcG9uZW50X0NvbmZpZ19WYWxpZGF0b3ISPwoaQ - 29tcG9uZW50X0NvbmZpZ19Qb3B1bGF0b3IQAhof4j8cEhpDb21wb25lbnRfQ29uZmlnX1BvcHVsYXRvchJBChtDb21wb25lbnRfR - GF0YV9QcmVwcm9jZXNzb3IQAxog4j8dEhtDb21wb25lbnRfRGF0YV9QcmVwcm9jZXNzb3ISPwoaQ29tcG9uZW50X1N1YmdyYXBoX - 1NhbXBsZXIQBBof4j8cEhpDb21wb25lbnRfU3ViZ3JhcGhfU2FtcGxlchI9ChlDb21wb25lbnRfU3BsaXRfR2VuZXJhdG9yEAUaH - uI/GxIZQ29tcG9uZW50X1NwbGl0X0dlbmVyYXRvchItChFDb21wb25lbnRfVHJhaW5lchAGGhbiPxMSEUNvbXBvbmVudF9UcmFpb - mVyEjMKFENvbXBvbmVudF9JbmZlcmVuY2VyEAcaGeI/FhIUQ29tcG9uZW50X0luZmVyZW5jZXJiBnByb3RvMw==""" + RgDIAEoBUIh4j8eEhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplUhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplIl0KF + EN1c3RvbUxhdW5jaGVyQ29uZmlnEiYKB2NvbW1hbmQYASABKAlCDOI/CRIHY29tbWFuZFIHY29tbWFuZBIdCgRhcmdzGAIgAygJQ + gniPwYSBGFyZ3NSBGFyZ3MinQMKGERpc3RyaWJ1dGVkVHJhaW5lckNvbmZpZxKEAQoYdmVydGV4X2FpX3RyYWluZXJfY29uZmlnG + AEgASgLMi0uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVRyYWluZXJDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ + 29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJvChJrZnBfdHJhaW5lcl9jb25maWcYAiABKAsyKC5zbmFwY2hhdC5yZXNlY + XJjaC5nYm1sLktGUFRyYWluZXJDb25maWdCFeI/EhIQa2ZwVHJhaW5lckNvbmZpZ0gAUhBrZnBUcmFpbmVyQ29uZmlnEncKFGxvY + 2FsX3RyYWluZXJfY29uZmlnGAMgASgLMiouc25hcGNoYXQucmVzZWFyY2guZ2JtbC5Mb2NhbFRyYWluZXJDb25maWdCF+I/FBISb + G9jYWxUcmFpbmVyQ29uZmlnSABSEmxvY2FsVHJhaW5lckNvbmZpZ0IQCg50cmFpbmVyX2NvbmZpZyLFBQoVVHJhaW5lclJlc291c + mNlQ29uZmlnEoUBChh2ZXJ0ZXhfYWlfdHJhaW5lcl9jb25maWcYASABKAsyLi5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlZlcnRle + EFpUmVzb3VyY2VDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJwChJrZ + nBfdHJhaW5lcl9jb25maWcYAiABKAsyKS5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLktGUFJlc291cmNlQ29uZmlnQhXiPxISEGtmc + FRyYWluZXJDb25maWdIAFIQa2ZwVHJhaW5lckNvbmZpZxJ4ChRsb2NhbF90cmFpbmVyX2NvbmZpZxgDIAEoCzIrLnNuYXBjaGF0L + nJlc2VhcmNoLmdibWwuTG9jYWxSZXNvdXJjZUNvbmZpZ0IX4j8UEhJsb2NhbFRyYWluZXJDb25maWdIAFISbG9jYWxUcmFpbmVyQ + 29uZmlnEqcBCiR2ZXJ0ZXhfYWlfZ3JhcGhfc3RvcmVfdHJhaW5lcl9jb25maWcYBCABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nY + m1sLlZlcnRleEFpR3JhcGhTdG9yZUNvbmZpZ0Ik4j8hEh92ZXJ0ZXhBaUdyYXBoU3RvcmVUcmFpbmVyQ29uZmlnSABSH3ZlcnRle + EFpR3JhcGhTdG9yZVRyYWluZXJDb25maWcSfAoVY3VzdG9tX3RyYWluZXJfY29uZmlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY + 2guZ2JtbC5DdXN0b21MYXVuY2hlckNvbmZpZ0IY4j8VEhNjdXN0b21UcmFpbmVyQ29uZmlnSABSE2N1c3RvbVRyYWluZXJDb25ma + WdCEAoOdHJhaW5lcl9jb25maWcijwYKGEluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZxKOAQobdmVydGV4X2FpX2luZmVyZW5jZXJfY + 29uZmlnGAEgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291cmNlQ29uZmlnQh3iPxoSGHZlcnRleEFpS + W5mZXJlbmNlckNvbmZpZ0gAUhh2ZXJ0ZXhBaUluZmVyZW5jZXJDb25maWcSjQEKGmRhdGFmbG93X2luZmVyZW5jZXJfY29uZmlnG + AIgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EYXRhZmxvd1Jlc291cmNlQ29uZmlnQh3iPxoSGGRhdGFmbG93SW5mZXJlb + mNlckNvbmZpZ0gAUhhkYXRhZmxvd0luZmVyZW5jZXJDb25maWcSgQEKF2xvY2FsX2luZmVyZW5jZXJfY29uZmlnGAMgASgLMisuc + 25hcGNoYXQucmVzZWFyY2guZ2JtbC5Mb2NhbFJlc291cmNlQ29uZmlnQhriPxcSFWxvY2FsSW5mZXJlbmNlckNvbmZpZ0gAUhVsb + 2NhbEluZmVyZW5jZXJDb25maWcSsAEKJ3ZlcnRleF9haV9ncmFwaF9zdG9yZV9pbmZlcmVuY2VyX2NvbmZpZxgEIAEoCzIwLnNuY + XBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlHcmFwaFN0b3JlQ29uZmlnQifiPyQSInZlcnRleEFpR3JhcGhTdG9yZUluZmVyZ + W5jZXJDb25maWdIAFIidmVydGV4QWlHcmFwaFN0b3JlSW5mZXJlbmNlckNvbmZpZxKFAQoYY3VzdG9tX2luZmVyZW5jZXJfY29uZ + mlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5DdXN0b21MYXVuY2hlckNvbmZpZ0Ib4j8YEhZjdXN0b21JbmZlcmVuY + 2VyQ29uZmlnSABSFmN1c3RvbUluZmVyZW5jZXJDb25maWdCEwoRaW5mZXJlbmNlcl9jb25maWcilwgKFFNoYXJlZFJlc291cmNlQ + 29uZmlnEn4KD3Jlc291cmNlX2xhYmVscxgBIAMoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU2hhcmVkUmVzb3VyY2VDb25ma + WcuUmVzb3VyY2VMYWJlbHNFbnRyeUIT4j8QEg5yZXNvdXJjZUxhYmVsc1IOcmVzb3VyY2VMYWJlbHMSjgEKFWNvbW1vbl9jb21wd + XRlX2NvbmZpZxgCIAEoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU2hhcmVkUmVzb3VyY2VDb25maWcuQ29tbW9uQ29tcHV0Z + UNvbmZpZ0IY4j8VEhNjb21tb25Db21wdXRlQ29uZmlnUhNjb21tb25Db21wdXRlQ29uZmlnGpQFChNDb21tb25Db21wdXRlQ29uZ + mlnEiYKB3Byb2plY3QYASABKAlCDOI/CRIHcHJvamVjdFIHcHJvamVjdBIjCgZyZWdpb24YAiABKAlCC+I/CBIGcmVnaW9uUgZyZ + Wdpb24SQwoSdGVtcF9hc3NldHNfYnVja2V0GAMgASgJQhXiPxISEHRlbXBBc3NldHNCdWNrZXRSEHRlbXBBc3NldHNCdWNrZXQSX + AobdGVtcF9yZWdpb25hbF9hc3NldHNfYnVja2V0GAQgASgJQh3iPxoSGHRlbXBSZWdpb25hbEFzc2V0c0J1Y2tldFIYdGVtcFJlZ + 2lvbmFsQXNzZXRzQnVja2V0EkMKEnBlcm1fYXNzZXRzX2J1Y2tldBgFIAEoCUIV4j8SEhBwZXJtQXNzZXRzQnVja2V0UhBwZXJtQ + XNzZXRzQnVja2V0EloKG3RlbXBfYXNzZXRzX2JxX2RhdGFzZXRfbmFtZRgGIAEoCUIc4j8ZEhd0ZW1wQXNzZXRzQnFEYXRhc2V0T + mFtZVIXdGVtcEFzc2V0c0JxRGF0YXNldE5hbWUSVgoZZW1iZWRkaW5nX2JxX2RhdGFzZXRfbmFtZRgHIAEoCUIb4j8YEhZlbWJlZ + GRpbmdCcURhdGFzZXROYW1lUhZlbWJlZGRpbmdCcURhdGFzZXROYW1lElYKGWdjcF9zZXJ2aWNlX2FjY291bnRfZW1haWwYCCABK + AlCG+I/GBIWZ2NwU2VydmljZUFjY291bnRFbWFpbFIWZ2NwU2VydmljZUFjY291bnRFbWFpbBI8Cg9kYXRhZmxvd19ydW5uZXIYC + yABKAlCE+I/EBIOZGF0YWZsb3dSdW5uZXJSDmRhdGFmbG93UnVubmVyGlcKE1Jlc291cmNlTGFiZWxzRW50cnkSGgoDa2V5GAEgA + SgJQgjiPwUSA2tleVIDa2V5EiAKBXZhbHVlGAIgASgJQgriPwcSBXZhbHVlUgV2YWx1ZToCOAEi9wgKEkdpZ2xSZXNvdXJjZUNvb + mZpZxJbChpzaGFyZWRfcmVzb3VyY2VfY29uZmlnX3VyaRgBIAEoCUIc4j8ZEhdzaGFyZWRSZXNvdXJjZUNvbmZpZ1VyaUgAUhdza + GFyZWRSZXNvdXJjZUNvbmZpZ1VyaRJ/ChZzaGFyZWRfcmVzb3VyY2VfY29uZmlnGAIgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ + 2JtbC5TaGFyZWRSZXNvdXJjZUNvbmZpZ0IZ4j8WEhRzaGFyZWRSZXNvdXJjZUNvbmZpZ0gAUhRzaGFyZWRSZXNvdXJjZUNvbmZpZ + xJ4ChNwcmVwcm9jZXNzb3JfY29uZmlnGAwgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EYXRhUHJlcHJvY2Vzc29yQ29uZ + mlnQhfiPxQSEnByZXByb2Nlc3NvckNvbmZpZ1IScHJlcHJvY2Vzc29yQ29uZmlnEn8KF3N1YmdyYXBoX3NhbXBsZXJfY29uZmlnG + A0gASgLMisuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5TcGFya1Jlc291cmNlQ29uZmlnQhriPxcSFXN1YmdyYXBoU2FtcGxlckNvb + mZpZ1IVc3ViZ3JhcGhTYW1wbGVyQ29uZmlnEnwKFnNwbGl0X2dlbmVyYXRvcl9jb25maWcYDiABKAsyKy5zbmFwY2hhdC5yZXNlY + XJjaC5nYm1sLlNwYXJrUmVzb3VyY2VDb25maWdCGeI/FhIUc3BsaXRHZW5lcmF0b3JDb25maWdSFHNwbGl0R2VuZXJhdG9yQ29uZ + mlnEm0KDnRyYWluZXJfY29uZmlnGA8gASgLMjAuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EaXN0cmlidXRlZFRyYWluZXJDb25ma + WdCFBgB4j8PEg10cmFpbmVyQ29uZmlnUg10cmFpbmVyQ29uZmlnEnQKEWluZmVyZW5jZXJfY29uZmlnGBAgASgLMi4uc25hcGNoY + XQucmVzZWFyY2guZ2JtbC5EYXRhZmxvd1Jlc291cmNlQ29uZmlnQhcYAeI/EhIQaW5mZXJlbmNlckNvbmZpZ1IQaW5mZXJlbmNlc + kNvbmZpZxKBAQoXdHJhaW5lcl9yZXNvdXJjZV9jb25maWcYESABKAsyLS5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlRyYWluZXJSZ + XNvdXJjZUNvbmZpZ0Ia4j8XEhV0cmFpbmVyUmVzb3VyY2VDb25maWdSFXRyYWluZXJSZXNvdXJjZUNvbmZpZxKNAQoaaW5mZXJlb + mNlcl9yZXNvdXJjZV9jb25maWcYEiABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLkluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZ + 0Id4j8aEhhpbmZlcmVuY2VyUmVzb3VyY2VDb25maWdSGGluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZ0IRCg9zaGFyZWRfcmVzb3VyY + 2Uq4wMKCUNvbXBvbmVudBItChFDb21wb25lbnRfVW5rbm93bhAAGhbiPxMSEUNvbXBvbmVudF9Vbmtub3duEj8KGkNvbXBvbmVud + F9Db25maWdfVmFsaWRhdG9yEAEaH+I/HBIaQ29tcG9uZW50X0NvbmZpZ19WYWxpZGF0b3ISPwoaQ29tcG9uZW50X0NvbmZpZ19Qb + 3B1bGF0b3IQAhof4j8cEhpDb21wb25lbnRfQ29uZmlnX1BvcHVsYXRvchJBChtDb21wb25lbnRfRGF0YV9QcmVwcm9jZXNzb3IQA + xog4j8dEhtDb21wb25lbnRfRGF0YV9QcmVwcm9jZXNzb3ISPwoaQ29tcG9uZW50X1N1YmdyYXBoX1NhbXBsZXIQBBof4j8cEhpDb + 21wb25lbnRfU3ViZ3JhcGhfU2FtcGxlchI9ChlDb21wb25lbnRfU3BsaXRfR2VuZXJhdG9yEAUaHuI/GxIZQ29tcG9uZW50X1Nwb + Gl0X0dlbmVyYXRvchItChFDb21wb25lbnRfVHJhaW5lchAGGhbiPxMSEUNvbXBvbmVudF9UcmFpbmVyEjMKFENvbXBvbmVudF9Jb + mZlcmVuY2VyEAcaGeI/FhIUQ29tcG9uZW50X0luZmVyZW5jZXJiBnByb3RvMw==""" ).mkString) lazy val scalaDescriptor: _root_.scalapb.descriptors.FileDescriptor = { val scalaProto = com.google.protobuf.descriptor.FileDescriptorProto.parseFrom(ProtoBytes) diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/InferencerResourceConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/InferencerResourceConfig.scala index 77a949c19..e37cd9226 100644 --- a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/InferencerResourceConfig.scala +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/InferencerResourceConfig.scala @@ -32,6 +32,10 @@ final case class InferencerResourceConfig( val __value = inferencerConfig.vertexAiGraphStoreInferencerConfig.get __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize }; + if (inferencerConfig.customInferencerConfig.isDefined) { + val __value = inferencerConfig.customInferencerConfig.get + __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize + }; __size += unknownFields.serializedSize __size } @@ -69,6 +73,12 @@ final case class InferencerResourceConfig( _output__.writeUInt32NoTag(__m.serializedSize) __m.writeTo(_output__) }; + inferencerConfig.customInferencerConfig.foreach { __v => + val __m = __v + _output__.writeTag(5, 2) + _output__.writeUInt32NoTag(__m.serializedSize) + __m.writeTo(_output__) + }; unknownFields.writeTo(_output__) } def getVertexAiInferencerConfig: snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig = inferencerConfig.vertexAiInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig.defaultInstance) @@ -79,6 +89,8 @@ final case class InferencerResourceConfig( def withLocalInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.LocalResourceConfig): InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.LocalInferencerConfig(__v)) def getVertexAiGraphStoreInferencerConfig: snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig = inferencerConfig.vertexAiGraphStoreInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig.defaultInstance) def withVertexAiGraphStoreInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig): InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiGraphStoreInferencerConfig(__v)) + def getCustomInferencerConfig: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig = inferencerConfig.customInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig.defaultInstance) + def withCustomInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig): InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(__v)) def clearInferencerConfig: InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.Empty) def withInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig): InferencerResourceConfig = copy(inferencerConfig = __v) def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v) @@ -89,6 +101,7 @@ final case class InferencerResourceConfig( case 2 => inferencerConfig.dataflowInferencerConfig.orNull case 3 => inferencerConfig.localInferencerConfig.orNull case 4 => inferencerConfig.vertexAiGraphStoreInferencerConfig.orNull + case 5 => inferencerConfig.customInferencerConfig.orNull } } def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = { @@ -98,6 +111,7 @@ final case class InferencerResourceConfig( case 2 => inferencerConfig.dataflowInferencerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) case 3 => inferencerConfig.localInferencerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) case 4 => inferencerConfig.vertexAiGraphStoreInferencerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) + case 5 => inferencerConfig.customInferencerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) @@ -123,6 +137,8 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch __inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.LocalInferencerConfig(__inferencerConfig.localInferencerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) case 34 => __inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiGraphStoreInferencerConfig(__inferencerConfig.vertexAiGraphStoreInferencerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) + case 42 => + __inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(__inferencerConfig.customInferencerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) case tag => if (_unknownFields__ == null) { _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder() @@ -143,12 +159,13 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch .orElse[snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.DataflowResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.DataflowInferencerConfig(_))) .orElse[snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.LocalInferencerConfig(_))) .orElse[snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiGraphStoreInferencerConfig(_))) + .orElse[snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(_))) .getOrElse(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.Empty) ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(13) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(13) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(14) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(14) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { @@ -156,6 +173,7 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch case 2 => __out = snapchat.research.gbml.gigl_resource_config.DataflowResourceConfig case 3 => __out = snapchat.research.gbml.gigl_resource_config.LocalResourceConfig case 4 => __out = snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig + case 5 => __out = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig } __out } @@ -171,10 +189,12 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch def isDataflowInferencerConfig: _root_.scala.Boolean = false def isLocalInferencerConfig: _root_.scala.Boolean = false def isVertexAiGraphStoreInferencerConfig: _root_.scala.Boolean = false + def isCustomInferencerConfig: _root_.scala.Boolean = false def vertexAiInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig] = _root_.scala.None def dataflowInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.DataflowResourceConfig] = _root_.scala.None def localInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig] = _root_.scala.None def vertexAiGraphStoreInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = _root_.scala.None + def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scala.None } object InferencerConfig { @SerialVersionUID(0L) @@ -214,18 +234,27 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch override def vertexAiGraphStoreInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = Some(value) override def number: _root_.scala.Int = 4 } + @SerialVersionUID(0L) + final case class CustomInferencerConfig(value: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig) extends snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig { + type ValueType = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig + override def isCustomInferencerConfig: _root_.scala.Boolean = true + override def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = Some(value) + override def number: _root_.scala.Int = 5 + } } implicit class InferencerResourceConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig](_l) { def vertexAiInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig] = field(_.getVertexAiInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiInferencerConfig(f_))) def dataflowInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.DataflowResourceConfig] = field(_.getDataflowInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.DataflowInferencerConfig(f_))) def localInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.LocalResourceConfig] = field(_.getLocalInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.LocalInferencerConfig(f_))) def vertexAiGraphStoreInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = field(_.getVertexAiGraphStoreInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiGraphStoreInferencerConfig(f_))) + def customInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = field(_.getCustomInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(f_))) def inferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig] = field(_.inferencerConfig)((c_, f_) => c_.copy(inferencerConfig = f_)) } final val VERTEX_AI_INFERENCER_CONFIG_FIELD_NUMBER = 1 final val DATAFLOW_INFERENCER_CONFIG_FIELD_NUMBER = 2 final val LOCAL_INFERENCER_CONFIG_FIELD_NUMBER = 3 final val VERTEX_AI_GRAPH_STORE_INFERENCER_CONFIG_FIELD_NUMBER = 4 + final val CUSTOM_INFERENCER_CONFIG_FIELD_NUMBER = 5 def of( inferencerConfig: snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig ): _root_.snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig = _root_.snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig( diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/SharedResourceConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/SharedResourceConfig.scala index 393ebe301..bdeda8bdb 100644 --- a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/SharedResourceConfig.scala +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/SharedResourceConfig.scala @@ -116,8 +116,8 @@ object SharedResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.r ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(14) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(14) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(15) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(15) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/TrainerResourceConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/TrainerResourceConfig.scala index 4249c27fe..829535760 100644 --- a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/TrainerResourceConfig.scala +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/TrainerResourceConfig.scala @@ -32,6 +32,10 @@ final case class TrainerResourceConfig( val __value = trainerConfig.vertexAiGraphStoreTrainerConfig.get __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize }; + if (trainerConfig.customTrainerConfig.isDefined) { + val __value = trainerConfig.customTrainerConfig.get + __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize + }; __size += unknownFields.serializedSize __size } @@ -69,6 +73,12 @@ final case class TrainerResourceConfig( _output__.writeUInt32NoTag(__m.serializedSize) __m.writeTo(_output__) }; + trainerConfig.customTrainerConfig.foreach { __v => + val __m = __v + _output__.writeTag(5, 2) + _output__.writeUInt32NoTag(__m.serializedSize) + __m.writeTo(_output__) + }; unknownFields.writeTo(_output__) } def getVertexAiTrainerConfig: snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig = trainerConfig.vertexAiTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig.defaultInstance) @@ -79,6 +89,8 @@ final case class TrainerResourceConfig( def withLocalTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.LocalResourceConfig): TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.LocalTrainerConfig(__v)) def getVertexAiGraphStoreTrainerConfig: snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig = trainerConfig.vertexAiGraphStoreTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig.defaultInstance) def withVertexAiGraphStoreTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig): TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiGraphStoreTrainerConfig(__v)) + def getCustomTrainerConfig: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig = trainerConfig.customTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig.defaultInstance) + def withCustomTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig): TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(__v)) def clearTrainerConfig: TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.Empty) def withTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig): TrainerResourceConfig = copy(trainerConfig = __v) def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v) @@ -89,6 +101,7 @@ final case class TrainerResourceConfig( case 2 => trainerConfig.kfpTrainerConfig.orNull case 3 => trainerConfig.localTrainerConfig.orNull case 4 => trainerConfig.vertexAiGraphStoreTrainerConfig.orNull + case 5 => trainerConfig.customTrainerConfig.orNull } } def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = { @@ -98,6 +111,7 @@ final case class TrainerResourceConfig( case 2 => trainerConfig.kfpTrainerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) case 3 => trainerConfig.localTrainerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) case 4 => trainerConfig.vertexAiGraphStoreTrainerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) + case 5 => trainerConfig.customTrainerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) @@ -123,6 +137,8 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. __trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.LocalTrainerConfig(__trainerConfig.localTrainerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) case 34 => __trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiGraphStoreTrainerConfig(__trainerConfig.vertexAiGraphStoreTrainerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) + case 42 => + __trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(__trainerConfig.customTrainerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) case tag => if (_unknownFields__ == null) { _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder() @@ -143,12 +159,13 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. .orElse[snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.KFPResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.KfpTrainerConfig(_))) .orElse[snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.LocalTrainerConfig(_))) .orElse[snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiGraphStoreTrainerConfig(_))) + .orElse[snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(_))) .getOrElse(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.Empty) ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(12) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(12) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(13) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(13) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { @@ -156,6 +173,7 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. case 2 => __out = snapchat.research.gbml.gigl_resource_config.KFPResourceConfig case 3 => __out = snapchat.research.gbml.gigl_resource_config.LocalResourceConfig case 4 => __out = snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig + case 5 => __out = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig } __out } @@ -171,10 +189,12 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. def isKfpTrainerConfig: _root_.scala.Boolean = false def isLocalTrainerConfig: _root_.scala.Boolean = false def isVertexAiGraphStoreTrainerConfig: _root_.scala.Boolean = false + def isCustomTrainerConfig: _root_.scala.Boolean = false def vertexAiTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig] = _root_.scala.None def kfpTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.KFPResourceConfig] = _root_.scala.None def localTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig] = _root_.scala.None def vertexAiGraphStoreTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = _root_.scala.None + def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scala.None } object TrainerConfig { @SerialVersionUID(0L) @@ -214,18 +234,27 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. override def vertexAiGraphStoreTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = Some(value) override def number: _root_.scala.Int = 4 } + @SerialVersionUID(0L) + final case class CustomTrainerConfig(value: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig) extends snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig { + type ValueType = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig + override def isCustomTrainerConfig: _root_.scala.Boolean = true + override def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = Some(value) + override def number: _root_.scala.Int = 5 + } } implicit class TrainerResourceConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig](_l) { def vertexAiTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig] = field(_.getVertexAiTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiTrainerConfig(f_))) def kfpTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.KFPResourceConfig] = field(_.getKfpTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.KfpTrainerConfig(f_))) def localTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.LocalResourceConfig] = field(_.getLocalTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.LocalTrainerConfig(f_))) def vertexAiGraphStoreTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = field(_.getVertexAiGraphStoreTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiGraphStoreTrainerConfig(f_))) + def customTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = field(_.getCustomTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(f_))) def trainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig] = field(_.trainerConfig)((c_, f_) => c_.copy(trainerConfig = f_)) } final val VERTEX_AI_TRAINER_CONFIG_FIELD_NUMBER = 1 final val KFP_TRAINER_CONFIG_FIELD_NUMBER = 2 final val LOCAL_TRAINER_CONFIG_FIELD_NUMBER = 3 final val VERTEX_AI_GRAPH_STORE_TRAINER_CONFIG_FIELD_NUMBER = 4 + final val CUSTOM_TRAINER_CONFIG_FIELD_NUMBER = 5 def of( trainerConfig: snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig ): _root_.snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig = _root_.snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig( diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala new file mode 100644 index 000000000..4eb76518b --- /dev/null +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala @@ -0,0 +1,159 @@ +// Generated by the Scala Plugin for the Protocol Buffer Compiler. +// Do not edit! +// +// Protofile syntax: PROTO3 + +package snapchat.research.gbml.gigl_resource_config + +/** Lets user-defined launchers be piped in. + * The launcher dispatcher invokes `command` (interpreted by /bin/sh -c so + * leading "KEY=VALUE" assignments parse as inline env vars) with `args` + * appended as positional arguments. Both fields are taken verbatim by + * the dispatcher; any templating or substitution is the caller's + * responsibility (e.g. OmegaConf-resolved at YAML-load time). + * + * @param command + * Shell snippet invoked via /bin/sh -c. Leading "KEY=VALUE" assignments + * are honored by the shell, so callers can inline env vars (e.g. + * "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python python -m my.cli"). + * @param args + * Positional arguments appended after the command. Each element is + * shell-quoted by the dispatcher so values containing spaces/quotes + * survive the shell pass. + * e.g. "[--my_flag=my_value, --my_other_flag=my_other_value, --noskip_training]" + */ +@SerialVersionUID(0L) +final case class CustomLauncherConfig( + command: _root_.scala.Predef.String = "", + args: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty, + unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty + ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CustomLauncherConfig] { + @transient + private[this] var __serializedSizeMemoized: _root_.scala.Int = 0 + private[this] def __computeSerializedSize(): _root_.scala.Int = { + var __size = 0 + + { + val __value = command + if (!__value.isEmpty) { + __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value) + } + }; + args.foreach { __item => + val __value = __item + __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value) + } + __size += unknownFields.serializedSize + __size + } + override def serializedSize: _root_.scala.Int = { + var __size = __serializedSizeMemoized + if (__size == 0) { + __size = __computeSerializedSize() + 1 + __serializedSizeMemoized = __size + } + __size - 1 + + } + def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = { + { + val __v = command + if (!__v.isEmpty) { + _output__.writeString(1, __v) + } + }; + args.foreach { __v => + val __m = __v + _output__.writeString(2, __m) + }; + unknownFields.writeTo(_output__) + } + def withCommand(__v: _root_.scala.Predef.String): CustomLauncherConfig = copy(command = __v) + def clearArgs = copy(args = _root_.scala.Seq.empty) + def addArgs(__vs: _root_.scala.Predef.String *): CustomLauncherConfig = addAllArgs(__vs) + def addAllArgs(__vs: Iterable[_root_.scala.Predef.String]): CustomLauncherConfig = copy(args = args ++ __vs) + def withArgs(__v: _root_.scala.Seq[_root_.scala.Predef.String]): CustomLauncherConfig = copy(args = __v) + def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v) + def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty) + def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = { + (__fieldNumber: @_root_.scala.unchecked) match { + case 1 => { + val __t = command + if (__t != "") __t else null + } + case 2 => args + } + } + def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = { + _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor) + (__field.number: @_root_.scala.unchecked) match { + case 1 => _root_.scalapb.descriptors.PString(command) + case 2 => _root_.scalapb.descriptors.PRepeated(args.iterator.map(_root_.scalapb.descriptors.PString(_)).toVector) + } + } + def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) + def companion: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig.type = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig + // @@protoc_insertion_point(GeneratedMessage[snapchat.research.gbml.CustomLauncherConfig]) +} + +object CustomLauncherConfig extends scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] { + implicit def messageCompanion: scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = this + def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig = { + var __command: _root_.scala.Predef.String = "" + val __args: _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String] = new _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String] + var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null + var _done__ = false + while (!_done__) { + val _tag__ = _input__.readTag() + _tag__ match { + case 0 => _done__ = true + case 10 => + __command = _input__.readStringRequireUtf8() + case 18 => + __args += _input__.readStringRequireUtf8() + case tag => + if (_unknownFields__ == null) { + _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder() + } + _unknownFields__.parseField(tag, _input__) + } + } + snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( + command = __command, + args = __args.result(), + unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result() + ) + } + implicit def messageReads: _root_.scalapb.descriptors.Reads[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scalapb.descriptors.Reads{ + case _root_.scalapb.descriptors.PMessage(__fieldsMap) => + _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.") + snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( + command = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""), + args = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Seq[_root_.scala.Predef.String]]).getOrElse(_root_.scala.Seq.empty) + ) + case _ => throw new RuntimeException("Expected PMessage") + } + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(11) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(11) + def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number) + lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty + def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber) + lazy val defaultInstance = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( + command = "", + args = _root_.scala.Seq.empty + ) + implicit class CustomLauncherConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig](_l) { + def command: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.command)((c_, f_) => c_.copy(command = f_)) + def args: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[_root_.scala.Predef.String]] = field(_.args)((c_, f_) => c_.copy(args = f_)) + } + final val COMMAND_FIELD_NUMBER = 1 + final val ARGS_FIELD_NUMBER = 2 + def of( + command: _root_.scala.Predef.String, + args: _root_.scala.Seq[_root_.scala.Predef.String] + ): _root_.snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig = _root_.snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( + command, + args + ) + // @@protoc_insertion_point(GeneratedMessageCompanion[snapchat.research.gbml.CustomLauncherConfig]) +} diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/DistributedTrainerConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/DistributedTrainerConfig.scala index 676b61794..60313b1cc 100644 --- a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/DistributedTrainerConfig.scala +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/DistributedTrainerConfig.scala @@ -131,8 +131,8 @@ object DistributedTrainerConfig extends scalapb.GeneratedMessageCompanion[snapch ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(11) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(11) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(12) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(12) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfig.scala index d88d363e9..16ff1d6a6 100644 --- a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfig.scala +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfig.scala @@ -275,8 +275,8 @@ object GiglResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.res ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(15) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(15) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(16) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(16) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfigProto.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfigProto.scala index a086f6113..ffab5e503 100644 --- a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfigProto.scala +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/GiglResourceConfigProto.scala @@ -20,6 +20,7 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { snapchat.research.gbml.gigl_resource_config.KFPResourceConfig, snapchat.research.gbml.gigl_resource_config.LocalResourceConfig, snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig, + snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig, snapchat.research.gbml.gigl_resource_config.DistributedTrainerConfig, snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig, snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig, @@ -65,65 +66,70 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { AEoCzIuLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlSZXNvdXJjZUNvbmZpZ0IT4j8QEg5ncmFwaFN0b3JlUG9vbFIOZ 3JhcGhTdG9yZVBvb2wSYwoMY29tcHV0ZV9wb29sGAIgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291c mNlQ29uZmlnQhDiPw0SC2NvbXB1dGVQb29sUgtjb21wdXRlUG9vbBJpCiBjb21wdXRlX2NsdXN0ZXJfbG9jYWxfd29ybGRfc2l6Z - RgDIAEoBUIh4j8eEhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplUhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplIp0DC - hhEaXN0cmlidXRlZFRyYWluZXJDb25maWcShAEKGHZlcnRleF9haV90cmFpbmVyX2NvbmZpZxgBIAEoCzItLnNuYXBjaGF0LnJlc - 2VhcmNoLmdibWwuVmVydGV4QWlUcmFpbmVyQ29uZmlnQhriPxcSFXZlcnRleEFpVHJhaW5lckNvbmZpZ0gAUhV2ZXJ0ZXhBaVRyY - WluZXJDb25maWcSbwoSa2ZwX3RyYWluZXJfY29uZmlnGAIgASgLMiguc25hcGNoYXQucmVzZWFyY2guZ2JtbC5LRlBUcmFpbmVyQ - 29uZmlnQhXiPxISEGtmcFRyYWluZXJDb25maWdIAFIQa2ZwVHJhaW5lckNvbmZpZxJ3ChRsb2NhbF90cmFpbmVyX2NvbmZpZxgDI - AEoCzIqLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuTG9jYWxUcmFpbmVyQ29uZmlnQhfiPxQSEmxvY2FsVHJhaW5lckNvbmZpZ0gAU - hJsb2NhbFRyYWluZXJDb25maWdCEAoOdHJhaW5lcl9jb25maWcixwQKFVRyYWluZXJSZXNvdXJjZUNvbmZpZxKFAQoYdmVydGV4X - 2FpX3RyYWluZXJfY29uZmlnGAEgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291cmNlQ29uZmlnQhriP - xcSFXZlcnRleEFpVHJhaW5lckNvbmZpZ0gAUhV2ZXJ0ZXhBaVRyYWluZXJDb25maWcScAoSa2ZwX3RyYWluZXJfY29uZmlnGAIgA - SgLMikuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5LRlBSZXNvdXJjZUNvbmZpZ0IV4j8SEhBrZnBUcmFpbmVyQ29uZmlnSABSEGtmc - FRyYWluZXJDb25maWcSeAoUbG9jYWxfdHJhaW5lcl9jb25maWcYAyABKAsyKy5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLkxvY2FsU - mVzb3VyY2VDb25maWdCF+I/FBISbG9jYWxUcmFpbmVyQ29uZmlnSABSEmxvY2FsVHJhaW5lckNvbmZpZxKnAQokdmVydGV4X2FpX - 2dyYXBoX3N0b3JlX3RyYWluZXJfY29uZmlnGAQgASgLMjAuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaUdyYXBoU3Rvc - mVDb25maWdCJOI/IRIfdmVydGV4QWlHcmFwaFN0b3JlVHJhaW5lckNvbmZpZ0gAUh92ZXJ0ZXhBaUdyYXBoU3RvcmVUcmFpbmVyQ - 29uZmlnQhAKDnRyYWluZXJfY29uZmlnIocFChhJbmZlcmVuY2VyUmVzb3VyY2VDb25maWcSjgEKG3ZlcnRleF9haV9pbmZlcmVuY - 2VyX2NvbmZpZxgBIAEoCzIuLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlSZXNvdXJjZUNvbmZpZ0Id4j8aEhh2ZXJ0Z - XhBaUluZmVyZW5jZXJDb25maWdIAFIYdmVydGV4QWlJbmZlcmVuY2VyQ29uZmlnEo0BChpkYXRhZmxvd19pbmZlcmVuY2VyX2Nvb - mZpZxgCIAEoCzIuLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuRGF0YWZsb3dSZXNvdXJjZUNvbmZpZ0Id4j8aEhhkYXRhZmxvd0luZ - mVyZW5jZXJDb25maWdIAFIYZGF0YWZsb3dJbmZlcmVuY2VyQ29uZmlnEoEBChdsb2NhbF9pbmZlcmVuY2VyX2NvbmZpZxgDIAEoC - zIrLnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuTG9jYWxSZXNvdXJjZUNvbmZpZ0Ia4j8XEhVsb2NhbEluZmVyZW5jZXJDb25maWdIA - FIVbG9jYWxJbmZlcmVuY2VyQ29uZmlnErABCid2ZXJ0ZXhfYWlfZ3JhcGhfc3RvcmVfaW5mZXJlbmNlcl9jb25maWcYBCABKAsyM - C5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlZlcnRleEFpR3JhcGhTdG9yZUNvbmZpZ0In4j8kEiJ2ZXJ0ZXhBaUdyYXBoU3RvcmVJb - mZlcmVuY2VyQ29uZmlnSABSInZlcnRleEFpR3JhcGhTdG9yZUluZmVyZW5jZXJDb25maWdCEwoRaW5mZXJlbmNlcl9jb25maWcil - wgKFFNoYXJlZFJlc291cmNlQ29uZmlnEn4KD3Jlc291cmNlX2xhYmVscxgBIAMoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU - 2hhcmVkUmVzb3VyY2VDb25maWcuUmVzb3VyY2VMYWJlbHNFbnRyeUIT4j8QEg5yZXNvdXJjZUxhYmVsc1IOcmVzb3VyY2VMYWJlb - HMSjgEKFWNvbW1vbl9jb21wdXRlX2NvbmZpZxgCIAEoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU2hhcmVkUmVzb3VyY2VDb - 25maWcuQ29tbW9uQ29tcHV0ZUNvbmZpZ0IY4j8VEhNjb21tb25Db21wdXRlQ29uZmlnUhNjb21tb25Db21wdXRlQ29uZmlnGpQFC - hNDb21tb25Db21wdXRlQ29uZmlnEiYKB3Byb2plY3QYASABKAlCDOI/CRIHcHJvamVjdFIHcHJvamVjdBIjCgZyZWdpb24YAiABK - AlCC+I/CBIGcmVnaW9uUgZyZWdpb24SQwoSdGVtcF9hc3NldHNfYnVja2V0GAMgASgJQhXiPxISEHRlbXBBc3NldHNCdWNrZXRSE - HRlbXBBc3NldHNCdWNrZXQSXAobdGVtcF9yZWdpb25hbF9hc3NldHNfYnVja2V0GAQgASgJQh3iPxoSGHRlbXBSZWdpb25hbEFzc - 2V0c0J1Y2tldFIYdGVtcFJlZ2lvbmFsQXNzZXRzQnVja2V0EkMKEnBlcm1fYXNzZXRzX2J1Y2tldBgFIAEoCUIV4j8SEhBwZXJtQ - XNzZXRzQnVja2V0UhBwZXJtQXNzZXRzQnVja2V0EloKG3RlbXBfYXNzZXRzX2JxX2RhdGFzZXRfbmFtZRgGIAEoCUIc4j8ZEhd0Z - W1wQXNzZXRzQnFEYXRhc2V0TmFtZVIXdGVtcEFzc2V0c0JxRGF0YXNldE5hbWUSVgoZZW1iZWRkaW5nX2JxX2RhdGFzZXRfbmFtZ - RgHIAEoCUIb4j8YEhZlbWJlZGRpbmdCcURhdGFzZXROYW1lUhZlbWJlZGRpbmdCcURhdGFzZXROYW1lElYKGWdjcF9zZXJ2aWNlX - 2FjY291bnRfZW1haWwYCCABKAlCG+I/GBIWZ2NwU2VydmljZUFjY291bnRFbWFpbFIWZ2NwU2VydmljZUFjY291bnRFbWFpbBI8C - g9kYXRhZmxvd19ydW5uZXIYCyABKAlCE+I/EBIOZGF0YWZsb3dSdW5uZXJSDmRhdGFmbG93UnVubmVyGlcKE1Jlc291cmNlTGFiZ - WxzRW50cnkSGgoDa2V5GAEgASgJQgjiPwUSA2tleVIDa2V5EiAKBXZhbHVlGAIgASgJQgriPwcSBXZhbHVlUgV2YWx1ZToCOAEi9 - wgKEkdpZ2xSZXNvdXJjZUNvbmZpZxJbChpzaGFyZWRfcmVzb3VyY2VfY29uZmlnX3VyaRgBIAEoCUIc4j8ZEhdzaGFyZWRSZXNvd - XJjZUNvbmZpZ1VyaUgAUhdzaGFyZWRSZXNvdXJjZUNvbmZpZ1VyaRJ/ChZzaGFyZWRfcmVzb3VyY2VfY29uZmlnGAIgASgLMiwuc - 25hcGNoYXQucmVzZWFyY2guZ2JtbC5TaGFyZWRSZXNvdXJjZUNvbmZpZ0IZ4j8WEhRzaGFyZWRSZXNvdXJjZUNvbmZpZ0gAUhRza - GFyZWRSZXNvdXJjZUNvbmZpZxJ4ChNwcmVwcm9jZXNzb3JfY29uZmlnGAwgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EY - XRhUHJlcHJvY2Vzc29yQ29uZmlnQhfiPxQSEnByZXByb2Nlc3NvckNvbmZpZ1IScHJlcHJvY2Vzc29yQ29uZmlnEn8KF3N1YmdyY - XBoX3NhbXBsZXJfY29uZmlnGA0gASgLMisuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5TcGFya1Jlc291cmNlQ29uZmlnQhriPxcSF - XN1YmdyYXBoU2FtcGxlckNvbmZpZ1IVc3ViZ3JhcGhTYW1wbGVyQ29uZmlnEnwKFnNwbGl0X2dlbmVyYXRvcl9jb25maWcYDiABK - AsyKy5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlNwYXJrUmVzb3VyY2VDb25maWdCGeI/FhIUc3BsaXRHZW5lcmF0b3JDb25maWdSF - HNwbGl0R2VuZXJhdG9yQ29uZmlnEm0KDnRyYWluZXJfY29uZmlnGA8gASgLMjAuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EaXN0c - mlidXRlZFRyYWluZXJDb25maWdCFBgB4j8PEg10cmFpbmVyQ29uZmlnUg10cmFpbmVyQ29uZmlnEnQKEWluZmVyZW5jZXJfY29uZ - mlnGBAgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EYXRhZmxvd1Jlc291cmNlQ29uZmlnQhcYAeI/EhIQaW5mZXJlbmNlc - kNvbmZpZ1IQaW5mZXJlbmNlckNvbmZpZxKBAQoXdHJhaW5lcl9yZXNvdXJjZV9jb25maWcYESABKAsyLS5zbmFwY2hhdC5yZXNlY - XJjaC5nYm1sLlRyYWluZXJSZXNvdXJjZUNvbmZpZ0Ia4j8XEhV0cmFpbmVyUmVzb3VyY2VDb25maWdSFXRyYWluZXJSZXNvdXJjZ - UNvbmZpZxKNAQoaaW5mZXJlbmNlcl9yZXNvdXJjZV9jb25maWcYEiABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLkluZmVyZ - W5jZXJSZXNvdXJjZUNvbmZpZ0Id4j8aEhhpbmZlcmVuY2VyUmVzb3VyY2VDb25maWdSGGluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZ - 0IRCg9zaGFyZWRfcmVzb3VyY2Uq4wMKCUNvbXBvbmVudBItChFDb21wb25lbnRfVW5rbm93bhAAGhbiPxMSEUNvbXBvbmVudF9Vb - mtub3duEj8KGkNvbXBvbmVudF9Db25maWdfVmFsaWRhdG9yEAEaH+I/HBIaQ29tcG9uZW50X0NvbmZpZ19WYWxpZGF0b3ISPwoaQ - 29tcG9uZW50X0NvbmZpZ19Qb3B1bGF0b3IQAhof4j8cEhpDb21wb25lbnRfQ29uZmlnX1BvcHVsYXRvchJBChtDb21wb25lbnRfR - GF0YV9QcmVwcm9jZXNzb3IQAxog4j8dEhtDb21wb25lbnRfRGF0YV9QcmVwcm9jZXNzb3ISPwoaQ29tcG9uZW50X1N1YmdyYXBoX - 1NhbXBsZXIQBBof4j8cEhpDb21wb25lbnRfU3ViZ3JhcGhfU2FtcGxlchI9ChlDb21wb25lbnRfU3BsaXRfR2VuZXJhdG9yEAUaH - uI/GxIZQ29tcG9uZW50X1NwbGl0X0dlbmVyYXRvchItChFDb21wb25lbnRfVHJhaW5lchAGGhbiPxMSEUNvbXBvbmVudF9UcmFpb - mVyEjMKFENvbXBvbmVudF9JbmZlcmVuY2VyEAcaGeI/FhIUQ29tcG9uZW50X0luZmVyZW5jZXJiBnByb3RvMw==""" + RgDIAEoBUIh4j8eEhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplUhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplIl0KF + EN1c3RvbUxhdW5jaGVyQ29uZmlnEiYKB2NvbW1hbmQYASABKAlCDOI/CRIHY29tbWFuZFIHY29tbWFuZBIdCgRhcmdzGAIgAygJQ + gniPwYSBGFyZ3NSBGFyZ3MinQMKGERpc3RyaWJ1dGVkVHJhaW5lckNvbmZpZxKEAQoYdmVydGV4X2FpX3RyYWluZXJfY29uZmlnG + AEgASgLMi0uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVRyYWluZXJDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ + 29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJvChJrZnBfdHJhaW5lcl9jb25maWcYAiABKAsyKC5zbmFwY2hhdC5yZXNlY + XJjaC5nYm1sLktGUFRyYWluZXJDb25maWdCFeI/EhIQa2ZwVHJhaW5lckNvbmZpZ0gAUhBrZnBUcmFpbmVyQ29uZmlnEncKFGxvY + 2FsX3RyYWluZXJfY29uZmlnGAMgASgLMiouc25hcGNoYXQucmVzZWFyY2guZ2JtbC5Mb2NhbFRyYWluZXJDb25maWdCF+I/FBISb + G9jYWxUcmFpbmVyQ29uZmlnSABSEmxvY2FsVHJhaW5lckNvbmZpZ0IQCg50cmFpbmVyX2NvbmZpZyLFBQoVVHJhaW5lclJlc291c + mNlQ29uZmlnEoUBChh2ZXJ0ZXhfYWlfdHJhaW5lcl9jb25maWcYASABKAsyLi5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlZlcnRle + EFpUmVzb3VyY2VDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJwChJrZ + nBfdHJhaW5lcl9jb25maWcYAiABKAsyKS5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLktGUFJlc291cmNlQ29uZmlnQhXiPxISEGtmc + FRyYWluZXJDb25maWdIAFIQa2ZwVHJhaW5lckNvbmZpZxJ4ChRsb2NhbF90cmFpbmVyX2NvbmZpZxgDIAEoCzIrLnNuYXBjaGF0L + nJlc2VhcmNoLmdibWwuTG9jYWxSZXNvdXJjZUNvbmZpZ0IX4j8UEhJsb2NhbFRyYWluZXJDb25maWdIAFISbG9jYWxUcmFpbmVyQ + 29uZmlnEqcBCiR2ZXJ0ZXhfYWlfZ3JhcGhfc3RvcmVfdHJhaW5lcl9jb25maWcYBCABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nY + m1sLlZlcnRleEFpR3JhcGhTdG9yZUNvbmZpZ0Ik4j8hEh92ZXJ0ZXhBaUdyYXBoU3RvcmVUcmFpbmVyQ29uZmlnSABSH3ZlcnRle + EFpR3JhcGhTdG9yZVRyYWluZXJDb25maWcSfAoVY3VzdG9tX3RyYWluZXJfY29uZmlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY + 2guZ2JtbC5DdXN0b21MYXVuY2hlckNvbmZpZ0IY4j8VEhNjdXN0b21UcmFpbmVyQ29uZmlnSABSE2N1c3RvbVRyYWluZXJDb25ma + WdCEAoOdHJhaW5lcl9jb25maWcijwYKGEluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZxKOAQobdmVydGV4X2FpX2luZmVyZW5jZXJfY + 29uZmlnGAEgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291cmNlQ29uZmlnQh3iPxoSGHZlcnRleEFpS + W5mZXJlbmNlckNvbmZpZ0gAUhh2ZXJ0ZXhBaUluZmVyZW5jZXJDb25maWcSjQEKGmRhdGFmbG93X2luZmVyZW5jZXJfY29uZmlnG + AIgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EYXRhZmxvd1Jlc291cmNlQ29uZmlnQh3iPxoSGGRhdGFmbG93SW5mZXJlb + mNlckNvbmZpZ0gAUhhkYXRhZmxvd0luZmVyZW5jZXJDb25maWcSgQEKF2xvY2FsX2luZmVyZW5jZXJfY29uZmlnGAMgASgLMisuc + 25hcGNoYXQucmVzZWFyY2guZ2JtbC5Mb2NhbFJlc291cmNlQ29uZmlnQhriPxcSFWxvY2FsSW5mZXJlbmNlckNvbmZpZ0gAUhVsb + 2NhbEluZmVyZW5jZXJDb25maWcSsAEKJ3ZlcnRleF9haV9ncmFwaF9zdG9yZV9pbmZlcmVuY2VyX2NvbmZpZxgEIAEoCzIwLnNuY + XBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlHcmFwaFN0b3JlQ29uZmlnQifiPyQSInZlcnRleEFpR3JhcGhTdG9yZUluZmVyZ + W5jZXJDb25maWdIAFIidmVydGV4QWlHcmFwaFN0b3JlSW5mZXJlbmNlckNvbmZpZxKFAQoYY3VzdG9tX2luZmVyZW5jZXJfY29uZ + mlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5DdXN0b21MYXVuY2hlckNvbmZpZ0Ib4j8YEhZjdXN0b21JbmZlcmVuY + 2VyQ29uZmlnSABSFmN1c3RvbUluZmVyZW5jZXJDb25maWdCEwoRaW5mZXJlbmNlcl9jb25maWcilwgKFFNoYXJlZFJlc291cmNlQ + 29uZmlnEn4KD3Jlc291cmNlX2xhYmVscxgBIAMoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU2hhcmVkUmVzb3VyY2VDb25ma + WcuUmVzb3VyY2VMYWJlbHNFbnRyeUIT4j8QEg5yZXNvdXJjZUxhYmVsc1IOcmVzb3VyY2VMYWJlbHMSjgEKFWNvbW1vbl9jb21wd + XRlX2NvbmZpZxgCIAEoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU2hhcmVkUmVzb3VyY2VDb25maWcuQ29tbW9uQ29tcHV0Z + UNvbmZpZ0IY4j8VEhNjb21tb25Db21wdXRlQ29uZmlnUhNjb21tb25Db21wdXRlQ29uZmlnGpQFChNDb21tb25Db21wdXRlQ29uZ + mlnEiYKB3Byb2plY3QYASABKAlCDOI/CRIHcHJvamVjdFIHcHJvamVjdBIjCgZyZWdpb24YAiABKAlCC+I/CBIGcmVnaW9uUgZyZ + Wdpb24SQwoSdGVtcF9hc3NldHNfYnVja2V0GAMgASgJQhXiPxISEHRlbXBBc3NldHNCdWNrZXRSEHRlbXBBc3NldHNCdWNrZXQSX + AobdGVtcF9yZWdpb25hbF9hc3NldHNfYnVja2V0GAQgASgJQh3iPxoSGHRlbXBSZWdpb25hbEFzc2V0c0J1Y2tldFIYdGVtcFJlZ + 2lvbmFsQXNzZXRzQnVja2V0EkMKEnBlcm1fYXNzZXRzX2J1Y2tldBgFIAEoCUIV4j8SEhBwZXJtQXNzZXRzQnVja2V0UhBwZXJtQ + XNzZXRzQnVja2V0EloKG3RlbXBfYXNzZXRzX2JxX2RhdGFzZXRfbmFtZRgGIAEoCUIc4j8ZEhd0ZW1wQXNzZXRzQnFEYXRhc2V0T + mFtZVIXdGVtcEFzc2V0c0JxRGF0YXNldE5hbWUSVgoZZW1iZWRkaW5nX2JxX2RhdGFzZXRfbmFtZRgHIAEoCUIb4j8YEhZlbWJlZ + GRpbmdCcURhdGFzZXROYW1lUhZlbWJlZGRpbmdCcURhdGFzZXROYW1lElYKGWdjcF9zZXJ2aWNlX2FjY291bnRfZW1haWwYCCABK + AlCG+I/GBIWZ2NwU2VydmljZUFjY291bnRFbWFpbFIWZ2NwU2VydmljZUFjY291bnRFbWFpbBI8Cg9kYXRhZmxvd19ydW5uZXIYC + yABKAlCE+I/EBIOZGF0YWZsb3dSdW5uZXJSDmRhdGFmbG93UnVubmVyGlcKE1Jlc291cmNlTGFiZWxzRW50cnkSGgoDa2V5GAEgA + SgJQgjiPwUSA2tleVIDa2V5EiAKBXZhbHVlGAIgASgJQgriPwcSBXZhbHVlUgV2YWx1ZToCOAEi9wgKEkdpZ2xSZXNvdXJjZUNvb + mZpZxJbChpzaGFyZWRfcmVzb3VyY2VfY29uZmlnX3VyaRgBIAEoCUIc4j8ZEhdzaGFyZWRSZXNvdXJjZUNvbmZpZ1VyaUgAUhdza + GFyZWRSZXNvdXJjZUNvbmZpZ1VyaRJ/ChZzaGFyZWRfcmVzb3VyY2VfY29uZmlnGAIgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ + 2JtbC5TaGFyZWRSZXNvdXJjZUNvbmZpZ0IZ4j8WEhRzaGFyZWRSZXNvdXJjZUNvbmZpZ0gAUhRzaGFyZWRSZXNvdXJjZUNvbmZpZ + xJ4ChNwcmVwcm9jZXNzb3JfY29uZmlnGAwgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EYXRhUHJlcHJvY2Vzc29yQ29uZ + mlnQhfiPxQSEnByZXByb2Nlc3NvckNvbmZpZ1IScHJlcHJvY2Vzc29yQ29uZmlnEn8KF3N1YmdyYXBoX3NhbXBsZXJfY29uZmlnG + A0gASgLMisuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5TcGFya1Jlc291cmNlQ29uZmlnQhriPxcSFXN1YmdyYXBoU2FtcGxlckNvb + mZpZ1IVc3ViZ3JhcGhTYW1wbGVyQ29uZmlnEnwKFnNwbGl0X2dlbmVyYXRvcl9jb25maWcYDiABKAsyKy5zbmFwY2hhdC5yZXNlY + XJjaC5nYm1sLlNwYXJrUmVzb3VyY2VDb25maWdCGeI/FhIUc3BsaXRHZW5lcmF0b3JDb25maWdSFHNwbGl0R2VuZXJhdG9yQ29uZ + mlnEm0KDnRyYWluZXJfY29uZmlnGA8gASgLMjAuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EaXN0cmlidXRlZFRyYWluZXJDb25ma + WdCFBgB4j8PEg10cmFpbmVyQ29uZmlnUg10cmFpbmVyQ29uZmlnEnQKEWluZmVyZW5jZXJfY29uZmlnGBAgASgLMi4uc25hcGNoY + XQucmVzZWFyY2guZ2JtbC5EYXRhZmxvd1Jlc291cmNlQ29uZmlnQhcYAeI/EhIQaW5mZXJlbmNlckNvbmZpZ1IQaW5mZXJlbmNlc + kNvbmZpZxKBAQoXdHJhaW5lcl9yZXNvdXJjZV9jb25maWcYESABKAsyLS5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlRyYWluZXJSZ + XNvdXJjZUNvbmZpZ0Ia4j8XEhV0cmFpbmVyUmVzb3VyY2VDb25maWdSFXRyYWluZXJSZXNvdXJjZUNvbmZpZxKNAQoaaW5mZXJlb + mNlcl9yZXNvdXJjZV9jb25maWcYEiABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLkluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZ + 0Id4j8aEhhpbmZlcmVuY2VyUmVzb3VyY2VDb25maWdSGGluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZ0IRCg9zaGFyZWRfcmVzb3VyY + 2Uq4wMKCUNvbXBvbmVudBItChFDb21wb25lbnRfVW5rbm93bhAAGhbiPxMSEUNvbXBvbmVudF9Vbmtub3duEj8KGkNvbXBvbmVud + F9Db25maWdfVmFsaWRhdG9yEAEaH+I/HBIaQ29tcG9uZW50X0NvbmZpZ19WYWxpZGF0b3ISPwoaQ29tcG9uZW50X0NvbmZpZ19Qb + 3B1bGF0b3IQAhof4j8cEhpDb21wb25lbnRfQ29uZmlnX1BvcHVsYXRvchJBChtDb21wb25lbnRfRGF0YV9QcmVwcm9jZXNzb3IQA + xog4j8dEhtDb21wb25lbnRfRGF0YV9QcmVwcm9jZXNzb3ISPwoaQ29tcG9uZW50X1N1YmdyYXBoX1NhbXBsZXIQBBof4j8cEhpDb + 21wb25lbnRfU3ViZ3JhcGhfU2FtcGxlchI9ChlDb21wb25lbnRfU3BsaXRfR2VuZXJhdG9yEAUaHuI/GxIZQ29tcG9uZW50X1Nwb + Gl0X0dlbmVyYXRvchItChFDb21wb25lbnRfVHJhaW5lchAGGhbiPxMSEUNvbXBvbmVudF9UcmFpbmVyEjMKFENvbXBvbmVudF9Jb + mZlcmVuY2VyEAcaGeI/FhIUQ29tcG9uZW50X0luZmVyZW5jZXJiBnByb3RvMw==""" ).mkString) lazy val scalaDescriptor: _root_.scalapb.descriptors.FileDescriptor = { val scalaProto = com.google.protobuf.descriptor.FileDescriptorProto.parseFrom(ProtoBytes) diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/InferencerResourceConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/InferencerResourceConfig.scala index 77a949c19..e37cd9226 100644 --- a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/InferencerResourceConfig.scala +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/InferencerResourceConfig.scala @@ -32,6 +32,10 @@ final case class InferencerResourceConfig( val __value = inferencerConfig.vertexAiGraphStoreInferencerConfig.get __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize }; + if (inferencerConfig.customInferencerConfig.isDefined) { + val __value = inferencerConfig.customInferencerConfig.get + __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize + }; __size += unknownFields.serializedSize __size } @@ -69,6 +73,12 @@ final case class InferencerResourceConfig( _output__.writeUInt32NoTag(__m.serializedSize) __m.writeTo(_output__) }; + inferencerConfig.customInferencerConfig.foreach { __v => + val __m = __v + _output__.writeTag(5, 2) + _output__.writeUInt32NoTag(__m.serializedSize) + __m.writeTo(_output__) + }; unknownFields.writeTo(_output__) } def getVertexAiInferencerConfig: snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig = inferencerConfig.vertexAiInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig.defaultInstance) @@ -79,6 +89,8 @@ final case class InferencerResourceConfig( def withLocalInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.LocalResourceConfig): InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.LocalInferencerConfig(__v)) def getVertexAiGraphStoreInferencerConfig: snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig = inferencerConfig.vertexAiGraphStoreInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig.defaultInstance) def withVertexAiGraphStoreInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig): InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiGraphStoreInferencerConfig(__v)) + def getCustomInferencerConfig: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig = inferencerConfig.customInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig.defaultInstance) + def withCustomInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig): InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(__v)) def clearInferencerConfig: InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.Empty) def withInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig): InferencerResourceConfig = copy(inferencerConfig = __v) def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v) @@ -89,6 +101,7 @@ final case class InferencerResourceConfig( case 2 => inferencerConfig.dataflowInferencerConfig.orNull case 3 => inferencerConfig.localInferencerConfig.orNull case 4 => inferencerConfig.vertexAiGraphStoreInferencerConfig.orNull + case 5 => inferencerConfig.customInferencerConfig.orNull } } def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = { @@ -98,6 +111,7 @@ final case class InferencerResourceConfig( case 2 => inferencerConfig.dataflowInferencerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) case 3 => inferencerConfig.localInferencerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) case 4 => inferencerConfig.vertexAiGraphStoreInferencerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) + case 5 => inferencerConfig.customInferencerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) @@ -123,6 +137,8 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch __inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.LocalInferencerConfig(__inferencerConfig.localInferencerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) case 34 => __inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiGraphStoreInferencerConfig(__inferencerConfig.vertexAiGraphStoreInferencerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) + case 42 => + __inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(__inferencerConfig.customInferencerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) case tag => if (_unknownFields__ == null) { _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder() @@ -143,12 +159,13 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch .orElse[snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.DataflowResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.DataflowInferencerConfig(_))) .orElse[snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.LocalInferencerConfig(_))) .orElse[snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiGraphStoreInferencerConfig(_))) + .orElse[snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(_))) .getOrElse(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.Empty) ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(13) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(13) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(14) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(14) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { @@ -156,6 +173,7 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch case 2 => __out = snapchat.research.gbml.gigl_resource_config.DataflowResourceConfig case 3 => __out = snapchat.research.gbml.gigl_resource_config.LocalResourceConfig case 4 => __out = snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig + case 5 => __out = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig } __out } @@ -171,10 +189,12 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch def isDataflowInferencerConfig: _root_.scala.Boolean = false def isLocalInferencerConfig: _root_.scala.Boolean = false def isVertexAiGraphStoreInferencerConfig: _root_.scala.Boolean = false + def isCustomInferencerConfig: _root_.scala.Boolean = false def vertexAiInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig] = _root_.scala.None def dataflowInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.DataflowResourceConfig] = _root_.scala.None def localInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig] = _root_.scala.None def vertexAiGraphStoreInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = _root_.scala.None + def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scala.None } object InferencerConfig { @SerialVersionUID(0L) @@ -214,18 +234,27 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch override def vertexAiGraphStoreInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = Some(value) override def number: _root_.scala.Int = 4 } + @SerialVersionUID(0L) + final case class CustomInferencerConfig(value: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig) extends snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig { + type ValueType = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig + override def isCustomInferencerConfig: _root_.scala.Boolean = true + override def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = Some(value) + override def number: _root_.scala.Int = 5 + } } implicit class InferencerResourceConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig](_l) { def vertexAiInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig] = field(_.getVertexAiInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiInferencerConfig(f_))) def dataflowInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.DataflowResourceConfig] = field(_.getDataflowInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.DataflowInferencerConfig(f_))) def localInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.LocalResourceConfig] = field(_.getLocalInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.LocalInferencerConfig(f_))) def vertexAiGraphStoreInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = field(_.getVertexAiGraphStoreInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.VertexAiGraphStoreInferencerConfig(f_))) + def customInferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = field(_.getCustomInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(f_))) def inferencerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig] = field(_.inferencerConfig)((c_, f_) => c_.copy(inferencerConfig = f_)) } final val VERTEX_AI_INFERENCER_CONFIG_FIELD_NUMBER = 1 final val DATAFLOW_INFERENCER_CONFIG_FIELD_NUMBER = 2 final val LOCAL_INFERENCER_CONFIG_FIELD_NUMBER = 3 final val VERTEX_AI_GRAPH_STORE_INFERENCER_CONFIG_FIELD_NUMBER = 4 + final val CUSTOM_INFERENCER_CONFIG_FIELD_NUMBER = 5 def of( inferencerConfig: snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig ): _root_.snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig = _root_.snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig( diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/SharedResourceConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/SharedResourceConfig.scala index 393ebe301..bdeda8bdb 100644 --- a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/SharedResourceConfig.scala +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/SharedResourceConfig.scala @@ -116,8 +116,8 @@ object SharedResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.r ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(14) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(14) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(15) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(15) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/TrainerResourceConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/TrainerResourceConfig.scala index 4249c27fe..829535760 100644 --- a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/TrainerResourceConfig.scala +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/TrainerResourceConfig.scala @@ -32,6 +32,10 @@ final case class TrainerResourceConfig( val __value = trainerConfig.vertexAiGraphStoreTrainerConfig.get __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize }; + if (trainerConfig.customTrainerConfig.isDefined) { + val __value = trainerConfig.customTrainerConfig.get + __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize + }; __size += unknownFields.serializedSize __size } @@ -69,6 +73,12 @@ final case class TrainerResourceConfig( _output__.writeUInt32NoTag(__m.serializedSize) __m.writeTo(_output__) }; + trainerConfig.customTrainerConfig.foreach { __v => + val __m = __v + _output__.writeTag(5, 2) + _output__.writeUInt32NoTag(__m.serializedSize) + __m.writeTo(_output__) + }; unknownFields.writeTo(_output__) } def getVertexAiTrainerConfig: snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig = trainerConfig.vertexAiTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig.defaultInstance) @@ -79,6 +89,8 @@ final case class TrainerResourceConfig( def withLocalTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.LocalResourceConfig): TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.LocalTrainerConfig(__v)) def getVertexAiGraphStoreTrainerConfig: snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig = trainerConfig.vertexAiGraphStoreTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig.defaultInstance) def withVertexAiGraphStoreTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig): TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiGraphStoreTrainerConfig(__v)) + def getCustomTrainerConfig: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig = trainerConfig.customTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig.defaultInstance) + def withCustomTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig): TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(__v)) def clearTrainerConfig: TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.Empty) def withTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig): TrainerResourceConfig = copy(trainerConfig = __v) def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v) @@ -89,6 +101,7 @@ final case class TrainerResourceConfig( case 2 => trainerConfig.kfpTrainerConfig.orNull case 3 => trainerConfig.localTrainerConfig.orNull case 4 => trainerConfig.vertexAiGraphStoreTrainerConfig.orNull + case 5 => trainerConfig.customTrainerConfig.orNull } } def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = { @@ -98,6 +111,7 @@ final case class TrainerResourceConfig( case 2 => trainerConfig.kfpTrainerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) case 3 => trainerConfig.localTrainerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) case 4 => trainerConfig.vertexAiGraphStoreTrainerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) + case 5 => trainerConfig.customTrainerConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty) } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) @@ -123,6 +137,8 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. __trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.LocalTrainerConfig(__trainerConfig.localTrainerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) case 34 => __trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiGraphStoreTrainerConfig(__trainerConfig.vertexAiGraphStoreTrainerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) + case 42 => + __trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(__trainerConfig.customTrainerConfig.fold(_root_.scalapb.LiteParser.readMessage[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) case tag => if (_unknownFields__ == null) { _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder() @@ -143,12 +159,13 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. .orElse[snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.KFPResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.KfpTrainerConfig(_))) .orElse[snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.LocalTrainerConfig(_))) .orElse[snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiGraphStoreTrainerConfig(_))) + .orElse[snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).flatMap(_.as[_root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(_))) .getOrElse(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.Empty) ) case _ => throw new RuntimeException("Expected PMessage") } - def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(12) - def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(12) + def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = GiglResourceConfigProto.javaDescriptor.getMessageTypes().get(13) + def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = GiglResourceConfigProto.scalaDescriptor.messages(13) def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = { var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null (__number: @_root_.scala.unchecked) match { @@ -156,6 +173,7 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. case 2 => __out = snapchat.research.gbml.gigl_resource_config.KFPResourceConfig case 3 => __out = snapchat.research.gbml.gigl_resource_config.LocalResourceConfig case 4 => __out = snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig + case 5 => __out = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig } __out } @@ -171,10 +189,12 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. def isKfpTrainerConfig: _root_.scala.Boolean = false def isLocalTrainerConfig: _root_.scala.Boolean = false def isVertexAiGraphStoreTrainerConfig: _root_.scala.Boolean = false + def isCustomTrainerConfig: _root_.scala.Boolean = false def vertexAiTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig] = _root_.scala.None def kfpTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.KFPResourceConfig] = _root_.scala.None def localTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.LocalResourceConfig] = _root_.scala.None def vertexAiGraphStoreTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = _root_.scala.None + def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scala.None } object TrainerConfig { @SerialVersionUID(0L) @@ -214,18 +234,27 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. override def vertexAiGraphStoreTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = Some(value) override def number: _root_.scala.Int = 4 } + @SerialVersionUID(0L) + final case class CustomTrainerConfig(value: snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig) extends snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig { + type ValueType = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig + override def isCustomTrainerConfig: _root_.scala.Boolean = true + override def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = Some(value) + override def number: _root_.scala.Int = 5 + } } implicit class TrainerResourceConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig](_l) { def vertexAiTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.VertexAiResourceConfig] = field(_.getVertexAiTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiTrainerConfig(f_))) def kfpTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.KFPResourceConfig] = field(_.getKfpTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.KfpTrainerConfig(f_))) def localTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.LocalResourceConfig] = field(_.getLocalTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.LocalTrainerConfig(f_))) def vertexAiGraphStoreTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.VertexAiGraphStoreConfig] = field(_.getVertexAiGraphStoreTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.VertexAiGraphStoreTrainerConfig(f_))) + def customTrainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = field(_.getCustomTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(f_))) def trainerConfig: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig] = field(_.trainerConfig)((c_, f_) => c_.copy(trainerConfig = f_)) } final val VERTEX_AI_TRAINER_CONFIG_FIELD_NUMBER = 1 final val KFP_TRAINER_CONFIG_FIELD_NUMBER = 2 final val LOCAL_TRAINER_CONFIG_FIELD_NUMBER = 3 final val VERTEX_AI_GRAPH_STORE_TRAINER_CONFIG_FIELD_NUMBER = 4 + final val CUSTOM_TRAINER_CONFIG_FIELD_NUMBER = 5 def of( trainerConfig: snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig ): _root_.snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig = _root_.snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig( diff --git a/snapchat/research/gbml/gigl_resource_config_pb2.py b/snapchat/research/gbml/gigl_resource_config_pb2.py index bbda8cf57..4646ead41 100644 --- a/snapchat/research/gbml/gigl_resource_config_pb2.py +++ b/snapchat/research/gbml/gigl_resource_config_pb2.py @@ -15,7 +15,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n1snapchat/research/gbml/gigl_resource_config.proto\x12\x16snapchat.research.gbml\"Y\n\x13SparkResourceConfig\x12\x14\n\x0cmachine_type\x18\x01 \x01(\t\x12\x16\n\x0enum_local_ssds\x18\x02 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x03 \x01(\r\"\x83\x01\n\x16\x44\x61taflowResourceConfig\x12\x13\n\x0bnum_workers\x18\x01 \x01(\r\x12\x17\n\x0fmax_num_workers\x18\x02 \x01(\r\x12\x14\n\x0cmachine_type\x18\x03 \x01(\t\x12\x14\n\x0c\x64isk_size_gb\x18\x04 \x01(\r\x12\x0f\n\x07timeout\x18\x05 \x01(\r\"\xbc\x01\n\x16\x44\x61taPreprocessorConfig\x12P\n\x18\x65\x64ge_preprocessor_config\x18\x01 \x01(\x0b\x32..snapchat.research.gbml.DataflowResourceConfig\x12P\n\x18node_preprocessor_config\x18\x02 \x01(\x0b\x32..snapchat.research.gbml.DataflowResourceConfig\"h\n\x15VertexAiTrainerConfig\x12\x14\n\x0cmachine_type\x18\x01 \x01(\t\x12\x10\n\x08gpu_type\x18\x02 \x01(\t\x12\x11\n\tgpu_limit\x18\x03 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x04 \x01(\r\"z\n\x10KFPTrainerConfig\x12\x13\n\x0b\x63pu_request\x18\x01 \x01(\t\x12\x16\n\x0ememory_request\x18\x02 \x01(\t\x12\x10\n\x08gpu_type\x18\x03 \x01(\t\x12\x11\n\tgpu_limit\x18\x04 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x05 \x01(\r\")\n\x12LocalTrainerConfig\x12\x13\n\x0bnum_workers\x18\x01 \x01(\r\"O\n\x1bVertexAiReservationAffinity\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\"\n\x1areservation_resource_names\x18\x02 \x03(\t\"\xa2\x02\n\x16VertexAiResourceConfig\x12\x14\n\x0cmachine_type\x18\x01 \x01(\t\x12\x10\n\x08gpu_type\x18\x02 \x01(\t\x12\x11\n\tgpu_limit\x18\x03 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x04 \x01(\r\x12\x0f\n\x07timeout\x18\x05 \x01(\r\x12\x1b\n\x13gcp_region_override\x18\x06 \x01(\t\x12\x1b\n\x13scheduling_strategy\x18\x07 \x01(\t\x12\x19\n\x11\x62oot_disk_size_gb\x18\x08 \x01(\r\x12Q\n\x14reservation_affinity\x18\t \x01(\x0b\x32\x33.snapchat.research.gbml.VertexAiReservationAffinity\"{\n\x11KFPResourceConfig\x12\x13\n\x0b\x63pu_request\x18\x01 \x01(\t\x12\x16\n\x0ememory_request\x18\x02 \x01(\t\x12\x10\n\x08gpu_type\x18\x03 \x01(\t\x12\x11\n\tgpu_limit\x18\x04 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x05 \x01(\r\"*\n\x13LocalResourceConfig\x12\x13\n\x0bnum_workers\x18\x01 \x01(\r\"\xd4\x01\n\x18VertexAiGraphStoreConfig\x12H\n\x10graph_store_pool\x18\x01 \x01(\x0b\x32..snapchat.research.gbml.VertexAiResourceConfig\x12\x44\n\x0c\x63ompute_pool\x18\x02 \x01(\x0b\x32..snapchat.research.gbml.VertexAiResourceConfig\x12(\n compute_cluster_local_world_size\x18\x03 \x01(\x05\"\x93\x02\n\x18\x44istributedTrainerConfig\x12Q\n\x18vertex_ai_trainer_config\x18\x01 \x01(\x0b\x32-.snapchat.research.gbml.VertexAiTrainerConfigH\x00\x12\x46\n\x12kfp_trainer_config\x18\x02 \x01(\x0b\x32(.snapchat.research.gbml.KFPTrainerConfigH\x00\x12J\n\x14local_trainer_config\x18\x03 \x01(\x0b\x32*.snapchat.research.gbml.LocalTrainerConfigH\x00\x42\x10\n\x0etrainer_config\"\xf5\x02\n\x15TrainerResourceConfig\x12R\n\x18vertex_ai_trainer_config\x18\x01 \x01(\x0b\x32..snapchat.research.gbml.VertexAiResourceConfigH\x00\x12G\n\x12kfp_trainer_config\x18\x02 \x01(\x0b\x32).snapchat.research.gbml.KFPResourceConfigH\x00\x12K\n\x14local_trainer_config\x18\x03 \x01(\x0b\x32+.snapchat.research.gbml.LocalResourceConfigH\x00\x12`\n$vertex_ai_graph_store_trainer_config\x18\x04 \x01(\x0b\x32\x30.snapchat.research.gbml.VertexAiGraphStoreConfigH\x00\x42\x10\n\x0etrainer_config\"\x91\x03\n\x18InferencerResourceConfig\x12U\n\x1bvertex_ai_inferencer_config\x18\x01 \x01(\x0b\x32..snapchat.research.gbml.VertexAiResourceConfigH\x00\x12T\n\x1a\x64\x61taflow_inferencer_config\x18\x02 \x01(\x0b\x32..snapchat.research.gbml.DataflowResourceConfigH\x00\x12N\n\x17local_inferencer_config\x18\x03 \x01(\x0b\x32+.snapchat.research.gbml.LocalResourceConfigH\x00\x12\x63\n\'vertex_ai_graph_store_inferencer_config\x18\x04 \x01(\x0b\x32\x30.snapchat.research.gbml.VertexAiGraphStoreConfigH\x00\x42\x13\n\x11inferencer_config\"\xa3\x04\n\x14SharedResourceConfig\x12Y\n\x0fresource_labels\x18\x01 \x03(\x0b\x32@.snapchat.research.gbml.SharedResourceConfig.ResourceLabelsEntry\x12_\n\x15\x63ommon_compute_config\x18\x02 \x01(\x0b\x32@.snapchat.research.gbml.SharedResourceConfig.CommonComputeConfig\x1a\x97\x02\n\x13\x43ommonComputeConfig\x12\x0f\n\x07project\x18\x01 \x01(\t\x12\x0e\n\x06region\x18\x02 \x01(\t\x12\x1a\n\x12temp_assets_bucket\x18\x03 \x01(\t\x12#\n\x1btemp_regional_assets_bucket\x18\x04 \x01(\t\x12\x1a\n\x12perm_assets_bucket\x18\x05 \x01(\t\x12#\n\x1btemp_assets_bq_dataset_name\x18\x06 \x01(\t\x12!\n\x19\x65mbedding_bq_dataset_name\x18\x07 \x01(\t\x12!\n\x19gcp_service_account_email\x18\x08 \x01(\t\x12\x17\n\x0f\x64\x61taflow_runner\x18\x0b \x01(\t\x1a\x35\n\x13ResourceLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc8\x05\n\x12GiglResourceConfig\x12$\n\x1ashared_resource_config_uri\x18\x01 \x01(\tH\x00\x12N\n\x16shared_resource_config\x18\x02 \x01(\x0b\x32,.snapchat.research.gbml.SharedResourceConfigH\x00\x12K\n\x13preprocessor_config\x18\x0c \x01(\x0b\x32..snapchat.research.gbml.DataPreprocessorConfig\x12L\n\x17subgraph_sampler_config\x18\r \x01(\x0b\x32+.snapchat.research.gbml.SparkResourceConfig\x12K\n\x16split_generator_config\x18\x0e \x01(\x0b\x32+.snapchat.research.gbml.SparkResourceConfig\x12L\n\x0etrainer_config\x18\x0f \x01(\x0b\x32\x30.snapchat.research.gbml.DistributedTrainerConfigB\x02\x18\x01\x12M\n\x11inferencer_config\x18\x10 \x01(\x0b\x32..snapchat.research.gbml.DataflowResourceConfigB\x02\x18\x01\x12N\n\x17trainer_resource_config\x18\x11 \x01(\x0b\x32-.snapchat.research.gbml.TrainerResourceConfig\x12T\n\x1ainferencer_resource_config\x18\x12 \x01(\x0b\x32\x30.snapchat.research.gbml.InferencerResourceConfigB\x11\n\x0fshared_resource*\xf3\x01\n\tComponent\x12\x15\n\x11\x43omponent_Unknown\x10\x00\x12\x1e\n\x1a\x43omponent_Config_Validator\x10\x01\x12\x1e\n\x1a\x43omponent_Config_Populator\x10\x02\x12\x1f\n\x1b\x43omponent_Data_Preprocessor\x10\x03\x12\x1e\n\x1a\x43omponent_Subgraph_Sampler\x10\x04\x12\x1d\n\x19\x43omponent_Split_Generator\x10\x05\x12\x15\n\x11\x43omponent_Trainer\x10\x06\x12\x18\n\x14\x43omponent_Inferencer\x10\x07\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n1snapchat/research/gbml/gigl_resource_config.proto\x12\x16snapchat.research.gbml\"Y\n\x13SparkResourceConfig\x12\x14\n\x0cmachine_type\x18\x01 \x01(\t\x12\x16\n\x0enum_local_ssds\x18\x02 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x03 \x01(\r\"\x83\x01\n\x16\x44\x61taflowResourceConfig\x12\x13\n\x0bnum_workers\x18\x01 \x01(\r\x12\x17\n\x0fmax_num_workers\x18\x02 \x01(\r\x12\x14\n\x0cmachine_type\x18\x03 \x01(\t\x12\x14\n\x0c\x64isk_size_gb\x18\x04 \x01(\r\x12\x0f\n\x07timeout\x18\x05 \x01(\r\"\xbc\x01\n\x16\x44\x61taPreprocessorConfig\x12P\n\x18\x65\x64ge_preprocessor_config\x18\x01 \x01(\x0b\x32..snapchat.research.gbml.DataflowResourceConfig\x12P\n\x18node_preprocessor_config\x18\x02 \x01(\x0b\x32..snapchat.research.gbml.DataflowResourceConfig\"h\n\x15VertexAiTrainerConfig\x12\x14\n\x0cmachine_type\x18\x01 \x01(\t\x12\x10\n\x08gpu_type\x18\x02 \x01(\t\x12\x11\n\tgpu_limit\x18\x03 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x04 \x01(\r\"z\n\x10KFPTrainerConfig\x12\x13\n\x0b\x63pu_request\x18\x01 \x01(\t\x12\x16\n\x0ememory_request\x18\x02 \x01(\t\x12\x10\n\x08gpu_type\x18\x03 \x01(\t\x12\x11\n\tgpu_limit\x18\x04 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x05 \x01(\r\")\n\x12LocalTrainerConfig\x12\x13\n\x0bnum_workers\x18\x01 \x01(\r\"O\n\x1bVertexAiReservationAffinity\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\"\n\x1areservation_resource_names\x18\x02 \x03(\t\"\xa2\x02\n\x16VertexAiResourceConfig\x12\x14\n\x0cmachine_type\x18\x01 \x01(\t\x12\x10\n\x08gpu_type\x18\x02 \x01(\t\x12\x11\n\tgpu_limit\x18\x03 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x04 \x01(\r\x12\x0f\n\x07timeout\x18\x05 \x01(\r\x12\x1b\n\x13gcp_region_override\x18\x06 \x01(\t\x12\x1b\n\x13scheduling_strategy\x18\x07 \x01(\t\x12\x19\n\x11\x62oot_disk_size_gb\x18\x08 \x01(\r\x12Q\n\x14reservation_affinity\x18\t \x01(\x0b\x32\x33.snapchat.research.gbml.VertexAiReservationAffinity\"{\n\x11KFPResourceConfig\x12\x13\n\x0b\x63pu_request\x18\x01 \x01(\t\x12\x16\n\x0ememory_request\x18\x02 \x01(\t\x12\x10\n\x08gpu_type\x18\x03 \x01(\t\x12\x11\n\tgpu_limit\x18\x04 \x01(\r\x12\x14\n\x0cnum_replicas\x18\x05 \x01(\r\"*\n\x13LocalResourceConfig\x12\x13\n\x0bnum_workers\x18\x01 \x01(\r\"\xd4\x01\n\x18VertexAiGraphStoreConfig\x12H\n\x10graph_store_pool\x18\x01 \x01(\x0b\x32..snapchat.research.gbml.VertexAiResourceConfig\x12\x44\n\x0c\x63ompute_pool\x18\x02 \x01(\x0b\x32..snapchat.research.gbml.VertexAiResourceConfig\x12(\n compute_cluster_local_world_size\x18\x03 \x01(\x05\"5\n\x14\x43ustomLauncherConfig\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x02 \x03(\t\"\x93\x02\n\x18\x44istributedTrainerConfig\x12Q\n\x18vertex_ai_trainer_config\x18\x01 \x01(\x0b\x32-.snapchat.research.gbml.VertexAiTrainerConfigH\x00\x12\x46\n\x12kfp_trainer_config\x18\x02 \x01(\x0b\x32(.snapchat.research.gbml.KFPTrainerConfigH\x00\x12J\n\x14local_trainer_config\x18\x03 \x01(\x0b\x32*.snapchat.research.gbml.LocalTrainerConfigH\x00\x42\x10\n\x0etrainer_config\"\xc4\x03\n\x15TrainerResourceConfig\x12R\n\x18vertex_ai_trainer_config\x18\x01 \x01(\x0b\x32..snapchat.research.gbml.VertexAiResourceConfigH\x00\x12G\n\x12kfp_trainer_config\x18\x02 \x01(\x0b\x32).snapchat.research.gbml.KFPResourceConfigH\x00\x12K\n\x14local_trainer_config\x18\x03 \x01(\x0b\x32+.snapchat.research.gbml.LocalResourceConfigH\x00\x12`\n$vertex_ai_graph_store_trainer_config\x18\x04 \x01(\x0b\x32\x30.snapchat.research.gbml.VertexAiGraphStoreConfigH\x00\x12M\n\x15\x63ustom_trainer_config\x18\x05 \x01(\x0b\x32,.snapchat.research.gbml.CustomLauncherConfigH\x00\x42\x10\n\x0etrainer_config\"\xe3\x03\n\x18InferencerResourceConfig\x12U\n\x1bvertex_ai_inferencer_config\x18\x01 \x01(\x0b\x32..snapchat.research.gbml.VertexAiResourceConfigH\x00\x12T\n\x1a\x64\x61taflow_inferencer_config\x18\x02 \x01(\x0b\x32..snapchat.research.gbml.DataflowResourceConfigH\x00\x12N\n\x17local_inferencer_config\x18\x03 \x01(\x0b\x32+.snapchat.research.gbml.LocalResourceConfigH\x00\x12\x63\n\'vertex_ai_graph_store_inferencer_config\x18\x04 \x01(\x0b\x32\x30.snapchat.research.gbml.VertexAiGraphStoreConfigH\x00\x12P\n\x18\x63ustom_inferencer_config\x18\x05 \x01(\x0b\x32,.snapchat.research.gbml.CustomLauncherConfigH\x00\x42\x13\n\x11inferencer_config\"\xa3\x04\n\x14SharedResourceConfig\x12Y\n\x0fresource_labels\x18\x01 \x03(\x0b\x32@.snapchat.research.gbml.SharedResourceConfig.ResourceLabelsEntry\x12_\n\x15\x63ommon_compute_config\x18\x02 \x01(\x0b\x32@.snapchat.research.gbml.SharedResourceConfig.CommonComputeConfig\x1a\x97\x02\n\x13\x43ommonComputeConfig\x12\x0f\n\x07project\x18\x01 \x01(\t\x12\x0e\n\x06region\x18\x02 \x01(\t\x12\x1a\n\x12temp_assets_bucket\x18\x03 \x01(\t\x12#\n\x1btemp_regional_assets_bucket\x18\x04 \x01(\t\x12\x1a\n\x12perm_assets_bucket\x18\x05 \x01(\t\x12#\n\x1btemp_assets_bq_dataset_name\x18\x06 \x01(\t\x12!\n\x19\x65mbedding_bq_dataset_name\x18\x07 \x01(\t\x12!\n\x19gcp_service_account_email\x18\x08 \x01(\t\x12\x17\n\x0f\x64\x61taflow_runner\x18\x0b \x01(\t\x1a\x35\n\x13ResourceLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc8\x05\n\x12GiglResourceConfig\x12$\n\x1ashared_resource_config_uri\x18\x01 \x01(\tH\x00\x12N\n\x16shared_resource_config\x18\x02 \x01(\x0b\x32,.snapchat.research.gbml.SharedResourceConfigH\x00\x12K\n\x13preprocessor_config\x18\x0c \x01(\x0b\x32..snapchat.research.gbml.DataPreprocessorConfig\x12L\n\x17subgraph_sampler_config\x18\r \x01(\x0b\x32+.snapchat.research.gbml.SparkResourceConfig\x12K\n\x16split_generator_config\x18\x0e \x01(\x0b\x32+.snapchat.research.gbml.SparkResourceConfig\x12L\n\x0etrainer_config\x18\x0f \x01(\x0b\x32\x30.snapchat.research.gbml.DistributedTrainerConfigB\x02\x18\x01\x12M\n\x11inferencer_config\x18\x10 \x01(\x0b\x32..snapchat.research.gbml.DataflowResourceConfigB\x02\x18\x01\x12N\n\x17trainer_resource_config\x18\x11 \x01(\x0b\x32-.snapchat.research.gbml.TrainerResourceConfig\x12T\n\x1ainferencer_resource_config\x18\x12 \x01(\x0b\x32\x30.snapchat.research.gbml.InferencerResourceConfigB\x11\n\x0fshared_resource*\xf3\x01\n\tComponent\x12\x15\n\x11\x43omponent_Unknown\x10\x00\x12\x1e\n\x1a\x43omponent_Config_Validator\x10\x01\x12\x1e\n\x1a\x43omponent_Config_Populator\x10\x02\x12\x1f\n\x1b\x43omponent_Data_Preprocessor\x10\x03\x12\x1e\n\x1a\x43omponent_Subgraph_Sampler\x10\x04\x12\x1d\n\x19\x43omponent_Split_Generator\x10\x05\x12\x15\n\x11\x43omponent_Trainer\x10\x06\x12\x18\n\x14\x43omponent_Inferencer\x10\x07\x62\x06proto3') _COMPONENT = DESCRIPTOR.enum_types_by_name['Component'] Component = enum_type_wrapper.EnumTypeWrapper(_COMPONENT) @@ -40,6 +40,7 @@ _KFPRESOURCECONFIG = DESCRIPTOR.message_types_by_name['KFPResourceConfig'] _LOCALRESOURCECONFIG = DESCRIPTOR.message_types_by_name['LocalResourceConfig'] _VERTEXAIGRAPHSTORECONFIG = DESCRIPTOR.message_types_by_name['VertexAiGraphStoreConfig'] +_CUSTOMLAUNCHERCONFIG = DESCRIPTOR.message_types_by_name['CustomLauncherConfig'] _DISTRIBUTEDTRAINERCONFIG = DESCRIPTOR.message_types_by_name['DistributedTrainerConfig'] _TRAINERRESOURCECONFIG = DESCRIPTOR.message_types_by_name['TrainerResourceConfig'] _INFERENCERRESOURCECONFIG = DESCRIPTOR.message_types_by_name['InferencerResourceConfig'] @@ -124,6 +125,13 @@ }) _sym_db.RegisterMessage(VertexAiGraphStoreConfig) +CustomLauncherConfig = _reflection.GeneratedProtocolMessageType('CustomLauncherConfig', (_message.Message,), { + 'DESCRIPTOR' : _CUSTOMLAUNCHERCONFIG, + '__module__' : 'snapchat.research.gbml.gigl_resource_config_pb2' + # @@protoc_insertion_point(class_scope:snapchat.research.gbml.CustomLauncherConfig) + }) +_sym_db.RegisterMessage(CustomLauncherConfig) + DistributedTrainerConfig = _reflection.GeneratedProtocolMessageType('DistributedTrainerConfig', (_message.Message,), { 'DESCRIPTOR' : _DISTRIBUTEDTRAINERCONFIG, '__module__' : 'snapchat.research.gbml.gigl_resource_config_pb2' @@ -184,8 +192,8 @@ _GIGLRESOURCECONFIG.fields_by_name['trainer_config']._serialized_options = b'\030\001' _GIGLRESOURCECONFIG.fields_by_name['inferencer_config']._options = None _GIGLRESOURCECONFIG.fields_by_name['inferencer_config']._serialized_options = b'\030\001' - _COMPONENT._serialized_start=3848 - _COMPONENT._serialized_end=4091 + _COMPONENT._serialized_start=4064 + _COMPONENT._serialized_end=4307 _SPARKRESOURCECONFIG._serialized_start=77 _SPARKRESOURCECONFIG._serialized_end=166 _DATAFLOWRESOURCECONFIG._serialized_start=169 @@ -208,18 +216,20 @@ _LOCALRESOURCECONFIG._serialized_end=1307 _VERTEXAIGRAPHSTORECONFIG._serialized_start=1310 _VERTEXAIGRAPHSTORECONFIG._serialized_end=1522 - _DISTRIBUTEDTRAINERCONFIG._serialized_start=1525 - _DISTRIBUTEDTRAINERCONFIG._serialized_end=1800 - _TRAINERRESOURCECONFIG._serialized_start=1803 - _TRAINERRESOURCECONFIG._serialized_end=2176 - _INFERENCERRESOURCECONFIG._serialized_start=2179 - _INFERENCERRESOURCECONFIG._serialized_end=2580 - _SHAREDRESOURCECONFIG._serialized_start=2583 - _SHAREDRESOURCECONFIG._serialized_end=3130 - _SHAREDRESOURCECONFIG_COMMONCOMPUTECONFIG._serialized_start=2796 - _SHAREDRESOURCECONFIG_COMMONCOMPUTECONFIG._serialized_end=3075 - _SHAREDRESOURCECONFIG_RESOURCELABELSENTRY._serialized_start=3077 - _SHAREDRESOURCECONFIG_RESOURCELABELSENTRY._serialized_end=3130 - _GIGLRESOURCECONFIG._serialized_start=3133 - _GIGLRESOURCECONFIG._serialized_end=3845 + _CUSTOMLAUNCHERCONFIG._serialized_start=1524 + _CUSTOMLAUNCHERCONFIG._serialized_end=1577 + _DISTRIBUTEDTRAINERCONFIG._serialized_start=1580 + _DISTRIBUTEDTRAINERCONFIG._serialized_end=1855 + _TRAINERRESOURCECONFIG._serialized_start=1858 + _TRAINERRESOURCECONFIG._serialized_end=2310 + _INFERENCERRESOURCECONFIG._serialized_start=2313 + _INFERENCERRESOURCECONFIG._serialized_end=2796 + _SHAREDRESOURCECONFIG._serialized_start=2799 + _SHAREDRESOURCECONFIG._serialized_end=3346 + _SHAREDRESOURCECONFIG_COMMONCOMPUTECONFIG._serialized_start=3012 + _SHAREDRESOURCECONFIG_COMMONCOMPUTECONFIG._serialized_end=3291 + _SHAREDRESOURCECONFIG_RESOURCELABELSENTRY._serialized_start=3293 + _SHAREDRESOURCECONFIG_RESOURCELABELSENTRY._serialized_end=3346 + _GIGLRESOURCECONFIG._serialized_start=3349 + _GIGLRESOURCECONFIG._serialized_end=4061 # @@protoc_insertion_point(module_scope) diff --git a/snapchat/research/gbml/gigl_resource_config_pb2.pyi b/snapchat/research/gbml/gigl_resource_config_pb2.pyi index 6198d1076..4f3a8f372 100644 --- a/snapchat/research/gbml/gigl_resource_config_pb2.pyi +++ b/snapchat/research/gbml/gigl_resource_config_pb2.pyi @@ -396,6 +396,41 @@ class VertexAiGraphStoreConfig(google.protobuf.message.Message): global___VertexAiGraphStoreConfig = VertexAiGraphStoreConfig +class CustomLauncherConfig(google.protobuf.message.Message): + """Lets user-defined launchers be piped in. + The launcher dispatcher invokes `command` (interpreted by /bin/sh -c so + leading "KEY=VALUE" assignments parse as inline env vars) with `args` + appended as positional arguments. Both fields are taken verbatim by + the dispatcher; any templating or substitution is the caller's + responsibility (e.g. OmegaConf-resolved at YAML-load time). + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + COMMAND_FIELD_NUMBER: builtins.int + ARGS_FIELD_NUMBER: builtins.int + command: builtins.str + """Shell snippet invoked via /bin/sh -c. Leading "KEY=VALUE" assignments + are honored by the shell, so callers can inline env vars (e.g. + "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python python -m my.cli"). + """ + @property + def args(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: + """Positional arguments appended after the command. Each element is + shell-quoted by the dispatcher so values containing spaces/quotes + survive the shell pass. + e.g. "[--my_flag=my_value, --my_other_flag=my_other_value, --noskip_training]" + """ + def __init__( + self, + *, + command: builtins.str = ..., + args: collections.abc.Iterable[builtins.str] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["args", b"args", "command", b"command"]) -> None: ... + +global___CustomLauncherConfig = CustomLauncherConfig + class DistributedTrainerConfig(google.protobuf.message.Message): """(deprecated) Configuration for distributed training resources @@ -434,6 +469,7 @@ class TrainerResourceConfig(google.protobuf.message.Message): KFP_TRAINER_CONFIG_FIELD_NUMBER: builtins.int LOCAL_TRAINER_CONFIG_FIELD_NUMBER: builtins.int VERTEX_AI_GRAPH_STORE_TRAINER_CONFIG_FIELD_NUMBER: builtins.int + CUSTOM_TRAINER_CONFIG_FIELD_NUMBER: builtins.int @property def vertex_ai_trainer_config(self) -> global___VertexAiResourceConfig: ... @property @@ -442,6 +478,8 @@ class TrainerResourceConfig(google.protobuf.message.Message): def local_trainer_config(self) -> global___LocalResourceConfig: ... @property def vertex_ai_graph_store_trainer_config(self) -> global___VertexAiGraphStoreConfig: ... + @property + def custom_trainer_config(self) -> global___CustomLauncherConfig: ... def __init__( self, *, @@ -449,10 +487,11 @@ class TrainerResourceConfig(google.protobuf.message.Message): kfp_trainer_config: global___KFPResourceConfig | None = ..., local_trainer_config: global___LocalResourceConfig | None = ..., vertex_ai_graph_store_trainer_config: global___VertexAiGraphStoreConfig | None = ..., + custom_trainer_config: global___CustomLauncherConfig | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["kfp_trainer_config", b"kfp_trainer_config", "local_trainer_config", b"local_trainer_config", "trainer_config", b"trainer_config", "vertex_ai_graph_store_trainer_config", b"vertex_ai_graph_store_trainer_config", "vertex_ai_trainer_config", b"vertex_ai_trainer_config"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["kfp_trainer_config", b"kfp_trainer_config", "local_trainer_config", b"local_trainer_config", "trainer_config", b"trainer_config", "vertex_ai_graph_store_trainer_config", b"vertex_ai_graph_store_trainer_config", "vertex_ai_trainer_config", b"vertex_ai_trainer_config"]) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["trainer_config", b"trainer_config"]) -> typing_extensions.Literal["vertex_ai_trainer_config", "kfp_trainer_config", "local_trainer_config", "vertex_ai_graph_store_trainer_config"] | None: ... + def HasField(self, field_name: typing_extensions.Literal["custom_trainer_config", b"custom_trainer_config", "kfp_trainer_config", b"kfp_trainer_config", "local_trainer_config", b"local_trainer_config", "trainer_config", b"trainer_config", "vertex_ai_graph_store_trainer_config", b"vertex_ai_graph_store_trainer_config", "vertex_ai_trainer_config", b"vertex_ai_trainer_config"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["custom_trainer_config", b"custom_trainer_config", "kfp_trainer_config", b"kfp_trainer_config", "local_trainer_config", b"local_trainer_config", "trainer_config", b"trainer_config", "vertex_ai_graph_store_trainer_config", b"vertex_ai_graph_store_trainer_config", "vertex_ai_trainer_config", b"vertex_ai_trainer_config"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["trainer_config", b"trainer_config"]) -> typing_extensions.Literal["vertex_ai_trainer_config", "kfp_trainer_config", "local_trainer_config", "vertex_ai_graph_store_trainer_config", "custom_trainer_config"] | None: ... global___TrainerResourceConfig = TrainerResourceConfig @@ -465,6 +504,7 @@ class InferencerResourceConfig(google.protobuf.message.Message): DATAFLOW_INFERENCER_CONFIG_FIELD_NUMBER: builtins.int LOCAL_INFERENCER_CONFIG_FIELD_NUMBER: builtins.int VERTEX_AI_GRAPH_STORE_INFERENCER_CONFIG_FIELD_NUMBER: builtins.int + CUSTOM_INFERENCER_CONFIG_FIELD_NUMBER: builtins.int @property def vertex_ai_inferencer_config(self) -> global___VertexAiResourceConfig: ... @property @@ -473,6 +513,8 @@ class InferencerResourceConfig(google.protobuf.message.Message): def local_inferencer_config(self) -> global___LocalResourceConfig: ... @property def vertex_ai_graph_store_inferencer_config(self) -> global___VertexAiGraphStoreConfig: ... + @property + def custom_inferencer_config(self) -> global___CustomLauncherConfig: ... def __init__( self, *, @@ -480,10 +522,11 @@ class InferencerResourceConfig(google.protobuf.message.Message): dataflow_inferencer_config: global___DataflowResourceConfig | None = ..., local_inferencer_config: global___LocalResourceConfig | None = ..., vertex_ai_graph_store_inferencer_config: global___VertexAiGraphStoreConfig | None = ..., + custom_inferencer_config: global___CustomLauncherConfig | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["dataflow_inferencer_config", b"dataflow_inferencer_config", "inferencer_config", b"inferencer_config", "local_inferencer_config", b"local_inferencer_config", "vertex_ai_graph_store_inferencer_config", b"vertex_ai_graph_store_inferencer_config", "vertex_ai_inferencer_config", b"vertex_ai_inferencer_config"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["dataflow_inferencer_config", b"dataflow_inferencer_config", "inferencer_config", b"inferencer_config", "local_inferencer_config", b"local_inferencer_config", "vertex_ai_graph_store_inferencer_config", b"vertex_ai_graph_store_inferencer_config", "vertex_ai_inferencer_config", b"vertex_ai_inferencer_config"]) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["inferencer_config", b"inferencer_config"]) -> typing_extensions.Literal["vertex_ai_inferencer_config", "dataflow_inferencer_config", "local_inferencer_config", "vertex_ai_graph_store_inferencer_config"] | None: ... + def HasField(self, field_name: typing_extensions.Literal["custom_inferencer_config", b"custom_inferencer_config", "dataflow_inferencer_config", b"dataflow_inferencer_config", "inferencer_config", b"inferencer_config", "local_inferencer_config", b"local_inferencer_config", "vertex_ai_graph_store_inferencer_config", b"vertex_ai_graph_store_inferencer_config", "vertex_ai_inferencer_config", b"vertex_ai_inferencer_config"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["custom_inferencer_config", b"custom_inferencer_config", "dataflow_inferencer_config", b"dataflow_inferencer_config", "inferencer_config", b"inferencer_config", "local_inferencer_config", b"local_inferencer_config", "vertex_ai_graph_store_inferencer_config", b"vertex_ai_graph_store_inferencer_config", "vertex_ai_inferencer_config", b"vertex_ai_inferencer_config"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["inferencer_config", b"inferencer_config"]) -> typing_extensions.Literal["vertex_ai_inferencer_config", "dataflow_inferencer_config", "local_inferencer_config", "vertex_ai_graph_store_inferencer_config", "custom_inferencer_config"] | None: ... global___InferencerResourceConfig = InferencerResourceConfig diff --git a/tests/unit/src/common/custom_launcher_test.py b/tests/unit/src/common/custom_launcher_test.py new file mode 100644 index 000000000..a18971591 --- /dev/null +++ b/tests/unit/src/common/custom_launcher_test.py @@ -0,0 +1,148 @@ +"""Unit tests for ``gigl.src.common.custom_launcher``.""" + +from unittest.mock import MagicMock, patch + +from absl.testing import absltest + +from gigl.common import Uri +from gigl.src.common.constants.components import GiGLComponents +from gigl.src.common.custom_launcher import launch_custom +from snapchat.research.gbml import gigl_resource_config_pb2 +from tests.test_assets.test_case import TestCase + + +class TestLaunchCustom(TestCase): + """Exercises ``launch_custom`` subprocess dispatch and guards. + + The launcher takes ``command`` and ``args[]`` from the proto + verbatim (no template substitution) and shells out via + ``subprocess.run``. Tests patch ``subprocess.run`` to capture the + composed shell line without actually spawning processes. + """ + + def _build_config( + self, + command: str, + args: list[str] | None = None, + ) -> gigl_resource_config_pb2.CustomLauncherConfig: + return gigl_resource_config_pb2.CustomLauncherConfig( + command=command, + args=args or [], + ) + + @patch("gigl.src.common.custom_launcher.subprocess.run") + def test_dispatches_subprocess_with_literal_command_and_args( + self, mock_run: MagicMock + ) -> None: + config = self._build_config( + command="python -m my.cli", + args=["--foo=bar", "--baz=qux"], + ) + launch_custom( + custom_launcher_config=config, + applied_task_identifier="job-42", + task_config_uri=Uri("gs://bucket/task.yaml"), + resource_config_uri=Uri("gs://bucket/resource.yaml"), + process_command="ignored", + process_runtime_args={"ignored": "v"}, + cpu_docker_uri="gcr.io/p/cpu:tag", + cuda_docker_uri="gcr.io/p/cuda:tag", + component=GiGLComponents.Trainer, + ) + + mock_run.assert_called_once() + shell_line = mock_run.call_args.args[0] + self.assertIn("python -m my.cli", shell_line) + self.assertIn("--foo=bar", shell_line) + self.assertIn("--baz=qux", shell_line) + # subprocess invoked with shell=True and check=True. + self.assertTrue(mock_run.call_args.kwargs.get("shell", False)) + self.assertTrue(mock_run.call_args.kwargs.get("check", False)) + + @patch("gigl.src.common.custom_launcher.subprocess.run") + def test_empty_command_raises_value_error(self, mock_run: MagicMock) -> None: + config = self._build_config(command="", args=["ignored"]) + with self.assertRaises(ValueError): + launch_custom( + custom_launcher_config=config, + applied_task_identifier="job", + task_config_uri=Uri("gs://bucket/task.yaml"), + resource_config_uri=Uri("gs://bucket/resource.yaml"), + process_command="", + process_runtime_args={}, + cpu_docker_uri=None, + cuda_docker_uri=None, + component=GiGLComponents.Trainer, + ) + mock_run.assert_not_called() + + @patch("gigl.src.common.custom_launcher.subprocess.run") + def test_invalid_component_raises_value_error(self, mock_run: MagicMock) -> None: + config = self._build_config(command="echo") + with self.assertRaises(ValueError): + launch_custom( + custom_launcher_config=config, + applied_task_identifier="job", + task_config_uri=Uri("gs://bucket/task.yaml"), + resource_config_uri=Uri("gs://bucket/resource.yaml"), + process_command="", + process_runtime_args={}, + cpu_docker_uri=None, + cuda_docker_uri=None, + component=GiGLComponents.DataPreprocessor, + ) + mock_run.assert_not_called() + + @patch("gigl.src.common.custom_launcher.subprocess.run") + def test_args_with_spaces_are_shell_quoted(self, mock_run: MagicMock) -> None: + config = self._build_config( + command="echo", args=["a b c", "--name=with space"] + ) + launch_custom( + custom_launcher_config=config, + applied_task_identifier="job", + task_config_uri=Uri("gs://bucket/task.yaml"), + resource_config_uri=Uri("gs://bucket/resource.yaml"), + process_command="", + process_runtime_args={}, + cpu_docker_uri=None, + cuda_docker_uri=None, + component=GiGLComponents.Trainer, + ) + shell_line = mock_run.call_args.args[0] + # shlex.quote wraps tokens with spaces in single quotes so the + # shell sees one argv element per proto args[] entry. + self.assertIn("'a b c'", shell_line) + self.assertIn("'--name=with space'", shell_line) + + @patch("gigl.src.common.custom_launcher.subprocess.run") + def test_unsubstituted_gigl_placeholder_passes_through_verbatim( + self, mock_run: MagicMock + ) -> None: + # The launcher performs no template substitution: any + # ``${gigl:*}`` placeholder in command/args reaches subprocess + # unchanged. Consumers that want substitution must resolve at + # YAML-load time before the proto reaches this module. + config = self._build_config( + command="python -m my.cli", + args=["--foo=${gigl:bar}"], + ) + launch_custom( + custom_launcher_config=config, + applied_task_identifier="job", + task_config_uri=Uri("gs://bucket/task.yaml"), + resource_config_uri=Uri("gs://bucket/resource.yaml"), + process_command="", + process_runtime_args={}, + cpu_docker_uri=None, + cuda_docker_uri=None, + component=GiGLComponents.Trainer, + ) + shell_line = mock_run.call_args.args[0] + # The placeholder is preserved verbatim inside the shell-quoted + # arg. + self.assertIn("${gigl:bar}", shell_line) + + +if __name__ == "__main__": + absltest.main() diff --git a/tests/unit/src/common/utils/types/pb_wrappers/gigl_resource_config_test.py b/tests/unit/src/common/utils/types/pb_wrappers/gigl_resource_config_test.py index c9394857d..46760c97d 100644 --- a/tests/unit/src/common/utils/types/pb_wrappers/gigl_resource_config_test.py +++ b/tests/unit/src/common/utils/types/pb_wrappers/gigl_resource_config_test.py @@ -241,6 +241,23 @@ def test_trainer_config_vertex_ai_graph_store(self): wrapper = GiglResourceConfigWrapper(resource_config=config) self.assertEqual(wrapper.trainer_config, trainer_config) + def test_trainer_config_custom(self): + """Test trainer_config with Custom (user-supplied launcher) configuration.""" + config = self._create_gigl_resource_config_with_direct_shared_config() + trainer_config = gigl_resource_config_pb2.CustomLauncherConfig( + command="python -m my_project.launchers.ray.launch", + args=["--cluster=dev", "--num_workers=4"], + ) + config.trainer_resource_config.custom_trainer_config.CopyFrom( + copy.deepcopy(trainer_config) + ) + + wrapper = GiglResourceConfigWrapper(resource_config=config) + self.assertIsInstance( + wrapper.trainer_config, gigl_resource_config_pb2.CustomLauncherConfig + ) + self.assertEqual(wrapper.trainer_config, trainer_config) + def test_trainer_config_missing(self): """Test that ValueError is raised when trainer config is missing.""" config = self._create_gigl_resource_config_with_direct_shared_config() @@ -355,6 +372,23 @@ def test_inferencer_config_vertex_ai_graph_store(self): wrapper = GiglResourceConfigWrapper(resource_config=config) self.assertEqual(wrapper.inferencer_config, inferencer_config) + def test_inferencer_config_custom(self): + """Test inferencer_config with Custom (user-supplied launcher) configuration.""" + config = self._create_gigl_resource_config_with_direct_shared_config() + inferencer_config = gigl_resource_config_pb2.CustomLauncherConfig( + command="python -m my_project.launchers.ray.launch", + args=["--cluster=prod", "--shards=8"], + ) + config.inferencer_resource_config.custom_inferencer_config.CopyFrom( + copy.deepcopy(inferencer_config) + ) + + wrapper = GiglResourceConfigWrapper(resource_config=config) + self.assertIsInstance( + wrapper.inferencer_config, gigl_resource_config_pb2.CustomLauncherConfig + ) + self.assertEqual(wrapper.inferencer_config, inferencer_config) + def test_inferencer_config_missing(self): """Test that ValueError is raised when inferencer config is missing.""" config = self._create_gigl_resource_config_with_direct_shared_config() diff --git a/tests/unit/src/validation/config_validator_test.py b/tests/unit/src/validation/config_validator_test.py index 5373803f7..3de5d915c 100644 --- a/tests/unit/src/validation/config_validator_test.py +++ b/tests/unit/src/validation/config_validator_test.py @@ -352,5 +352,61 @@ def test_resource_config_validation_failure_with_mock_configs( ) +class TestCustomLauncherConfigInValidationChain(TestCase): + """Confirm the new CustomLauncherConfig gates are wired into the chain. + + The shape check (``check_custom_launcher_config_shape``) runs + unconditionally inside ``kfp_validation_checks``. A resource config + with a ``CustomLauncherConfig`` trainer that has an empty ``command`` + must surface a ``ValueError`` from the chain, not a launcher-side + runtime failure. + """ + + def setUp(self): + gigl.env.pipelines_config._resource_config = None + self._temp_dir = tempfile.mkdtemp() + self._proto_utils = ProtoUtils() + + def tearDown(self): + shutil.rmtree(self._temp_dir, ignore_errors=True) + gigl.env.pipelines_config._resource_config = None + + def _write_proto_to_file( + self, proto: google.protobuf.message.Message, filename: str + ) -> Uri: + filepath = os.path.join(self._temp_dir, filename) + uri = UriFactory.create_uri(filepath) + self._proto_utils.write_proto_to_yaml(proto, uri) + return uri + + def test_empty_custom_trainer_command_raises_via_chain(self) -> None: + # Build a live-SGS task config (so the chain runs through + # CustomLauncherConfig-aware paths). + task_config_uri = self._write_proto_to_file( + _create_valid_live_subgraph_sampling_task_config(), + "live_task_config.yaml", + ) + + # Resource config with a CustomLauncherConfig trainer whose + # command is empty — the new shape check must catch it. + resource_config = _create_valid_live_subgraph_sampling_resource_config() + resource_config.trainer_resource_config.ClearField("trainer_config") + resource_config.trainer_resource_config.custom_trainer_config.command = "" + resource_config_uri = self._write_proto_to_file( + resource_config, "live_custom_empty_resource_config.yaml" + ) + + with self.assertRaises(ValueError) as ctx: + kfp_validation_checks( + job_name="custom_launcher_config_chain_test", + task_config_uri=task_config_uri, + start_at="config_populator", + resource_config_uri=resource_config_uri, + ) + # Error message must come from check_custom_launcher_config_shape, + # not from a generic shape check elsewhere. + self.assertIn("CustomLauncherConfig.command", str(ctx.exception)) + + if __name__ == "__main__": absltest.main() diff --git a/tests/unit/src/validation/lib/gbml_and_resource_config_compatibility_checks_test.py b/tests/unit/src/validation/lib/gbml_and_resource_config_compatibility_checks_test.py index c70450501..5f4c5704a 100644 --- a/tests/unit/src/validation/lib/gbml_and_resource_config_compatibility_checks_test.py +++ b/tests/unit/src/validation/lib/gbml_and_resource_config_compatibility_checks_test.py @@ -5,12 +5,18 @@ GiglResourceConfigWrapper, ) from gigl.src.validation_check.libs.gbml_and_resource_config_compatibility_checks import ( + check_custom_launcher_config_requires_glt_backend, check_inferencer_graph_store_compatibility, check_trainer_graph_store_compatibility, ) from snapchat.research.gbml import gbml_config_pb2, gigl_resource_config_pb2 from tests.test_assets.test_case import TestCase +# Placeholder shell snippet used by CustomLauncherConfig fixtures in this +# module — these tests only exercise type-of-config dispatch, not actual +# subprocess execution. +_FAKE_COMMAND = "echo fake" + # Helper functions for creating VertexAiGraphStoreConfig @@ -214,5 +220,107 @@ def test_resource_has_inferencer_graph_store_template_does_not(self): ) +# Helper functions for custom + glt-backend compatibility tests + + +def _create_gbml_config_with_glt_flag(value: str) -> GbmlConfigPbWrapper: + """Create a GbmlConfig whose feature_flags.should_run_glt_backend is set. + + Note the raw YAML key is ``should_run_glt_backend`` (not + ``should_use_glt_backend``). The wrapper's ``should_use_glt_backend`` + property reads this key from the ``feature_flags`` map and converts it to + a bool. + """ + gbml_config = gbml_config_pb2.GbmlConfig() + gbml_config.feature_flags["should_run_glt_backend"] = value + return GbmlConfigPbWrapper(gbml_config_pb=gbml_config) + + +def _create_resource_config_with_custom_trainer() -> GiglResourceConfigWrapper: + """Create a GiglResourceConfig whose trainer is a CustomLauncherConfig.""" + config = gigl_resource_config_pb2.GiglResourceConfig() + _create_shared_resource_config(config) + config.trainer_resource_config.custom_trainer_config.command = _FAKE_COMMAND + # Inferencer uses a built-in config so only the trainer path is custom. + config.inferencer_resource_config.vertex_ai_inferencer_config.CopyFrom( + _create_vertex_ai_resource_config() + ) + return GiglResourceConfigWrapper(resource_config=config) + + +def _create_resource_config_with_custom_inferencer() -> GiglResourceConfigWrapper: + """Create a GiglResourceConfig whose inferencer is a CustomLauncherConfig.""" + config = gigl_resource_config_pb2.GiglResourceConfig() + _create_shared_resource_config(config) + config.trainer_resource_config.vertex_ai_trainer_config.CopyFrom( + _create_vertex_ai_resource_config() + ) + config.inferencer_resource_config.custom_inferencer_config.command = _FAKE_COMMAND + return GiglResourceConfigWrapper(resource_config=config) + + +class TestCustomLauncherConfigRequiresGltBackend(TestCase): + """Test suite for the CustomLauncherConfig + GLT-backend compatibility guard. + + Because v1 trainer/inferencer dispatchers don't consult the custom oneof, + pairing a ``CustomLauncherConfig`` with + ``feature_flags.should_run_glt_backend = "False"`` must be caught at + validation time rather than at runtime. + """ + + def test_custom_trainer_without_glt_raises(self): + """CustomLauncherConfig trainer + glt=False raises a clear ValueError.""" + gbml_config = _create_gbml_config_with_glt_flag("False") + resource_config = _create_resource_config_with_custom_trainer() + with self.assertRaises(ValueError) as ctx: + check_custom_launcher_config_requires_glt_backend( + gbml_config_pb_wrapper=gbml_config, + resource_config_wrapper=resource_config, + ) + self.assertIn("should_run_glt_backend", str(ctx.exception)) + self.assertIn("custom_trainer_config", str(ctx.exception)) + + def test_custom_inferencer_without_glt_raises(self): + """CustomLauncherConfig inferencer + glt=False raises a clear ValueError.""" + gbml_config = _create_gbml_config_with_glt_flag("False") + resource_config = _create_resource_config_with_custom_inferencer() + with self.assertRaises(ValueError) as ctx: + check_custom_launcher_config_requires_glt_backend( + gbml_config_pb_wrapper=gbml_config, + resource_config_wrapper=resource_config, + ) + self.assertIn("custom_inferencer_config", str(ctx.exception)) + + def test_custom_trainer_with_glt_passes(self): + """CustomLauncherConfig trainer + glt=True passes validation.""" + gbml_config = _create_gbml_config_with_glt_flag("True") + resource_config = _create_resource_config_with_custom_trainer() + # Should not raise any exception + check_custom_launcher_config_requires_glt_backend( + gbml_config_pb_wrapper=gbml_config, + resource_config_wrapper=resource_config, + ) + + def test_custom_inferencer_with_glt_passes(self): + """CustomLauncherConfig inferencer + glt=True passes validation.""" + gbml_config = _create_gbml_config_with_glt_flag("True") + resource_config = _create_resource_config_with_custom_inferencer() + # Should not raise any exception + check_custom_launcher_config_requires_glt_backend( + gbml_config_pb_wrapper=gbml_config, + resource_config_wrapper=resource_config, + ) + + def test_no_custom_config_passes_without_glt(self): + """No CustomLauncherConfig at all passes regardless of glt flag.""" + gbml_config = _create_gbml_config_with_glt_flag("False") + resource_config = _create_resource_config_without_graph_stores() + # Should not raise any exception: no custom oneof means nothing to enforce. + check_custom_launcher_config_requires_glt_backend( + gbml_config_pb_wrapper=gbml_config, + resource_config_wrapper=resource_config, + ) + + if __name__ == "__main__": absltest.main() diff --git a/tests/unit/src/validation/lib/resource_config_checks_test.py b/tests/unit/src/validation/lib/resource_config_checks_test.py index 7f00b7102..e70104bb3 100644 --- a/tests/unit/src/validation/lib/resource_config_checks_test.py +++ b/tests/unit/src/validation/lib/resource_config_checks_test.py @@ -1,11 +1,15 @@ +from unittest.mock import patch + from absl.testing import absltest +from gigl.src.common.constants.components import GiGLComponents from gigl.src.common.types.pb_wrappers.gbml_config import GbmlConfigPbWrapper from gigl.src.validation_check.libs.resource_config_checks import ( _check_if_dataflow_resource_config_valid, _check_if_spark_resource_config_valid, _validate_accelerator_type, _validate_machine_config, + check_custom_launcher_config_shape, check_if_inferencer_graph_store_storage_command_valid, check_if_inferencer_resource_config_valid, check_if_preprocessor_resource_config_valid, @@ -18,6 +22,9 @@ from snapchat.research.gbml import gbml_config_pb2, gigl_resource_config_pb2 from tests.test_assets.test_case import TestCase +# Placeholder shell snippet used by CustomLauncherConfig fixtures. +_FAKE_COMMAND = "echo fake" + # Helper functions for creating valid configurations @@ -204,6 +211,28 @@ def _create_valid_local_inferencer_config() -> ( return config +def _create_valid_custom_trainer_config( + command: str = _FAKE_COMMAND, + args: list[str] | None = None, +) -> gigl_resource_config_pb2.GiglResourceConfig: + """Create a GiglResourceConfig with a CustomLauncherConfig trainer.""" + config = gigl_resource_config_pb2.GiglResourceConfig() + config.trainer_resource_config.custom_trainer_config.command = command + config.trainer_resource_config.custom_trainer_config.args.extend(args or []) + return config + + +def _create_valid_custom_inferencer_config( + command: str = _FAKE_COMMAND, + args: list[str] | None = None, +) -> gigl_resource_config_pb2.GiglResourceConfig: + """Create a GiglResourceConfig with a CustomLauncherConfig inferencer.""" + config = gigl_resource_config_pb2.GiglResourceConfig() + config.inferencer_resource_config.custom_inferencer_config.command = command + config.inferencer_resource_config.custom_inferencer_config.args.extend(args or []) + return config + + def _create_valid_vertex_ai_config() -> gigl_resource_config_pb2.VertexAiResourceConfig: """Create a valid Vertex AI resource configuration.""" config = gigl_resource_config_pb2.VertexAiResourceConfig() @@ -791,6 +820,110 @@ def test_no_graph_store_config(self): check_if_inferencer_graph_store_storage_command_valid(gbml_config) +class TestCustomLauncherConfigBypass(TestCase): + """Test suite for CustomLauncherConfig caller-level bypass. + + ``CustomLauncherConfig`` is launcher-pluggable: it has no concrete machine + shape to validate. The callers (``check_if_trainer_resource_config_valid`` + and ``check_if_inferencer_resource_config_valid``) short-circuit before + reaching ``_validate_machine_config``, which keeps that helper's contract + ("validate a concrete machine spec") intact. + """ + + def test_trainer_custom_config_bypasses_machine_validation(self): + """CustomLauncherConfig trainer bypasses _validate_machine_config entirely.""" + config = _create_valid_custom_trainer_config( + args=["--cluster_size=4"] + ) + with patch( + "gigl.src.validation_check.libs.resource_config_checks._validate_machine_config" + ) as mock_validate: + check_if_trainer_resource_config_valid(resource_config_pb=config) + mock_validate.assert_not_called() + + def test_inferencer_custom_config_bypasses_machine_validation(self): + """CustomLauncherConfig inferencer bypasses _validate_machine_config entirely.""" + config = _create_valid_custom_inferencer_config( + args=["--cluster_size=4"] + ) + with patch( + "gigl.src.validation_check.libs.resource_config_checks._validate_machine_config" + ) as mock_validate: + check_if_inferencer_resource_config_valid(resource_config_pb=config) + mock_validate.assert_not_called() + + def test_vertex_ai_trainer_still_calls_machine_validation(self): + """Sanity: non-custom trainer still dispatches to _validate_machine_config.""" + config = _create_valid_vertex_ai_trainer_config() + with patch( + "gigl.src.validation_check.libs.resource_config_checks._validate_machine_config" + ) as mock_validate: + check_if_trainer_resource_config_valid(resource_config_pb=config) + mock_validate.assert_called_once() + + def test_vertex_ai_inferencer_still_calls_machine_validation(self): + """Sanity: non-custom inferencer still dispatches to _validate_machine_config.""" + config = _create_valid_vertex_ai_inferencer_config() + with patch( + "gigl.src.validation_check.libs.resource_config_checks._validate_machine_config" + ) as mock_validate: + check_if_inferencer_resource_config_valid(resource_config_pb=config) + mock_validate.assert_called_once() + + +class TestCustomLauncherConfigShape(TestCase): + """Test suite for ``check_custom_launcher_config_shape``. + + Shape-only check: a populated ``CustomLauncherConfig`` must have a + non-empty ``command``. Non-custom configs are no-ops. + """ + + def test_populated_command_passes(self): + config = _create_valid_custom_trainer_config(command="python -m my.cli") + check_custom_launcher_config_shape( + resource_config_pb=config, + component=GiGLComponents.Trainer, + ) + + def test_empty_trainer_command_raises(self): + config = _create_valid_custom_trainer_config(command="") + with self.assertRaises(ValueError): + check_custom_launcher_config_shape( + resource_config_pb=config, + component=GiGLComponents.Trainer, + ) + + def test_empty_inferencer_command_raises(self): + config = _create_valid_custom_inferencer_config(command="") + with self.assertRaises(ValueError): + check_custom_launcher_config_shape( + resource_config_pb=config, + component=GiGLComponents.Inferencer, + ) + + def test_non_custom_trainer_is_no_op(self): + config = _create_valid_vertex_ai_trainer_config() + check_custom_launcher_config_shape( + resource_config_pb=config, + component=GiGLComponents.Trainer, + ) + + def test_non_custom_inferencer_is_no_op(self): + config = _create_valid_vertex_ai_inferencer_config() + check_custom_launcher_config_shape( + resource_config_pb=config, + component=GiGLComponents.Inferencer, + ) + + def test_unsupported_component_raises(self): + config = _create_valid_custom_trainer_config() + with self.assertRaises(ValueError): + check_custom_launcher_config_shape( + resource_config_pb=config, + component=GiGLComponents.DataPreprocessor, + ) + + class TestReservationAffinityValidation(TestCase): """Validate VertexAiResourceConfig.reservation_affinity handling."""