gemini/agents/genai-experience-concierge/scripts/langgraph_demo/backend.py (91 lines of code) (raw):

# Copyright 2025 Google. This software is provided as-is, without warranty or # representation for any use or purpose. Your use of it is subject to your # agreement with Google. """Tools for managing the demo backend service.""" # pylint: disable=too-many-arguments,too-many-positional-arguments import json import subprocess import tempfile from scripts.langgraph_demo import defaults def deploy( service: str, project: str, region: str, network: str, subnetwork: str, service_account: str, image_url: str, alloydb_secret_name: str, cymbal_dataset_location: str, cymbal_products_table_uri: str, cymbal_stores_table_uri: str, cymbal_inventory_table_uri: str, cymbal_embedding_model_uri: str, ) -> None: """ Deploy a new Cloud Run revision. This command deploys a new revision of a Cloud Run service using the provided configuration. It generates a service YAML file from a template and then uses `gcloud run services replace` to deploy the service. Args: service (str): Name of the Cloud Run service to deploy. project (str): Name of the project for the target deployed service. region (str): Region to deploy the service. network (str): VPC network to deploy the service in. subnetwork (str): VPC subnetwork to deploy the service in. service_account (str): Service account to attach to the deployed service. image_url (str): Server container image URL to deploy. alloydb_secret_name (str): Secret name containing the AlloyDB connection URL. to attach to the runtime. cymbal_dataset_location (str): Location of the Cymbal Retail dataset. cymbal_products_table_uri (str): BigQuery URI for the Cymbal Retail products dataset (with embeddings). cymbal_stores_table_uri (str): BigQuery URI for the Cymbal Retail stores dataset. cymbal_inventory_table_uri (str): BigQuery URI for the Cymbal Retail inventory dataset. cymbal_embedding_model_uri (str): BigQuery URI for the Cymbal Retail embedding model. Raises: subprocess.CalledProcessError: If the `gcloud` command fails. """ with defaults.SERVICE_YAML_TEMPLATE_PATH.open() as f: service_yaml_str = f.read().format( service=service, project=project, region=region, network=network, subnetwork=subnetwork, service_account=service_account, image_url=image_url, alloydb_secret_name=alloydb_secret_name, cymbal_dataset_location=cymbal_dataset_location, cymbal_products_table_uri=cymbal_products_table_uri, cymbal_stores_table_uri=cymbal_stores_table_uri, cymbal_inventory_table_uri=cymbal_inventory_table_uri, cymbal_embedding_model_uri=cymbal_embedding_model_uri, ) with tempfile.NamedTemporaryFile("w") as f: f.write(service_yaml_str) f.flush() subprocess.run( [ "gcloud", "run", "services", "replace", "--project", project, "--region", region, f.name, ], check=True, ) def describe(project: str, region: str, service: str) -> dict: """ Describe a Cloud Run service and print its details in JSON format. This command uses `gcloud run services describe` to retrieve information about a Cloud Run service and prints the output as a formatted JSON string. Args: project (str): Name of the project to run the build job in. region (str): Region of the deployed service. service (str): Name of the Cloud Run service. Returns: dict: A dictionary containing the service description. Raises: subprocess.CalledProcessError: If the `gcloud` command fails. """ service_description_process = subprocess.run( [ "gcloud", "run", "services", "describe", "--project", project, "--region", region, service, "--format", "json", ], check=True, capture_output=True, ) service_description_dict = dict(json.loads(service_description_process.stdout)) return service_description_dict def add_invoker(service: str, project: str, region: str, invoker: str) -> None: """ Add the given member as a Cloud Run service invoker. This command grants the specified member principal the 'roles/run.invoker' role on the given Cloud Run service, allowing them to invoke the service. Args: service (str): Name of the Cloud Run service to deploy. project (str): Name of the project for the target deployed service. region (str): Region to deploy the service. invoker (str): A member principal to grant invoker permissions. Raises: subprocess.CalledProcessError: If the `gcloud` command fails. """ subprocess.run( [ "gcloud", "run", "services", "add-iam-policy-binding", "--project", project, "--region", region, service, "--member", invoker, "--role", "roles/run.invoker", ], check=True, )