diff --git a/tests/unit/vertexai/genai/replays/test_create_prompt.py b/tests/unit/vertexai/genai/replays/test_create_prompt.py index 61159f55b2..78d4ffc9e3 100644 --- a/tests/unit/vertexai/genai/replays/test_create_prompt.py +++ b/tests/unit/vertexai/genai/replays/test_create_prompt.py @@ -145,6 +145,12 @@ def test_create(client): ) assert isinstance(prompt_resource, types.Prompt) assert isinstance(prompt_resource.dataset, types.Dataset) + assert isinstance(prompt_resource.dataset_version, types.DatasetVersion) + assert prompt_resource.version_id == "1" + assert ( + prompt_resource.dataset_version.metadata.prompt_api_schema.multimodal_prompt + == prompt_resource.dataset.metadata.prompt_api_schema.multimodal_prompt + ) def test_create_e2e(client): @@ -152,8 +158,6 @@ def test_create_e2e(client): prompt=TEST_PROMPT, config=TEST_CREATE_PROMPT_CONFIG, ) - assert isinstance(prompt_resource, types.Prompt) - assert isinstance(prompt_resource.dataset, types.Dataset) # Test local prompt resource is the same after calling get() retrieved_prompt = client.prompts.get(prompt_id=prompt_resource.prompt_id) @@ -186,28 +190,31 @@ def test_create_e2e(client): # Test calling create_version on the same prompt dataset and change the prompt new_prompt = TEST_PROMPT.model_copy(deep=True) new_prompt.prompt_data.contents[0].parts[0].text = "Is this Alice?" - prompt_resource_2 = client.prompts.create_version( + updated_prompt = client.prompts.update( prompt_id=prompt_resource.prompt_id, prompt=new_prompt, - config=types.CreatePromptVersionConfig( - version_display_name="my_version", + config=types.UpdatePromptConfig( + prompt_display_name="updated_prompt_display_name", + version_display_name="my_version_2", ), ) - assert prompt_resource_2.dataset.name == prompt_resource.dataset.name - assert prompt_resource_2.prompt_data.contents[0].parts[0].text == "Is this Alice?" + assert updated_prompt.dataset.display_name == "updated_prompt_display_name" + assert updated_prompt.dataset_version.display_name == "my_version_2" + assert updated_prompt.version_id == "2" + assert updated_prompt.prompt_data.contents[0].parts[0].text == "Is this Alice?" - # Update the prompt contents again and verify version history is preserved - prompt_v3 = TEST_PROMPT.model_copy(deep=True) - prompt_v3.prompt_data.contents[0].parts[0].text = "Is this Bob?" - prompt_resource_3 = client.prompts.create_version( + # Tests that assemble_contents() works on a prompt without variables. + assert updated_prompt.assemble_contents()[0].role == "user" + + # Calling get_version on version "1" should return the original prompt contents + original_prompt = client.prompts.get_version( prompt_id=prompt_resource.prompt_id, - prompt=prompt_v3, - config=types.CreatePromptVersionConfig( - version_display_name="my_version_2", - ), + version_id="1", + ) + assert ( + original_prompt.prompt_data.contents[0].parts[0].text + == "Hello, {name}! How are you?" ) - assert prompt_resource_3.dataset.name == prompt_resource.dataset.name - assert prompt_resource_3.prompt_data.contents[0].parts[0].text == "Is this Bob?" def test_create_version(client): @@ -296,6 +303,7 @@ def test_create_with_encryption_spec(client): config = types.CreatePromptConfig( prompt_display_name="my_prompt_with_encryption_spec", encryption_spec=encryption_spec, + version_display_name="my_version_with_encryption_spec", ) prompt_resource = client.prompts.create( prompt=TEST_PROMPT, @@ -304,19 +312,19 @@ def test_create_with_encryption_spec(client): assert isinstance(prompt_resource, types.Prompt) assert isinstance(prompt_resource.dataset, types.Dataset) - # Create a version on a prompt with an encryption spec. + # Update a prompt with an encryption spec. new_prompt = TEST_PROMPT.model_copy(deep=True) new_prompt.prompt_data.contents[0].parts[0].text = "Is this Alice?" - prompt_version_resource = client.prompts.create_version( + updated_prompt_resource = client.prompts.update( prompt_id=prompt_resource.prompt_id, prompt=new_prompt, - config=types.CreatePromptVersionConfig( + config=types.UpdatePromptConfig( version_display_name="my_version_existing_dataset", ), ) - assert isinstance(prompt_version_resource, types.Prompt) - assert isinstance(prompt_version_resource.dataset, types.Dataset) - assert isinstance(prompt_version_resource.dataset_version, types.DatasetVersion) + assert isinstance(updated_prompt_resource, types.Prompt) + assert isinstance(updated_prompt_resource.dataset, types.Dataset) + assert isinstance(updated_prompt_resource.dataset_version, types.DatasetVersion) pytestmark = pytest_helper.setup( @@ -329,35 +337,29 @@ def test_create_with_encryption_spec(client): @pytest.mark.asyncio -async def test_create_async(client): +async def test_create_async_e2e(client): prompt_resource = await client.aio.prompts.create( prompt=TEST_PROMPT.model_dump(), config=TEST_CREATE_PROMPT_CONFIG.model_dump(), ) assert isinstance(prompt_resource, types.Prompt) assert isinstance(prompt_resource.dataset, types.Dataset) - - -@pytest.mark.asyncio -async def test_create_version_async(client): - prompt_resource = await client.aio.prompts.create( - prompt=TEST_PROMPT.model_dump(), - config=TEST_CREATE_PROMPT_CONFIG.model_dump(), + assert isinstance(prompt_resource.dataset_version, types.DatasetVersion) + assert prompt_resource.version_id == "1" + assert ( + prompt_resource.dataset.metadata.prompt_api_schema.multimodal_prompt.prompt_message + == prompt_resource.dataset_version.metadata.prompt_api_schema.multimodal_prompt.prompt_message ) + new_prompt = TEST_PROMPT.model_copy(deep=True) new_prompt.prompt_data.contents[0].parts[0].text = "Is this Alice?" - prompt_version_resource = await client.aio.prompts.create_version( + updated_prompt_resource = await client.aio.prompts.update( prompt_id=prompt_resource.prompt_id, prompt=new_prompt, - config=types.CreatePromptVersionConfig( + config=types.UpdatePromptConfig( version_display_name="my_version_existing_dataset", ), ) - assert isinstance(prompt_version_resource, types.Prompt) - assert isinstance(prompt_version_resource.dataset, types.Dataset) - assert isinstance(prompt_version_resource.dataset_version, types.DatasetVersion) - assert prompt_version_resource.dataset.name.endswith(prompt_resource.prompt_id) - assert ( - prompt_version_resource.prompt_data.contents[0].parts[0].text - == "Is this Alice?" - ) + assert isinstance(updated_prompt_resource, types.Prompt) + assert isinstance(updated_prompt_resource.dataset, types.Dataset) + assert isinstance(updated_prompt_resource.dataset_version, types.DatasetVersion) diff --git a/tests/unit/vertexai/genai/replays/test_get_prompt_resource.py b/tests/unit/vertexai/genai/replays/test_get_prompt_resource.py index a4737cd0fd..763a44c119 100644 --- a/tests/unit/vertexai/genai/replays/test_get_prompt_resource.py +++ b/tests/unit/vertexai/genai/replays/test_get_prompt_resource.py @@ -51,9 +51,7 @@ def test_get_prompt_version(client): version_id=TEST_PROMPT_VERSION_ID, ) assert isinstance(prompt, types.Prompt) - assert isinstance(prompt.dataset, types.Dataset) assert isinstance(prompt.dataset_version, types.DatasetVersion) - assert prompt.dataset.name.endswith(TEST_PROMPT_DATASET_ID) assert prompt.dataset_version.name.endswith(TEST_PROMPT_VERSION_ID) @@ -100,10 +98,8 @@ async def test_get_prompt_version_async(client): prompt_id=TEST_PROMPT_DATASET_ID, version_id=TEST_PROMPT_VERSION_ID ) assert isinstance(prompt, types.Prompt) - assert isinstance(prompt.dataset, types.Dataset) - assert prompt.dataset.name.endswith(TEST_PROMPT_DATASET_ID) assert ( prompt.prompt_data - == prompt.dataset.metadata.prompt_api_schema.multimodal_prompt.prompt_message + == prompt.dataset_version.metadata.prompt_api_schema.multimodal_prompt.prompt_message ) assert isinstance(prompt.prompt_data, types.SchemaPromptSpecPromptMessage) diff --git a/vertexai/_genai/prompts.py b/vertexai/_genai/prompts.py index 58d2f554a8..30e261e23f 100644 --- a/vertexai/_genai/prompts.py +++ b/vertexai/_genai/prompts.py @@ -915,9 +915,11 @@ def create( prompt: types.PromptOrDict, config: Optional[types.CreatePromptConfigOrDict] = None, ) -> types.Prompt: - """Creates a new prompt in a Vertex Dataset resource. + """Creates a new prompt in a Vertex Dataset resource, and a prompt version represented by a Vertex DatasetVersion resource. - This method waits for prompt creation to be complete before returning. + The prompt version is a snapshot of the prompt metadata at the time of creation. + + This method waits for prompt and prompt version creation to be complete before returning. Args: prompt: The prompt to create a version for. @@ -971,6 +973,28 @@ def create( name=dataset_id, ) prompt._dataset = dataset_resource + + # Step 3: Create a DatasetVersion for the prompt which will be a snapshot of the newly created Dataset + create_dataset_version_operation = self._create_dataset_version_resource( + dataset_name=dataset_id, + display_name=( + config.version_display_name + if config and config.version_display_name + else f"prompt_version_{time.strftime('%Y%m%d-%H%M%S')}" + ), + ) + dataset_version_resource_name = self._wait_for_operation( + operation=create_dataset_version_operation, + timeout=config.timeout if config else 90, + ) + + # Step 4: Get the dataset version resource and return it with the prompt + dataset_version_resource = self._get_dataset_version_resource( + dataset_id=dataset_id, + dataset_version_id=dataset_version_resource_name.split("/")[-1], + ) + prompt._dataset_version = dataset_version_resource + return prompt def create_version( @@ -980,10 +1004,11 @@ def create_version( prompt: types.PromptOrDict, config: Optional[types.CreatePromptVersionConfigOrDict] = None, ) -> types.Prompt: - """Creates a new version of a prompt in the prompt resource associated with the provided prompt_id. + """Creates a new prompt in a Vertex Dataset resource, and a prompt version represented by a Vertex DatasetVersion resource. + + The prompt version is a snapshot of the prompt metadata at the time of creation. - When creating new prompt version resources, this waits for - the create operation to complete before returning. + This method waits for prompt and prompt version creation to be complete before returning. Args: prompt_id: The ID of the prompt to create a version for. @@ -994,63 +1019,19 @@ def create_version( A types.Prompt object representing the prompt with its associated Dataset and Dataset Version resources. """ - if isinstance(prompt, dict): - prompt = types.Prompt(**prompt) if isinstance(config, dict): config = types.CreatePromptVersionConfig(**config) elif not config: config = types.CreatePromptVersionConfig() - _prompt_management_utils._raise_for_invalid_prompt(prompt) - - if config and config.version_display_name: - version_name = config.version_display_name - else: - version_name = None - - # Step 1: Get the dataset resource - dataset_resource = self._get_dataset_resource(name=prompt_id) - - # Step 2: Update the dataset with the new prompt metadata - updated_dataset_resource = self._update_dataset_resource( - dataset_id=prompt_id, - display_name=dataset_resource.display_name, - metadata=_prompt_management_utils._create_dataset_metadata_from_prompt( - prompt, - variables=( - prompt.prompt_data.variables - if prompt.prompt_data and prompt.prompt_data.variables - else None - ), - ), - model_reference=prompt.prompt_data.model, + create_prompt_config = types.CreatePromptConfig( + version_display_name=config.version_display_name, ) - # Step 3: Create the dataset version - create_dataset_version_operation = self._create_dataset_version_resource( - dataset_name=prompt_id, - display_name=( - version_name - if version_name - else f"prompt_version_{time.strftime('%Y%m%d-%H%M%S')}" - ), - ) - dataset_version_resource_name = self._wait_for_operation( - operation=create_dataset_version_operation, - timeout=config.timeout if config else 90, - ) - - # Step 4: Get the dataset version resource and return it with the prompt - dataset_version_resource = self._get_dataset_version_resource( - dataset_id=prompt_id, - dataset_version_id=dataset_version_resource_name.split("/")[-1], - ) - prompt = _prompt_management_utils._create_prompt_from_dataset_metadata( - dataset_version_resource + return self.create( + prompt=prompt, + config=create_prompt_config, ) - prompt._dataset = updated_dataset_resource - prompt._dataset_version = dataset_version_resource - return prompt def _wait_for_operation( self, @@ -1157,19 +1138,18 @@ def get_version( config: Optional configuration for getting the prompt. Returns: - A types.Prompt object representing the prompt with its associated Dataset and Dataset Version resources. + A types.Prompt object representing the prompt with its associated Dataset Version resources. """ - prompt_dataset_resource = self._get_dataset_resource(name=prompt_id) - prompt = _prompt_management_utils._create_prompt_from_dataset_metadata( - prompt_dataset_resource, - ) - prompt._dataset = prompt_dataset_resource - prompt_version_resource = self._get_dataset_version_resource( dataset_id=prompt_id, dataset_version_id=version_id, ) + + # Return a prompt object with prompt.prompt_data set to the contents of the DatasetVersion resource. + prompt = _prompt_management_utils._create_prompt_from_dataset_metadata( + prompt_version_resource, + ) prompt._dataset_version = prompt_version_resource return prompt @@ -1419,6 +1399,91 @@ def restore_version( updated_prompt._dataset_version = dataset_version_resource return updated_prompt + def update( + self, + *, + prompt_id: str, + prompt: types.PromptOrDict, + config: Optional[types.UpdatePromptConfigOrDict] = None, + ) -> types.Prompt: + """Updates a prompt resource by creating a new prompt version. + + The prompt version is a snapshot of the prompt metadata at the time it is updated. + + This method waits for prompt version creation to be complete before returning. + + Args: + prompt_id: The id of the Vertex Dataset resource to update. + prompt: A prompt object containing the updated prompt. + config: Optional configuration for updating the prompt. + + Returns: + A types.Prompt object representing the updated prompt with its associated + Dataset and DatasetVersionresources. + """ + if isinstance(prompt, dict): + prompt = types.Prompt(**prompt) + if isinstance(config, dict): + config = types.UpdatePromptConfig(**config) + elif not config: + config = types.UpdatePromptConfig() + + _prompt_management_utils._raise_for_invalid_prompt(prompt) + + prompt_metadata = _prompt_management_utils._create_dataset_metadata_from_prompt( + prompt, + variables=( + prompt.prompt_data.variables + if prompt.prompt_data and prompt.prompt_data.variables + else None + ), + ) + + # Step 1: Update the dataset resource for the prompt. + updated_dataset_resource = self._update_dataset_resource( + dataset_id=prompt_id, + display_name=( + config.prompt_display_name + if config and config.prompt_display_name + else None + ), + metadata=prompt_metadata, + model_reference=prompt.prompt_data.model, + ) + + # Step 2: Get the updated dataset resource. This will return the Dataset with all fields populated. + updated_dataset_resource = self._get_dataset_resource( + name=updated_dataset_resource.name.split("/")[-1], + ) + + updated_prompt = _prompt_management_utils._create_prompt_from_dataset_metadata( + updated_dataset_resource, + ) + updated_prompt._dataset = updated_dataset_resource + + # Step 3: Create a DatasetVersion for the prompt which will be a snapshot of the updated Dataset and wait for the operation to complete. + create_dataset_version_operation = self._create_dataset_version_resource( + dataset_name=updated_prompt.prompt_id, + display_name=( + config.version_display_name + if config and config.version_display_name + else f"prompt_version_{time.strftime('%Y%m%d-%H%M%S')}" + ), + ) + dataset_version_resource_name = self._wait_for_operation( + operation=create_dataset_version_operation, + timeout=config.timeout if config else 90, + ) + + # Step 4: Get the dataset version resource and return it with the prompt + dataset_version_resource = self._get_dataset_version_resource( + dataset_id=updated_prompt.prompt_id, + dataset_version_id=dataset_version_resource_name.split("/")[-1], + ) + updated_prompt._dataset_version = dataset_version_resource + + return updated_prompt + class AsyncPrompts(_api_module.BaseModule): @@ -2074,9 +2139,11 @@ async def create( prompt: types.PromptOrDict, config: Optional[types.CreatePromptConfigOrDict] = None, ) -> types.Prompt: - """Creates a new prompt in a Vertex Dataset resource. + """Creates a new prompt in a Vertex Dataset resource, and a prompt version represented by a Vertex DatasetVersion resource. + + The prompt version is a snapshot of the prompt metadata at the time of creation. - This method waits for prompt creation to be complete before returning. + This method waits for prompt and prompt version creation to be complete before returning. Args: prompt: The prompt to create. @@ -2130,6 +2197,28 @@ async def create( name=dataset_id, ) prompt._dataset = dataset_resource + + # Step 3: Create a DatasetVersion for the prompt which will be a snapshot of the newly created Dataset + create_dataset_version_operation = await self._create_dataset_version_resource( + dataset_name=dataset_id, + display_name=( + config.version_display_name + if config and config.version_display_name + else f"prompt_version_{time.strftime('%Y%m%d-%H%M%S')}" + ), + ) + dataset_version_resource_name = await self._wait_for_operation( + operation=create_dataset_version_operation, + timeout=config.timeout if config else 90, + ) + + # Step 4: Get the dataset version resource and return it with the prompt + dataset_version_resource = await self._get_dataset_version_resource( + dataset_id=dataset_id, + dataset_version_id=dataset_version_resource_name.split("/")[-1], + ) + prompt._dataset_version = dataset_version_resource + return prompt async def create_version( @@ -2139,10 +2228,11 @@ async def create_version( prompt: types.PromptOrDict, config: Optional[types.CreatePromptVersionConfigOrDict] = None, ) -> types.Prompt: - """Creates a new version of a prompt in the prompt resource associated with the provided prompt_id. + """Creates a new prompt in a Vertex Dataset resource, and a prompt version represented by a Vertex DatasetVersion resource. - When creating new prompt version resources, this waits for - the create operation to complete before returning. + The prompt version is a snapshot of the prompt metadata at the time of creation. + + This method waits for prompt and prompt version creation to be complete before returning. Args: prompt_id: The ID of the prompt to create a version for. @@ -2153,63 +2243,16 @@ async def create_version( A types.Prompt object representing the prompt with its associated Dataset and Dataset Version resources. """ - if isinstance(prompt, dict): - prompt = types.Prompt(**prompt) if isinstance(config, dict): config = types.CreatePromptVersionConfig(**config) elif not config: config = types.CreatePromptVersionConfig() - _prompt_management_utils._raise_for_invalid_prompt(prompt) - - if config and config.version_display_name: - version_name = config.version_display_name - else: - version_name = None - - # Step 1: Get the dataset resource - dataset_resource = await self._get_dataset_resource(name=prompt_id) - - # Step 2: Update the dataset with the new prompt metadata - updated_dataset_resource = await self._update_dataset_resource( - dataset_id=prompt_id, - display_name=dataset_resource.display_name, - metadata=_prompt_management_utils._create_dataset_metadata_from_prompt( - prompt, - variables=( - prompt.prompt_data.variables - if prompt.prompt_data and prompt.prompt_data.variables - else None - ), - ), - model_reference=prompt.prompt_data.model, + create_prompt_config = types.CreatePromptConfig( + version_display_name=config.version_display_name, ) - # Step 3: Create the dataset version - create_dataset_version_operation = await self._create_dataset_version_resource( - dataset_name=prompt_id, - display_name=( - version_name - if version_name - else f"prompt_version_{time.strftime('%Y%m%d-%H%M%S')}" - ), - ) - dataset_version_resource_name = await self._wait_for_operation( - operation=create_dataset_version_operation, - timeout=config.timeout if config else 90, - ) - - # Step 4: Get the dataset version resource and return it with the prompt - dataset_version_resource = await self._get_dataset_version_resource( - dataset_id=prompt_id, - dataset_version_id=dataset_version_resource_name.split("/")[-1], - ) - prompt = _prompt_management_utils._create_prompt_from_dataset_metadata( - dataset_version_resource - ) - prompt._dataset = updated_dataset_resource - prompt._dataset_version = dataset_version_resource - return prompt + return await self.create(prompt=prompt, config=create_prompt_config) async def _wait_for_operation( self, @@ -2323,19 +2366,18 @@ async def get_version( config: Optional configuration for getting the prompt. Returns: - A types.Prompt object representing the prompt with its associated Dataset and Dataset Version resources. + A types.Prompt object representing the prompt with its associated Dataset Version resources. """ - prompt_dataset_resource = await self._get_dataset_resource(name=prompt_id) - prompt = _prompt_management_utils._create_prompt_from_dataset_metadata( - prompt_dataset_resource, - ) - prompt._dataset = prompt_dataset_resource - prompt_version_resource = await self._get_dataset_version_resource( dataset_id=prompt_id, dataset_version_id=version_id, ) + + # Return a prompt object with prompt.prompt_data set to the contents of the DatasetVersion resource. + prompt = _prompt_management_utils._create_prompt_from_dataset_metadata( + prompt_version_resource, + ) prompt._dataset_version = prompt_version_resource return prompt @@ -2582,3 +2624,88 @@ async def restore_version( ) updated_prompt._dataset_version = dataset_version_resource return updated_prompt + + async def update( + self, + *, + prompt_id: str, + prompt: types.PromptOrDict, + config: Optional[types.UpdatePromptConfigOrDict] = None, + ) -> types.Prompt: + """Updates a prompt resource by creating a new prompt version. + + The prompt version is a snapshot of the prompt metadata at the time it is updated. + + This method waits for prompt version creation to be complete before returning. + + Args: + prompt_id: The id of the Vertex Dataset resource to update. + prompt: A prompt object containing the updated prompt. + config: Optional configuration for updating the prompt. + + Returns: + A types.Prompt object representing the updated prompt with its associated + Dataset and DatasetVersionresources. + """ + if isinstance(prompt, dict): + prompt = types.Prompt(**prompt) + if isinstance(config, dict): + config = types.UpdatePromptConfig(**config) + elif not config: + config = types.UpdatePromptConfig() + + _prompt_management_utils._raise_for_invalid_prompt(prompt) + + prompt_metadata = _prompt_management_utils._create_dataset_metadata_from_prompt( + prompt, + variables=( + prompt.prompt_data.variables + if prompt.prompt_data and prompt.prompt_data.variables + else None + ), + ) + + # Step 1: Update the dataset resource for the prompt. + updated_dataset_resource = await self._update_dataset_resource( + dataset_id=prompt_id, + display_name=( + config.prompt_display_name + if config and config.prompt_display_name + else None + ), + metadata=prompt_metadata, + model_reference=prompt.prompt_data.model, + ) + + # Step 2: Get the updated dataset resource. This will return the Dataset with all fields populated. + updated_dataset_resource = await self._get_dataset_resource( + name=updated_dataset_resource.name.split("/")[-1], + ) + + updated_prompt = _prompt_management_utils._create_prompt_from_dataset_metadata( + updated_dataset_resource, + ) + updated_prompt._dataset = updated_dataset_resource + + # Step 3: Create a DatasetVersion for the prompt which will be a snapshot of the updated Dataset and wait for the operation to complete. + create_dataset_version_operation = await self._create_dataset_version_resource( + dataset_name=updated_prompt.prompt_id, + display_name=( + config.version_display_name + if config and config.version_display_name + else f"prompt_version_{time.strftime('%Y%m%d-%H%M%S')}" + ), + ) + dataset_version_resource_name = await self._wait_for_operation( + operation=create_dataset_version_operation, + timeout=config.timeout if config else 90, + ) + + # Step 4: Get the dataset version resource and return it with the prompt + dataset_version_resource = await self._get_dataset_version_resource( + dataset_id=updated_prompt.prompt_id, + dataset_version_id=dataset_version_resource_name.split("/")[-1], + ) + updated_prompt._dataset_version = dataset_version_resource + + return updated_prompt diff --git a/vertexai/_genai/types/__init__.py b/vertexai/_genai/types/__init__.py index 735e567dc1..cf9f53637a 100644 --- a/vertexai/_genai/types/__init__.py +++ b/vertexai/_genai/types/__init__.py @@ -964,6 +964,9 @@ from .common import UpdateMultimodalDatasetConfig from .common import UpdateMultimodalDatasetConfigDict from .common import UpdateMultimodalDatasetConfigOrDict +from .common import UpdatePromptConfig +from .common import UpdatePromptConfigDict +from .common import UpdatePromptConfigOrDict from .common import VertexBaseConfig from .common import VertexBaseConfigDict from .common import VertexBaseConfigOrDict @@ -1815,6 +1818,9 @@ "GetPromptConfig", "GetPromptConfigDict", "GetPromptConfigOrDict", + "UpdatePromptConfig", + "UpdatePromptConfigDict", + "UpdatePromptConfigOrDict", "PromptRef", "PromptRefDict", "PromptRefOrDict", diff --git a/vertexai/_genai/types/common.py b/vertexai/_genai/types/common.py index 3e6622acf4..8472c49ed5 100644 --- a/vertexai/_genai/types/common.py +++ b/vertexai/_genai/types/common.py @@ -13420,7 +13420,7 @@ def assemble_contents(self) -> list[genai_types.Content]: break if not has_placeholders: - return [genai_types.Content(parts=parts_to_process)] + return [genai_types.Content(parts=parts_to_process, role="user")] all_rendered_parts: list[genai_types.Part] = [] @@ -13503,6 +13503,10 @@ class CreatePromptConfig(_common.BaseModel): default=None, description="""The display name for the prompt. If not set, a default name with a timestamp will be used.""", ) + version_display_name: Optional[str] = Field( + default=None, + description="""The display name for the version of the prompt. If not set, a default name with a timestamp will be used.""", + ) timeout: Optional[int] = Field( default=90, description="""The timeout for the create_version request in seconds. If not set, the default timeout is 90 seconds.""", @@ -13522,6 +13526,9 @@ class CreatePromptConfigDict(TypedDict, total=False): prompt_display_name: Optional[str] """The display name for the prompt. If not set, a default name with a timestamp will be used.""" + version_display_name: Optional[str] + """The display name for the version of the prompt. If not set, a default name with a timestamp will be used.""" + timeout: Optional[int] """The timeout for the create_version request in seconds. If not set, the default timeout is 90 seconds.""" @@ -13584,6 +13591,45 @@ class GetPromptConfigDict(TypedDict, total=False): GetPromptConfigOrDict = Union[GetPromptConfig, GetPromptConfigDict] +class UpdatePromptConfig(_common.BaseModel): + """Config for creating a prompt.""" + + http_options: Optional[genai_types.HttpOptions] = Field( + default=None, description="""Used to override HTTP request options.""" + ) + prompt_display_name: Optional[str] = Field( + default=None, + description="""The display name for the prompt. If not set, a default name with a timestamp will be used.""", + ) + version_display_name: Optional[str] = Field( + default=None, + description="""The display name for the version of the prompt. If not set, a default name with a timestamp will be used.""", + ) + timeout: Optional[int] = Field( + default=90, + description="""The timeout for the create_version request in seconds. If not set, the default timeout is 90 seconds.""", + ) + + +class UpdatePromptConfigDict(TypedDict, total=False): + """Config for creating a prompt.""" + + http_options: Optional[genai_types.HttpOptionsDict] + """Used to override HTTP request options.""" + + prompt_display_name: Optional[str] + """The display name for the prompt. If not set, a default name with a timestamp will be used.""" + + version_display_name: Optional[str] + """The display name for the version of the prompt. If not set, a default name with a timestamp will be used.""" + + timeout: Optional[int] + """The timeout for the create_version request in seconds. If not set, the default timeout is 90 seconds.""" + + +UpdatePromptConfigOrDict = Union[UpdatePromptConfig, UpdatePromptConfigDict] + + class PromptRef(_common.BaseModel): """Reference to a prompt."""