1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.cloud.visionai.v1; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.VisionAI.V1"; 20*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/visionai/apiv1/visionaipb;visionaipb"; 21*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 22*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "LvaProto"; 23*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.cloud.visionai.v1"; 24*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\VisionAI\\V1"; 25*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::VisionAI::V1"; 26*d5c09012SAndroid Build Coastguard Worker 27*d5c09012SAndroid Build Coastguard Worker// RunMode represents the mode to launch the Process on. 28*d5c09012SAndroid Build Coastguard Workerenum RunMode { 29*d5c09012SAndroid Build Coastguard Worker // Mode is unspecified. 30*d5c09012SAndroid Build Coastguard Worker RUN_MODE_UNSPECIFIED = 0; 31*d5c09012SAndroid Build Coastguard Worker 32*d5c09012SAndroid Build Coastguard Worker // Live mode. Meaning the Process is launched to handle live video 33*d5c09012SAndroid Build Coastguard Worker // source, and possible packet drops are expected. 34*d5c09012SAndroid Build Coastguard Worker LIVE = 1; 35*d5c09012SAndroid Build Coastguard Worker 36*d5c09012SAndroid Build Coastguard Worker // Submission mode. Meaning the Process is launched to handle bounded video 37*d5c09012SAndroid Build Coastguard Worker // files, with no packet drop. Completion status is tracked. 38*d5c09012SAndroid Build Coastguard Worker SUBMISSION = 2; 39*d5c09012SAndroid Build Coastguard Worker} 40*d5c09012SAndroid Build Coastguard Worker 41*d5c09012SAndroid Build Coastguard Worker// Defines the interface of an Operator. 42*d5c09012SAndroid Build Coastguard Worker// 43*d5c09012SAndroid Build Coastguard Worker// Arguments to an operator are input/output streams that are getting 44*d5c09012SAndroid Build Coastguard Worker// processesed/returned while attributes are fixed configuration parameters. 45*d5c09012SAndroid Build Coastguard Workermessage OperatorDefinition { 46*d5c09012SAndroid Build Coastguard Worker // Defines an argument to an operator. 47*d5c09012SAndroid Build Coastguard Worker // 48*d5c09012SAndroid Build Coastguard Worker // Used for both inputs and outputs. 49*d5c09012SAndroid Build Coastguard Worker message ArgumentDefinition { 50*d5c09012SAndroid Build Coastguard Worker // The name of the argument. 51*d5c09012SAndroid Build Coastguard Worker // 52*d5c09012SAndroid Build Coastguard Worker // Tentatively [a-z]([_a-z0-9]*[a-z0-9])?, e.g., video, audio, 53*d5c09012SAndroid Build Coastguard Worker // high_fps_frame. 54*d5c09012SAndroid Build Coastguard Worker string argument = 1; 55*d5c09012SAndroid Build Coastguard Worker 56*d5c09012SAndroid Build Coastguard Worker // The data type of the argument. 57*d5c09012SAndroid Build Coastguard Worker // 58*d5c09012SAndroid Build Coastguard Worker // This should match the textual representation of a stream/Packet type. 59*d5c09012SAndroid Build Coastguard Worker string type = 2; 60*d5c09012SAndroid Build Coastguard Worker } 61*d5c09012SAndroid Build Coastguard Worker 62*d5c09012SAndroid Build Coastguard Worker // Defines an attribute of an operator. 63*d5c09012SAndroid Build Coastguard Worker message AttributeDefinition { 64*d5c09012SAndroid Build Coastguard Worker // The name of the attribute. 65*d5c09012SAndroid Build Coastguard Worker // 66*d5c09012SAndroid Build Coastguard Worker // Tentatively [a-z]([_a-z0-9]*[a-z0-9])?, e.g., max_frames_per_video, 67*d5c09012SAndroid Build Coastguard Worker // resize_height. 68*d5c09012SAndroid Build Coastguard Worker string attribute = 1; 69*d5c09012SAndroid Build Coastguard Worker 70*d5c09012SAndroid Build Coastguard Worker // The type of this attribute. 71*d5c09012SAndroid Build Coastguard Worker // 72*d5c09012SAndroid Build Coastguard Worker // See attribute_value.proto for possibilities. 73*d5c09012SAndroid Build Coastguard Worker string type = 2; 74*d5c09012SAndroid Build Coastguard Worker 75*d5c09012SAndroid Build Coastguard Worker // The default value for the attribute. 76*d5c09012SAndroid Build Coastguard Worker AttributeValue default_value = 3; 77*d5c09012SAndroid Build Coastguard Worker } 78*d5c09012SAndroid Build Coastguard Worker 79*d5c09012SAndroid Build Coastguard Worker // The name of this operator. 80*d5c09012SAndroid Build Coastguard Worker // 81*d5c09012SAndroid Build Coastguard Worker // Tentatively [A-Z][a-zA-Z0-9]*, e.g., BboxCounter, PetDetector, 82*d5c09012SAndroid Build Coastguard Worker // PetDetector1. 83*d5c09012SAndroid Build Coastguard Worker string operator = 1; 84*d5c09012SAndroid Build Coastguard Worker 85*d5c09012SAndroid Build Coastguard Worker // Declares input arguments. 86*d5c09012SAndroid Build Coastguard Worker repeated ArgumentDefinition input_args = 2; 87*d5c09012SAndroid Build Coastguard Worker 88*d5c09012SAndroid Build Coastguard Worker // Declares output arguments. 89*d5c09012SAndroid Build Coastguard Worker repeated ArgumentDefinition output_args = 3; 90*d5c09012SAndroid Build Coastguard Worker 91*d5c09012SAndroid Build Coastguard Worker // Declares the attributes. 92*d5c09012SAndroid Build Coastguard Worker repeated AttributeDefinition attributes = 4; 93*d5c09012SAndroid Build Coastguard Worker 94*d5c09012SAndroid Build Coastguard Worker // The resources for running the operator. 95*d5c09012SAndroid Build Coastguard Worker ResourceSpecification resources = 5; 96*d5c09012SAndroid Build Coastguard Worker 97*d5c09012SAndroid Build Coastguard Worker // Short description of the operator. 98*d5c09012SAndroid Build Coastguard Worker string short_description = 6; 99*d5c09012SAndroid Build Coastguard Worker 100*d5c09012SAndroid Build Coastguard Worker // Full description of the operator. 101*d5c09012SAndroid Build Coastguard Worker string description = 7; 102*d5c09012SAndroid Build Coastguard Worker} 103*d5c09012SAndroid Build Coastguard Worker 104*d5c09012SAndroid Build Coastguard Worker// ResourceSpec collects a set of resources that can 105*d5c09012SAndroid Build Coastguard Worker// be used to specify requests and requirements. 106*d5c09012SAndroid Build Coastguard Worker// 107*d5c09012SAndroid Build Coastguard Worker// Note: Highly experimental as this can be runtime dependent. 108*d5c09012SAndroid Build Coastguard Worker// Can use the "extras" field to experiment first before trying 109*d5c09012SAndroid Build Coastguard Worker// to abstract it. 110*d5c09012SAndroid Build Coastguard Workermessage ResourceSpecification { 111*d5c09012SAndroid Build Coastguard Worker // CPU specification. 112*d5c09012SAndroid Build Coastguard Worker // 113*d5c09012SAndroid Build Coastguard Worker // Examples: 114*d5c09012SAndroid Build Coastguard Worker // "100m", "0.5", "1", "2", ... correspond to 115*d5c09012SAndroid Build Coastguard Worker // 0.1, half, 1, or 2 cpus. 116*d5c09012SAndroid Build Coastguard Worker // 117*d5c09012SAndroid Build Coastguard Worker // Leave empty to let the system decide. 118*d5c09012SAndroid Build Coastguard Worker // 119*d5c09012SAndroid Build Coastguard Worker // Note that this does *not* determine the cpu vender/make, 120*d5c09012SAndroid Build Coastguard Worker // or its underlying clock speed and specific SIMD features. 121*d5c09012SAndroid Build Coastguard Worker // It is only the amount time it requires in timeslicing. 122*d5c09012SAndroid Build Coastguard Worker string cpu = 1; 123*d5c09012SAndroid Build Coastguard Worker 124*d5c09012SAndroid Build Coastguard Worker // CPU limit. 125*d5c09012SAndroid Build Coastguard Worker // 126*d5c09012SAndroid Build Coastguard Worker // Examples: 127*d5c09012SAndroid Build Coastguard Worker // "100m", "0.5", "1", "2", ... correspond to 128*d5c09012SAndroid Build Coastguard Worker // 0.1, half, 1, or 2 cpus. 129*d5c09012SAndroid Build Coastguard Worker // 130*d5c09012SAndroid Build Coastguard Worker // Leave empty to indicate no limit. 131*d5c09012SAndroid Build Coastguard Worker string cpu_limits = 5; 132*d5c09012SAndroid Build Coastguard Worker 133*d5c09012SAndroid Build Coastguard Worker // Memory specification (in bytes). 134*d5c09012SAndroid Build Coastguard Worker // 135*d5c09012SAndroid Build Coastguard Worker // Examples: 136*d5c09012SAndroid Build Coastguard Worker // "128974848", "129e6", "129M", "123Mi", ... correspond to 137*d5c09012SAndroid Build Coastguard Worker // 128974848 bytes, 129000000 bytes, 129 mebibytes, 123 megabytes. 138*d5c09012SAndroid Build Coastguard Worker // 139*d5c09012SAndroid Build Coastguard Worker // Leave empty to let the system decide. 140*d5c09012SAndroid Build Coastguard Worker string memory = 2; 141*d5c09012SAndroid Build Coastguard Worker 142*d5c09012SAndroid Build Coastguard Worker // Memory usage limits. 143*d5c09012SAndroid Build Coastguard Worker // 144*d5c09012SAndroid Build Coastguard Worker // Examples: 145*d5c09012SAndroid Build Coastguard Worker // "128974848", "129e6", "129M", "123Mi", ... correspond to 146*d5c09012SAndroid Build Coastguard Worker // 128974848 bytes, 129000000 bytes, 129 mebibytes, 123 megabytes. 147*d5c09012SAndroid Build Coastguard Worker // 148*d5c09012SAndroid Build Coastguard Worker // Leave empty to indicate no limit. 149*d5c09012SAndroid Build Coastguard Worker string memory_limits = 6; 150*d5c09012SAndroid Build Coastguard Worker 151*d5c09012SAndroid Build Coastguard Worker // Number of gpus. 152*d5c09012SAndroid Build Coastguard Worker int32 gpus = 3; 153*d5c09012SAndroid Build Coastguard Worker 154*d5c09012SAndroid Build Coastguard Worker // The maximum latency that this operator may use to process an element. 155*d5c09012SAndroid Build Coastguard Worker // 156*d5c09012SAndroid Build Coastguard Worker // If non positive, then a system default will be used. 157*d5c09012SAndroid Build Coastguard Worker // Operator developers should arrange for the system compute resources to be 158*d5c09012SAndroid Build Coastguard Worker // aligned with this latency budget; e.g. if you want a ML model to produce 159*d5c09012SAndroid Build Coastguard Worker // results within 500ms, then you should make sure you request enough 160*d5c09012SAndroid Build Coastguard Worker // cpu/gpu/memory to achieve that. 161*d5c09012SAndroid Build Coastguard Worker int32 latency_budget_ms = 4; 162*d5c09012SAndroid Build Coastguard Worker} 163*d5c09012SAndroid Build Coastguard Worker 164*d5c09012SAndroid Build Coastguard Worker// Represents an actual value of an operator attribute. 165*d5c09012SAndroid Build Coastguard Workermessage AttributeValue { 166*d5c09012SAndroid Build Coastguard Worker // Attribute value. 167*d5c09012SAndroid Build Coastguard Worker oneof value { 168*d5c09012SAndroid Build Coastguard Worker // int. 169*d5c09012SAndroid Build Coastguard Worker int64 i = 1; 170*d5c09012SAndroid Build Coastguard Worker 171*d5c09012SAndroid Build Coastguard Worker // float. 172*d5c09012SAndroid Build Coastguard Worker float f = 2; 173*d5c09012SAndroid Build Coastguard Worker 174*d5c09012SAndroid Build Coastguard Worker // bool. 175*d5c09012SAndroid Build Coastguard Worker bool b = 3; 176*d5c09012SAndroid Build Coastguard Worker 177*d5c09012SAndroid Build Coastguard Worker // string. 178*d5c09012SAndroid Build Coastguard Worker bytes s = 4; 179*d5c09012SAndroid Build Coastguard Worker } 180*d5c09012SAndroid Build Coastguard Worker} 181*d5c09012SAndroid Build Coastguard Worker 182*d5c09012SAndroid Build Coastguard Worker// Defines an Analyzer. 183*d5c09012SAndroid Build Coastguard Worker// 184*d5c09012SAndroid Build Coastguard Worker// An analyzer processes data from its input streams using the logic defined in 185*d5c09012SAndroid Build Coastguard Worker// the Operator that it represents. Of course, it produces data for the output 186*d5c09012SAndroid Build Coastguard Worker// streams declared in the Operator. 187*d5c09012SAndroid Build Coastguard Workermessage AnalyzerDefinition { 188*d5c09012SAndroid Build Coastguard Worker // The inputs to this analyzer. 189*d5c09012SAndroid Build Coastguard Worker // 190*d5c09012SAndroid Build Coastguard Worker // We accept input name references of the following form: 191*d5c09012SAndroid Build Coastguard Worker // <analyzer-name>:<output-argument-name> 192*d5c09012SAndroid Build Coastguard Worker // 193*d5c09012SAndroid Build Coastguard Worker // Example: 194*d5c09012SAndroid Build Coastguard Worker // 195*d5c09012SAndroid Build Coastguard Worker // Suppose you had an operator named "SomeOp" that has 2 output 196*d5c09012SAndroid Build Coastguard Worker // arguments, the first of which is named "foo" and the second of which is 197*d5c09012SAndroid Build Coastguard Worker // named "bar", and an operator named "MyOp" that accepts 2 inputs. 198*d5c09012SAndroid Build Coastguard Worker // 199*d5c09012SAndroid Build Coastguard Worker // Also suppose that there is an analyzer named "some-analyzer" that is 200*d5c09012SAndroid Build Coastguard Worker // running "SomeOp" and another analyzer named "my-analyzer" running "MyOp". 201*d5c09012SAndroid Build Coastguard Worker // 202*d5c09012SAndroid Build Coastguard Worker // To indicate that "my-analyzer" is to consume "some-analyzer"'s "foo" 203*d5c09012SAndroid Build Coastguard Worker // output as its first input and "some-analyzer"'s "bar" output as its 204*d5c09012SAndroid Build Coastguard Worker // second input, you can set this field to the following: 205*d5c09012SAndroid Build Coastguard Worker // input = ["some-analyzer:foo", "some-analyzer:bar"] 206*d5c09012SAndroid Build Coastguard Worker message StreamInput { 207*d5c09012SAndroid Build Coastguard Worker // The name of the stream input (as discussed above). 208*d5c09012SAndroid Build Coastguard Worker string input = 1; 209*d5c09012SAndroid Build Coastguard Worker } 210*d5c09012SAndroid Build Coastguard Worker 211*d5c09012SAndroid Build Coastguard Worker // Options available for debugging purposes only. 212*d5c09012SAndroid Build Coastguard Worker message DebugOptions { 213*d5c09012SAndroid Build Coastguard Worker // Environment variables. 214*d5c09012SAndroid Build Coastguard Worker map<string, string> environment_variables = 1; 215*d5c09012SAndroid Build Coastguard Worker } 216*d5c09012SAndroid Build Coastguard Worker 217*d5c09012SAndroid Build Coastguard Worker // Option related to the operator. 218*d5c09012SAndroid Build Coastguard Worker message OperatorOption { 219*d5c09012SAndroid Build Coastguard Worker // Tag of the operator. 220*d5c09012SAndroid Build Coastguard Worker string tag = 1; 221*d5c09012SAndroid Build Coastguard Worker 222*d5c09012SAndroid Build Coastguard Worker // Registry of the operator. e.g. public, dev. 223*d5c09012SAndroid Build Coastguard Worker string registry = 2; 224*d5c09012SAndroid Build Coastguard Worker } 225*d5c09012SAndroid Build Coastguard Worker 226*d5c09012SAndroid Build Coastguard Worker // The name of this analyzer. 227*d5c09012SAndroid Build Coastguard Worker // 228*d5c09012SAndroid Build Coastguard Worker // Tentatively [a-z][a-z0-9]*(_[a-z0-9]+)*. 229*d5c09012SAndroid Build Coastguard Worker string analyzer = 1; 230*d5c09012SAndroid Build Coastguard Worker 231*d5c09012SAndroid Build Coastguard Worker // The name of the operator that this analyzer runs. 232*d5c09012SAndroid Build Coastguard Worker // 233*d5c09012SAndroid Build Coastguard Worker // Must match the name of a supported operator. 234*d5c09012SAndroid Build Coastguard Worker string operator = 2; 235*d5c09012SAndroid Build Coastguard Worker 236*d5c09012SAndroid Build Coastguard Worker // Input streams. 237*d5c09012SAndroid Build Coastguard Worker repeated StreamInput inputs = 3; 238*d5c09012SAndroid Build Coastguard Worker 239*d5c09012SAndroid Build Coastguard Worker // The attribute values that this analyzer applies to the operator. 240*d5c09012SAndroid Build Coastguard Worker // 241*d5c09012SAndroid Build Coastguard Worker // Supply a mapping between the attribute names and the actual value you wish 242*d5c09012SAndroid Build Coastguard Worker // to apply. If an attribute name is omitted, then it will take a 243*d5c09012SAndroid Build Coastguard Worker // preconfigured default value. 244*d5c09012SAndroid Build Coastguard Worker map<string, AttributeValue> attrs = 4; 245*d5c09012SAndroid Build Coastguard Worker 246*d5c09012SAndroid Build Coastguard Worker // Debug options. 247*d5c09012SAndroid Build Coastguard Worker DebugOptions debug_options = 5; 248*d5c09012SAndroid Build Coastguard Worker 249*d5c09012SAndroid Build Coastguard Worker // Operator option. 250*d5c09012SAndroid Build Coastguard Worker OperatorOption operator_option = 6; 251*d5c09012SAndroid Build Coastguard Worker} 252*d5c09012SAndroid Build Coastguard Worker 253*d5c09012SAndroid Build Coastguard Worker// Defines a full analysis. 254*d5c09012SAndroid Build Coastguard Worker// 255*d5c09012SAndroid Build Coastguard Worker// This is a description of the overall live analytics pipeline. 256*d5c09012SAndroid Build Coastguard Worker// You may think of this as an edge list representation of a multigraph. 257*d5c09012SAndroid Build Coastguard Worker// 258*d5c09012SAndroid Build Coastguard Worker// This may be directly authored by a human in protobuf textformat, or it may be 259*d5c09012SAndroid Build Coastguard Worker// generated by a programming API (perhaps Python or JavaScript depending on 260*d5c09012SAndroid Build Coastguard Worker// context). 261*d5c09012SAndroid Build Coastguard Workermessage AnalysisDefinition { 262*d5c09012SAndroid Build Coastguard Worker // Analyzer definitions. 263*d5c09012SAndroid Build Coastguard Worker repeated AnalyzerDefinition analyzers = 1; 264*d5c09012SAndroid Build Coastguard Worker} 265*d5c09012SAndroid Build Coastguard Worker 266*d5c09012SAndroid Build Coastguard Worker// Message describing the status of the Process. 267*d5c09012SAndroid Build Coastguard Workermessage RunStatus { 268*d5c09012SAndroid Build Coastguard Worker // State represents the running status of the Process. 269*d5c09012SAndroid Build Coastguard Worker enum State { 270*d5c09012SAndroid Build Coastguard Worker // State is unspecified. 271*d5c09012SAndroid Build Coastguard Worker STATE_UNSPECIFIED = 0; 272*d5c09012SAndroid Build Coastguard Worker 273*d5c09012SAndroid Build Coastguard Worker // INITIALIZING means the Process is scheduled but yet ready to handle 274*d5c09012SAndroid Build Coastguard Worker // real traffic. 275*d5c09012SAndroid Build Coastguard Worker INITIALIZING = 1; 276*d5c09012SAndroid Build Coastguard Worker 277*d5c09012SAndroid Build Coastguard Worker // RUNNING means the Process is up running and handling traffic. 278*d5c09012SAndroid Build Coastguard Worker RUNNING = 2; 279*d5c09012SAndroid Build Coastguard Worker 280*d5c09012SAndroid Build Coastguard Worker // COMPLETED means the Process has completed the processing, especially 281*d5c09012SAndroid Build Coastguard Worker // for non-streaming use case. 282*d5c09012SAndroid Build Coastguard Worker COMPLETED = 3; 283*d5c09012SAndroid Build Coastguard Worker 284*d5c09012SAndroid Build Coastguard Worker // FAILED means the Process failed to complete the processing. 285*d5c09012SAndroid Build Coastguard Worker FAILED = 4; 286*d5c09012SAndroid Build Coastguard Worker 287*d5c09012SAndroid Build Coastguard Worker // PENDING means the Process is created but yet to be scheduled. 288*d5c09012SAndroid Build Coastguard Worker PENDING = 5; 289*d5c09012SAndroid Build Coastguard Worker } 290*d5c09012SAndroid Build Coastguard Worker 291*d5c09012SAndroid Build Coastguard Worker // The state of the Process. 292*d5c09012SAndroid Build Coastguard Worker State state = 1; 293*d5c09012SAndroid Build Coastguard Worker 294*d5c09012SAndroid Build Coastguard Worker // The reason of becoming the state. 295*d5c09012SAndroid Build Coastguard Worker string reason = 2; 296*d5c09012SAndroid Build Coastguard Worker} 297