The protobuf package voplica.types.workflow: 0 services, 46 messages and 1 enum, defined in voplica/types/workflow/node.proto, voplica/types/workflow/param_value.proto, voplica/types/workflow/privacy_mode.proto, voplica/types/workflow/value_spec.proto, voplica/types/workflow/workflow_definition.proto, voplica/types/workflow/workflow_execution.proto.
Registry item (reusable)
| Field |
Number |
Type |
Label |
Description |
| id |
1 |
string |
|
|
| registry_key |
2 |
string |
|
e.g. “image.generator” |
| name |
3 |
string |
|
human-friendly name, e.g. Image Generator |
| status |
4 |
voplica.types.base.PublishStatus |
|
Automatically published where there is at least one published model variant. Automatically unpublished if there are no any published model variants. |
| owner_id |
5 |
string |
|
|
| visibility |
6 |
voplica.types.base.VisibilityType |
|
Node group visibility type |
| min_required_subscription |
7 |
voplica.types.subscription.StudioSubscriptionType |
|
Minimum subscription level the user should have to use any of the node variants in the group This is used as denormalization data. For each individual node variant the user should check requirements separately. |
| created_at |
8 |
uint64 |
|
Timestamp when the model was created |
| latest_node_variant_created_at |
9 |
uint64 |
|
|
| default_node_variant |
10 |
NodeVariantShortPreview |
optional |
|
| executor_type |
11 |
voplica.types.workflow.common.WorkflowNodeExecutorType |
|
ACTIVITY | WORKFLOW | CONTAINER | EXTERNAL |
| Field |
Number |
Type |
Label |
Description |
| node_id |
1 |
string |
|
|
| description |
2 |
string |
|
|
| Field |
Number |
Type |
Label |
Description |
| credits_pricing_hint_milli |
1 |
uint64 |
|
Average pricing hint for this node. This is not the final price, but an average hint on what it might usually cost. The final pricing is calculated after node iteration is executed. The hint may be automatically updated overtime after enough statistics accumulated. milli-credits (1/1000 credit). 1 credit = 1 cent. |
| initial_credits_reservation_milli |
2 |
uint64 |
|
This is calculated based on the GPU tier automatically, but may be changed by administrator. Reasons why it could be changed: - built-in API node. If the node calls other services then pricing is based not solely on run time but also on how much those services cost. - Known nodes that usually run for much longer (like LoRa training) or for shorter periods (like CPU-based image modification) milli-credits (1/1000 credit). 1 credit = 1 cent. |
Reference to workflow input
| Field |
Number |
Type |
Label |
Description |
| field_path |
1 |
string |
|
Dot-formatted input field selector. Empty string == whole input This only says what value we select from input for evaluation, but the final used values might be modified via values_selector. Notice, the Workflow Input is always a Map. As such, if the field_path is empty - it will return the whole workflow input for evaluation. However, usually we are interested only in a specific input. Thus, the first word in the expression will mean the key of the input map. |
| values_selector |
2 |
WorkflowParamValuesSelector |
optional |
How to select from multiple values (if input is a list) |
Selects which iteration(s) to get outputs from
| Field |
Number |
Type |
Label |
Description |
| latest |
1 |
google.protobuf.Empty |
oneof selector |
Get output from the latest iteration |
| first |
2 |
google.protobuf.Empty |
oneof selector |
Get output from the first iteration |
| specific_iteration |
3 |
uint32 |
oneof selector |
Get output from a specific iteration number (0-based) |
| relative_iteration |
4 |
int32 |
oneof selector |
Get output from iteration relative to current (e.g., -1 = previous iteration) |
| next_iteration |
5 |
google.protobuf.Empty |
oneof selector |
Get output from next iteration (equivalent to relative_iteration = 1) |
Compares left value to one or more right values using the provided operator.
If IN operator is provided then it checks that the provided right values list contains left value.
For all other operators (EQ, NE, GT, GTE, LT, LTE) it checks each right value with left value.
All such checks are combined via AND in this case, meaning all checks should be true so that this comparator resolves to true.
Notice: If any of values (left_value or right_values) are unresolved due to unsatisfied references
(for example, when iteration for the value is unsatisfied) then the whole condition becomes NULL (neither true nor false).
NULL conditions are turning other parent conditions into NULL. NULL basically means - the condition cannot be calculated.
| Field |
Number |
Type |
Label |
Description |
| field_path |
1 |
string |
|
If empty string then value_source is used as is. Otherwise, a nested value is selected. |
| value_source |
2 |
WorkflowResolvableParamValue |
|
Value source (constant or reference or mix of constants and references) |
Selects specific values from the referenced data
| Field |
Number |
Type |
Label |
Description |
| considered_indexes |
1 |
uint32 |
repeated |
Indexes of specific values to consider (0-based) If not provided, all values are considered Only applicable to list/repeated values |
| return_field_path |
2 |
string |
|
Dot-formatted path to extract nested fields from each value Empty string = return values as is Example: “file.id” to extract just the ID from FileInfo objects |
| filter_field_path |
3 |
string |
|
Dot-formatted path defining which field to apply filters on Empty string = apply filter on root value Example: “metadata.score” to filter based on a nested score field |
| per_value_filter |
4 |
voplica.types.base.ParamValueCondition |
optional |
Filter to apply to each value |
| select_all |
10 |
google.protobuf.Empty |
oneof select_mode |
Select all matched values (returns list) |
| select_first |
11 |
google.protobuf.Empty |
oneof select_mode |
Select first matched value |
| select_last |
12 |
google.protobuf.Empty |
oneof select_mode |
Select last matched value |
| select_nth |
13 |
int32 |
oneof select_mode |
Select nth matched value (0-based) |
| Field |
Number |
Type |
Label |
Description |
| literal |
1 |
voplica.types.base.ParamValue |
oneof value |
Supply literal value directly When packing a complex type into a literal there are two ways of doing so: 1) Using any_value that will hold bytes of the serialized object as well as target url of its type. 2) Using bytes_value that will hold bytes of the serialized object. In this case the type is inferred from the key of the supplied param. |
| map_value |
2 |
WorkflowResolvableMapParamValue |
oneof value |
Map value allows to provide nested values |
| list_value |
3 |
WorkflowResolvableListParamValue |
oneof value |
List value to provide multiple values |
| step_output_ref |
4 |
WorkflowStepOutputParamReference |
oneof value |
Get value from the output of any step of the current workflow |
| input_ref |
5 |
WorkflowInputParamReference |
oneof value |
Get value from the input values of the current workflow |
| step_input_ref |
6 |
WorkflowStepInputParamReference |
oneof value |
Get value from the input of any step of the current workflow |
| resolve_value_condition |
11 |
WorkflowStepCondition |
optional |
If evaluated to false then value resolution is skipped and the provided fallback_strategy applies. If fallback strategy is not provided - value becomes unresolved. |
| unresolved |
20 |
google.protobuf.Empty |
oneof fallback_strategy |
Keep parameter as unresolvable - the parent wrapper value will then apply its own fallback_strategy, or if it’s the root value then the processing logic will apply its strategy. |
| none |
21 |
google.protobuf.Empty |
oneof fallback_strategy |
Returns nothing - only applicable if the schema accepts optional value. When used in Map structure - it means to not adding the key where this value was used. When used in List structure - it means to skip / remove this value from the list. |
| fallback_value |
22 |
WorkflowResolvableParamValue |
oneof fallback_strategy |
Returns alternative / fallback value if the main value was unresolved. |
WorkflowStepCondition is resolved to true if all provided conditions and comparators are resolved to true.
In other words WorkflowStepCondition is resolved to and_conditions && or_conditions && not_conditions && value_comparators && iteration_comparators.
| Field |
Number |
Type |
Label |
Description |
| and_conditions |
1 |
WorkflowStepCondition |
repeated |
and_conditions resolves to true if all conditions are true. Empty list is resolved to true. |
| or_conditions |
2 |
WorkflowStepCondition |
repeated |
or_conditions resolves to true if any condition is true. Empty list is resolved to true. |
| not_conditions |
3 |
WorkflowStepCondition |
repeated |
not_conditions resolves to true if all conditions are false. Empty list is resolved to true. |
| value_comparators |
4 |
WorkflowParamValueComparatorExpression |
repeated |
Value comparators resolves to true if all value comparators are true. Empty list is resolved to true. |
| iteration_comparators |
5 |
WorkflowStepIterationComparator |
repeated |
Iteration comparators resolve to true if all iteration comparators resolved to true. Empty list is resolved to true. |
Reference to a step’s input
| Field |
Number |
Type |
Label |
Description |
| step_id |
1 |
uint32 |
|
Which step’s input to reference |
| field_path |
2 |
string |
|
Dot-formatted input field selector. Empty string == whole input Example: “image.url” to get nested field This only says what value we select from input for evaluation, but the final used values might be modified via values_selector. Notice, that a Step may use either Node processor or Child Workflow processor. When Child Workflow processor is selected the empty field_path means to get all inputs as a map, but usually we are interested only in a specific input. Thus, the first word in the expression will mean the key of the input map. |
| iteration_selector |
3 |
WorkflowIterationSelector |
|
How to select from multiple iterations |
| values_selector |
4 |
WorkflowParamValuesSelector |
optional |
How to select from multiple values within selected iterations |
Iteration comparator simply checks the Step’s iteration, but doesn’t check the output values of the Step
| Field |
Number |
Type |
Label |
Description |
| step_id |
1 |
uint32 |
|
|
| iteration_selector |
2 |
WorkflowIterationSelector |
optional |
Provide what iteration is required for this dependency. This is the condition that simply validates that the Step’s Iteration that we want has already been executed. It doesn’t validate current_iteration of the Step we refer to, but simply checks that the Step has been executed before with the iteration we need. The difference between current_iteration_condition is that selecting specific_iteration = 0 will always resolve to true here (because we consider that any Step was executed 0 times), while setting specific_iteration = 0 in current_iteration_condition will result to true only if the Step has not been executed at all (because if it was executed, its current iteration is no longer 0). |
| current_iteration_condition |
3 |
WorkflowIterationSelector |
optional |
This is the condition for current iteration of the Step we refer to. - if latest / first is selected - it means current_iteration of the Step we refer to can be any but 0. Basically it means the Step should have been executed at least once. - specific_iteration means that the current_iteration of the Step we refer to should equal to the provided number. Notice, all Steps at the beginning have iteration 0. - relative_iteration means that the current_iteration of the Step we refer to should be relative to the iteration of the Step we want to process. Relative numbers can be negative. - if next_iteration is selected for current_iteration_condition - it means that the Step we refer to should have the iteration number +1 to what the consuming Step has. For example, if the consuming step was executed 0 times, the Step we refer to should have been executed at least once. |
Reference to a step’s output
| Field |
Number |
Type |
Label |
Description |
| step_id |
1 |
uint32 |
|
Which step’s output to reference |
| field_path |
2 |
string |
|
Dot-formatted output field selector. Empty string == whole output Example: “image.url” to get nested field This only says what value we select from output for evaluation, but the final used values might be modified via values_selector. For proper path, check value specification of the used Node Input or Child Workflow Input in the selected Step. |
| iteration_selector |
3 |
WorkflowIterationSelector |
|
How to select from multiple iterations |
| values_selector |
4 |
WorkflowParamValuesSelector |
optional |
How to select from multiple values within selected iterations |
| Field |
Number |
Type |
Label |
Description |
| value_spec |
1 |
WorkflowValueSpec |
|
|
| cast_mode |
2 |
voplica.types.workflow.common.WorkflowValueCastMode |
|
This tells if the incoming data should be strickly the same type as Input or not. For example, when using cast_mode equal to CONVERT_ANY_TO_STRUCT or CONVERT_ANY_TO_JSON_STRING then it means that input can be anything because we will convert the incoming data to Struct or JSON string. However, by default cast_mode is REQUIRE_SAME_VALUE_SPEC - meaning the data type of input data must match with the data type specification set in value_spec. |
| Field |
Number |
Type |
Label |
Description |
| data_type |
1 |
voplica.types.base.ParamDataType |
|
|
| proto_type_url |
2 |
string |
optional |
When data_type == ANY_MESSAGE or ANY_ENUM this url is required as it describes what exact Message or Enum is used. |
| map_message_representation |
3 |
WorkflowMapSchema |
optional |
When data_type == ANY_MESSAGE then this Map schema may represent separate fields of the Message Notice, this is provided only in types_spec and only for root types. Nested types with data_type == ANY_MESSAGE will have proto_type_url, but not map_message_representation. Meaning, to get fields of nested types we should search for the type in types_spec via the provided proto_type_url. Notice this technique allows us to represent recursive dependencies on itself (when one of the Message’s fields is of the type of this Message itself). |
| Field |
Number |
Type |
Label |
Description |
| keys |
1 |
string |
repeated |
List of keys in the same oneof group |
A WorkflowMapSchema describes constraints / shape for a map value (map<string, WorkflowParamValue>).
| Field |
Number |
Type |
Label |
Description |
| entries |
1 |
map<string, WorkflowValueSpec> |
|
Explicit key definitions |
| unspecified_entry_value_spec |
2 |
WorkflowValueSpec |
optional |
If specified, it means that any key can be provided in the map. Each key that is not covered by entries will have this schema |
| required_keys |
3 |
string |
repeated |
List of required key names |
| oneof_key_groups |
4 |
WorkflowMapOneOfFields |
repeated |
Each oneof group contains a list of keys where only one of them is required other keys cannot be provided in the same map |
WorkflowValueSpec extended to allow nested MapSchema or nested proto types
| Field |
Number |
Type |
Label |
Description |
| id |
1 |
string |
|
|
| name |
2 |
string |
|
|
| owner_id |
3 |
string |
|
|
| visibility |
4 |
voplica.types.base.VisibilityType |
|
|
| created_at |
5 |
uint64 |
|
|
| status |
6 |
voplica.types.base.PublishStatus |
|
Workflow that has at least one published Workflow Variant - is automatically published. If none variants are published - the workflow itself is unpublished |
| latest_workflow_variant_created_at |
7 |
uint64 |
|
|
| default_workflow_variant |
8 |
WorkflowVariantShortPreview |
optional |
|
| min_required_subscription |
9 |
voplica.types.subscription.StudioSubscriptionType |
|
Minimum subscription level the user should have to use any of the workflow variants in the group This is used as denormalization data. For each individual workflow variant the user should check requirements separately. |
| unique_likes_count |
21 |
uint64 |
|
Unique likes count. For example, if the same user likes multiple models of this model |
| used_count_sum |
22 |
uint64 |
|
Sum of usage count of each model in the gen model group |
| views_count |
23 |
uint64 |
|
Engagement metrics (read-only, updated by the platform). Renamed from checks_count/views_count – see the checks->views/views->engagement terminology rename. |
| engagement_count |
24 |
uint64 |
|
|
| nsfw |
25 |
bool |
|
Whether this workflow is NSFW. NSFW workflows are hidden from anonymous users’ trending/safe listings. |
| Field |
Number |
Type |
Label |
Description |
| child_workflow_output_key |
1 |
string |
oneof type |
|
| custom_output |
2 |
WorkflowConditionalOutput |
oneof type |
This custom output is evaluated inside the Child Workflow |
| Field |
Number |
Type |
Label |
Description |
| description |
1 |
string |
|
|
| last_draft_variant_id |
2 |
string |
optional |
Last draft variant is the UNPUBLISHED variant that was mutated last (created or updated) |
| default_workflow_variant_manual_selected |
4 |
bool |
|
|
| Field |
Number |
Type |
Label |
Description |
| credits_pricing_hint_milli |
1 |
uint64 |
|
Budget hint for cost-control. This is for information purpose only and doesn’t reflect the actual workflow run cost. This is not the final price, but an average hint on what it might usually cost. The final pricing is calculated after workflow is executed. The hint may be automatically updated overtime after enough statistics accumulated. milli-credits (1/1000 credit). 1 credit = 1 cent. |
| initial_credits_reservation_milli |
2 |
uint64 |
|
This is the sum of all initial_credits_reservation_milli for all Steps used in the Workflow Variant. That’s the minimum amount of credits the user should have available to execute the Workflow. milli-credits (1/1000 credit). 1 credit = 1 cent. |
| Field |
Number |
Type |
Label |
Description |
| max_iterations |
1 |
uint64 |
optional |
total across workflow when any Step will try to iterate past this value - the whole workflow execution will be terminated. |
| workflow_termination_step_condition |
2 |
WorkflowStepCondition |
optional |
If this condition is evaluated to true at any given point in time - the whole workflow execution will be terminated. |
A single node within a workflow
| Field |
Number |
Type |
Label |
Description |
| step_id |
1 |
uint32 |
|
Unique ID of the step in the Workflow. |
| triggers |
2 |
WorkflowStepTrigger |
repeated |
Step iteration checks triggers one by one and the first trigger variant that satisfies all requirements will be used to trigger Step iteration. If there were multiple triggers that satisfy requirements then after the first variant is used we re-check conditions again because the Step iterator is increased and it could mean that other triggers do not satisfy requirements anymore. If they still satisfy then the Step is triggered again with new input and the Step iterator is incremented again. Notice: If no step triggers are defined - it means this step can never be triggered (so, it basically like an unconnected placeholder for future use). Also, it’s possible to define WorkflowStepTriggerVariant that has no input, no conditions, and no dependencies. It will basically mean that this step always satisfies requirements - meaning it will be triggered again and again infinitely until workflow is stopped. |
| step_exec_config |
3 |
voplica.types.workflow.common.WorkflowStepExecConfig |
optional |
static/default exec config. If not provided - the default from Node will be used. |
| position |
4 |
voplica.types.base.Point2D |
|
Where the node is located in the workflow visualizer |
| content_provenance_generation_params |
5 |
WorkflowResolvableParamValue |
optional |
When creating Content these params tell from where to populate necessary fields, like used LoRas, characters, base models, prompt, seed and so on. If provided this param value should be resolvable to voplica.types.content.GenerationParams. |
| node |
10 |
WorkflowStepNodeProcessor |
oneof step_processor |
|
| child_workflow |
11 |
WorkflowStepChildWorkflowProcessor |
oneof step_processor |
|
| Field |
Number |
Type |
Label |
Description |
| child_workflow_variant_id |
1 |
string |
|
When Child Workflow Processor is used, we will supply all “inputs” from the trigger as inputs to the child workflow when triggering it. |
| output_variants |
2 |
WorkflowChildWorkflowOutputVariant |
repeated |
When the workflow is stopped we may potentially want to get some results from child workflow. As such we provide output variants. The first output variant that satisfies conditions is selected as the Step output. All output variants must have the same schema. Meaning, we can’t here select two outputs that have different data structure. If none of output variants satisfy conditions - it means the output is empty. As such, Steps depending on specific output from this Step that is executing Child Workflow - might not be executed as their input requirements won’t be satisfied. |
| Field |
Number |
Type |
Label |
Description |
| node_variant_id |
1 |
string |
|
|
| node_input_id |
2 |
string |
optional |
Node can only accept a single input. This specifies the “key” of input to get (even so usually there will always be only one key in the “inputs” map when Node Processor is selected). If specified - the key must present in all trigger inputs. However, if this is not specified - it means: - If Node doesn’t have any inputs define - we provide no inputs to the processing Node. - Otherwise, we take a single input from the Trigger inputs map. If there are multiple - that’s an exceptional case. |
| Field |
Number |
Type |
Label |
Description |
| inputs |
1 |
map<string, WorkflowResolvableParamValue> |
|
This defines the way how we get data (it could be constant literals or references to other Steps / Trigger Nodes). Notice, if WorkflowStepOutputParamReference is used, then its iteration_selector must satisfy conditions. If at least one iteration_selector is unsatisfied then the whole hierarchy of input is unsatisfied, meaning this whole input do not satisfy conditions and must not be used. If input data is not provided - it means the step can be triggered without any input data. Notice, the step may depend on itself. I.e. cyclic dependency when the step is triggered by its own output. |
| condition |
2 |
WorkflowStepCondition |
optional |
In addition, we can provide custom condition that must resolve to true for the input to be used. In other words, both input must be resolvable and condition must be true for this input variant to be satisfied. Notice, condition doesn’t necessarily compares inputs to something. condition might have its own references and compare totally different values that are not connected to inputs directly. |
| fire_limit |
3 |
uint32 |
|
By default any Trigger can be fired unlimited amount of times provided inputs and condition are resolvable. However, if we want to limit the trigger to fire up to a specific amount of times then we can provide here any value grater than 0. 0 means - unlimited; 1 means - can be fired once; 2 means - can be fired twice, and so on. |
| Field |
Number |
Type |
Label |
Description |
| variant_id |
1 |
string |
|
|
| parent_workflow_id |
2 |
string |
|
|
| variant_name |
3 |
string |
|
|
| owner_id |
4 |
string |
|
|
| visibility |
5 |
voplica.types.base.VisibilityType |
|
Node visibility type is inherited from parent node |
| created_at |
6 |
uint64 |
|
|
| steps |
7 |
WorkflowStep |
repeated |
|
| inputs_spec |
8 |
map<string, WorkflowInputSpec> |
|
Each workflow may have multiple inputs (or none). Different steps may depend on same or different inputs. Even so we may specify multiple inputs - all of them are always optional. Meaning that the Workflow Execution can be triggered with any number of inputs (or none at all). However, it doesn’t guarantee that the workflow will actually execute any steps or produce any input because steps may require specific inputs and if those are not provided - step are not executed. In such case - the output will be nothing. |
| outputs |
9 |
map<string, WorkflowConditionalOutput> |
|
Each workflow may have 0 or more outputs at the end of Workflow execution. Each output that satisfies conditions will be returned. All outputs are optional. |
| run_policy |
10 |
WorkflowRunPolicy |
optional |
|
| pricing |
11 |
WorkflowPricing |
|
|
| status |
12 |
voplica.types.base.PublishStatus |
|
|
| default_preview |
13 |
voplica.types.file.AssetFileVariantGroups |
optional |
Note: file_variant_groups are returned only if requested explicitly |
| min_required_subscription |
14 |
voplica.types.subscription.StudioSubscriptionType |
|
Minimum subscription level the user should have to use this workflow variant. This should be equal of higher of all min_required_subscription used in Steps (Nodes or Child Workflows) |
| default_content_publish_stage |
15 |
voplica.types.workflow.common.WorkflowContentPublishStage |
|
Default content publish stage is not directly specified during Workflow Execution |
| inputs_block_position |
16 |
voplica.types.base.Point2D |
optional |
Optional inputs block position |
| outputs_block_position |
17 |
voplica.types.base.Point2D |
optional |
Optional outputs block position |
| default_content_provenance_generation_params |
18 |
WorkflowResolvableParamValue |
optional |
Default content provenance generation params for all steps in this variant. If a step does not define its own content_provenance_generation_params, this variant-level default is used when creating content from that step. If provided this param value should be resolvable to voplica.types.content.GenerationParams. |
| likes_count |
21 |
uint64 |
|
Deprecated / unused: workflow likes are group-only (see Workflow.unique_likes_count above) – WorkflowVariant is no longer a valid like target, so this field is never populated. Kept (not removed) to avoid a wire-breaking field-number reuse. |
| used_count |
22 |
uint64 |
|
|
| views_count |
23 |
uint64 |
|
Engagement metrics (read-only, updated by the platform). Renamed from checks_count/views_count – see the checks->views/views->engagement terminology rename. |
| engagement_count |
24 |
uint64 |
|
|
| Field |
Number |
Type |
Label |
Description |
| default_preview_manual_selected |
1 |
bool |
|
Manually set default preview asset. If false - it means that the default preview is using latest asset selection strategy. |
| Field |
Number |
Type |
Label |
Description |
| transaction_id |
1 |
string |
|
Transaction id on which all workflow execution charges should be applied to. The same transaction_id is used across all Steps, including any Steps of Child Workflows. Meaning, Child Workflows add charges to the same transaction of the root workflow execution. |
| gpu_tier |
2 |
voplica.types.workflow.common.WorkflowGpuTier |
optional |
If GPU tier is provided then it should be used instead of auto-detected GPU size / tier. Meaning, even is the job gets executed on a higher-end GPU, but the job was expected to be executed on lower end GPU - we should charge using the lower price so that users always benefit from better pricing. |
| Field |
Number |
Type |
Label |
Description |
| id |
1 |
string |
|
|
| workflow_variant_id |
2 |
string |
|
Workflow Variant ID (what Workflow Definition this Execution actually executes) |
| workflow_id |
3 |
string |
|
Parent workflow ID (the Workflow that the variant belongs to) This is a denormalization field. workflow_id can be fetched from workflow_variant_id, but added here as we need to be able to search all executions related to a specific Workflow |
| status |
4 |
voplica.types.base.JobStatus |
|
|
| created_at |
5 |
uint64 |
|
|
| last_updated_at |
6 |
uint64 |
|
|
| owner_id |
7 |
string |
|
Owner of this workflow execution |
| visibility |
8 |
voplica.types.base.VisibilityType |
|
Visibility of this workflow execution |
| workflow_input |
9 |
map<string, voplica.types.base.NestedParamValue> |
|
|
| parent_workflow_execution_id |
10 |
string |
optional |
For child workflow executions: the parent workflow execution that triggered this child. Null/empty for root workflow executions. |
| parent_step_execution_id |
11 |
string |
optional |
For child workflow executions: which step execution in the parent workflow triggered this child. Null/empty for root workflow executions. |
| termination_reason |
12 |
voplica.types.workflow.common.WorkflowTerminationReason |
optional |
Why the workflow execution terminated. Provided when workflow execution is finished. |
| idempotency_key |
13 |
string |
|
Defaults to id, unless another value were specified during execution creation. |
| completed_at |
14 |
uint64 |
optional |
When the workflow execution finished (completed, failed, or cancelled). |
| total_iterations |
15 |
uint32 |
|
Total number of step iterations executed across all steps. |
| credits_reserved_milli |
16 |
uint64 |
|
Total credits reserved at the start of the workflow execution. For child workflows this is 0 because reservations are accounted in the root workflow. milli-credits (1/1000 credit). 1 credit = 1 cent. |
| credits_charged_milli |
17 |
uint64 |
|
|
| content_publish_policy |
18 |
voplica.types.workflow.common.WorkflowContentPublishPolicy |
|
Selected content publish policy |
| credits_reversed_milli |
19 |
uint64 |
|
|
| credits_net_charged_milli |
20 |
uint64 |
|
|
| Field |
Number |
Type |
Label |
Description |
| severity |
1 |
voplica.types.base.MessageSeverity |
|
|
| message |
2 |
string |
|
|
| step_id |
3 |
string |
optional |
|
| iteration_number |
4 |
uint32 |
optional |
|
| timestamp |
5 |
uint64 |
|
|
| code |
6 |
string |
|
|
Complete output from a workflow execution
| Field |
Number |
Type |
Label |
Description |
| workflow_execution_id |
1 |
string |
|
Unique workflow execution ID |
| step_outputs |
2 |
WorkflowStepOutputs |
repeated |
Outputs from each step in the workflow |
| workflow_output |
3 |
map<string, voplica.types.base.NestedParamValue> |
|
Final resolved workflow output (if specified in the workflow definition and workflow execution is completed) |
| aggregated_steps_usage_metrics |
4 |
WorkflowStepUsageMetrics |
|
aggregated metrics for all iterations of all steps |
| messages |
5 |
WorkflowExecutionMessage |
repeated |
Any errors or warnings |
Where and for whom a step ran: its execution ids, attempt and iteration, the user it ran for and its billing
transaction.
| Field |
Number |
Type |
Label |
Description |
| root_workflow_execution_id |
1 |
string |
|
|
| current_workflow_execution_id |
2 |
string |
|
|
| step_execution_id |
3 |
string |
|
Unique execution id. Same across different Step attempts, but different across different iterations. This can be used to check previous charges and credits reservations if the job failed for any reason and restarted. |
| step_id |
5 |
uint32 |
|
|
| attempt |
6 |
int32 |
|
attempt number / retries |
| iteration_number |
7 |
uint64 |
|
|
| user_id |
8 |
string |
optional |
On behalf of whom to run the Step. This reflects to files ownership, billing, etc. |
| billing_info |
9 |
WorkflowBillingInfoContext |
optional |
Different nodes may use different mechanisms for billing. If this info is not provided - it means the billing won’t be used. If this info is provided then the Node needs a way of properly applying charging strategies while it executes certain tasks. |
| Field |
Number |
Type |
Label |
Description |
| execution_context |
1 |
WorkflowStepExecContext |
|
Context of the current Step execution |
| created_at |
2 |
uint64 |
|
|
| status |
3 |
voplica.types.base.JobStatus |
|
Step status: pending, running, completed, failed |
| message |
4 |
string |
optional |
|
| trigger_input |
5 |
map<string, voplica.types.base.NestedParamValue> |
|
|
| completed_at |
6 |
uint64 |
optional |
When the step execution finished (completed, failed, or cancelled). |
| produced_content_ids |
7 |
string |
repeated |
Ids of any content produced by this step execution. Denormalized from the iteration output for convenient access when listing step executions. |
| charge_disposition |
11 |
voplica.types.workflow.common.WorkflowChargeDisposition |
|
|
| charge_disposition_reason |
12 |
string |
optional |
The one token behind the disposition: the deciding failure class (“InternalDefect”, “Timeout:HEARTBEAT”) or why it stayed charged (“USER_CLASS:CudaOutOfMemory”, “NO_STEP_KEYED_CHARGE”, “REVERSAL_NOT_APPLIED:FAILED_PRECONDITION”). Absent while undecided. |
| credits_reversed_milli |
13 |
uint64 |
|
REVERSED: what payments reversed for this step; WOULD_REVERSE: what it would have (never money returned); 0 otherwise. milli-credits (1/1000 credit). 1 credit = 1 cent. |
| Field |
Number |
Type |
Label |
Description |
| step_execution_id |
1 |
string |
|
reference to WorkflowStepExecution |
| step_id |
2 |
uint32 |
|
|
| completion_time |
3 |
uint64 |
|
|
| iteration_number |
4 |
uint32 |
|
Which iteration this output was produced in |
| step_output |
5 |
voplica.types.base.NestedParamValue |
|
|
| usage |
6 |
WorkflowStepUsageMetrics |
|
metrics |
| produced_content_ids |
7 |
string |
repeated |
Ids of any content produced by this Step during selected iteration |
| Field |
Number |
Type |
Label |
Description |
| execution_time_ms |
1 |
uint64 |
|
|
| gpu_time_ms |
2 |
uint64 |
|
measured, or estimated |
| input_bytes |
3 |
uint64 |
|
|
| output_bytes |
4 |
uint64 |
|
|
| storage_read_bytes |
5 |
uint64 |
|
|
| storage_write_bytes |
6 |
uint64 |
|
|
| credits_cost_milli |
7 |
uint64 |
|
milli-credits (1/1000 credit). 1 credit = 1 cent. |
| Name |
Number |
Description |
| WORKFLOW_PRIVACY_MODE_UNSPECIFIED |
0 |
|
| PRIVACY_DEFAULT |
1 |
Any verified hardware: isolated trusted rows or public GPU marketplace hosts. No surcharge, wherever the run lands. |
| PRIVACY_SENSITIVE |
2 |
|