With Cloud Run functions you can further process output data from Vertex AI custom-trained model and BigQuery app nodes. You can use these integrations with app nodes in the following ways:
- Vertex AI custom modelnode: Use Cloud Run functions to post-process prediction results from the original Vertex AI custom model.
- BigQuerynode: Use Cloud Run functions to generate customized BigQuery rows with the original annotations.
All the Cloud Run functions you use with App Platform must meet the following requirements:
- Cloud Run functions must provide the Http trigger .
- Cloud Run functions must receive a
AppPlatformCloudFunctionRequestJSON string, and must return aAppPlatformCloudFunctionResponseJSON string back. - The annotation payload schema stored in the request and the response must follow the specification of the target model.
API definitions: AppPlatformMetadata
, AppPlatformCloudFunctionRequest
, AppPlatformCloudFunctionResponse
// Message of essential metadata of App Platform . // This message is usually attached to a certain model output annotation for // customer to identify the source of the data . message AppPlatformMetadata { // The application resource name . string application = 1 ; // The instance resource id . Instance is the nested resource of application // under collection 'instances' . string instance_id = 2 ; // The node name of the application graph . string node = 3 ; // The referred model resource name of the application node . string processor = 4 ; } // For any Cloud Run function based customer processing logic , customer 's cloud // function is expected to receive AppPlatformCloudFunctionRequest as request // and send back AppPlatformCloudFunctionResponse as response . // Message of request from AppPlatform to Cloud Run functions . message AppPlatformCloudFunctionRequest { // The metadata of the AppPlatform for customer to identify the source of the // payload . AppPlatformMetadata app_platform_metadata = 1 ; // A general annotation message that uses struct format to represent different // concrete annotation protobufs . message StructedInputAnnotation { // The ingestion time of the current annotation . int64 ingestion_time_micros = 1 ; // The struct format of the actual annotation . protobuf . Struct annotation = 2 ; } // The actual annotations to be processed by the customized Cloud Run function . repeated StructedInputAnnotation annotations = 2 ; } // Message of the response from customer 's Cloud Run function to AppPlatform. message AppPlatformCloudFunctionResponse { // A general annotation message that uses struct format to represent different // concrete annotation protobufs . message StructedOutputAnnotation { // The struct format of the actual annotation . protobuf . Struct annotation = 1 ; } // The modified annotations that is returned back to AppPlatform . // If the annotations fields are empty , then those annotations will be dropped // by AppPlatform . repeated StructedOutputAnnotation annotations = 2 ; }
Sample usage
Use the following code to post-process Vertex AI custom-trained model annotations and replace annotations with a constant key-value pair.
Python
import
functions_framework
from
flask
import
jsonify
@functions_framework
.
http
def
hello_http
(
request
):
request_json
=
request
.
get_json
(
silent
=
True
)
request_args
=
request
.
args
if
request_json
and
'annotations'
in
request_json
:
annotations
=
[]
for
ele
in
request_json
[
'annotations'
]:
for
k
,
v
in
ele
.
items
():
if
k
==
"annotation"
:
if
"predictions"
in
v
:
# Replace the annotation.
v
[
"predictions"
][
0
]
=
{
"user"
:
"googler"
}
annotations
.
append
({
"annotation"
:
v
})
else
:
annotations
=
'Failure'
return
jsonify
(
annotations
=
annotations
)

