#!/usr/bin/env bash # 08-memorybank-setup.sh — Create Vertex AI Agent Engine (Memory Bank) instance # Idempotent — safe to run multiple times # # KNOWN LIMITATION (OQ-01): # Memory Bank is Python SDK only — no gcloud CLI equivalent. # Requires: google-cloud-aiplatform >= 1.111.0 # Install: pip install google-cloud-aiplatform>=1.111.0 # # KNOWN LIMITATION (OQ-06): # Memory Bank does NOT support auto-discovery via gcloud. # The engine resource name must be manually set in .env as MEMORY_ENGINE_NAME. # # Source .env before running: source .env set -euo pipefail : "${PROJECT_ID:?Set PROJECT_ID}" : "${REGION:?Set REGION}" : "${AGENT_SA:?Set AGENT_SA}" MEMORY_INSTANCE_DISPLAY_NAME="${MEMORY_INSTANCE_DISPLAY_NAME:-${PROJECT_ID}-memory-bank}" echo "=== 08: Setting up Vertex AI Memory Bank (Agent Engine) ===" echo " Project : ${PROJECT_ID}" echo " Region : ${REGION}" echo " Instance : ${MEMORY_INSTANCE_DISPLAY_NAME}" echo "" bash "$(dirname "$0")/00-authcheck.sh" gcloud services enable aiplatform.googleapis.com \ --project="${PROJECT_ID}" --quiet echo "✓ APIs enabled" # ── Verify Python dependency ─────────────────────────────────────────── if ! python3 -c "import vertexai; from vertexai.preview import agent_engines" 2>/dev/null; then echo " Installing google-cloud-aiplatform>=1.111.0 ..." pip install --quiet "google-cloud-aiplatform>=1.111.0" 2>&1 | tail -3 fi echo "✓ Python SDK available" # ── Create or find Memory Bank instance via Python SDK ───────────────────── python3 - << PYEOF import os, sys try: import vertexai from vertexai.preview import agent_engines except ImportError as e: print(f"ERROR: Failed to import agent_engines: {e}") print("Run: pip install google-cloud-aiplatform>=1.111.0") sys.exit(1) PROJECT_ID = os.environ["PROJECT_ID"] REGION = os.environ["REGION"] DISP_NAME = os.environ.get("MEMORY_INSTANCE_DISPLAY_NAME", f"{PROJECT_ID}-memory-bank") vertexai.init(project=PROJECT_ID, location=REGION) # Check if instance already exists existing = None try: for eng in agent_engines.list(): if hasattr(eng, "display_name") and eng.display_name == DISP_NAME: existing = eng print(f"✓ Memory Bank instance already exists: {eng.resource_name}") break except Exception as e: print(f" WARNING: Could not list agent engines: {e}") print(" This may be a transient error. Proceeding with create attempt.") if existing is None: try: instance = agent_engines.create( display_name=DISP_NAME, ) print(f"✓ Memory Bank instance created: {instance.resource_name}") existing = instance except Exception as e: print(f"ERROR: Failed to create Memory Bank instance: {e}") print("") print("Possible causes:") print(" 1. SDK version too old — run: pip install google-cloud-aiplatform>=1.111.0") print(" 2. REGION not supported — try REGION=us-central1") print(" 3. Quota not enabled — check: https://console.cloud.google.com/iam-admin/quotas") sys.exit(1) if existing: resource_name = existing.resource_name with open("/tmp/memory_engine_name.txt", "w") as f: f.write(resource_name) print(f"") print(f" Memory Bank resource name : {resource_name}") print(f"") print(f" ACTION REQUIRED — add to .env:") print(f" MEMORY_ENGINE_NAME={resource_name}") PYEOF echo "" echo "=== 08: Memory Bank setup COMPLETE ===" echo "" echo " NEXT STEP: Copy the MEMORY_ENGINE_NAME value above into your .env file" echo " Then run: bash infrastructure/05-cloudrun-deploy.sh" echo ""