Skip to content

Commit 97e0359

Browse files
yeesiancopybara-github
authored andcommitted
feat: add support for BYO-dockerfile in AE deployment
PiperOrigin-RevId: 865065204
1 parent 04aacbb commit 97e0359

3 files changed

Lines changed: 74 additions & 16 deletions

File tree

vertexai/_genai/agent_engines.py

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,7 @@ def create(
956956
agent_framework=config.agent_framework,
957957
python_version=config.python_version,
958958
build_options=config.build_options,
959+
image_spec=config.image_spec,
959960
)
960961
operation = self._create(config=api_config)
961962
reasoning_engine_id = _agent_engines_utils._get_reasoning_engine_id(
@@ -1012,6 +1013,9 @@ def _set_source_code_spec(
10121013
requirements_file: Optional[str] = None,
10131014
sys_version: str,
10141015
build_options: Optional[dict[str, list[str]]] = None,
1016+
image_spec: Optional[
1017+
types.ReasoningEngineSpecSourceCodeSpecImageSpecDict
1018+
] = None,
10151019
) -> None:
10161020
"""Sets source_code_spec for agent engine inside the `spec`."""
10171021
source_code_spec = types.ReasoningEngineSpecSourceCodeSpecDict()
@@ -1035,7 +1039,25 @@ def _set_source_code_spec(
10351039
raise ValueError(
10361040
"Please specify one of `source_packages` or `developer_connect_source`."
10371041
)
1038-
1042+
if class_methods is None:
1043+
raise ValueError(
1044+
"`class_methods` must be specified if `source_packages` or `developer_connect_source` is specified."
1045+
)
1046+
update_masks.append("spec.class_methods")
1047+
class_methods_spec_list = (
1048+
_agent_engines_utils._class_methods_to_class_methods_spec(
1049+
class_methods=class_methods
1050+
)
1051+
)
1052+
spec["class_methods"] = [
1053+
_agent_engines_utils._to_dict(class_method_spec)
1054+
for class_method_spec in class_methods_spec_list
1055+
]
1056+
if image_spec is not None:
1057+
update_masks.append("spec.source_code_spec.image_spec")
1058+
source_code_spec["image_spec"] = image_spec
1059+
spec["source_code_spec"] = source_code_spec
1060+
return
10391061
update_masks.append("spec.source_code_spec.python_spec.version")
10401062
python_spec: types.ReasoningEngineSpecSourceCodeSpecPythonSpecDict = {
10411063
"version": sys_version,
@@ -1058,21 +1080,6 @@ def _set_source_code_spec(
10581080
source_code_spec["python_spec"] = python_spec
10591081
spec["source_code_spec"] = source_code_spec
10601082

1061-
if class_methods is None:
1062-
raise ValueError(
1063-
"`class_methods` must be specified if `source_packages` or `developer_connect_source` is specified."
1064-
)
1065-
update_masks.append("spec.class_methods")
1066-
class_methods_spec_list = (
1067-
_agent_engines_utils._class_methods_to_class_methods_spec(
1068-
class_methods=class_methods
1069-
)
1070-
)
1071-
spec["class_methods"] = [
1072-
_agent_engines_utils._to_dict(class_method_spec)
1073-
for class_method_spec in class_methods_spec_list
1074-
]
1075-
10761083
def _set_package_spec(
10771084
self,
10781085
*,
@@ -1200,6 +1207,9 @@ def _create_config(
12001207
agent_framework: Optional[str] = None,
12011208
python_version: Optional[str] = None,
12021209
build_options: Optional[dict[str, list[str]]] = None,
1210+
image_spec: Optional[
1211+
types.ReasoningEngineSpecSourceCodeSpecImageSpecDict
1212+
] = None,
12031213
) -> types.UpdateAgentEngineConfigDict:
12041214
import sys
12051215

@@ -1285,6 +1295,7 @@ def _create_config(
12851295
requirements_file=requirements_file,
12861296
sys_version=sys_version,
12871297
build_options=build_options,
1298+
image_spec=image_spec,
12881299
)
12891300

12901301
if agent_engine_spec is not None:

vertexai/_genai/types/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,9 @@
755755
from .common import ReasoningEngineSpecSourceCodeSpecDeveloperConnectSourceDict
756756
from .common import ReasoningEngineSpecSourceCodeSpecDeveloperConnectSourceOrDict
757757
from .common import ReasoningEngineSpecSourceCodeSpecDict
758+
from .common import ReasoningEngineSpecSourceCodeSpecImageSpec
759+
from .common import ReasoningEngineSpecSourceCodeSpecImageSpecDict
760+
from .common import ReasoningEngineSpecSourceCodeSpecImageSpecOrDict
758761
from .common import ReasoningEngineSpecSourceCodeSpecInlineSource
759762
from .common import ReasoningEngineSpecSourceCodeSpecInlineSourceDict
760763
from .common import ReasoningEngineSpecSourceCodeSpecInlineSourceOrDict
@@ -1416,6 +1419,9 @@
14161419
"ReasoningEngineSpecSourceCodeSpecPythonSpec",
14171420
"ReasoningEngineSpecSourceCodeSpecPythonSpecDict",
14181421
"ReasoningEngineSpecSourceCodeSpecPythonSpecOrDict",
1422+
"ReasoningEngineSpecSourceCodeSpecImageSpec",
1423+
"ReasoningEngineSpecSourceCodeSpecImageSpecDict",
1424+
"ReasoningEngineSpecSourceCodeSpecImageSpecOrDict",
14191425
"ReasoningEngineSpecSourceCodeSpec",
14201426
"ReasoningEngineSpecSourceCodeSpecDict",
14211427
"ReasoningEngineSpecSourceCodeSpecOrDict",

vertexai/_genai/types/common.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5118,6 +5118,34 @@ class ReasoningEngineSpecSourceCodeSpecPythonSpecDict(TypedDict, total=False):
51185118
]
51195119

51205120

5121+
class ReasoningEngineSpecSourceCodeSpecImageSpec(_common.BaseModel):
5122+
"""The image spec for building an image (within a single build step).
5123+
5124+
It is based on the config file (i.e. Dockerfile) in the source directory.
5125+
"""
5126+
5127+
build_args: Optional[dict[str, str]] = Field(
5128+
default=None,
5129+
description="""Optional. Build arguments to be used. They will be passed through --build-arg flags.""",
5130+
)
5131+
5132+
5133+
class ReasoningEngineSpecSourceCodeSpecImageSpecDict(TypedDict, total=False):
5134+
"""The image spec for building an image (within a single build step).
5135+
5136+
It is based on the config file (i.e. Dockerfile) in the source directory.
5137+
"""
5138+
5139+
build_args: Optional[dict[str, str]]
5140+
"""Optional. Build arguments to be used. They will be passed through --build-arg flags."""
5141+
5142+
5143+
ReasoningEngineSpecSourceCodeSpecImageSpecOrDict = Union[
5144+
ReasoningEngineSpecSourceCodeSpecImageSpec,
5145+
ReasoningEngineSpecSourceCodeSpecImageSpecDict,
5146+
]
5147+
5148+
51215149
class ReasoningEngineSpecSourceCodeSpec(_common.BaseModel):
51225150
"""Specification for deploying from source code."""
51235151

@@ -5133,6 +5161,10 @@ class ReasoningEngineSpecSourceCodeSpec(_common.BaseModel):
51335161
python_spec: Optional[ReasoningEngineSpecSourceCodeSpecPythonSpec] = Field(
51345162
default=None, description="""Configuration for a Python application."""
51355163
)
5164+
image_spec: Optional[ReasoningEngineSpecSourceCodeSpecImageSpec] = Field(
5165+
default=None,
5166+
description="""Optional. Configuration for building an image with custom config file.""",
5167+
)
51365168

51375169

51385170
class ReasoningEngineSpecSourceCodeSpecDict(TypedDict, total=False):
@@ -5149,6 +5181,9 @@ class ReasoningEngineSpecSourceCodeSpecDict(TypedDict, total=False):
51495181
python_spec: Optional[ReasoningEngineSpecSourceCodeSpecPythonSpecDict]
51505182
"""Configuration for a Python application."""
51515183

5184+
image_spec: Optional[ReasoningEngineSpecSourceCodeSpecImageSpecDict]
5185+
"""Optional. Configuration for building an image with custom config file."""
5186+
51525187

51535188
ReasoningEngineSpecSourceCodeSpecOrDict = Union[
51545189
ReasoningEngineSpecSourceCodeSpec, ReasoningEngineSpecSourceCodeSpecDict
@@ -14004,6 +14039,9 @@ class AgentEngineConfig(_common.BaseModel):
1400414039
subdirectory and the path must be added to `extra_packages`.
1400514040
""",
1400614041
)
14042+
image_spec: Optional[ReasoningEngineSpecSourceCodeSpecImageSpec] = Field(
14043+
default=None, description="""The image spec for the Agent Engine."""
14044+
)
1400714045

1400814046

1400914047
class AgentEngineConfigDict(TypedDict, total=False):
@@ -14167,6 +14205,9 @@ class AgentEngineConfigDict(TypedDict, total=False):
1416714205
subdirectory and the path must be added to `extra_packages`.
1416814206
"""
1416914207

14208+
image_spec: Optional[ReasoningEngineSpecSourceCodeSpecImageSpecDict]
14209+
"""The image spec for the Agent Engine."""
14210+
1417014211

1417114212
AgentEngineConfigOrDict = Union[AgentEngineConfig, AgentEngineConfigDict]
1417214213

0 commit comments

Comments
 (0)