"""Function to update the Vertex AI Search and Conversion index""" import os import functions_framework from google.api_core.client_options import ClientOptions from google.cloud import discoveryengine def import_documents_sample( project_id: str, location: str, data_store_id: str, gcs_uri: str | None = None, bigquery_dataset: str | None = None, bigquery_table: str | None = None, ) -> str: """Function to import documents""" # For more information, refer to: # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store client_options = ( ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com") if location != "global" else None ) # Create a client client = discoveryengine.DocumentServiceClient(client_options=client_options) # The full resource name of the search engine branch. # e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch} parent = client.branch_path( project=project_id, location=location, data_store=data_store_id, branch="default_branch", ) if gcs_uri: request = discoveryengine.ImportDocumentsRequest( parent=parent, gcs_source=discoveryengine.GcsSource( input_uris=[gcs_uri], data_schema="document" ), # Options: `FULL`, `INCREMENTAL` reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL, ) else: request = discoveryengine.ImportDocumentsRequest( parent=parent, bigquery_source=discoveryengine.BigQuerySource( project_id=project_id, dataset_id=bigquery_dataset, table_id=bigquery_table, data_schema="custom", ), # Options: `FULL`, `INCREMENTAL` reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL, ) # Make the request operation = client.import_documents(request=request) print(f"Waiting for operation to complete: {operation.operation.name}") response = operation.result() # Once the operation is complete, # get information from operation metadata metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata) # Handle the response print(response) print(metadata) return operation.operation.name @functions_framework.cloud_event def update_search_index(cloud_event): """Main function""" # Set event vars data = cloud_event.data event_id = cloud_event["id"] event_type = cloud_event["type"] bucket = data["bucket"] name = data["name"] metageneration = data["metageneration"] timeCreated = data["timeCreated"] updated = data["updated"] # Print event vars to log print(f"Event ID: {event_id}") print(f"Event type: {event_type}") print(f"Bucket: {bucket}") print(f"File: {name}") print(f"Metageneration: {metageneration}") print(f"Created: {timeCreated}") print(f"Updated: {updated}") project_id = os.environ["PROJECT_ID"] location = "global" data_store_id = os.environ["DATASTORE_ID"] docs_metadata_bucket = os.environ["DOCS_METADATA_BUCKET"] gcs_uri = f"gs://{docs_metadata_bucket}/*.jsonl" import_documents_sample( project_id=project_id, location=location, data_store_id=data_store_id, gcs_uri=gcs_uri, )