-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·124 lines (111 loc) · 4.39 KB
/
Copy pathsetup.sh
File metadata and controls
executable file
·124 lines (111 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/env bash
# Copyright 2026 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
ENV_FILE="$SCRIPT_DIR/.env"
echo ""
echo "============================================"
echo " Self-Evolving Agent Demo - Setup"
echo "============================================"
echo ""
echo "Estimated one-run cloud cost: typically well under \$1 for the"
echo "default four-question demo. Setup itself only enables APIs, installs"
echo "local dependencies, and creates a small BigQuery dataset."
echo ""
PYTHON_BIN="${PYTHON_BIN:-python3}"
if ! command -v "$PYTHON_BIN" &>/dev/null; then
echo "ERROR: $PYTHON_BIN is required." >&2
exit 1
fi
if ! "$PYTHON_BIN" - <<'PY' >/dev/null; then
import sys
raise SystemExit(0 if sys.version_info >= (3, 10) else 1)
PY
echo "ERROR: Python 3.10+ is required. Set PYTHON_BIN to a 3.10+ interpreter." >&2
exit 1
fi
if ! command -v gcloud &>/dev/null; then
echo "ERROR: gcloud CLI is required." >&2
exit 1
fi
if ! command -v bq &>/dev/null; then
echo "ERROR: bq CLI is required." >&2
exit 1
fi
PROJECT_ID="${PROJECT_ID:-$(gcloud config get-value project 2>/dev/null || true)}"
if [[ -z "$PROJECT_ID" ]]; then
echo "ERROR: No project set. Export PROJECT_ID or run:" >&2
echo " gcloud config set project YOUR_PROJECT_ID" >&2
exit 1
fi
echo "Project: $PROJECT_ID"
if ! gcloud auth application-default print-access-token &>/dev/null 2>&1; then
echo "Application default credentials not found. Starting login..."
gcloud auth application-default login
fi
echo ""
echo "Enabling required APIs..."
gcloud services enable bigquery.googleapis.com --project="$PROJECT_ID" >/dev/null
gcloud services enable aiplatform.googleapis.com --project="$PROJECT_ID" >/dev/null
echo "APIs enabled."
echo ""
echo "Installing local package dependencies..."
"$PYTHON_BIN" -m pip install -e "$REPO_ROOT[improvement]" --quiet
echo "Dependencies installed."
DATASET_LOCATION="${DATASET_LOCATION:-${BQ_LOCATION:-us-central1}}"
SELF_EVOLVING_DATASET_ID="${SELF_EVOLVING_DATASET_ID:-self_evolving_agent_demo}"
SELF_EVOLVING_TABLE_ID="${SELF_EVOLVING_TABLE_ID:-agent_events}"
SELF_EVOLVING_AGENT_MODEL="${SELF_EVOLVING_AGENT_MODEL:-gemini-2.5-flash}"
SELF_EVOLVING_PROMPT_GENERATOR_MODEL="${SELF_EVOLVING_PROMPT_GENERATOR_MODEL:-gemini-2.5-flash}"
SELF_EVOLVING_AGENT_LOCATION="${SELF_EVOLVING_AGENT_LOCATION:-us-central1}"
TOKEN_BUDGET="${TOKEN_BUDGET:-12000}"
MAX_COST_USD="${MAX_COST_USD:-0.05}"
if ! bq show "${PROJECT_ID}:${SELF_EVOLVING_DATASET_ID}" &>/dev/null 2>&1; then
echo ""
echo "Creating BigQuery dataset: ${SELF_EVOLVING_DATASET_ID} (${DATASET_LOCATION})"
bq mk --dataset --location="$DATASET_LOCATION" \
"${PROJECT_ID}:${SELF_EVOLVING_DATASET_ID}" >/dev/null
else
EXISTING_LOCATION="$(
bq show --format=prettyjson "${PROJECT_ID}:${SELF_EVOLVING_DATASET_ID}" \
| "$PYTHON_BIN" -c 'import json, sys; print(json.load(sys.stdin).get("location", ""))'
)"
if [[ "${EXISTING_LOCATION,,}" != "${DATASET_LOCATION,,}" ]]; then
echo "ERROR: Dataset ${SELF_EVOLVING_DATASET_ID} exists in ${EXISTING_LOCATION}," >&2
echo "but DATASET_LOCATION is ${DATASET_LOCATION}. Use a matching location or a new dataset ID." >&2
exit 1
fi
fi
cat > "$ENV_FILE" <<EOF
# Self-Evolving Agent Demo Configuration
PROJECT_ID=$PROJECT_ID
DATASET_LOCATION=$DATASET_LOCATION
SELF_EVOLVING_DATASET_ID=$SELF_EVOLVING_DATASET_ID
SELF_EVOLVING_TABLE_ID=$SELF_EVOLVING_TABLE_ID
SELF_EVOLVING_AGENT_MODEL=$SELF_EVOLVING_AGENT_MODEL
SELF_EVOLVING_PROMPT_GENERATOR_MODEL=$SELF_EVOLVING_PROMPT_GENERATOR_MODEL
SELF_EVOLVING_AGENT_LOCATION=$SELF_EVOLVING_AGENT_LOCATION
TOKEN_BUDGET=$TOKEN_BUDGET
MAX_COST_USD=$MAX_COST_USD
GOOGLE_GENAI_USE_VERTEXAI=true
EOF
cd "$SCRIPT_DIR"
"$PYTHON_BIN" -m agent.prompt_store reset >/dev/null
echo ""
echo "Setup complete."
echo "Run:"
echo " cd $SCRIPT_DIR"
echo " ./run_e2e_demo.sh"