|
29 | 29 | import click |
30 | 30 | from packaging.version import parse |
31 | 31 |
|
32 | | -_IS_WINDOWS = os.name == 'nt' |
33 | | -_GCLOUD_CMD = 'gcloud.cmd' if _IS_WINDOWS else 'gcloud' |
34 | | -_LOCAL_STORAGE_FLAG_MIN_VERSION: Final[str] = '1.21.0' |
35 | 32 | _AGENT_ENGINE_REQUIREMENT: Final[str] = ( |
36 | 33 | 'google-cloud-aiplatform[adk,agent_engines]' |
37 | 34 | ) |
@@ -63,44 +60,6 @@ def _ensure_agent_engine_dependency(requirements_txt_path: str) -> None: |
63 | 60 | f.write(_AGENT_ENGINE_REQUIREMENT + '\n') |
64 | 61 |
|
65 | 62 |
|
66 | | -_DOCKERFILE_TEMPLATE: Final[str] = """ |
67 | | -FROM python:3.11-slim |
68 | | -WORKDIR /app |
69 | | -
|
70 | | -# Create a non-root user |
71 | | -RUN adduser --disabled-password --gecos "" myuser |
72 | | -
|
73 | | -# Switch to the non-root user |
74 | | -USER myuser |
75 | | -
|
76 | | -# Set up environment variables - Start |
77 | | -ENV PATH="/home/myuser/.local/bin:$PATH" |
78 | | -
|
79 | | -ENV GOOGLE_GENAI_USE_VERTEXAI=1 |
80 | | -ENV GOOGLE_CLOUD_PROJECT={gcp_project_id} |
81 | | -ENV GOOGLE_CLOUD_LOCATION={gcp_region} |
82 | | -
|
83 | | -# Set up environment variables - End |
84 | | -
|
85 | | -# Install ADK - Start |
86 | | -RUN pip install google-adk=={adk_version} |
87 | | -# Install ADK - End |
88 | | -
|
89 | | -# Copy agent - Start |
90 | | -
|
91 | | -# Set permission |
92 | | -COPY --chown=myuser:myuser "agents/{app_name}/" "/app/agents/{app_name}/" |
93 | | -
|
94 | | -# Copy agent - End |
95 | | -
|
96 | | -# Install Agent Deps - Start |
97 | | -{install_agent_deps} |
98 | | -# Install Agent Deps - End |
99 | | -
|
100 | | -EXPOSE {port} |
101 | | -
|
102 | | -CMD adk {command} --port={port} {host_option} {service_option} {trace_to_cloud_option} {otel_to_cloud_option} {allow_origins_option} {a2a_option} {trigger_sources_option} "/app/agents" |
103 | | -""" |
104 | 63 |
|
105 | 64 | _AGENT_ENGINE_APP_TEMPLATE: Final[str] = """ |
106 | 65 | import os |
@@ -409,17 +368,9 @@ def _ensure_agent_engine_dependency(requirements_txt_path: str) -> None: |
409 | 368 |
|
410 | 369 |
|
411 | 370 | def _resolve_project(project_in_option: Optional[str]) -> str: |
412 | | - if project_in_option: |
413 | | - return project_in_option |
414 | | - |
415 | | - result = subprocess.run( |
416 | | - [_GCLOUD_CMD, 'config', 'get-value', 'project'], |
417 | | - check=True, |
418 | | - capture_output=True, |
419 | | - text=True, |
420 | | - ) |
421 | | - project = result.stdout.strip() |
422 | | - click.echo(f'Use default project: {project}') |
| 371 | + project = gcp_utils.resolve_project(project_in_option) |
| 372 | + if not project_in_option: |
| 373 | + click.echo(f'Use default project: {project}') |
423 | 374 | return project |
424 | 375 |
|
425 | 376 |
|
@@ -585,43 +536,6 @@ def _validate_agent_import( |
585 | 536 | sys.modules.pop(key, None) |
586 | 537 |
|
587 | 538 |
|
588 | | -def _get_service_option_by_adk_version( |
589 | | - adk_version: str, |
590 | | - session_uri: Optional[str], |
591 | | - artifact_uri: Optional[str], |
592 | | - memory_uri: Optional[str], |
593 | | - use_local_storage: Optional[bool] = None, |
594 | | -) -> str: |
595 | | - """Returns service option string based on adk_version.""" |
596 | | - parsed_version = parse(adk_version) |
597 | | - options: list[str] = [] |
598 | | - |
599 | | - if parsed_version >= parse('1.3.0'): |
600 | | - if session_uri: |
601 | | - options.append(f'--session_service_uri={session_uri}') |
602 | | - if artifact_uri: |
603 | | - options.append(f'--artifact_service_uri={artifact_uri}') |
604 | | - if memory_uri: |
605 | | - options.append(f'--memory_service_uri={memory_uri}') |
606 | | - else: |
607 | | - if session_uri: |
608 | | - options.append(f'--session_db_url={session_uri}') |
609 | | - if parsed_version >= parse('1.2.0') and artifact_uri: |
610 | | - options.append(f'--artifact_storage_uri={artifact_uri}') |
611 | | - |
612 | | - if use_local_storage is not None and parsed_version >= parse( |
613 | | - _LOCAL_STORAGE_FLAG_MIN_VERSION |
614 | | - ): |
615 | | - # Only valid when session/artifact URIs are unset; otherwise the CLI |
616 | | - # rejects the combination to avoid confusing precedence. |
617 | | - if session_uri is None and artifact_uri is None: |
618 | | - options.append(( |
619 | | - '--use_local_storage' |
620 | | - if use_local_storage |
621 | | - else '--no_use_local_storage' |
622 | | - )) |
623 | | - |
624 | | - return ' '.join(options) |
625 | 539 |
|
626 | 540 |
|
627 | 541 | def to_cloud_run( |
@@ -719,14 +633,14 @@ def to_cloud_run( |
719 | 633 | trigger_sources_option = ( |
720 | 634 | f'--trigger_sources={trigger_sources}' if trigger_sources else '' |
721 | 635 | ) |
722 | | - dockerfile_content = _DOCKERFILE_TEMPLATE.format( |
| 636 | + dockerfile_content = build_utils.DOCKERFILE_TEMPLATE.format( |
723 | 637 | gcp_project_id=project, |
724 | 638 | gcp_region=region, |
725 | 639 | app_name=app_name, |
726 | 640 | port=port, |
727 | 641 | command='web' if with_ui else 'api_server', |
728 | 642 | install_agent_deps=install_agent_deps, |
729 | | - service_option=_get_service_option_by_adk_version( |
| 643 | + service_option=build_utils.get_service_option_by_adk_version( |
730 | 644 | adk_version, |
731 | 645 | session_service_uri, |
732 | 646 | artifact_service_uri, |
@@ -764,7 +678,7 @@ def to_cloud_run( |
764 | 678 |
|
765 | 679 | # Build the command with extra gcloud args |
766 | 680 | gcloud_cmd = [ |
767 | | - _GCLOUD_CMD, |
| 681 | + gcp_utils.GCLOUD_CMD, |
768 | 682 | 'run', |
769 | 683 | 'deploy', |
770 | 684 | service_name, |
@@ -1261,14 +1175,14 @@ def to_gke( |
1261 | 1175 | click.secho('\nSTEP 2: Generating deployment files...', bold=True) |
1262 | 1176 | click.echo(' - Creating Dockerfile...') |
1263 | 1177 | host_option = '--host=0.0.0.0' if adk_version > '0.5.0' else '' |
1264 | | - dockerfile_content = _DOCKERFILE_TEMPLATE.format( |
| 1178 | + dockerfile_content = build_utils.DOCKERFILE_TEMPLATE.format( |
1265 | 1179 | gcp_project_id=project, |
1266 | 1180 | gcp_region=region, |
1267 | 1181 | app_name=app_name, |
1268 | 1182 | port=port, |
1269 | 1183 | command='web' if with_ui else 'api_server', |
1270 | 1184 | install_agent_deps=install_agent_deps, |
1271 | | - service_option=_get_service_option_by_adk_version( |
| 1185 | + service_option=build_utils.get_service_option_by_adk_version( |
1272 | 1186 | adk_version, |
1273 | 1187 | session_service_uri, |
1274 | 1188 | artifact_service_uri, |
|
0 commit comments