custom
text_embedding
Yes
No
CALL google_ml.create_sm_secret(
secret_id = > 'UNIQUE_CUSTOM_SECRET_ID ' ,
secret_path = > 'projects/PROJECT_ID /secrets/SECRET_NAME /versions/VERSION_NUMBER ' ) ;
CREATE OR REPLACE FUNCTION custom_text_embedding_input_transform( model_id VARCHAR( 100 ) , input_text TEXT)
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
DECLARE
transformed_input JSON;
BEGIN
-- Lookup model details, if required, using model_id through convenience functions
-- Transform input_text into JSON format required by the model.
SELECT json_build_object( 'input_text_key' , json_build_array( input_text)) ::JSON INTO transformed_input;
RETURN transformed_input;
END;
$$ ;
CREATE OR REPLACE FUNCTION custom_text_embedding_output_transform(
model_id VARCHAR( 100 ) , response_json JSON)
RETURNS REAL[]
LANGUAGE plpgsql
AS $$
DECLARE
transformed_output REAL[] ;
BEGIN
-- Lookup model details, if required, using model_id through convenience functions.
-- Transform response JSON from the model into the desired output
SELECT ARRAY( SELECT json_array_elements_text( response_json->'some_field' )) INTO transformed_output;
RETURN transformed_output;
END;
$$ ;
CALL google_ml.create_model(
model_id = > 'UNIQUE_EMB_MODEL_ID_1 ' ,
model_request_url = > 'CUSTOM_ENDPOINT_URL ' ,
model_provider = > 'custom' ,
model_type = > 'text_embedding' ,
model_auth_type = > 'secret_manager' ,
model_auth_id = > 'UNIQUE_CUSTOM_SECRET_ID ' ,
model_in_transform_fn = > 'custom_text_embedding_input_transform' ,
model_out_transform_fn = > 'custom_text_embedding_output_transform' ) ;
custom
text_embedding
Yes
No
CALL google_ml.create_sm_secret(
secret_id = > 'UNIQUE_CUSTOM_SECRET_ID ' ,
secret_path = > 'projects/PROJECT_ID /secrets/SECRET_NAME /versions/VERSION_NUMBER ' ) ;
CREATE OR REPLACE FUNCTION custom_sample_header_gen_fn( model_id VARCHAR( 100 ) , input_text TEXT)
-- Sample custom header generation function , update as required
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
BEGIN
RETURN json_build_object( 'CUSTOM_HEADER_KEY1 ' , 'CUSTOM_HEADER_VALUE1 ' , 'CUSTOM_HEADER_KEY2 ' , 'CUSTOM_HEADER_VALUE2 ' ) ::JSON;
END;
$$ ;
CREATE OR REPLACE FUNCTION custom_text_embedding_input_transform( model_id VARCHAR( 100 ) , input_text TEXT)
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
DECLARE
transformed_input JSON;
BEGIN
-- Lookup model details, if required, using model_id through convenience functions
-- Transform input_text into JSON format required by the model.
SELECT json_build_object( 'input_text_key' , json_build_array( input_text)) ::JSON INTO transformed_input;
RETURN transformed_input;
END;
$$ ;
CREATE OR REPLACE FUNCTION custom_text_embedding_output_transform(
model_id VARCHAR( 100 ) , response_json JSON)
RETURNS REAL[]
LANGUAGE plpgsql
AS $$
DECLARE
transformed_output REAL[] ;
BEGIN
-- Lookup model details, if required, using model_id through convenience functions.
-- Transform response JSON from the model into the desired output
SELECT ARRAY( SELECT json_array_elements_text( response_json->'some_field' )) INTO transformed_output;
RETURN transformed_output;
END;
$$ ;
CALL google_ml.create_model(
model_id = > 'UNIQUE_EMB_MODEL_ID_2 ' ,
model_request_url = > 'CUSTOM_ENDPOINT_URL ' ,
model_provider = > 'custom' ,
model_type = > 'text_embedding' ,
model_auth_type = > 'secret_manager' ,
model_auth_id = > 'UNIQUE_CUSTOM_SECRET_ID ' ,
generate_headers_fn = > 'custom_sample_header_gen_fn' ,
model_in_transform_fn = > 'custom_text_embedding_input_transform' ,
model_out_transform_fn = > 'custom_text_embedding_output_transform' ) ;
custom
text_embedding
No
No
CREATE OR REPLACE FUNCTION custom_text_embedding_input_transform( model_id VARCHAR( 100 ) , input_text TEXT)
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
DECLARE
transformed_input JSON;
BEGIN
-- Lookup model details, if required, using model_id through convenience functions
-- Transform input_text into JSON format required by the model.
SELECT json_build_object( 'input_text_key' , json_build_array( input_text)) ::JSON INTO transformed_input;
RETURN transformed_input;
END;
$$ ;
CREATE OR REPLACE FUNCTION custom_text_embedding_output_transform(
model_id VARCHAR( 100 ) , response_json JSON)
RETURNS REAL[]
LANGUAGE plpgsql
AS $$
DECLARE
transformed_output REAL[] ;
BEGIN
-- Lookup model details, if required, using model_id through convenience functions.
-- Transform response JSON from the model into the desired output
SELECT ARRAY( SELECT json_array_elements_text( response_json->'some_field' )) INTO transformed_output;
RETURN transformed_output;
END;
$$ ;
CALL google_ml.create_model(
model_id = > 'UNIQUE_EMB_MODEL_ID_3 ' ,
model_request_url = > 'CUSTOM_ENDPOINT_URL ' ,
model_provider = > 'custom' ,
model_type = > 'text_embedding' ,
model_in_transform_fn = > 'custom_text_embedding_input_transform' ,
model_out_transform_fn = > 'custom_text_embedding_output_transform' ) ;
custom
text_embedding
No
Yes
CREATE OR REPLACE FUNCTION custom_sample_custom_auth_header_gen_fn( model_id VARCHAR( 100 ) , input_text TEXT)
-- Sample auth header and custom header generation function , update as required
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
BEGIN
RETURN json_build_object( 'AUTH_HEADER_NAME ' , 'CUSTOM_API_KEY ' , 'CUSTOM_HEADER_KEY1 ' , 'CUSTOM_HEADER_VALUE1 ' , 'CUSTOM_HEADER_KEY2 ' , 'CUSTOM_HEADER_VALUE2 ' ) ::JSON;
END;
$$ ;
CREATE OR REPLACE FUNCTION custom_text_embedding_input_transform( model_id VARCHAR( 100 ) , input_text TEXT)
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
DECLARE
transformed_input JSON;
BEGIN
-- Lookup model details, if required, using model_id through convenience functions
-- Transform input_text into JSON format required by the model.
SELECT json_build_object( 'input_text_key' , json_build_array( input_text)) ::JSON INTO transformed_input;
RETURN transformed_input;
END;
$$ ;
CREATE OR REPLACE FUNCTION custom_text_embedding_output_transform(
model_id VARCHAR( 100 ) , response_json JSON)
RETURNS REAL[]
LANGUAGE plpgsql
AS $$
DECLARE
transformed_output REAL[] ;
BEGIN
-- Lookup model details, if required, using model_id through convenience functions.
-- Transform response JSON from the model into the desired output
SELECT ARRAY( SELECT json_array_elements_text( response_json->'some_field' )) INTO transformed_output;
RETURN transformed_output;
END;
$$ ;
CALL google_ml.create_model(
model_id = > 'UNIQUE_EMB_MODEL_ID_4 ' ,
model_request_url = > 'CUSTOM_ENDPOINT_URL ' ,
model_provider = > 'custom' ,
model_type = > 'text_embedding' ,
generate_headers_fn = > 'custom_sample_custom_auth_header_gen_fn' ,
model_in_transform_fn = > 'custom_text_embedding_input_transform' ,
model_out_transform_fn = > 'custom_text_embedding_output_transform' ) ;
custom
generic
Yes
No
CALL google_ml.create_sm_secret(
secret_id = > 'UNIQUE_CUSTOM_SECRET_ID ' ,
secret_path = > 'projects/PROJECT_ID /secrets/SECRET_NAME /versions/VERSION_NUMBER ' ) ;
CALL google_ml.create_model(
model_id = > 'UNIQUE_GEN_MODEL_ID_1 ' ,
model_request_url = > 'USER_PROVIDED_URL ' ,
model_provider = > 'custom' ,
model_type = > 'generic' ,
model_auth_type = > 'secret_manager' ,
model_auth_id = > 'UNIQUE_CUSTOM_SECRET_ID ' ) ;
custom
generic
Yes
No
CALL google_ml.create_sm_secret(
secret_id = > 'UNIQUE_CUSTOM_SECRET_ID ' ,
secret_path = > 'projects/PROJECT_ID /secrets/SECRET_NAME /versions/VERSION_NUMBER ' ) ;
CREATE OR REPLACE FUNCTION custom_sample_header_gen_fn( model_id VARCHAR( 100 ) , input_text TEXT)
-- Sample custom header generation function , update as required
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
BEGIN
RETURN json_build_object( 'CUSTOM_HEADER_KEY1 ' , 'CUSTOM_HEADER_VALUE1 ' , 'CUSTOM_HEADER_KEY2 ' , 'CUSTOM_HEADER_VALUE2 ' ) ::JSON;
END;
$$ ;
CALL google_ml.create_model(
model_id = > 'UNIQUE_GEN_MODEL_ID_2 ' ,
model_request_url = > 'USER_PROVIDED_URL ' ,
model_provider = > 'custom' ,
model_type = > 'generic' ,
model_auth_type = > 'secret_manager' ,
model_auth_id = > 'UNIQUE_CUSTOM_SECRET_ID ' ,
generate_headers_fn = > 'custom_sample_header_gen_fn' ) ;
custom
generic
No
No
CALL google_ml.create_model(
model_id = > 'UNIQUE_GEN_MODEL_ID_3 ' ,
model_request_url = > 'USER_PROVIDED_URL ' ,
model_provider = > 'custom' ,
model_type = > 'generic' ) ;
custom
generic
No
Yes
CREATE OR REPLACE FUNCTION custom_sample_custom_auth_header_gen_fn( model_id VARCHAR( 100 ) , input_text TEXT)
-- Sample auth header and custom header generation function , update as required
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
BEGIN
RETURN json_build_object( 'AUTH_HEADER_NAME1 ' , 'CUSTOM_API_KEY ' , 'CUSTOM_HEADER_KEY1 ' , 'CUSTOM_HEADER_VALUE1 ' , 'CUSTOM_HEADER_KEY2 ' , 'CUSTOM_HEADER_VALUE2 ' ) ::JSON;
END;
$$ ;
CALL google_ml.create_model(
model_id = > 'UNIQUE_GEN_MODEL_ID_4 ' ,
model_request_url = > 'USER_PROVIDED_URL ' ,
model_provider = > 'custom' ,
model_type = > 'generic' ,
generate_headers_fn = > 'custom_sample_custom_auth_header_gen_fn' ) ;