Skip to content

Commit 7a223d5

Browse files
sararobcopybara-github
authored andcommitted
feat: GenAI SDK client - move create prompt and prompt version workflow to prompts.create method, change prompts.get_version to return prompt version contents in prompt.prompt_data, and prompts.update method
PiperOrigin-RevId: 826031169
1 parent 33b3d2b commit 7a223d5

File tree

5 files changed

+347
-170
lines changed

5 files changed

+347
-170
lines changed

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

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,19 @@ def test_create(client):
145145
)
146146
assert isinstance(prompt_resource, types.Prompt)
147147
assert isinstance(prompt_resource.dataset, types.Dataset)
148+
assert isinstance(prompt_resource.dataset_version, types.DatasetVersion)
149+
assert prompt_resource.version_id == "1"
150+
assert (
151+
prompt_resource.dataset_version.metadata.prompt_api_schema.multimodal_prompt
152+
== prompt_resource.dataset.metadata.prompt_api_schema.multimodal_prompt
153+
)
148154

149155

150156
def test_create_e2e(client):
151157
prompt_resource = client.prompts.create(
152158
prompt=TEST_PROMPT,
153159
config=TEST_CREATE_PROMPT_CONFIG,
154160
)
155-
assert isinstance(prompt_resource, types.Prompt)
156-
assert isinstance(prompt_resource.dataset, types.Dataset)
157161

158162
# Test local prompt resource is the same after calling get()
159163
retrieved_prompt = client.prompts.get(prompt_id=prompt_resource.prompt_id)
@@ -186,28 +190,31 @@ def test_create_e2e(client):
186190
# Test calling create_version on the same prompt dataset and change the prompt
187191
new_prompt = TEST_PROMPT.model_copy(deep=True)
188192
new_prompt.prompt_data.contents[0].parts[0].text = "Is this Alice?"
189-
prompt_resource_2 = client.prompts.create_version(
193+
updated_prompt = client.prompts.update(
190194
prompt_id=prompt_resource.prompt_id,
191195
prompt=new_prompt,
192-
config=types.CreatePromptVersionConfig(
193-
version_display_name="my_version",
196+
config=types.UpdatePromptConfig(
197+
prompt_display_name="updated_prompt_display_name",
198+
version_display_name="my_version_2",
194199
),
195200
)
196-
assert prompt_resource_2.dataset.name == prompt_resource.dataset.name
197-
assert prompt_resource_2.prompt_data.contents[0].parts[0].text == "Is this Alice?"
201+
assert updated_prompt.dataset.display_name == "updated_prompt_display_name"
202+
assert updated_prompt.dataset_version.display_name == "my_version_2"
203+
assert updated_prompt.version_id == "2"
204+
assert updated_prompt.prompt_data.contents[0].parts[0].text == "Is this Alice?"
198205

199-
# Update the prompt contents again and verify version history is preserved
200-
prompt_v3 = TEST_PROMPT.model_copy(deep=True)
201-
prompt_v3.prompt_data.contents[0].parts[0].text = "Is this Bob?"
202-
prompt_resource_3 = client.prompts.create_version(
206+
# Tests that assemble_contents() works on a prompt without variables.
207+
assert updated_prompt.assemble_contents()[0].role == "user"
208+
209+
# Calling get_version on version "1" should return the original prompt contents
210+
original_prompt = client.prompts.get_version(
203211
prompt_id=prompt_resource.prompt_id,
204-
prompt=prompt_v3,
205-
config=types.CreatePromptVersionConfig(
206-
version_display_name="my_version_2",
207-
),
212+
version_id="1",
213+
)
214+
assert (
215+
original_prompt.prompt_data.contents[0].parts[0].text
216+
== "Hello, {name}! How are you?"
208217
)
209-
assert prompt_resource_3.dataset.name == prompt_resource.dataset.name
210-
assert prompt_resource_3.prompt_data.contents[0].parts[0].text == "Is this Bob?"
211218

212219

213220
def test_create_version(client):
@@ -296,6 +303,7 @@ def test_create_with_encryption_spec(client):
296303
config = types.CreatePromptConfig(
297304
prompt_display_name="my_prompt_with_encryption_spec",
298305
encryption_spec=encryption_spec,
306+
version_display_name="my_version_with_encryption_spec",
299307
)
300308
prompt_resource = client.prompts.create(
301309
prompt=TEST_PROMPT,
@@ -304,19 +312,19 @@ def test_create_with_encryption_spec(client):
304312
assert isinstance(prompt_resource, types.Prompt)
305313
assert isinstance(prompt_resource.dataset, types.Dataset)
306314

307-
# Create a version on a prompt with an encryption spec.
315+
# Update a prompt with an encryption spec.
308316
new_prompt = TEST_PROMPT.model_copy(deep=True)
309317
new_prompt.prompt_data.contents[0].parts[0].text = "Is this Alice?"
310-
prompt_version_resource = client.prompts.create_version(
318+
updated_prompt_resource = client.prompts.update(
311319
prompt_id=prompt_resource.prompt_id,
312320
prompt=new_prompt,
313-
config=types.CreatePromptVersionConfig(
321+
config=types.UpdatePromptConfig(
314322
version_display_name="my_version_existing_dataset",
315323
),
316324
)
317-
assert isinstance(prompt_version_resource, types.Prompt)
318-
assert isinstance(prompt_version_resource.dataset, types.Dataset)
319-
assert isinstance(prompt_version_resource.dataset_version, types.DatasetVersion)
325+
assert isinstance(updated_prompt_resource, types.Prompt)
326+
assert isinstance(updated_prompt_resource.dataset, types.Dataset)
327+
assert isinstance(updated_prompt_resource.dataset_version, types.DatasetVersion)
320328

321329

322330
pytestmark = pytest_helper.setup(
@@ -329,35 +337,29 @@ def test_create_with_encryption_spec(client):
329337

330338

331339
@pytest.mark.asyncio
332-
async def test_create_async(client):
340+
async def test_create_async_e2e(client):
333341
prompt_resource = await client.aio.prompts.create(
334342
prompt=TEST_PROMPT.model_dump(),
335343
config=TEST_CREATE_PROMPT_CONFIG.model_dump(),
336344
)
337345
assert isinstance(prompt_resource, types.Prompt)
338346
assert isinstance(prompt_resource.dataset, types.Dataset)
339-
340-
341-
@pytest.mark.asyncio
342-
async def test_create_version_async(client):
343-
prompt_resource = await client.aio.prompts.create(
344-
prompt=TEST_PROMPT.model_dump(),
345-
config=TEST_CREATE_PROMPT_CONFIG.model_dump(),
347+
assert isinstance(prompt_resource.dataset_version, types.DatasetVersion)
348+
assert prompt_resource.version_id == "1"
349+
assert (
350+
prompt_resource.dataset.metadata.prompt_api_schema.multimodal_prompt.prompt_message
351+
== prompt_resource.dataset_version.metadata.prompt_api_schema.multimodal_prompt.prompt_message
346352
)
353+
347354
new_prompt = TEST_PROMPT.model_copy(deep=True)
348355
new_prompt.prompt_data.contents[0].parts[0].text = "Is this Alice?"
349-
prompt_version_resource = await client.aio.prompts.create_version(
356+
updated_prompt_resource = await client.aio.prompts.update(
350357
prompt_id=prompt_resource.prompt_id,
351358
prompt=new_prompt,
352-
config=types.CreatePromptVersionConfig(
359+
config=types.UpdatePromptConfig(
353360
version_display_name="my_version_existing_dataset",
354361
),
355362
)
356-
assert isinstance(prompt_version_resource, types.Prompt)
357-
assert isinstance(prompt_version_resource.dataset, types.Dataset)
358-
assert isinstance(prompt_version_resource.dataset_version, types.DatasetVersion)
359-
assert prompt_version_resource.dataset.name.endswith(prompt_resource.prompt_id)
360-
assert (
361-
prompt_version_resource.prompt_data.contents[0].parts[0].text
362-
== "Is this Alice?"
363-
)
363+
assert isinstance(updated_prompt_resource, types.Prompt)
364+
assert isinstance(updated_prompt_resource.dataset, types.Dataset)
365+
assert isinstance(updated_prompt_resource.dataset_version, types.DatasetVersion)

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ def test_get_prompt_version(client):
5151
version_id=TEST_PROMPT_VERSION_ID,
5252
)
5353
assert isinstance(prompt, types.Prompt)
54-
assert isinstance(prompt.dataset, types.Dataset)
5554
assert isinstance(prompt.dataset_version, types.DatasetVersion)
56-
assert prompt.dataset.name.endswith(TEST_PROMPT_DATASET_ID)
5755
assert prompt.dataset_version.name.endswith(TEST_PROMPT_VERSION_ID)
5856

5957

@@ -100,10 +98,8 @@ async def test_get_prompt_version_async(client):
10098
prompt_id=TEST_PROMPT_DATASET_ID, version_id=TEST_PROMPT_VERSION_ID
10199
)
102100
assert isinstance(prompt, types.Prompt)
103-
assert isinstance(prompt.dataset, types.Dataset)
104-
assert prompt.dataset.name.endswith(TEST_PROMPT_DATASET_ID)
105101
assert (
106102
prompt.prompt_data
107-
== prompt.dataset.metadata.prompt_api_schema.multimodal_prompt.prompt_message
103+
== prompt.dataset_version.metadata.prompt_api_schema.multimodal_prompt.prompt_message
108104
)
109105
assert isinstance(prompt.prompt_data, types.SchemaPromptSpecPromptMessage)

0 commit comments

Comments
 (0)