syntax = "proto3"; package ml_pipelines; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; import "google/rpc/status.proto"; option go_package = "github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec"; // The spec of a pipeline job. message PipelineJob { string name = 1; // Name of the job. // User friendly display name string display_name = 2; reserved 3, 4, 5, 6; // Definition of the pipeline that is being executed. google.protobuf.Struct pipeline_spec = 7; reserved 8, 9, 10; // The labels with user-defined metadata to organize PipelineJob. map labels = 11; // The runtime config of a PipelineJob. message RuntimeConfig { // Deprecated. Use [RuntimeConfig.parameter_values][] instead. map parameters = 1 [deprecated = true]; // A path in a Cloud Storage bucket which will be treated as the root // output directory of the pipeline. It is used by the system to // generate the paths of output artifacts. // This is a GCP-specific optimization. string gcs_output_directory = 2; // The runtime parameters of the PipelineJob. The parameters will be // passed into [PipelineJob.pipeline_spec][] to replace the placeholders // at runtime. map parameter_values = 3; } // Runtime config of the pipeline. RuntimeConfig runtime_config = 12; } // The spec of a pipeline. message PipelineSpec { // The metadata of the pipeline. PipelineInfo pipeline_info = 1; // The deployment config of the pipeline. // The deployment config can be extended to provide platform specific configs. google.protobuf.Struct deployment_spec = 7; // The version of the sdk, which compiles the spec. string sdk_version = 4; // The version of the schema. string schema_version = 5; // The definition of the runtime parameter. message RuntimeParameter { // Required field. The type of the runtime parameter. PrimitiveType.PrimitiveTypeEnum type = 1; // Optional field. Default value of the runtime parameter. If not set and // the runtime parameter value is not provided during runtime, an error will // be raised. Value default_value = 2; } // The map of name to definition of all components used in this pipeline. map components = 8; // The definition of the main pipeline. Execution of the pipeline is // completed upon the completion of this component. ComponentSpec root = 9; // Optional field. The default root output directory of the pipeline. string default_pipeline_root = 10; } // Definition of a component. message ComponentSpec { // Definition of the input parameters and artifacts of the component. ComponentInputsSpec input_definitions = 1; // Definition of the output parameters and artifacts of the component. ComponentOutputsSpec output_definitions = 2; // Either a DAG or a single execution. oneof implementation { DagSpec dag = 3; string executor_label = 4; } } // A DAG contains multiple tasks. message DagSpec { // The tasks inside the dag. map tasks = 1; // Defines how the outputs of the dag are linked to the sub tasks. DagOutputsSpec outputs = 2; } // Definition of the output artifacts and parameters of the DAG component. message DagOutputsSpec { // Selects a defined output artifact from a sub task of the DAG. message ArtifactSelectorSpec { // The name of the sub task which produces the output that matches with // the `output_artifact_key`. string producer_subtask = 1; // The key of [ComponentOutputsSpec.artifacts][] map of the producer task. string output_artifact_key = 2; } // Selects a list of output artifacts that will be aggregated to the single // output artifact channel of the DAG. message DagOutputArtifactSpec { // The selected artifacts will be aggregated as output as a single // output channel of the DAG. repeated ArtifactSelectorSpec artifact_selectors = 1; } // Name to the output artifact channel of the DAG. map artifacts = 1; // Selects a defined output parameter from a sub task of the DAG. message ParameterSelectorSpec { // The name of the sub task which produces the output that matches with // the `output_parameter_key`. string producer_subtask = 1; // The key of [ComponentOutputsSpec.parameters][] map of the producer task. string output_parameter_key = 2; } // Aggregate output parameters from sub tasks into a list object. message ParameterSelectorsSpec { repeated ParameterSelectorSpec parameter_selectors = 1; } // Aggregates output parameters from sub tasks into a map object. message MapParameterSelectorsSpec { map mapped_parameters = 2; } // We support four ways to fan-in output parameters from sub tasks to the DAG // parent task. // 1. Directly expose a single output parameter from a sub task, // 2. (Conditional flow) Expose a list of output from multiple tasks // (some might be skipped) but allows only one of the output being generated. // 3. Expose a list of outputs from multiple tasks (e.g. iterator flow). // 4. Expose the aggregation of output parameters as a name-value map. message DagOutputParameterSpec { oneof kind { // Returns the sub-task parameter as a DAG parameter. The selected // parameter must have the same type as the DAG parameter type. ParameterSelectorSpec value_from_parameter = 1; // Returns one of the sub-task parameters as a DAG parameter. If there are // multiple values are available to select, the DAG will fail. All the // selected parameters must have the same type as the DAG parameter type. ParameterSelectorsSpec value_from_oneof = 2; } reserved 3; } // The name to the output parameter. map parameters = 2; } // Definition specification of the component input parameters and artifacts. message ComponentInputsSpec { // Definition of an artifact input. message ArtifactSpec { ArtifactTypeSchema artifact_type = 1; // Indicates whether input is a single artifact or list of artifacts bool is_artifact_list = 2; // Whether this input artifact is optional or not. // - If required, the artifact must be able to resolve to an artifact // at runtime. // - If it's optional, it can be missing from the // PipelineTaskInputsSpec.InputArtifactSpec (if it's instantiated into a // task), or can be missing from the runtimeArtifact (if it's the root // component). bool is_optional = 3; // The description for this input artifact of the component. // Should not exceed 1024 characters. string description = 4; } // Definition of a parameter input. message ParameterSpec { // Specifies an input parameter's type. // Deprecated. Use [ParameterSpec.parameter_type][] instead. PrimitiveType.PrimitiveTypeEnum type = 1 [deprecated = true]; // Specifies an input parameter's type. ParameterType.ParameterTypeEnum parameter_type = 2; // Optional field. Default value of the input parameter. google.protobuf.Value default_value = 3; // Whether this input parameter is optional or not. // - If required, the parameter should either have a default value, or have // to be able to resolve to a concrete value at runtime. // - If it's optional, it can be missing from the // PipelineTaskInputsSpec.InputParameterSpec (if it's instantiated into a // task), or can be missing from the runtimeParameter (if it's the root // component). If the value is missing, the default_value will be used. Or // if default_value is not provided, the default value of the parameter's // type will be used. bool is_optional = 4; // The description for this input parameter of the component. // Should not exceed 1024 characters. string description = 5; } // Name to artifact input. map artifacts = 1; // Name to parameter input. map parameters = 2; } // Definition specification of the component output parameters and artifacts. message ComponentOutputsSpec { // Definition of an artifact output. message ArtifactSpec { ArtifactTypeSchema artifact_type = 1; // Deprecated. Use [ArtifactSpec.metadata][] instead. map properties = 2 [deprecated = true]; // Deprecated. Use [ArtifactSpec.metadata][] instead. map custom_properties = 3 [deprecated = true]; // Properties of the Artifact. google.protobuf.Struct metadata = 4; // Indicates whether output is a single artifact or list of artifacts bool is_artifact_list = 5; // The description for this output artifact of the component. // Should not exceed 1024 characters. string description = 6; } // Definition of a parameter output. message ParameterSpec { // Specifies an input parameter's type. // Deprecated. Use [ParameterSpec.parameter_type][] instead. PrimitiveType.PrimitiveTypeEnum type = 1 [deprecated = true]; // Specifies an output parameter's type. ParameterType.ParameterTypeEnum parameter_type = 2; // The description for this output parameter of the component. // Should not exceed 1024 characters. string description = 3; } // Name to artifact output. map artifacts = 1; // Name to parameter output. map parameters = 2; } // The spec of task inputs. message TaskInputsSpec { // The specification of a task input artifact. message InputArtifactSpec { message TaskOutputArtifactSpec { // The name of the upstream task which produces the output that matches // with the `output_artifact_key`. string producer_task = 1; // The key of [TaskOutputsSpec.artifacts][] map of the producer task. string output_artifact_key = 2; } oneof kind { // Pass the input artifact from another task within the same parent // component. TaskOutputArtifactSpec task_output_artifact = 3; // Pass the input artifact from parent component input artifact. string component_input_artifact = 4; } reserved 5; } // Represents an input parameter. The value can be taken from an upstream // task's output parameter (if specifying `producer_task` and // `output_parameter_key`, or it can be a runtime value, which can either be // determined at compile-time, or from a pipeline parameter. message InputParameterSpec { // Represents an upstream task's output parameter. message TaskOutputParameterSpec { // The name of the upstream task which produces the output parameter that // matches with the `output_parameter_key`. string producer_task = 1; // The key of [TaskOutputsSpec.parameters][] map of the producer task. string output_parameter_key = 2; } // Represents an upstream task's final status. The field can only be set if // the schema version is `2.0.0`. The resolved input parameter will be a // json payload in string type. message TaskFinalStatus { // The name of the upsteram task where the final status is coming from. string producer_task = 1; } oneof kind { // Output parameter from an upstream task. TaskOutputParameterSpec task_output_parameter = 1; // A constant value or runtime parameter. ValueOrRuntimeParameter runtime_value = 2; // Pass the input parameter from parent component input parameter. string component_input_parameter = 3; // The final status of an uptream task. TaskFinalStatus task_final_status = 5; } // Selector expression of Common Expression Language (CEL) // that applies to the parameter found from above kind. // // The expression is applied to the Value type // [Value][]. For example, // 'size(string_value)' will return the size of the Value.string_value. // // After applying the selection, the parameter will be returned as a // [Value][]. The type of the Value is either deferred from the input // definition in the corresponding // [ComponentSpec.input_definitions.parameters][], or if not found, // automatically deferred as either string value or double value. // // In addition to the builtin functions in CEL, The value.string_value can // be treated as a json string and parsed to the [google.protobuf.Value][] // proto message. Then, the CEL expression provided in this field will be // used to get the requested field. For examples, // - if Value.string_value is a json array of "[1.1, 2.2, 3.3]", // 'parseJson(string_value)[i]' will pass the ith parameter from the list // to the current task, or // - if the Value.string_value is a json map of "{"a": 1.1, "b": 2.2, // "c": 3.3}, 'parseJson(string_value)[key]' will pass the map value from // the struct map to the current task. // // If unset, the value will be passed directly to the current task. string parameter_expression_selector = 4; } // A map of input parameters which are small values, stored by the system and // can be queriable. map parameters = 1; // A map of input artifacts. map artifacts = 2; } // The spec of task outputs. message TaskOutputsSpec { // The specification of a task output artifact. message OutputArtifactSpec { // The type of the artifact. ArtifactTypeSchema artifact_type = 1; // The properties of the artifact, which are determined either at // compile-time, or at pipeline submission time through runtime parameters map properties = 2; // The custom properties of the artifact, which are determined either at // compile-time, or at pipeline submission time through runtime parameters map custom_properties = 3; } // Specification for output parameters produced by the task. message OutputParameterSpec { // Required field. The type of the output parameter. PrimitiveType.PrimitiveTypeEnum type = 1; } // A map of output parameters which are small values, stored by the system and // can be queriable. The output key is used // by [TaskInputsSpec.InputParameterSpec][] of the downstream task to specify // the data dependency. The same key will also be used by // [ExecutorInput.Inputs][] to reference the output parameter. map parameters = 1; // A map of output artifacts. Keyed by output key. The output key is used // by [TaskInputsSpec.InputArtifactSpec][] of the downstream task to specify // the data dependency. The same key will also be used by // [ExecutorInput.Inputs][] to reference the output artifact. map artifacts = 2; } // Represent primitive types. The wrapper is needed to give a namespace of // enum value so we don't need add `PRIMITIVE_TYPE_` prefix of each enum value. message PrimitiveType { option deprecated = true; // The primitive types. // Deprecated. Use [ParameterType.ParameterTypeEnum][] instead. enum PrimitiveTypeEnum { option deprecated = true; PRIMITIVE_TYPE_UNSPECIFIED = 0; INT = 1; DOUBLE = 2; STRING = 3; } } // Represent parameter types. The wrapper is needed to give a namespace of // enum value so we don't need add `PARAMETER_TYPE_` prefix of each enum value. message ParameterType { // The parameter types. enum ParameterTypeEnum { // Indicates that the parameter type was not specified. PARAMETER_TYPE_ENUM_UNSPECIFIED = 0; // Indicates that a parameter is a number that is stored in a field of type // `double`. NUMBER_DOUBLE = 1; // Indicates that a parameter is an integer stored in the `number_field`, // which is of type `double`. NUMBER_INTEGER values must be within the range // of JavaScript safe integers (-(2^53 - 1) to (2^53 - 1)). If you need to // support integers outside the range of JavaScript safe integers, use the // `STRING` parameter type to describe your parameter. NUMBER_INTEGER = 2; // Indicates that a parameter is a string. STRING = 3; // Indicates that a parameters is a boolean value. BOOLEAN = 4; // Indicates that a parameter is a list of values. LIST parameters are // serialized to JSON when passed as an input or output of a pipeline step. LIST = 5; // Indicates that a parameter is a struct value; structs represent a data // structure like a Python dictionary or a JSON object. STRUCT parameters // are serialized to JSON when passed as an input or output of a pipeline // step. STRUCT = 6; // Indicates that a parameter is a TaskFinalStatus type; these types can only accept inputs // specified by InputParameterSpec.task_final_status TASK_FINAL_STATUS = 7; } } // The spec of a pipeline task. message PipelineTaskSpec { // Basic info of a pipeline task. PipelineTaskInfo task_info = 1; // Specification for task inputs which contains parameters and artifacts. TaskInputsSpec inputs = 2; // A list of names of upstream tasks that do not provide input // artifacts for this task, but nonetheless whose completion this task depends // on. repeated string dependent_tasks = 5; message CachingOptions { // Whether or not to enable cache for this task. Defaults to false. bool enable_cache = 1; } CachingOptions caching_options = 6; // Reference to a component. Use this field to define either a DAG or an // executor. ComponentRef component_ref = 7; // Trigger policy defines how the task gets triggered. If a task is not // triggered, it will run into SKIPPED state. message TriggerPolicy { // An expression which will be evaluated into a boolean value. True to // trigger the task to run. The expression follows the language of // [CEL Spec][https://github.com/google/cel-spec]. It can access the data // from [ExecutorInput][] message of the task. // For example: // - `inputs.artifacts['model'][0].properties['accuracy']*100 > 90` // - `inputs.parameters['type'] == 'foo' && inputs.parameters['num'] == 1` string condition = 1; // An enum defines the trigger strategy of when the task will be ready to be // triggered. // ALL_UPSTREAM_TASKS_SUCCEEDED - all upstream tasks in succeeded state. // ALL_UPSTREAM_TASKS_COMPLETED - all upstream tasks in any final state. // (Note that CANCELLED is also a final state but job will not trigger new // tasks when job is in CANCELLING state, so that the task with the trigger // policy at ALL_UPSTREAM_TASKS_COMPLETED will not start when job // cancellation is in progress.) enum TriggerStrategy { // Unspecified. Behave the same as ALL_UPSTREAM_TASKS_SUCCEEDED. TRIGGER_STRATEGY_UNSPECIFIED = 0; // Specifies that all upstream tasks are in succeeded state. ALL_UPSTREAM_TASKS_SUCCEEDED = 1; // Specifies that all upstream tasks are in any final state. ALL_UPSTREAM_TASKS_COMPLETED = 2; } // The trigger strategy of this task. The `strategy` and `condition` are // in logic "AND", as a task will only be tested for the `condition` when // the `strategy` is meet. // Unset or set to default value of TRIGGER_STRATEGY_UNDEFINED behaves the // same as ALL_UPSTREAM_TASKS_SUCCEEDED. TriggerStrategy strategy = 2; } // Trigger policy of the task. TriggerPolicy trigger_policy = 8; // Iterator supports fanning out the task into multiple sub-tasks based on the // values of input artifact or parameter. The current task will become the // parent of all the fan-out tasks. The output of the current task follows // the following conventions: // * Output artifacts with the same name of each iteration will be merged // into one output artifact channel of the parent iterator task. // * Output parameters with the same name of each iteration will be merged // into a string output parameter with the same name with content being a // JSON array. // // For example, if an iterator starts two sub-tasks (t1 and t2) with the // following outputs. // // t1.outputs.parameters = { 'p': 'v1' } // t1.outputs.artifacts = { 'a': [a1] } // t2.outputs.parameters = { 'p': 'v2' } // t2.outputs.artifacts = { 'a': [a2] } // parent_task.outputs.parameters = { 'p': '["v1", "v2"]' } // parent_task.outputs.aritfacts = { 'a': [a1, a2] } oneof iterator { // Iterator to iterate over an artifact input. ArtifactIteratorSpec artifact_iterator = 9; // Iterator to iterate over a parameter input. ParameterIteratorSpec parameter_iterator = 10; } // User-configured task-level retry. message RetryPolicy { // Number of retries before considering a task as failed. Set to 0 or // unspecified to disallow retry." int32 max_retry_count = 1; // The time interval between retries. Defaults to zero (an immediate retry). google.protobuf.Duration backoff_duration = 2; // The exponential backoff factor applied to backoff_duration. If // unspecified, will default to 2. double backoff_factor = 3; // The maximum duration during which the task will be retried according to // the backoff strategy. Max allowed is 1 hour - higher value will be capped // to this limit. If unspecified, will set to 1 hour. google.protobuf.Duration backoff_max_duration = 4; } // User-configured task-level retry. // Applicable only to component tasks. RetryPolicy retry_policy = 11; // Iterator related settings. message IteratorPolicy { // The limit for the number of concurrent sub-tasks spawned by an iterator // task. The value should be a non-negative integer. A value of 0 represents // unconstrained parallelism. int32 parallelism_limit = 1; } // Iterator related settings. IteratorPolicy iterator_policy = 12; } // The spec of an artifact iterator. It supports fan-out a workflow from a list // of artifacts. message ArtifactIteratorSpec { // Specifies the name of the artifact channel which contains the collection of // items to iterate. The iterator will create a sub-task for each item of // the collection and pass the item as a new input artifact channel as // specified by [item_input][]. message ItemsSpec { // The name of the input artifact. string input_artifact = 1; } // The items to iterate. ItemsSpec items = 1; // The name of the input artifact channel which has the artifact item from the // [items][] collection. string item_input = 2; } // The spec of a parameter iterator. It supports fan-out a workflow from a // string parameter which contains a JSON array. message ParameterIteratorSpec { // Specifies the spec to decribe the parameter items to iterate. message ItemsSpec { // Specifies where to get the collection of items to iterate. The iterator // will create a sub-task for each item of the collection and pass the item // as a new input parameter as specified by [item_input][]. oneof kind { // The raw JSON array. string raw = 1; // The name of the input parameter whose value has the items collection. // The parameter must be in STRING type and its content can be parsed // as a JSON array. string input_parameter = 2; } } // The items to iterate. ItemsSpec items = 1; // The name of the input parameter which has the item value from the // [items][] collection. string item_input = 2; } message ComponentRef { // The name of a component. Refer to the key of the // [PipelineSpec.components][] map. string name = 1; } // Basic info of a pipeline. message PipelineInfo { // Required field. The name of the pipeline. // The name will be used to create or find pipeline context in MLMD. string name = 1; // Optional fields. The readable display name for the pipeline template. // Should not exceed 1024 characters. string display_name = 2; // Optional fields. The readable description for the pipeline template. // Should not exceed 1024 characters. string description = 3; } // The definition of a artifact type in MLMD. message ArtifactTypeSchema { oneof kind { // The name of the type. The format of the title must be: // `.`. // Examples: // - `aiplatform.Model` // - `acme.CustomModel` // When this field is set, the type must be pre-registered in the MLMD // store. string schema_title = 1; // Points to a YAML file stored on Google Cloud Storage describing the // format. // Deprecated. Use [PipelineArtifactTypeSchema.schema_title][] or // [PipelineArtifactTypeSchema.instance_schema][] instead. string schema_uri = 2 [deprecated = true]; // Contains a raw YAML string, describing the format of // the properties of the type. string instance_schema = 3; } // The schema version of the artifact. If the value is not set, it defaults // to the the latest version in the system. string schema_version = 4; } // The basic info of a task. message PipelineTaskInfo { // The display name of the task. string name = 1; } // Definition for a value or reference to a runtime parameter. A // ValueOrRuntimeParameter instance can be either a field value that is // determined during compilation time, or a runtime parameter which will be // determined during runtime. message ValueOrRuntimeParameter { oneof value { // Constant value which is determined in compile time. // Deprecated. Use [ValueOrRuntimeParameter.constant][] instead. Value constant_value = 1 [deprecated = true]; // The runtime parameter refers to the parent component input parameter. string runtime_parameter = 2; // Constant value which is determined in compile time. google.protobuf.Value constant = 3; } } // The definition of the deployment config of the pipeline. It contains the // the platform specific executor configs for KFP OSS. message PipelineDeploymentConfig { // The specification on a container invocation. // The string fields of the message support string based placeholder contract // defined in [ExecutorInput](). The output of the container follows the // contract of [ExecutorOutput](). message PipelineContainerSpec { // The image uri of the container. string image = 1; // The main entrypoint commands of the container to run. If not provided, // fallback to use the entry point command defined in the container image. repeated string command = 2; // The arguments to pass into the main entrypoint of the container. repeated string args = 3; // The lifecycle hooks of the container. // Each hook follows the same I/O contract as the main container entrypoint. // See [ExecutorInput]() and [ExecutorOutput]() for details. // (-- TODO(b/165323565): add more documentation on caching and lifecycle // hooks. --) message Lifecycle { // The command and args to execute a program. message Exec { // The command of the exec program. repeated string command = 2; // The args of the exec program. repeated string args = 3; } // This hook is invoked before caching check. It can change the properties // of the execution and output artifacts before they are used to compute // the cache key. The updated metadata will be passed into the main // container entrypoint. Exec pre_cache_check = 1; } // The lifecycle hooks of the container executor. Lifecycle lifecycle = 4; // The specification on the resource requirements of a container execution. // This can include specification of vCPU, memory requirements, as well as // accelerator types and counts. message ResourceSpec { // The limit of the number of vCPU cores. This container execution needs // at most cpu_limit vCPU to run. double cpu_limit = 1; // The memory limit in GB. This container execution needs at most // memory_limit RAM to run. double memory_limit = 2; // The request of the number of vCPU cores. This container execution // needs at least cpu_request vCPU to run. double cpu_request = 5; // The memory request in GB. This container execution needs at least // memory_request RAM to run. double memory_request = 6; // The specification on the accelerators being attached to this container. message AcceleratorConfig { // The type of accelerators. string type = 1; // The number of accelerators. int64 count = 2; } AcceleratorConfig accelerator = 3; reserved 4; } ResourceSpec resources = 5; // Environment variables to be passed to the container. // Represents an environment variable present in a container. message EnvVar { // Name of the environment variable. Must be a valid C identifier. It can // be composed of characters such as uppercase, lowercase characters, // underscore, digits, but the leading character should be either a // letter or an underscore. string name = 1; // Variables that reference a $(VAR_NAME) are expanded using the previous // defined environment variables in the container and any environment // variables defined by the platform runtime that executes this pipeline. // If a variable cannot be resolved, the reference in the input string // will be unchanged. The $(VAR_NAME) syntax can be escaped with a double // $$, ie: $$(VAR_NAME). Escaped references will never be expanded, // regardless of whether the variable exists or not. string value = 2; } // Environment variables to be passed to the container. repeated EnvVar env = 6; } // The specification to import or reimport a new artifact to the pipeline. message ImporterSpec { // The URI of the artifact. ValueOrRuntimeParameter artifact_uri = 1; // The type of the artifact. ArtifactTypeSchema type_schema = 2; // The properties of the artifact. // Deprecated. Use [ImporterSpec.metadata][] instead. map<string, ValueOrRuntimeParameter> properties = 3 [deprecated = true]; // The custom properties of the artifact. // Deprecated. Use [ImporterSpec.metadata][] instead. map<string, ValueOrRuntimeParameter> custom_properties = 4 [deprecated = true]; // Properties of the Artifact. google.protobuf.Struct metadata = 6; // Whether or not import an artifact regardless it has been imported before. bool reimport = 5; } // ResolverSpec resolves artifacts from historical metadata and returns them // to the pipeline as output artifacts of the resolver task. The downstream // tasks can consume them as their input artifacts. message ResolverSpec { // The query to fetch artifacts. message ArtifactQuerySpec { // The filter of the artifact query. The supported syntax are: // - `in_context("<context name>")` // - `artifact_type="<artifact type name>"` // - `uri="<uri>"` // - `state=<state>` // - `name="value"` // - `AND` to combine two conditions and returns when both are true. // If no `in_context` filter is set, the query will be scoped to the // the current pipeline context. string filter = 1; // The maximum number of the artifacts to be returned from the // query. If not defined, the default limit is `1`. int32 limit = 2; } // A list of resolver output definitions. The // key of the map must be exactly the same as // the keys in the [PipelineTaskOutputsSpec.artifacts][] map. // At least one output must be defined. map<string, ArtifactQuerySpec> output_artifact_queries = 1; } message AIPlatformCustomJobSpec { option deprecated = true; // API Specification for invoking a Google Cloud AI Platform CustomJob. // The fields must match the field names and structures of CustomJob // defined in // https://cloud.google.com/ai-platform-unified/docs/reference/rest/v1beta1/projects.locations.customJobs. // The field types must be either the same, or be a string containing the // string based placeholder contract defined in [ExecutorInput](). The // placeholders will be replaced with the actual value during the runtime // before the job is launched. google.protobuf.Struct custom_job = 1; } // The specification of the executor. message ExecutorSpec { oneof spec { // Starts a container. PipelineContainerSpec container = 1; // Import an artifact. ImporterSpec importer = 2; // Resolves an existing artifact. ResolverSpec resolver = 3; // Starts a Google Cloud AI Platform CustomJob. AIPlatformCustomJobSpec custom_job = 4 [deprecated = true]; } } // Map from executor label to executor spec. map<string, ExecutorSpec> executors = 1; } // Value is the value of the field. message Value { oneof value { // An integer value int64 int_value = 1; // A double value double double_value = 2; // A string value string string_value = 3; } } // The definition of a runtime artifact. message RuntimeArtifact { // The name of an artifact. string name = 1; // The type of the artifact. ArtifactTypeSchema type = 2; // The URI of the artifact. string uri = 3; // The properties of the artifact. // Deprecated. Use [RuntimeArtifact.metadata][] instead. map<string, Value> properties = 4 [deprecated = true]; // The custom properties of the artifact. // Deprecated. Use [RuntimeArtifact.metadata][] instead. map<string, Value> custom_properties = 5 [deprecated = true]; // Properties of the Artifact. google.protobuf.Struct metadata = 6; } // Message that represents a list of artifacts. message ArtifactList { // A list of artifacts. repeated RuntimeArtifact artifacts = 1; } // The input of an executor, which includes all the data that // can be passed into the executor spec by a string based placeholder. // // The string based placeholder uses a JSON path to reference to the data // in the [ExecutionInput](). // // `{{$}}`: prints the full [ExecutorInput]() as a JSON string. // `{{$.inputs.artifacts['<name>'].uri}}`: prints the URI of an input // artifact. // `{{$.inputs.artifacts['<name>'].properties['<property name>']}}`: prints // the // property of an input artifact. // `{{$.inputs.parameters['<name>']}}`: prints the value of an input // parameter. // `{{$.outputs.artifacts['<name>'].uri}}: prints the URI of an output artifact. // `{{$.outputs.artifacts['<name>'].properties['<property name>']}}`: prints the // property of an output artifact. // `{{$.outputs.parameters['<name>'].output_file}}`: prints a file path which // points to a file and container can write to it to return the value of the // parameter.. // `{{$.outputs.output_file}}`: prints a file path of the output metadata file // which is used to send output metadata from executor to orchestrator. The // contract of the output metadata is [ExecutorOutput](). When both parameter // output file and executor output metadata files are set by the container, the // output metadata file will have higher precedence to set output parameters. message ExecutorInput { // The runtime inputs data of the execution. message Inputs { // Input parameters of the execution. // Deprecated. Use [ExecutorInput.Inputs.parameter_values][] instead. map<string, Value> parameters = 1 [deprecated = true]; // Input artifacts of the execution. map<string, ArtifactList> artifacts = 2; // Input parameters of the execution. map<string, google.protobuf.Value> parameter_values = 3; } // The runtime input artifacts of the task invocation. Inputs inputs = 1; // The runtime output parameter. message OutputParameter { // The file path which is used by the executor to pass the parameter value // to the system. string output_file = 1; } // The runtime outputs data of the execution. message Outputs { // The runtime output parameters. map<string, OutputParameter> parameters = 1; // The runtime output artifacts. map<string, ArtifactList> artifacts = 2; // The file path of the full output metadata JSON. The schema of the output // file is [ExecutorOutput][]. // // When the full output metadata file is set by the container, the output // parameter files will be ignored. string output_file = 3; } // The runtime output artifacts of the task invocation. Outputs outputs = 2; } // The schema of the output metadata of an execution. It will be used to parse // the output metadata file. message ExecutorOutput { // The values for output parameters. // Deprecated. Use [ExecutorOutput.parameter_values][] instead. map<string, Value> parameters = 1 [deprecated = true]; // The updated metadata for output artifact. map<string, ArtifactList> artifacts = 2; // The values for output parameters. map<string, google.protobuf.Value> parameter_values = 3; } // The final status of a task. The structure will be passed to input parameter // of kind `task_final_status`. message PipelineTaskFinalStatus { // The final state of the task. // The value is the string version of [PipelineStateEnum.PipelineTaskState][] string state = 1; // The error of the task. google.rpc.Status error = 2; // The pipeline job unique id. int64 pipeline_job_uuid = 3 [deprecated = true]; // The pipeline job name from the [PipelineJob.name][]. string pipeline_job_name = 4 [deprecated = true]; // The pipeline job resource name, in the format of // `projects/{project}/locations/{location}/pipelineJobs/{pipeline_job}`. string pipeline_job_resource_name = 5; // The pipeline task that produces this status. string pipeline_task_name = 6; } message PipelineStateEnum { enum PipelineTaskState { TASK_STATE_UNSPECIFIED = 0; PENDING = 1; RUNNING_DRIVER = 2; DRIVER_SUCCEEDED = 3; RUNNING_EXECUTOR = 4; SUCCEEDED = 5; CANCEL_PENDING = 6; CANCELLING = 7; CANCELLED = 8; FAILED = 9; // Indicates that the task is skipped to run due to a cache hit. SKIPPED = 10; // Indicates that the task was just populated to the DB but not ready to // be scheduled. Once job handler determined the task being ready to // be scheduled, the task state will change to PENDING. The state // transition is depicted below: // * QUEUED(not ready to run) --> PENDING(ready to run) --> RUNNING QUEUED = 11; // Indicates that the task is not triggered based on the // [PipelineTaskSpec.TriggerPolicy.condition][] config. NOT_TRIGGERED = 12; // Indicates that the tasks will no longer be schedulable. Usually a task // was set to this state because its all upstream tasks are in final state // but the [PipelineTaskSpec.TriggerPolicy.strategy][] disallows the task to // be triggered. // The difference between `NOT_TRIGGERED` is that `UNSCHEDULABLE` must met // [PipelineTaskSpec.TriggerPolicy.strategy][], but must not met the // [PipelineTaskSpec.TriggerPolicy.condition][]. UNSCHEDULABLE = 13; } } // Spec for all platforms; second document in IR message PlatformSpec { // Platform key to full platform config map<string, SinglePlatformSpec> platforms = 1; } message SinglePlatformSpec { // Mirrors PipelineSpec.deployment_spec structure PlatformDeploymentConfig deployment_spec = 1; } message PlatformDeploymentConfig { // Map of executor label to executor-level config // Mirrors PipelineSpec.deployment_spec.executors structure map<string, google.protobuf.Struct> executors = 1; }