Skip to content

Commit e423d15

Browse files
sararobcopybara-github
authored andcommitted
feat: GenAI SDK client - Update client.prompts.create to create a prompt and prompt version for a prompt. Deprecate client.prompts.create_version in favor of create()
PiperOrigin-RevId: 889955089
1 parent da663c0 commit e423d15

3 files changed

Lines changed: 84 additions & 0 deletions

File tree

tests/unit/vertexai/genai/replays/test_create_prompt.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,16 @@ def test_create(client):
147147
assert isinstance(prompt_resource.dataset, types.Dataset)
148148

149149

150+
def test_create_updated_e2e(client):
151+
prompt_resource = client.prompts.create(
152+
prompt=TEST_PROMPT,
153+
config=TEST_CREATE_PROMPT_CONFIG,
154+
)
155+
assert isinstance(prompt_resource, types.Prompt)
156+
assert isinstance(prompt_resource.dataset, types.Dataset)
157+
assert isinstance(prompt_resource.dataset_version, types.DatasetVersion)
158+
159+
150160
def test_create_e2e(client):
151161
prompt_resource = client.prompts.create(
152162
prompt=TEST_PROMPT,
@@ -361,3 +371,14 @@ async def test_create_version_async(client):
361371
prompt_version_resource.prompt_data.contents[0].parts[0].text
362372
== "Is this Alice?"
363373
)
374+
375+
376+
@pytest.mark.asyncio
377+
async def test_create_updated_e2e_async(client):
378+
prompt_resource = await client.aio.prompts.create(
379+
prompt=TEST_PROMPT,
380+
config=TEST_CREATE_PROMPT_CONFIG,
381+
)
382+
assert isinstance(prompt_resource, types.Prompt)
383+
assert isinstance(prompt_resource.dataset, types.Dataset)
384+
assert isinstance(prompt_resource.dataset_version, types.DatasetVersion)

vertexai/_genai/prompts.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,6 +1305,31 @@ def create(
13051305
name=dataset_id,
13061306
)
13071307
prompt._dataset = dataset_resource
1308+
1309+
# Step 3: Create the dataset version
1310+
create_dataset_version_operation = self._create_dataset_version_resource(
1311+
dataset_name=prompt._dataset.name.split("/")[-1],
1312+
display_name=(
1313+
config.version_display_name
1314+
if config and config.version_display_name is not None
1315+
else f"prompt_version_{time.strftime('%Y%m%d-%H%M%S')}"
1316+
),
1317+
)
1318+
dataset_version_resource_name = self._wait_for_operation(
1319+
operation=create_dataset_version_operation,
1320+
timeout=config.timeout if config else 90,
1321+
)
1322+
1323+
# Step 4: Get the dataset version resource and return it with the prompt
1324+
dataset_version_resource = self._get_dataset_version_resource(
1325+
dataset_id=dataset_id,
1326+
dataset_version_id=dataset_version_resource_name.split("/")[-1],
1327+
)
1328+
prompt = _prompt_management_utils._create_prompt_from_dataset_metadata(
1329+
dataset_version_resource
1330+
)
1331+
prompt._dataset = dataset_resource
1332+
prompt._dataset_version = dataset_version_resource
13081333
return prompt
13091334

13101335
def create_version(
@@ -1328,6 +1353,9 @@ def create_version(
13281353
A types.Prompt object representing the prompt with its associated
13291354
Dataset and Dataset Version resources.
13301355
"""
1356+
logger.warning(
1357+
"The `prompts.create_version` method is deprecated. Please use the prompts.create` method instead. `prompts.create` creates a prompt dataset and dataset version resource for your prompt."
1358+
)
13311359
if isinstance(prompt, dict):
13321360
prompt = types.Prompt(**prompt)
13331361
if isinstance(config, dict):
@@ -2925,6 +2953,31 @@ async def create(
29252953
name=dataset_id,
29262954
)
29272955
prompt._dataset = dataset_resource
2956+
2957+
# Step 3: Create the dataset version
2958+
create_dataset_version_operation = await self._create_dataset_version_resource(
2959+
dataset_name=dataset_id,
2960+
display_name=(
2961+
config.version_display_name
2962+
if config and config.version_display_name is not None
2963+
else f"prompt_version_{time.strftime('%Y%m%d-%H%M%S')}"
2964+
),
2965+
)
2966+
dataset_version_resource_name = await self._wait_for_operation(
2967+
operation=create_dataset_version_operation,
2968+
timeout=config.timeout if config else 90,
2969+
)
2970+
2971+
# Step 4: Get the dataset version resource and return it with the prompt
2972+
dataset_version_resource = await self._get_dataset_version_resource(
2973+
dataset_id=dataset_id,
2974+
dataset_version_id=dataset_version_resource_name.split("/")[-1],
2975+
)
2976+
prompt = _prompt_management_utils._create_prompt_from_dataset_metadata(
2977+
dataset_version_resource
2978+
)
2979+
prompt._dataset = dataset_resource
2980+
prompt._dataset_version = dataset_version_resource
29282981
return prompt
29292982

29302983
async def create_version(
@@ -2948,6 +3001,9 @@ async def create_version(
29483001
A types.Prompt object representing the prompt with its associated
29493002
Dataset and Dataset Version resources.
29503003
"""
3004+
logger.warning(
3005+
"The `prompts.create_version` method is deprecated. Please use the prompts.create` method instead. `prompts.create` creates a prompt dataset and dataset version resource for your prompt."
3006+
)
29513007
if isinstance(prompt, dict):
29523008
prompt = types.Prompt(**prompt)
29533009
if isinstance(config, dict):

vertexai/_genai/types/common.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16043,6 +16043,10 @@ class CreatePromptConfig(_common.BaseModel):
1604316043
default=None,
1604416044
description="""Customer-managed encryption key spec for a prompt dataset. If set, this prompt dataset and all sub-resources of this prompt dataset will be secured by this key.""",
1604516045
)
16046+
version_display_name: Optional[str] = Field(
16047+
default=None,
16048+
description="""The display name for the prompt version. If not set, a default name with a timestamp will be used.""",
16049+
)
1604616050

1604716051

1604816052
class CreatePromptConfigDict(TypedDict, total=False):
@@ -16060,6 +16064,9 @@ class CreatePromptConfigDict(TypedDict, total=False):
1606016064
encryption_spec: Optional[genai_types.EncryptionSpecDict]
1606116065
"""Customer-managed encryption key spec for a prompt dataset. If set, this prompt dataset and all sub-resources of this prompt dataset will be secured by this key."""
1606216066

16067+
version_display_name: Optional[str]
16068+
"""The display name for the prompt version. If not set, a default name with a timestamp will be used."""
16069+
1606316070

1606416071
CreatePromptConfigOrDict = Union[CreatePromptConfig, CreatePromptConfigDict]
1606516072

0 commit comments

Comments
 (0)