From 2b69b8f1c949fd784e4af5451f0bace878bce93f Mon Sep 17 00:00:00 2001 From: kmontemayor Date: Wed, 6 May 2026 22:56:27 +0000 Subject: [PATCH 1/6] Add `CustomResourceConfig` proto for shell-command launchers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduces a new `oneof` arm on `TrainerResourceConfig` / `InferencerResourceConfig` that lets callers describe a launcher as a shell command + positional args, instead of a fixed-shape Vertex AI / KFP / local resource config. The proto carries no semantics here — the dispatcher is added in a follow-up PR; this commit only ships the message, regenerated bindings, and the wrapper-property update so downstream code can read `wrapper.trainer_config` and get a `CustomResourceConfig` back. The diff includes a long tail of cosmetic Scala changes outside `gigl_resource_config/` because scalapbc regenerates every sibling proto's emitted source whenever any one proto in the same directory changes. Reviewers can scope to `CustomResourceConfig.scala` and the `*ResourceConfig.scala` siblings that gain the new oneof case. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../types/pb_wrappers/gigl_resource_config.py | 22 ++- .../research/gbml/gigl_resource_config.proto | 20 +++ .../CustomResourceConfig.scala | 158 ++++++++++++++++++ .../DistributedTrainerConfig.scala | 4 +- .../GiglResourceConfig.scala | 4 +- .../GiglResourceConfigProto.scala | 124 +++++++------- .../InferencerResourceConfig.scala | 33 +++- .../SharedResourceConfig.scala | 4 +- .../TrainerResourceConfig.scala | 33 +++- .../CustomResourceConfig.scala | 158 ++++++++++++++++++ .../DistributedTrainerConfig.scala | 4 +- .../GiglResourceConfig.scala | 4 +- .../GiglResourceConfigProto.scala | 124 +++++++------- .../InferencerResourceConfig.scala | 33 +++- .../SharedResourceConfig.scala | 4 +- .../TrainerResourceConfig.scala | 33 +++- .../research/gbml/gigl_resource_config_pb2.py | 44 +++-- .../gbml/gigl_resource_config_pb2.pyi | 54 +++++- .../pb_wrappers/gigl_resource_config_test.py | 34 ++++ 19 files changed, 731 insertions(+), 163 deletions(-) create mode 100644 scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala create mode 100644 scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala 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..d174d8b94 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 ( + CustomResourceConfig, 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, + CustomResourceConfig, ] ] = None _inference_config: Optional[ @@ -63,6 +67,7 @@ class GiglResourceConfigWrapper: VertexAiResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, + CustomResourceConfig, ] ] = None @@ -283,9 +288,10 @@ def trainer_config( KFPResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, + CustomResourceConfig, ]: """ - 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, + CustomResourceConfig, ] 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, + CustomResourceConfig, ]: """ - 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/proto/snapchat/research/gbml/gigl_resource_config.proto b/proto/snapchat/research/gbml/gigl_resource_config.proto index 0d930949b..1cf5d8aaa 100644 --- a/proto/snapchat/research/gbml/gigl_resource_config.proto +++ b/proto/snapchat/research/gbml/gigl_resource_config.proto @@ -166,6 +166,24 @@ 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 CustomResourceConfig { + // 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. + repeated string args = 2; +} + // (deprecated) // Configuration for distributed training resources message DistributedTrainerConfig { @@ -183,6 +201,7 @@ message TrainerResourceConfig { KFPResourceConfig kfp_trainer_config = 2; LocalResourceConfig local_trainer_config = 3; VertexAiGraphStoreConfig vertex_ai_graph_store_trainer_config = 4; + CustomResourceConfig custom_trainer_config = 5; } } @@ -193,6 +212,7 @@ message InferencerResourceConfig { DataflowResourceConfig dataflow_inferencer_config = 2; LocalResourceConfig local_inferencer_config = 3; VertexAiGraphStoreConfig vertex_ai_graph_store_inferencer_config = 4; + CustomResourceConfig custom_inferencer_config = 5; } } diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala new file mode 100644 index 000000000..b3759106f --- /dev/null +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala @@ -0,0 +1,158 @@ +// 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. + */ +@SerialVersionUID(0L) +final case class CustomResourceConfig( + 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[CustomResourceConfig] { + @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): CustomResourceConfig = copy(command = __v) + def clearArgs = copy(args = _root_.scala.Seq.empty) + def addArgs(__vs: _root_.scala.Predef.String *): CustomResourceConfig = addAllArgs(__vs) + def addAllArgs(__vs: Iterable[_root_.scala.Predef.String]): CustomResourceConfig = copy(args = args ++ __vs) + def withArgs(__v: _root_.scala.Seq[_root_.scala.Predef.String]): CustomResourceConfig = 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.CustomResourceConfig.type = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + // @@protoc_insertion_point(GeneratedMessage[snapchat.research.gbml.CustomResourceConfig]) +} + +object CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] { + implicit def messageCompanion: scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] = this + def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): snapchat.research.gbml.gigl_resource_config.CustomResourceConfig = { + 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.CustomResourceConfig( + 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.CustomResourceConfig] = _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.CustomResourceConfig( + 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.CustomResourceConfig( + command = "", + args = _root_.scala.Seq.empty + ) + implicit class CustomResourceConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomResourceConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomResourceConfig](_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.CustomResourceConfig = _root_.snapchat.research.gbml.gigl_resource_config.CustomResourceConfig( + command, + args + ) + // @@protoc_insertion_point(GeneratedMessageCompanion[snapchat.research.gbml.CustomResourceConfig]) +} 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..603a940e4 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.CustomResourceConfig, 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 + EN1c3RvbVJlc291cmNlQ29uZmlnEiYKB2NvbW1hbmQYASABKAlCDOI/CRIHY29tbWFuZFIHY29tbWFuZBIdCgRhcmdzGAIgAygJQ + gniPwYSBGFyZ3NSBGFyZ3MinQMKGERpc3RyaWJ1dGVkVHJhaW5lckNvbmZpZxKEAQoYdmVydGV4X2FpX3RyYWluZXJfY29uZmlnG + AEgASgLMi0uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVRyYWluZXJDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ + 29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJvChJrZnBfdHJhaW5lcl9jb25maWcYAiABKAsyKC5zbmFwY2hhdC5yZXNlY + XJjaC5nYm1sLktGUFRyYWluZXJDb25maWdCFeI/EhIQa2ZwVHJhaW5lckNvbmZpZ0gAUhBrZnBUcmFpbmVyQ29uZmlnEncKFGxvY + 2FsX3RyYWluZXJfY29uZmlnGAMgASgLMiouc25hcGNoYXQucmVzZWFyY2guZ2JtbC5Mb2NhbFRyYWluZXJDb25maWdCF+I/FBISb + G9jYWxUcmFpbmVyQ29uZmlnSABSEmxvY2FsVHJhaW5lckNvbmZpZ0IQCg50cmFpbmVyX2NvbmZpZyLFBQoVVHJhaW5lclJlc291c + mNlQ29uZmlnEoUBChh2ZXJ0ZXhfYWlfdHJhaW5lcl9jb25maWcYASABKAsyLi5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlZlcnRle + EFpUmVzb3VyY2VDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJwChJrZ + nBfdHJhaW5lcl9jb25maWcYAiABKAsyKS5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLktGUFJlc291cmNlQ29uZmlnQhXiPxISEGtmc + FRyYWluZXJDb25maWdIAFIQa2ZwVHJhaW5lckNvbmZpZxJ4ChRsb2NhbF90cmFpbmVyX2NvbmZpZxgDIAEoCzIrLnNuYXBjaGF0L + nJlc2VhcmNoLmdibWwuTG9jYWxSZXNvdXJjZUNvbmZpZ0IX4j8UEhJsb2NhbFRyYWluZXJDb25maWdIAFISbG9jYWxUcmFpbmVyQ + 29uZmlnEqcBCiR2ZXJ0ZXhfYWlfZ3JhcGhfc3RvcmVfdHJhaW5lcl9jb25maWcYBCABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nY + m1sLlZlcnRleEFpR3JhcGhTdG9yZUNvbmZpZ0Ik4j8hEh92ZXJ0ZXhBaUdyYXBoU3RvcmVUcmFpbmVyQ29uZmlnSABSH3ZlcnRle + EFpR3JhcGhTdG9yZVRyYWluZXJDb25maWcSfAoVY3VzdG9tX3RyYWluZXJfY29uZmlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY + 2guZ2JtbC5DdXN0b21SZXNvdXJjZUNvbmZpZ0IY4j8VEhNjdXN0b21UcmFpbmVyQ29uZmlnSABSE2N1c3RvbVRyYWluZXJDb25ma + WdCEAoOdHJhaW5lcl9jb25maWcijwYKGEluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZxKOAQobdmVydGV4X2FpX2luZmVyZW5jZXJfY + 29uZmlnGAEgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291cmNlQ29uZmlnQh3iPxoSGHZlcnRleEFpS + W5mZXJlbmNlckNvbmZpZ0gAUhh2ZXJ0ZXhBaUluZmVyZW5jZXJDb25maWcSjQEKGmRhdGFmbG93X2luZmVyZW5jZXJfY29uZmlnG + AIgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EYXRhZmxvd1Jlc291cmNlQ29uZmlnQh3iPxoSGGRhdGFmbG93SW5mZXJlb + mNlckNvbmZpZ0gAUhhkYXRhZmxvd0luZmVyZW5jZXJDb25maWcSgQEKF2xvY2FsX2luZmVyZW5jZXJfY29uZmlnGAMgASgLMisuc + 25hcGNoYXQucmVzZWFyY2guZ2JtbC5Mb2NhbFJlc291cmNlQ29uZmlnQhriPxcSFWxvY2FsSW5mZXJlbmNlckNvbmZpZ0gAUhVsb + 2NhbEluZmVyZW5jZXJDb25maWcSsAEKJ3ZlcnRleF9haV9ncmFwaF9zdG9yZV9pbmZlcmVuY2VyX2NvbmZpZxgEIAEoCzIwLnNuY + XBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlHcmFwaFN0b3JlQ29uZmlnQifiPyQSInZlcnRleEFpR3JhcGhTdG9yZUluZmVyZ + W5jZXJDb25maWdIAFIidmVydGV4QWlHcmFwaFN0b3JlSW5mZXJlbmNlckNvbmZpZxKFAQoYY3VzdG9tX2luZmVyZW5jZXJfY29uZ + mlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5DdXN0b21SZXNvdXJjZUNvbmZpZ0Ib4j8YEhZjdXN0b21JbmZlcmVuY + 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..dd637b565 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.CustomResourceConfig = inferencerConfig.customInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.defaultInstance) + def withCustomInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig): 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.CustomResourceConfig](_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.CustomResourceConfig]]).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.CustomResourceConfig } __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.CustomResourceConfig] = _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.CustomResourceConfig) extends snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig { + type ValueType = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + override def isCustomInferencerConfig: _root_.scala.Boolean = true + override def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] = 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.CustomResourceConfig] = 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..2323c5f45 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.CustomResourceConfig = trainerConfig.customTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.defaultInstance) + def withCustomTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig): 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.CustomResourceConfig](_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.CustomResourceConfig]]).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.CustomResourceConfig } __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.CustomResourceConfig] = _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.CustomResourceConfig) extends snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig { + type ValueType = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + override def isCustomTrainerConfig: _root_.scala.Boolean = true + override def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] = 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.CustomResourceConfig] = 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/CustomResourceConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala new file mode 100644 index 000000000..b3759106f --- /dev/null +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala @@ -0,0 +1,158 @@ +// 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. + */ +@SerialVersionUID(0L) +final case class CustomResourceConfig( + 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[CustomResourceConfig] { + @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): CustomResourceConfig = copy(command = __v) + def clearArgs = copy(args = _root_.scala.Seq.empty) + def addArgs(__vs: _root_.scala.Predef.String *): CustomResourceConfig = addAllArgs(__vs) + def addAllArgs(__vs: Iterable[_root_.scala.Predef.String]): CustomResourceConfig = copy(args = args ++ __vs) + def withArgs(__v: _root_.scala.Seq[_root_.scala.Predef.String]): CustomResourceConfig = 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.CustomResourceConfig.type = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + // @@protoc_insertion_point(GeneratedMessage[snapchat.research.gbml.CustomResourceConfig]) +} + +object CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] { + implicit def messageCompanion: scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] = this + def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): snapchat.research.gbml.gigl_resource_config.CustomResourceConfig = { + 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.CustomResourceConfig( + 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.CustomResourceConfig] = _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.CustomResourceConfig( + 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.CustomResourceConfig( + command = "", + args = _root_.scala.Seq.empty + ) + implicit class CustomResourceConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomResourceConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomResourceConfig](_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.CustomResourceConfig = _root_.snapchat.research.gbml.gigl_resource_config.CustomResourceConfig( + command, + args + ) + // @@protoc_insertion_point(GeneratedMessageCompanion[snapchat.research.gbml.CustomResourceConfig]) +} 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..603a940e4 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.CustomResourceConfig, 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 + EN1c3RvbVJlc291cmNlQ29uZmlnEiYKB2NvbW1hbmQYASABKAlCDOI/CRIHY29tbWFuZFIHY29tbWFuZBIdCgRhcmdzGAIgAygJQ + gniPwYSBGFyZ3NSBGFyZ3MinQMKGERpc3RyaWJ1dGVkVHJhaW5lckNvbmZpZxKEAQoYdmVydGV4X2FpX3RyYWluZXJfY29uZmlnG + AEgASgLMi0uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVRyYWluZXJDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ + 29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJvChJrZnBfdHJhaW5lcl9jb25maWcYAiABKAsyKC5zbmFwY2hhdC5yZXNlY + XJjaC5nYm1sLktGUFRyYWluZXJDb25maWdCFeI/EhIQa2ZwVHJhaW5lckNvbmZpZ0gAUhBrZnBUcmFpbmVyQ29uZmlnEncKFGxvY + 2FsX3RyYWluZXJfY29uZmlnGAMgASgLMiouc25hcGNoYXQucmVzZWFyY2guZ2JtbC5Mb2NhbFRyYWluZXJDb25maWdCF+I/FBISb + G9jYWxUcmFpbmVyQ29uZmlnSABSEmxvY2FsVHJhaW5lckNvbmZpZ0IQCg50cmFpbmVyX2NvbmZpZyLFBQoVVHJhaW5lclJlc291c + mNlQ29uZmlnEoUBChh2ZXJ0ZXhfYWlfdHJhaW5lcl9jb25maWcYASABKAsyLi5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLlZlcnRle + EFpUmVzb3VyY2VDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJwChJrZ + nBfdHJhaW5lcl9jb25maWcYAiABKAsyKS5zbmFwY2hhdC5yZXNlYXJjaC5nYm1sLktGUFJlc291cmNlQ29uZmlnQhXiPxISEGtmc + FRyYWluZXJDb25maWdIAFIQa2ZwVHJhaW5lckNvbmZpZxJ4ChRsb2NhbF90cmFpbmVyX2NvbmZpZxgDIAEoCzIrLnNuYXBjaGF0L + nJlc2VhcmNoLmdibWwuTG9jYWxSZXNvdXJjZUNvbmZpZ0IX4j8UEhJsb2NhbFRyYWluZXJDb25maWdIAFISbG9jYWxUcmFpbmVyQ + 29uZmlnEqcBCiR2ZXJ0ZXhfYWlfZ3JhcGhfc3RvcmVfdHJhaW5lcl9jb25maWcYBCABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nY + m1sLlZlcnRleEFpR3JhcGhTdG9yZUNvbmZpZ0Ik4j8hEh92ZXJ0ZXhBaUdyYXBoU3RvcmVUcmFpbmVyQ29uZmlnSABSH3ZlcnRle + EFpR3JhcGhTdG9yZVRyYWluZXJDb25maWcSfAoVY3VzdG9tX3RyYWluZXJfY29uZmlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY + 2guZ2JtbC5DdXN0b21SZXNvdXJjZUNvbmZpZ0IY4j8VEhNjdXN0b21UcmFpbmVyQ29uZmlnSABSE2N1c3RvbVRyYWluZXJDb25ma + WdCEAoOdHJhaW5lcl9jb25maWcijwYKGEluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZxKOAQobdmVydGV4X2FpX2luZmVyZW5jZXJfY + 29uZmlnGAEgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291cmNlQ29uZmlnQh3iPxoSGHZlcnRleEFpS + W5mZXJlbmNlckNvbmZpZ0gAUhh2ZXJ0ZXhBaUluZmVyZW5jZXJDb25maWcSjQEKGmRhdGFmbG93X2luZmVyZW5jZXJfY29uZmlnG + AIgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5EYXRhZmxvd1Jlc291cmNlQ29uZmlnQh3iPxoSGGRhdGFmbG93SW5mZXJlb + mNlckNvbmZpZ0gAUhhkYXRhZmxvd0luZmVyZW5jZXJDb25maWcSgQEKF2xvY2FsX2luZmVyZW5jZXJfY29uZmlnGAMgASgLMisuc + 25hcGNoYXQucmVzZWFyY2guZ2JtbC5Mb2NhbFJlc291cmNlQ29uZmlnQhriPxcSFWxvY2FsSW5mZXJlbmNlckNvbmZpZ0gAUhVsb + 2NhbEluZmVyZW5jZXJDb25maWcSsAEKJ3ZlcnRleF9haV9ncmFwaF9zdG9yZV9pbmZlcmVuY2VyX2NvbmZpZxgEIAEoCzIwLnNuY + XBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlHcmFwaFN0b3JlQ29uZmlnQifiPyQSInZlcnRleEFpR3JhcGhTdG9yZUluZmVyZ + W5jZXJDb25maWdIAFIidmVydGV4QWlHcmFwaFN0b3JlSW5mZXJlbmNlckNvbmZpZxKFAQoYY3VzdG9tX2luZmVyZW5jZXJfY29uZ + mlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5DdXN0b21SZXNvdXJjZUNvbmZpZ0Ib4j8YEhZjdXN0b21JbmZlcmVuY + 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..dd637b565 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.CustomResourceConfig = inferencerConfig.customInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.defaultInstance) + def withCustomInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig): 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.CustomResourceConfig](_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.CustomResourceConfig]]).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.CustomResourceConfig } __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.CustomResourceConfig] = _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.CustomResourceConfig) extends snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig { + type ValueType = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + override def isCustomInferencerConfig: _root_.scala.Boolean = true + override def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] = 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.CustomResourceConfig] = 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..2323c5f45 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.CustomResourceConfig = trainerConfig.customTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.defaultInstance) + def withCustomTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig): 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.CustomResourceConfig](_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.CustomResourceConfig]]).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.CustomResourceConfig } __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.CustomResourceConfig] = _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.CustomResourceConfig) extends snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig { + type ValueType = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + override def isCustomTrainerConfig: _root_.scala.Boolean = true + override def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] = 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.CustomResourceConfig] = 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..3073ce92a 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\x43ustomResourceConfig\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.CustomResourceConfigH\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.CustomResourceConfigH\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'] +_CUSTOMRESOURCECONFIG = DESCRIPTOR.message_types_by_name['CustomResourceConfig'] _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) +CustomResourceConfig = _reflection.GeneratedProtocolMessageType('CustomResourceConfig', (_message.Message,), { + 'DESCRIPTOR' : _CUSTOMRESOURCECONFIG, + '__module__' : 'snapchat.research.gbml.gigl_resource_config_pb2' + # @@protoc_insertion_point(class_scope:snapchat.research.gbml.CustomResourceConfig) + }) +_sym_db.RegisterMessage(CustomResourceConfig) + 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 + _CUSTOMRESOURCECONFIG._serialized_start=1524 + _CUSTOMRESOURCECONFIG._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..a0ac42434 100644 --- a/snapchat/research/gbml/gigl_resource_config_pb2.pyi +++ b/snapchat/research/gbml/gigl_resource_config_pb2.pyi @@ -396,6 +396,40 @@ class VertexAiGraphStoreConfig(google.protobuf.message.Message): global___VertexAiGraphStoreConfig = VertexAiGraphStoreConfig +class CustomResourceConfig(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. + """ + 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___CustomResourceConfig = CustomResourceConfig + class DistributedTrainerConfig(google.protobuf.message.Message): """(deprecated) Configuration for distributed training resources @@ -434,6 +468,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 +477,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___CustomResourceConfig: ... def __init__( self, *, @@ -449,10 +486,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___CustomResourceConfig | 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 +503,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 +512,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___CustomResourceConfig: ... def __init__( self, *, @@ -480,10 +521,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___CustomResourceConfig | 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/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..bba658738 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.CustomResourceConfig( + 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.CustomResourceConfig + ) + 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.CustomResourceConfig( + 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.CustomResourceConfig + ) + 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() From 04255472370a15b9faf53fa9e6c85fd77fd73831 Mon Sep 17 00:00:00 2001 From: kmontemayor Date: Fri, 8 May 2026 00:15:27 +0000 Subject: [PATCH 2/6] Skip machine-config validation for CustomResourceConfig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CustomResourceConfig is launcher-pluggable — there is no concrete machine spec to validate against (no machine_type, num_workers, GPU config, etc.). The wrapper's trainer_config / inferencer_config properties now return a union that includes CustomResourceConfig (introduced earlier in this PR), but _validate_machine_config does not accept it. Add an isinstance early-return guard at each call site that logs the skip and returns. Shape and backend-compatibility validation for CustomResourceConfig come in a follow-up PR; this commit only makes the existing validation flow type-clean against the widened union. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../libs/resource_config_checks.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gigl/src/validation_check/libs/resource_config_checks.py b/gigl/src/validation_check/libs/resource_config_checks.py index 98a12a360..eee0dae52 100644 --- a/gigl/src/validation_check/libs/resource_config_checks.py +++ b/gigl/src/validation_check/libs/resource_config_checks.py @@ -149,7 +149,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.CustomResourceConfig, ] = wrapper.trainer_config + if isinstance(trainer_config, gigl_resource_config_pb2.CustomResourceConfig): + logger.info( + "Skipping trainer machine-shape validation: trainer_config is a " + "CustomResourceConfig (launcher-pluggable; no concrete machine " + "spec to validate)." + ) + return _validate_machine_config(config=trainer_config) @@ -163,6 +171,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.CustomResourceConfig): + logger.info( + "Skipping inferencer machine-shape validation: inferencer_config " + "is a CustomResourceConfig (launcher-pluggable; no concrete " + "machine spec to validate)." + ) + return _validate_machine_config(config=inferencer_config) From 066c473ad82ac1fc7f92d37e3cfde66aa14af80d Mon Sep 17 00:00:00 2001 From: kmontemayor Date: Wed, 6 May 2026 22:58:49 +0000 Subject: [PATCH 3/6] Add `launch_custom` subprocess dispatcher for CustomResourceConfig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements `launch_custom`, a thin shim that takes a populated `CustomResourceConfig` and shells out via `subprocess.run(shell=True, check=True)`. The proto's `command` is a shell snippet (so leading `KEY=VALUE` env assignments parse naturally) and `args[]` are individually `shlex.quote`-d before joining, so values containing whitespace survive the shell pass. The dispatcher performs no template substitution: `command` and `args[]` are taken verbatim, and any placeholder text reaches `subprocess.run` literally. Consumers that want runtime-context substitution (e.g. ${gigl:foo}) should resolve it at YAML-load time before the proto reaches this module. No call site in the rest of the repo invokes `launch_custom` yet — wiring is added in a follow-up PR. Co-Authored-By: Claude Opus 4.7 (1M context) --- gigl/src/common/custom_launcher.py | 96 ++++++++++++ tests/unit/src/common/custom_launcher_test.py | 148 ++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 gigl/src/common/custom_launcher.py create mode 100644 tests/unit/src/common/custom_launcher_test.py diff --git a/gigl/src/common/custom_launcher.py b/gigl/src/common/custom_launcher.py new file mode 100644 index 000000000..fee371ae6 --- /dev/null +++ b/gigl/src/common/custom_launcher.py @@ -0,0 +1,96 @@ +"""Subprocess dispatch for ``CustomResourceConfig``-backed launchers. + +Takes ``CustomResourceConfig.command`` and ``CustomResourceConfig.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 CustomResourceConfig + +logger = Logger() + +_LAUNCHABLE_COMPONENTS: frozenset[GiGLComponents] = frozenset( + {GiGLComponents.Trainer, GiGLComponents.Inferencer} +) + + +def launch_custom( + custom_resource_config: CustomResourceConfig, + 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_resource_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_resource_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_resource_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_resource_config.command: + raise ValueError("CustomResourceConfig.command must be set") + + command: str = custom_resource_config.command + args: list[str] = list(custom_resource_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/tests/unit/src/common/custom_launcher_test.py b/tests/unit/src/common/custom_launcher_test.py new file mode 100644 index 000000000..0ab4119bb --- /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.CustomResourceConfig: + return gigl_resource_config_pb2.CustomResourceConfig( + 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_resource_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_resource_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_resource_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_resource_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_resource_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() From 844c434a613518830940623265ca28ac21b8480c Mon Sep 17 00:00:00 2001 From: kmontemayor Date: Tue, 12 May 2026 15:19:32 +0000 Subject: [PATCH 4/6] Update docstring --- proto/snapchat/research/gbml/gigl_resource_config.proto | 1 + .../gbml/gigl_resource_config/CustomResourceConfig.scala | 1 + .../gbml/gigl_resource_config/CustomResourceConfig.scala | 1 + snapchat/research/gbml/gigl_resource_config_pb2.pyi | 1 + 4 files changed, 4 insertions(+) diff --git a/proto/snapchat/research/gbml/gigl_resource_config.proto b/proto/snapchat/research/gbml/gigl_resource_config.proto index 1cf5d8aaa..929c00f0a 100644 --- a/proto/snapchat/research/gbml/gigl_resource_config.proto +++ b/proto/snapchat/research/gbml/gigl_resource_config.proto @@ -181,6 +181,7 @@ message CustomResourceConfig { // 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; } diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala index b3759106f..f26c93c21 100644 --- a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala @@ -20,6 +20,7 @@ package snapchat.research.gbml.gigl_resource_config * 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 CustomResourceConfig( diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala index b3759106f..f26c93c21 100644 --- a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala @@ -20,6 +20,7 @@ package snapchat.research.gbml.gigl_resource_config * 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 CustomResourceConfig( diff --git a/snapchat/research/gbml/gigl_resource_config_pb2.pyi b/snapchat/research/gbml/gigl_resource_config_pb2.pyi index a0ac42434..19ef54126 100644 --- a/snapchat/research/gbml/gigl_resource_config_pb2.pyi +++ b/snapchat/research/gbml/gigl_resource_config_pb2.pyi @@ -419,6 +419,7 @@ class CustomResourceConfig(google.protobuf.message.Message): """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, From d0fb63f27d472b82715ae1666efd1f475cca5b44 Mon Sep 17 00:00:00 2001 From: kmontemayor Date: Tue, 12 May 2026 21:25:25 +0000 Subject: [PATCH 5/6] Rename CustomResourceConfig -> CustomLauncherConfig The proto message describes a launcher command (command + args), not a resource shape (machines / replicas / pools) like its sibling oneof arms (VertexAiResourceConfig, KFPResourceConfig, LocalResourceConfig). Aligning the name with the supporting Python (custom_launcher.py / launch_custom) removes the misleading "Resource" suffix. Field names on TrainerResourceConfig / InferencerResourceConfig stay (custom_trainer_config / custom_inferencer_config) so the sibling field-name pattern is preserved. Regenerated pb2 / pyi / Scala bindings. Wrapper + validator + test references updated. --- .../types/pb_wrappers/gigl_resource_config.py | 12 +++---- .../libs/resource_config_checks.py | 10 +++--- .../research/gbml/gigl_resource_config.proto | 6 ++-- ...onfig.scala => CustomLauncherConfig.scala} | 36 +++++++++---------- .../GiglResourceConfigProto.scala | 8 ++--- .../InferencerResourceConfig.scala | 20 +++++------ .../TrainerResourceConfig.scala | 20 +++++------ ...onfig.scala => CustomLauncherConfig.scala} | 36 +++++++++---------- .../GiglResourceConfigProto.scala | 8 ++--- .../InferencerResourceConfig.scala | 20 +++++------ .../TrainerResourceConfig.scala | 20 +++++------ .../research/gbml/gigl_resource_config_pb2.py | 16 ++++----- .../gbml/gigl_resource_config_pb2.pyi | 12 +++---- .../pb_wrappers/gigl_resource_config_test.py | 8 ++--- 14 files changed, 116 insertions(+), 116 deletions(-) rename scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/{CustomResourceConfig.scala => CustomLauncherConfig.scala} (84%) rename scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/{CustomResourceConfig.scala => CustomLauncherConfig.scala} (84%) 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 d174d8b94..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,7 +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 ( - CustomResourceConfig, + CustomLauncherConfig, DataflowResourceConfig, DataPreprocessorConfig, DistributedTrainerConfig, @@ -58,7 +58,7 @@ class GiglResourceConfigWrapper: KFPResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, - CustomResourceConfig, + CustomLauncherConfig, ] ] = None _inference_config: Optional[ @@ -67,7 +67,7 @@ class GiglResourceConfigWrapper: VertexAiResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, - CustomResourceConfig, + CustomLauncherConfig, ] ] = None @@ -288,7 +288,7 @@ def trainer_config( KFPResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, - CustomResourceConfig, + CustomLauncherConfig, ]: """ Returns the trainer config specified in the resource config. (e.g. Vertex AI, KFP, Local, Custom) @@ -311,7 +311,7 @@ def trainer_config( KFPResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, - CustomResourceConfig, + CustomLauncherConfig, ] if ( deprecated_config.WhichOneof(_TRAINER_CONFIG_FIELD) # type: ignore[arg-type] @@ -395,7 +395,7 @@ def inferencer_config( VertexAiResourceConfig, LocalResourceConfig, VertexAiGraphStoreConfig, - CustomResourceConfig, + CustomLauncherConfig, ]: """ Returns the inferencer config specified in the resource config. (e.g. Dataflow, Vertex AI, Local, Custom) diff --git a/gigl/src/validation_check/libs/resource_config_checks.py b/gigl/src/validation_check/libs/resource_config_checks.py index eee0dae52..660068bd4 100644 --- a/gigl/src/validation_check/libs/resource_config_checks.py +++ b/gigl/src/validation_check/libs/resource_config_checks.py @@ -149,12 +149,12 @@ 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.CustomResourceConfig, + gigl_resource_config_pb2.CustomLauncherConfig, ] = wrapper.trainer_config - if isinstance(trainer_config, gigl_resource_config_pb2.CustomResourceConfig): + if isinstance(trainer_config, gigl_resource_config_pb2.CustomLauncherConfig): logger.info( "Skipping trainer machine-shape validation: trainer_config is a " - "CustomResourceConfig (launcher-pluggable; no concrete machine " + "CustomLauncherConfig (launcher-pluggable; no concrete machine " "spec to validate)." ) return @@ -171,10 +171,10 @@ 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.CustomResourceConfig): + if isinstance(inferencer_config, gigl_resource_config_pb2.CustomLauncherConfig): logger.info( "Skipping inferencer machine-shape validation: inferencer_config " - "is a CustomResourceConfig (launcher-pluggable; no concrete " + "is a CustomLauncherConfig (launcher-pluggable; no concrete " "machine spec to validate)." ) return diff --git a/proto/snapchat/research/gbml/gigl_resource_config.proto b/proto/snapchat/research/gbml/gigl_resource_config.proto index 929c00f0a..9174b9194 100644 --- a/proto/snapchat/research/gbml/gigl_resource_config.proto +++ b/proto/snapchat/research/gbml/gigl_resource_config.proto @@ -173,7 +173,7 @@ message VertexAiResourceConfig { // 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 CustomResourceConfig { +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"). @@ -202,7 +202,7 @@ message TrainerResourceConfig { KFPResourceConfig kfp_trainer_config = 2; LocalResourceConfig local_trainer_config = 3; VertexAiGraphStoreConfig vertex_ai_graph_store_trainer_config = 4; - CustomResourceConfig custom_trainer_config = 5; + CustomLauncherConfig custom_trainer_config = 5; } } @@ -213,7 +213,7 @@ message InferencerResourceConfig { DataflowResourceConfig dataflow_inferencer_config = 2; LocalResourceConfig local_inferencer_config = 3; VertexAiGraphStoreConfig vertex_ai_graph_store_inferencer_config = 4; - CustomResourceConfig custom_inferencer_config = 5; + CustomLauncherConfig custom_inferencer_config = 5; } } diff --git a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala similarity index 84% rename from scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala rename to scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala index f26c93c21..4eb76518b 100644 --- a/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala +++ b/scala/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala @@ -23,11 +23,11 @@ package snapchat.research.gbml.gigl_resource_config * e.g. "[--my_flag=my_value, --my_other_flag=my_other_value, --noskip_training]" */ @SerialVersionUID(0L) -final case class CustomResourceConfig( +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[CustomResourceConfig] { + ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CustomLauncherConfig] { @transient private[this] var __serializedSizeMemoized: _root_.scala.Int = 0 private[this] def __computeSerializedSize(): _root_.scala.Int = { @@ -68,11 +68,11 @@ final case class CustomResourceConfig( }; unknownFields.writeTo(_output__) } - def withCommand(__v: _root_.scala.Predef.String): CustomResourceConfig = copy(command = __v) + 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 *): CustomResourceConfig = addAllArgs(__vs) - def addAllArgs(__vs: Iterable[_root_.scala.Predef.String]): CustomResourceConfig = copy(args = args ++ __vs) - def withArgs(__v: _root_.scala.Seq[_root_.scala.Predef.String]): CustomResourceConfig = copy(args = __v) + 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 = { @@ -92,13 +92,13 @@ final case class CustomResourceConfig( } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) - def companion: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.type = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig - // @@protoc_insertion_point(GeneratedMessage[snapchat.research.gbml.CustomResourceConfig]) + 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 CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] { - implicit def messageCompanion: scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] = this - def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): snapchat.research.gbml.gigl_resource_config.CustomResourceConfig = { +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 @@ -118,16 +118,16 @@ object CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.r _unknownFields__.parseField(tag, _input__) } } - snapchat.research.gbml.gigl_resource_config.CustomResourceConfig( + 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.CustomResourceConfig] = _root_.scalapb.descriptors.Reads{ + 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.CustomResourceConfig( + 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) ) @@ -138,11 +138,11 @@ object CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.r 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.CustomResourceConfig( + lazy val defaultInstance = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( command = "", args = _root_.scala.Seq.empty ) - implicit class CustomResourceConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomResourceConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomResourceConfig](_l) { + 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_)) } @@ -151,9 +151,9 @@ object CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.r def of( command: _root_.scala.Predef.String, args: _root_.scala.Seq[_root_.scala.Predef.String] - ): _root_.snapchat.research.gbml.gigl_resource_config.CustomResourceConfig = _root_.snapchat.research.gbml.gigl_resource_config.CustomResourceConfig( + ): _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.CustomResourceConfig]) + // @@protoc_insertion_point(GeneratedMessageCompanion[snapchat.research.gbml.CustomLauncherConfig]) } 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 603a940e4..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,7 +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.CustomResourceConfig, + 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, @@ -67,7 +67,7 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { 3JhcGhTdG9yZVBvb2wSYwoMY29tcHV0ZV9wb29sGAIgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291c mNlQ29uZmlnQhDiPw0SC2NvbXB1dGVQb29sUgtjb21wdXRlUG9vbBJpCiBjb21wdXRlX2NsdXN0ZXJfbG9jYWxfd29ybGRfc2l6Z RgDIAEoBUIh4j8eEhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplUhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplIl0KF - EN1c3RvbVJlc291cmNlQ29uZmlnEiYKB2NvbW1hbmQYASABKAlCDOI/CRIHY29tbWFuZFIHY29tbWFuZBIdCgRhcmdzGAIgAygJQ + EN1c3RvbUxhdW5jaGVyQ29uZmlnEiYKB2NvbW1hbmQYASABKAlCDOI/CRIHY29tbWFuZFIHY29tbWFuZBIdCgRhcmdzGAIgAygJQ gniPwYSBGFyZ3NSBGFyZ3MinQMKGERpc3RyaWJ1dGVkVHJhaW5lckNvbmZpZxKEAQoYdmVydGV4X2FpX3RyYWluZXJfY29uZmlnG AEgASgLMi0uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVRyYWluZXJDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ 29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJvChJrZnBfdHJhaW5lcl9jb25maWcYAiABKAsyKC5zbmFwY2hhdC5yZXNlY @@ -82,7 +82,7 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { 29uZmlnEqcBCiR2ZXJ0ZXhfYWlfZ3JhcGhfc3RvcmVfdHJhaW5lcl9jb25maWcYBCABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nY m1sLlZlcnRleEFpR3JhcGhTdG9yZUNvbmZpZ0Ik4j8hEh92ZXJ0ZXhBaUdyYXBoU3RvcmVUcmFpbmVyQ29uZmlnSABSH3ZlcnRle EFpR3JhcGhTdG9yZVRyYWluZXJDb25maWcSfAoVY3VzdG9tX3RyYWluZXJfY29uZmlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY - 2guZ2JtbC5DdXN0b21SZXNvdXJjZUNvbmZpZ0IY4j8VEhNjdXN0b21UcmFpbmVyQ29uZmlnSABSE2N1c3RvbVRyYWluZXJDb25ma + 2guZ2JtbC5DdXN0b21MYXVuY2hlckNvbmZpZ0IY4j8VEhNjdXN0b21UcmFpbmVyQ29uZmlnSABSE2N1c3RvbVRyYWluZXJDb25ma WdCEAoOdHJhaW5lcl9jb25maWcijwYKGEluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZxKOAQobdmVydGV4X2FpX2luZmVyZW5jZXJfY 29uZmlnGAEgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291cmNlQ29uZmlnQh3iPxoSGHZlcnRleEFpS W5mZXJlbmNlckNvbmZpZ0gAUhh2ZXJ0ZXhBaUluZmVyZW5jZXJDb25maWcSjQEKGmRhdGFmbG93X2luZmVyZW5jZXJfY29uZmlnG @@ -92,7 +92,7 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { 2NhbEluZmVyZW5jZXJDb25maWcSsAEKJ3ZlcnRleF9haV9ncmFwaF9zdG9yZV9pbmZlcmVuY2VyX2NvbmZpZxgEIAEoCzIwLnNuY XBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlHcmFwaFN0b3JlQ29uZmlnQifiPyQSInZlcnRleEFpR3JhcGhTdG9yZUluZmVyZ W5jZXJDb25maWdIAFIidmVydGV4QWlHcmFwaFN0b3JlSW5mZXJlbmNlckNvbmZpZxKFAQoYY3VzdG9tX2luZmVyZW5jZXJfY29uZ - mlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5DdXN0b21SZXNvdXJjZUNvbmZpZ0Ib4j8YEhZjdXN0b21JbmZlcmVuY + mlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5DdXN0b21MYXVuY2hlckNvbmZpZ0Ib4j8YEhZjdXN0b21JbmZlcmVuY 2VyQ29uZmlnSABSFmN1c3RvbUluZmVyZW5jZXJDb25maWdCEwoRaW5mZXJlbmNlcl9jb25maWcilwgKFFNoYXJlZFJlc291cmNlQ 29uZmlnEn4KD3Jlc291cmNlX2xhYmVscxgBIAMoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU2hhcmVkUmVzb3VyY2VDb25ma WcuUmVzb3VyY2VMYWJlbHNFbnRyeUIT4j8QEg5yZXNvdXJjZUxhYmVsc1IOcmVzb3VyY2VMYWJlbHMSjgEKFWNvbW1vbl9jb21wd 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 dd637b565..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 @@ -89,8 +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.CustomResourceConfig = inferencerConfig.customInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.defaultInstance) - def withCustomInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig): InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(__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) @@ -138,7 +138,7 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch 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.CustomResourceConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) + __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() @@ -159,7 +159,7 @@ 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.CustomResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(_))) + .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") @@ -173,7 +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.CustomResourceConfig + case 5 => __out = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig } __out } @@ -194,7 +194,7 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch 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.CustomResourceConfig] = _root_.scala.None + def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scala.None } object InferencerConfig { @SerialVersionUID(0L) @@ -235,10 +235,10 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch override def number: _root_.scala.Int = 4 } @SerialVersionUID(0L) - final case class CustomInferencerConfig(value: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig) extends snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig { - type ValueType = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + 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.CustomResourceConfig] = Some(value) + override def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = Some(value) override def number: _root_.scala.Int = 5 } } @@ -247,7 +247,7 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch 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.CustomResourceConfig] = field(_.getCustomInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(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 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 2323c5f45..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 @@ -89,8 +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.CustomResourceConfig = trainerConfig.customTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.defaultInstance) - def withCustomTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig): TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(__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) @@ -138,7 +138,7 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. 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.CustomResourceConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) + __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() @@ -159,7 +159,7 @@ 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.CustomResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(_))) + .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") @@ -173,7 +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.CustomResourceConfig + case 5 => __out = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig } __out } @@ -194,7 +194,7 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. 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.CustomResourceConfig] = _root_.scala.None + def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scala.None } object TrainerConfig { @SerialVersionUID(0L) @@ -235,10 +235,10 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. override def number: _root_.scala.Int = 4 } @SerialVersionUID(0L) - final case class CustomTrainerConfig(value: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig) extends snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig { - type ValueType = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + 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.CustomResourceConfig] = Some(value) + override def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = Some(value) override def number: _root_.scala.Int = 5 } } @@ -247,7 +247,7 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. 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.CustomResourceConfig] = field(_.getCustomTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(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 diff --git a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala similarity index 84% rename from scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala rename to scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala index f26c93c21..4eb76518b 100644 --- a/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomResourceConfig.scala +++ b/scala_spark35/common/src/main/scala/snapchat/research/gbml/gigl_resource_config/CustomLauncherConfig.scala @@ -23,11 +23,11 @@ package snapchat.research.gbml.gigl_resource_config * e.g. "[--my_flag=my_value, --my_other_flag=my_other_value, --noskip_training]" */ @SerialVersionUID(0L) -final case class CustomResourceConfig( +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[CustomResourceConfig] { + ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CustomLauncherConfig] { @transient private[this] var __serializedSizeMemoized: _root_.scala.Int = 0 private[this] def __computeSerializedSize(): _root_.scala.Int = { @@ -68,11 +68,11 @@ final case class CustomResourceConfig( }; unknownFields.writeTo(_output__) } - def withCommand(__v: _root_.scala.Predef.String): CustomResourceConfig = copy(command = __v) + 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 *): CustomResourceConfig = addAllArgs(__vs) - def addAllArgs(__vs: Iterable[_root_.scala.Predef.String]): CustomResourceConfig = copy(args = args ++ __vs) - def withArgs(__v: _root_.scala.Seq[_root_.scala.Predef.String]): CustomResourceConfig = copy(args = __v) + 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 = { @@ -92,13 +92,13 @@ final case class CustomResourceConfig( } } def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this) - def companion: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.type = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig - // @@protoc_insertion_point(GeneratedMessage[snapchat.research.gbml.CustomResourceConfig]) + 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 CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] { - implicit def messageCompanion: scalapb.GeneratedMessageCompanion[snapchat.research.gbml.gigl_resource_config.CustomResourceConfig] = this - def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): snapchat.research.gbml.gigl_resource_config.CustomResourceConfig = { +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 @@ -118,16 +118,16 @@ object CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.r _unknownFields__.parseField(tag, _input__) } } - snapchat.research.gbml.gigl_resource_config.CustomResourceConfig( + 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.CustomResourceConfig] = _root_.scalapb.descriptors.Reads{ + 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.CustomResourceConfig( + 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) ) @@ -138,11 +138,11 @@ object CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.r 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.CustomResourceConfig( + lazy val defaultInstance = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig( command = "", args = _root_.scala.Seq.empty ) - implicit class CustomResourceConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomResourceConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, snapchat.research.gbml.gigl_resource_config.CustomResourceConfig](_l) { + 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_)) } @@ -151,9 +151,9 @@ object CustomResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat.r def of( command: _root_.scala.Predef.String, args: _root_.scala.Seq[_root_.scala.Predef.String] - ): _root_.snapchat.research.gbml.gigl_resource_config.CustomResourceConfig = _root_.snapchat.research.gbml.gigl_resource_config.CustomResourceConfig( + ): _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.CustomResourceConfig]) + // @@protoc_insertion_point(GeneratedMessageCompanion[snapchat.research.gbml.CustomLauncherConfig]) } 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 603a940e4..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,7 +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.CustomResourceConfig, + 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, @@ -67,7 +67,7 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { 3JhcGhTdG9yZVBvb2wSYwoMY29tcHV0ZV9wb29sGAIgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291c mNlQ29uZmlnQhDiPw0SC2NvbXB1dGVQb29sUgtjb21wdXRlUG9vbBJpCiBjb21wdXRlX2NsdXN0ZXJfbG9jYWxfd29ybGRfc2l6Z RgDIAEoBUIh4j8eEhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplUhxjb21wdXRlQ2x1c3RlckxvY2FsV29ybGRTaXplIl0KF - EN1c3RvbVJlc291cmNlQ29uZmlnEiYKB2NvbW1hbmQYASABKAlCDOI/CRIHY29tbWFuZFIHY29tbWFuZBIdCgRhcmdzGAIgAygJQ + EN1c3RvbUxhdW5jaGVyQ29uZmlnEiYKB2NvbW1hbmQYASABKAlCDOI/CRIHY29tbWFuZFIHY29tbWFuZBIdCgRhcmdzGAIgAygJQ gniPwYSBGFyZ3NSBGFyZ3MinQMKGERpc3RyaWJ1dGVkVHJhaW5lckNvbmZpZxKEAQoYdmVydGV4X2FpX3RyYWluZXJfY29uZmlnG AEgASgLMi0uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVRyYWluZXJDb25maWdCGuI/FxIVdmVydGV4QWlUcmFpbmVyQ 29uZmlnSABSFXZlcnRleEFpVHJhaW5lckNvbmZpZxJvChJrZnBfdHJhaW5lcl9jb25maWcYAiABKAsyKC5zbmFwY2hhdC5yZXNlY @@ -82,7 +82,7 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { 29uZmlnEqcBCiR2ZXJ0ZXhfYWlfZ3JhcGhfc3RvcmVfdHJhaW5lcl9jb25maWcYBCABKAsyMC5zbmFwY2hhdC5yZXNlYXJjaC5nY m1sLlZlcnRleEFpR3JhcGhTdG9yZUNvbmZpZ0Ik4j8hEh92ZXJ0ZXhBaUdyYXBoU3RvcmVUcmFpbmVyQ29uZmlnSABSH3ZlcnRle EFpR3JhcGhTdG9yZVRyYWluZXJDb25maWcSfAoVY3VzdG9tX3RyYWluZXJfY29uZmlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY - 2guZ2JtbC5DdXN0b21SZXNvdXJjZUNvbmZpZ0IY4j8VEhNjdXN0b21UcmFpbmVyQ29uZmlnSABSE2N1c3RvbVRyYWluZXJDb25ma + 2guZ2JtbC5DdXN0b21MYXVuY2hlckNvbmZpZ0IY4j8VEhNjdXN0b21UcmFpbmVyQ29uZmlnSABSE2N1c3RvbVRyYWluZXJDb25ma WdCEAoOdHJhaW5lcl9jb25maWcijwYKGEluZmVyZW5jZXJSZXNvdXJjZUNvbmZpZxKOAQobdmVydGV4X2FpX2luZmVyZW5jZXJfY 29uZmlnGAEgASgLMi4uc25hcGNoYXQucmVzZWFyY2guZ2JtbC5WZXJ0ZXhBaVJlc291cmNlQ29uZmlnQh3iPxoSGHZlcnRleEFpS W5mZXJlbmNlckNvbmZpZ0gAUhh2ZXJ0ZXhBaUluZmVyZW5jZXJDb25maWcSjQEKGmRhdGFmbG93X2luZmVyZW5jZXJfY29uZmlnG @@ -92,7 +92,7 @@ object GiglResourceConfigProto extends _root_.scalapb.GeneratedFileObject { 2NhbEluZmVyZW5jZXJDb25maWcSsAEKJ3ZlcnRleF9haV9ncmFwaF9zdG9yZV9pbmZlcmVuY2VyX2NvbmZpZxgEIAEoCzIwLnNuY XBjaGF0LnJlc2VhcmNoLmdibWwuVmVydGV4QWlHcmFwaFN0b3JlQ29uZmlnQifiPyQSInZlcnRleEFpR3JhcGhTdG9yZUluZmVyZ W5jZXJDb25maWdIAFIidmVydGV4QWlHcmFwaFN0b3JlSW5mZXJlbmNlckNvbmZpZxKFAQoYY3VzdG9tX2luZmVyZW5jZXJfY29uZ - mlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5DdXN0b21SZXNvdXJjZUNvbmZpZ0Ib4j8YEhZjdXN0b21JbmZlcmVuY + mlnGAUgASgLMiwuc25hcGNoYXQucmVzZWFyY2guZ2JtbC5DdXN0b21MYXVuY2hlckNvbmZpZ0Ib4j8YEhZjdXN0b21JbmZlcmVuY 2VyQ29uZmlnSABSFmN1c3RvbUluZmVyZW5jZXJDb25maWdCEwoRaW5mZXJlbmNlcl9jb25maWcilwgKFFNoYXJlZFJlc291cmNlQ 29uZmlnEn4KD3Jlc291cmNlX2xhYmVscxgBIAMoCzJALnNuYXBjaGF0LnJlc2VhcmNoLmdibWwuU2hhcmVkUmVzb3VyY2VDb25ma WcuUmVzb3VyY2VMYWJlbHNFbnRyeUIT4j8QEg5yZXNvdXJjZUxhYmVsc1IOcmVzb3VyY2VMYWJlbHMSjgEKFWNvbW1vbl9jb21wd 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 dd637b565..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 @@ -89,8 +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.CustomResourceConfig = inferencerConfig.customInferencerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.defaultInstance) - def withCustomInferencerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig): InferencerResourceConfig = copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(__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) @@ -138,7 +138,7 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch 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.CustomResourceConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) + __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() @@ -159,7 +159,7 @@ 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.CustomResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(_))) + .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") @@ -173,7 +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.CustomResourceConfig + case 5 => __out = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig } __out } @@ -194,7 +194,7 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch 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.CustomResourceConfig] = _root_.scala.None + def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scala.None } object InferencerConfig { @SerialVersionUID(0L) @@ -235,10 +235,10 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch override def number: _root_.scala.Int = 4 } @SerialVersionUID(0L) - final case class CustomInferencerConfig(value: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig) extends snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig { - type ValueType = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + 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.CustomResourceConfig] = Some(value) + override def customInferencerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = Some(value) override def number: _root_.scala.Int = 5 } } @@ -247,7 +247,7 @@ object InferencerResourceConfig extends scalapb.GeneratedMessageCompanion[snapch 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.CustomResourceConfig] = field(_.getCustomInferencerConfig)((c_, f_) => c_.copy(inferencerConfig = snapchat.research.gbml.gigl_resource_config.InferencerResourceConfig.InferencerConfig.CustomInferencerConfig(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 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 2323c5f45..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 @@ -89,8 +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.CustomResourceConfig = trainerConfig.customTrainerConfig.getOrElse(snapchat.research.gbml.gigl_resource_config.CustomResourceConfig.defaultInstance) - def withCustomTrainerConfig(__v: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig): TrainerResourceConfig = copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(__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) @@ -138,7 +138,7 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. 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.CustomResourceConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))) + __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() @@ -159,7 +159,7 @@ 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.CustomResourceConfig]]).map(snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(_))) + .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") @@ -173,7 +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.CustomResourceConfig + case 5 => __out = snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig } __out } @@ -194,7 +194,7 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. 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.CustomResourceConfig] = _root_.scala.None + def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = _root_.scala.None } object TrainerConfig { @SerialVersionUID(0L) @@ -235,10 +235,10 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. override def number: _root_.scala.Int = 4 } @SerialVersionUID(0L) - final case class CustomTrainerConfig(value: snapchat.research.gbml.gigl_resource_config.CustomResourceConfig) extends snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig { - type ValueType = snapchat.research.gbml.gigl_resource_config.CustomResourceConfig + 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.CustomResourceConfig] = Some(value) + override def customTrainerConfig: _root_.scala.Option[snapchat.research.gbml.gigl_resource_config.CustomLauncherConfig] = Some(value) override def number: _root_.scala.Int = 5 } } @@ -247,7 +247,7 @@ object TrainerResourceConfig extends scalapb.GeneratedMessageCompanion[snapchat. 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.CustomResourceConfig] = field(_.getCustomTrainerConfig)((c_, f_) => c_.copy(trainerConfig = snapchat.research.gbml.gigl_resource_config.TrainerResourceConfig.TrainerConfig.CustomTrainerConfig(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 diff --git a/snapchat/research/gbml/gigl_resource_config_pb2.py b/snapchat/research/gbml/gigl_resource_config_pb2.py index 3073ce92a..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\"5\n\x14\x43ustomResourceConfig\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.CustomResourceConfigH\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.CustomResourceConfigH\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,7 +40,7 @@ _KFPRESOURCECONFIG = DESCRIPTOR.message_types_by_name['KFPResourceConfig'] _LOCALRESOURCECONFIG = DESCRIPTOR.message_types_by_name['LocalResourceConfig'] _VERTEXAIGRAPHSTORECONFIG = DESCRIPTOR.message_types_by_name['VertexAiGraphStoreConfig'] -_CUSTOMRESOURCECONFIG = DESCRIPTOR.message_types_by_name['CustomResourceConfig'] +_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'] @@ -125,12 +125,12 @@ }) _sym_db.RegisterMessage(VertexAiGraphStoreConfig) -CustomResourceConfig = _reflection.GeneratedProtocolMessageType('CustomResourceConfig', (_message.Message,), { - 'DESCRIPTOR' : _CUSTOMRESOURCECONFIG, +CustomLauncherConfig = _reflection.GeneratedProtocolMessageType('CustomLauncherConfig', (_message.Message,), { + 'DESCRIPTOR' : _CUSTOMLAUNCHERCONFIG, '__module__' : 'snapchat.research.gbml.gigl_resource_config_pb2' - # @@protoc_insertion_point(class_scope:snapchat.research.gbml.CustomResourceConfig) + # @@protoc_insertion_point(class_scope:snapchat.research.gbml.CustomLauncherConfig) }) -_sym_db.RegisterMessage(CustomResourceConfig) +_sym_db.RegisterMessage(CustomLauncherConfig) DistributedTrainerConfig = _reflection.GeneratedProtocolMessageType('DistributedTrainerConfig', (_message.Message,), { 'DESCRIPTOR' : _DISTRIBUTEDTRAINERCONFIG, @@ -216,8 +216,8 @@ _LOCALRESOURCECONFIG._serialized_end=1307 _VERTEXAIGRAPHSTORECONFIG._serialized_start=1310 _VERTEXAIGRAPHSTORECONFIG._serialized_end=1522 - _CUSTOMRESOURCECONFIG._serialized_start=1524 - _CUSTOMRESOURCECONFIG._serialized_end=1577 + _CUSTOMLAUNCHERCONFIG._serialized_start=1524 + _CUSTOMLAUNCHERCONFIG._serialized_end=1577 _DISTRIBUTEDTRAINERCONFIG._serialized_start=1580 _DISTRIBUTEDTRAINERCONFIG._serialized_end=1855 _TRAINERRESOURCECONFIG._serialized_start=1858 diff --git a/snapchat/research/gbml/gigl_resource_config_pb2.pyi b/snapchat/research/gbml/gigl_resource_config_pb2.pyi index 19ef54126..4f3a8f372 100644 --- a/snapchat/research/gbml/gigl_resource_config_pb2.pyi +++ b/snapchat/research/gbml/gigl_resource_config_pb2.pyi @@ -396,7 +396,7 @@ class VertexAiGraphStoreConfig(google.protobuf.message.Message): global___VertexAiGraphStoreConfig = VertexAiGraphStoreConfig -class CustomResourceConfig(google.protobuf.message.Message): +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` @@ -429,7 +429,7 @@ class CustomResourceConfig(google.protobuf.message.Message): ) -> None: ... def ClearField(self, field_name: typing_extensions.Literal["args", b"args", "command", b"command"]) -> None: ... -global___CustomResourceConfig = CustomResourceConfig +global___CustomLauncherConfig = CustomLauncherConfig class DistributedTrainerConfig(google.protobuf.message.Message): """(deprecated) @@ -479,7 +479,7 @@ class TrainerResourceConfig(google.protobuf.message.Message): @property def vertex_ai_graph_store_trainer_config(self) -> global___VertexAiGraphStoreConfig: ... @property - def custom_trainer_config(self) -> global___CustomResourceConfig: ... + def custom_trainer_config(self) -> global___CustomLauncherConfig: ... def __init__( self, *, @@ -487,7 +487,7 @@ 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___CustomResourceConfig | None = ..., + custom_trainer_config: global___CustomLauncherConfig | None = ..., ) -> 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: ... @@ -514,7 +514,7 @@ class InferencerResourceConfig(google.protobuf.message.Message): @property def vertex_ai_graph_store_inferencer_config(self) -> global___VertexAiGraphStoreConfig: ... @property - def custom_inferencer_config(self) -> global___CustomResourceConfig: ... + def custom_inferencer_config(self) -> global___CustomLauncherConfig: ... def __init__( self, *, @@ -522,7 +522,7 @@ 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___CustomResourceConfig | None = ..., + custom_inferencer_config: global___CustomLauncherConfig | None = ..., ) -> 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: ... 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 bba658738..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 @@ -244,7 +244,7 @@ def test_trainer_config_vertex_ai_graph_store(self): 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.CustomResourceConfig( + trainer_config = gigl_resource_config_pb2.CustomLauncherConfig( command="python -m my_project.launchers.ray.launch", args=["--cluster=dev", "--num_workers=4"], ) @@ -254,7 +254,7 @@ def test_trainer_config_custom(self): wrapper = GiglResourceConfigWrapper(resource_config=config) self.assertIsInstance( - wrapper.trainer_config, gigl_resource_config_pb2.CustomResourceConfig + wrapper.trainer_config, gigl_resource_config_pb2.CustomLauncherConfig ) self.assertEqual(wrapper.trainer_config, trainer_config) @@ -375,7 +375,7 @@ def test_inferencer_config_vertex_ai_graph_store(self): 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.CustomResourceConfig( + inferencer_config = gigl_resource_config_pb2.CustomLauncherConfig( command="python -m my_project.launchers.ray.launch", args=["--cluster=prod", "--shards=8"], ) @@ -385,7 +385,7 @@ def test_inferencer_config_custom(self): wrapper = GiglResourceConfigWrapper(resource_config=config) self.assertIsInstance( - wrapper.inferencer_config, gigl_resource_config_pb2.CustomResourceConfig + wrapper.inferencer_config, gigl_resource_config_pb2.CustomLauncherConfig ) self.assertEqual(wrapper.inferencer_config, inferencer_config) From f23fb44a612f200402ca89f60ad0a104a7b79fe4 Mon Sep 17 00:00:00 2001 From: kmontemayor Date: Tue, 12 May 2026 21:28:30 +0000 Subject: [PATCH 6/6] Apply CustomResourceConfig -> CustomLauncherConfig rename to launcher Follow-up to the proto rename. Updates the launcher module's import, parameter type annotation, docstring, and error message, plus its test file. Also renames the launcher parameter from `custom_resource_config` to `custom_launcher_config` to match the new proto type name. --- gigl/src/common/custom_launcher.py | 22 +++++++++---------- tests/unit/src/common/custom_launcher_test.py | 14 ++++++------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/gigl/src/common/custom_launcher.py b/gigl/src/common/custom_launcher.py index fee371ae6..10c3115e9 100644 --- a/gigl/src/common/custom_launcher.py +++ b/gigl/src/common/custom_launcher.py @@ -1,6 +1,6 @@ -"""Subprocess dispatch for ``CustomResourceConfig``-backed launchers. +"""Subprocess dispatch for ``CustomLauncherConfig``-backed launchers. -Takes ``CustomResourceConfig.command`` and ``CustomResourceConfig.args`` +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 @@ -22,7 +22,7 @@ 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 CustomResourceConfig +from snapchat.research.gbml.gigl_resource_config_pb2 import CustomLauncherConfig logger = Logger() @@ -32,7 +32,7 @@ def launch_custom( - custom_resource_config: CustomResourceConfig, + custom_launcher_config: CustomLauncherConfig, applied_task_identifier: str, task_config_uri: Uri, resource_config_uri: Uri, @@ -42,7 +42,7 @@ def launch_custom( cuda_docker_uri: Optional[str], component: GiGLComponents, ) -> None: - """Shell out to ``custom_resource_config.command`` with ``args[]`` appended. + """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 @@ -64,7 +64,7 @@ def launch_custom( the parent process). Args: - custom_resource_config: Proto whose ``command`` is the shell + 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. @@ -79,17 +79,17 @@ def launch_custom( Raises: ValueError: If ``component`` is not Trainer or Inferencer, or if - ``custom_resource_config.command`` is empty. + ``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_resource_config.command: - raise ValueError("CustomResourceConfig.command must be set") + if not custom_launcher_config.command: + raise ValueError("CustomLauncherConfig.command must be set") - command: str = custom_resource_config.command - args: list[str] = list(custom_resource_config.args) + 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}") diff --git a/tests/unit/src/common/custom_launcher_test.py b/tests/unit/src/common/custom_launcher_test.py index 0ab4119bb..a18971591 100644 --- a/tests/unit/src/common/custom_launcher_test.py +++ b/tests/unit/src/common/custom_launcher_test.py @@ -24,8 +24,8 @@ def _build_config( self, command: str, args: list[str] | None = None, - ) -> gigl_resource_config_pb2.CustomResourceConfig: - return gigl_resource_config_pb2.CustomResourceConfig( + ) -> gigl_resource_config_pb2.CustomLauncherConfig: + return gigl_resource_config_pb2.CustomLauncherConfig( command=command, args=args or [], ) @@ -39,7 +39,7 @@ def test_dispatches_subprocess_with_literal_command_and_args( args=["--foo=bar", "--baz=qux"], ) launch_custom( - custom_resource_config=config, + 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"), @@ -64,7 +64,7 @@ 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_resource_config=config, + custom_launcher_config=config, applied_task_identifier="job", task_config_uri=Uri("gs://bucket/task.yaml"), resource_config_uri=Uri("gs://bucket/resource.yaml"), @@ -81,7 +81,7 @@ 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_resource_config=config, + custom_launcher_config=config, applied_task_identifier="job", task_config_uri=Uri("gs://bucket/task.yaml"), resource_config_uri=Uri("gs://bucket/resource.yaml"), @@ -99,7 +99,7 @@ def test_args_with_spaces_are_shell_quoted(self, mock_run: MagicMock) -> None: command="echo", args=["a b c", "--name=with space"] ) launch_custom( - custom_resource_config=config, + custom_launcher_config=config, applied_task_identifier="job", task_config_uri=Uri("gs://bucket/task.yaml"), resource_config_uri=Uri("gs://bucket/resource.yaml"), @@ -128,7 +128,7 @@ def test_unsubstituted_gigl_placeholder_passes_through_verbatim( args=["--foo=${gigl:bar}"], ) launch_custom( - custom_resource_config=config, + custom_launcher_config=config, applied_task_identifier="job", task_config_uri=Uri("gs://bucket/task.yaml"), resource_config_uri=Uri("gs://bucket/resource.yaml"),