<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="discoveryengine_v1alpha.html">Discovery Engine API</a> . <a href="discoveryengine_v1alpha.projects.html">projects</a> . <a href="discoveryengine_v1alpha.projects.locations.html">locations</a> . <a href="discoveryengine_v1alpha.projects.locations.collections.html">collections</a> . <a href="discoveryengine_v1alpha.projects.locations.collections.engines.html">engines</a> . <a href="discoveryengine_v1alpha.projects.locations.collections.engines.widgetConfigs.html">widgetConfigs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(name, acceptCache=None, getWidgetConfigRequestOption_turnOffCollectionComponents=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a WidgetConfig.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Update a WidgetConfig.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, acceptCache=None, getWidgetConfigRequestOption_turnOffCollectionComponents=None, x__xgafv=None)</code>
  <pre>Gets a WidgetConfig.

Args:
  name: string, Required. Full WidgetConfig resource name. Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}/widgetConfigs/{widget_config_id}` (required)
  acceptCache: boolean, Optional. Whether it&#x27;s acceptable to load the widget config from cache. If set to true, recent changes on widget configs may take a few minutes to reflect on the end user&#x27;s view. It&#x27;s recommended to set to true for maturely developed widgets, as it improves widget performance. Set to false to see changes reflected in prod right away, if your widget is under development.
  getWidgetConfigRequestOption_turnOffCollectionComponents: boolean, Optional. Whether to turn off collection_components in WidgetConfig to reduce latency and data transmission.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # WidgetConfig captures configs at the Widget level.
  &quot;accessSettings&quot;: { # Describes widget access settings. # Will be used for all widget access settings seen in cloud console integration page. Replaces top deprecated top level properties.
    &quot;allowPublicAccess&quot;: True or False, # Whether public unauthenticated access is allowed.
    &quot;allowlistedDomains&quot;: [ # List of domains that are allowed to integrate the search widget.
      &quot;A String&quot;,
    ],
    &quot;enableWebApp&quot;: True or False, # Whether web app access is enabled.
    &quot;languageCode&quot;: &quot;A String&quot;, # Optional. Language code for user interface. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). If unset, the default language code is &quot;en-US&quot;.
    &quot;workforceIdentityPoolProvider&quot;: &quot;A String&quot;, # Optional. The workforce identity pool provider used to access the widget.
  },
  &quot;allowPublicAccess&quot;: True or False, # Whether allow no-auth integration with widget. If set true, public access to search or other solutions from widget is allowed without authenication token provided by customer hosted backend server.
  &quot;allowlistedDomains&quot;: [ # Allowlisted domains that can load this widget.
    &quot;A String&quot;,
  ],
  &quot;assistantSettings&quot;: { # Describes the assistant settings of the widget. # Optional. Output only. Describes the assistant settings of the widget.
    &quot;defaultWebGroundingToggleOff&quot;: True or False, # Output only. This field controls the default web grounding toggle for end users if `web_grounding_type` is set to `WEB_GROUNDING_TYPE_GOOGLE_SEARCH` or `WEB_GROUNDING_TYPE_ENTERPRISE_WEB_SEARCH`. By default, this field is set to false. If `web_grounding_type` is `WEB_GROUNDING_TYPE_GOOGLE_SEARCH` or `WEB_GROUNDING_TYPE_ENTERPRISE_WEB_SEARCH`, end users will have web grounding enabled by default on UI. If true, grounding toggle will be disabled by default on UI. End users can still enable web grounding in the UI if web grounding is enabled.
    &quot;disableLocationContext&quot;: True or False, # Optional. Output only. Whether to disable user location context.
    &quot;googleSearchGroundingEnabled&quot;: True or False, # Whether or not the Google search grounding toggle is shown. Deprecated. Use web_grounding_type instead.
    &quot;webGroundingType&quot;: &quot;A String&quot;, # Optional. The type of web grounding to use.
  },
  &quot;collectionComponents&quot;: [ # Output only. Collection components that lists all collections and child data stores associated with the widget config, those data sources can be used for filtering in widget service APIs, users can return results that from selected data sources.
    { # Read-only collection component that contains data store collections fields that may be used for filtering
      &quot;connectorIconLink&quot;: &quot;A String&quot;, # Output only. The icon link of the connector source.
      &quot;dataSource&quot;: &quot;A String&quot;, # The name of the data source, retrieved from `Collection.data_connector.data_source`.
      &quot;dataSourceDisplayName&quot;: &quot;A String&quot;, # Output only. The display name of the data source.
      &quot;dataStoreComponents&quot;: [ # For the data store collection, list of the children data stores.
        { # Read-only data store component that contains data stores fields that may be used for filtering, it&#x27;s the child of `CollectionComponent`.
          &quot;contentConfig&quot;: &quot;A String&quot;, # Output only. The content config of the data store.
          &quot;dataStoreConfigType&quot;: &quot;A String&quot;, # Output only. The type of the data store config.
          &quot;displayName&quot;: &quot;A String&quot;, # The display name of the data store.
          &quot;entityName&quot;: &quot;A String&quot;, # The name of the entity, retrieved from `Collection.data_connector.entities.entityName`.
          &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
          &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
          &quot;workspaceType&quot;: &quot;A String&quot;, # Output only. Workspace Source Types for workspace data, retrieved from `DataStore.workspace_config.type`.
        },
      ],
      &quot;displayName&quot;: &quot;A String&quot;, # The display name of the collection.
      &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the collection, used for widget service. For now it refers to collection_id, in the future we will migrate the field to encrypted collection name UUID.
      &quot;name&quot;: &quot;A String&quot;, # The name of the collection. It should be collection resource name. Format: `projects/{project}/locations/{location}/collections/{collection_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
    },
  ],
  &quot;configId&quot;: &quot;A String&quot;, # Output only. Unique obfuscated identifier of a WidgetConfig.
  &quot;contentSearchSpec&quot;: { # A specification for configuring the behavior of content search. # The content search spec that configs the desired behavior of content search.
    &quot;chunkSpec&quot;: { # Specifies the chunk spec to be returned from the search response. Only available if the SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS # Specifies the chunk spec to be returned from the search response. Only available if the SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS
      &quot;numNextChunks&quot;: 42, # The number of next chunks to be returned of the current chunk. The maximum allowed value is 3. If not specified, no next chunks will be returned.
      &quot;numPreviousChunks&quot;: 42, # The number of previous chunks to be returned of the current chunk. The maximum allowed value is 3. If not specified, no previous chunks will be returned.
    },
    &quot;extractiveContentSpec&quot;: { # A specification for configuring the extractive content in a search response. # If there is no extractive_content_spec provided, there will be no extractive answer in the search response.
      &quot;maxExtractiveAnswerCount&quot;: 42, # The maximum number of extractive answers returned in each search result. An extractive answer is a verbatim answer extracted from the original document, which provides a precise and contextually relevant answer to the search query. If the number of matching answers is less than the `max_extractive_answer_count`, return all of the answers. Otherwise, return the `max_extractive_answer_count`. At most five answers are returned for each SearchResult.
      &quot;maxExtractiveSegmentCount&quot;: 42, # The max number of extractive segments returned in each search result. Only applied if the DataStore is set to DataStore.ContentConfig.CONTENT_REQUIRED or DataStore.solution_types is SOLUTION_TYPE_CHAT. An extractive segment is a text segment extracted from the original document that is relevant to the search query, and, in general, more verbose than an extractive answer. The segment could then be used as input for LLMs to generate summaries and answers. If the number of matching segments is less than `max_extractive_segment_count`, return all of the segments. Otherwise, return the `max_extractive_segment_count`.
      &quot;numNextSegments&quot;: 42, # Return at most `num_next_segments` segments after each selected segments.
      &quot;numPreviousSegments&quot;: 42, # Specifies whether to also include the adjacent from each selected segments. Return at most `num_previous_segments` segments before each selected segments.
      &quot;returnExtractiveSegmentScore&quot;: True or False, # Specifies whether to return the confidence score from the extractive segments in each search result. This feature is available only for new or allowlisted data stores. To allowlist your data store, contact your Customer Engineer. The default value is `false`.
    },
    &quot;searchResultMode&quot;: &quot;A String&quot;, # Specifies the search result mode. If unspecified, the search result mode defaults to `DOCUMENTS`.
    &quot;snippetSpec&quot;: { # A specification for configuring snippets in a search response. # If `snippetSpec` is not specified, snippets are not included in the search response.
      &quot;maxSnippetCount&quot;: 42, # [DEPRECATED] This field is deprecated. To control snippet return, use `return_snippet` field. For backwards compatibility, we will return snippet if max_snippet_count &gt; 0.
      &quot;referenceOnly&quot;: True or False, # [DEPRECATED] This field is deprecated and will have no affect on the snippet.
      &quot;returnSnippet&quot;: True or False, # If `true`, then return snippet. If no snippet can be generated, we return &quot;No snippet is available for this page.&quot; A `snippet_status` with `SUCCESS` or `NO_SNIPPET_AVAILABLE` will also be returned.
    },
    &quot;summarySpec&quot;: { # A specification for configuring a summary returned in a search response. # If `summarySpec` is not specified, summaries are not included in the search response.
      &quot;ignoreAdversarialQuery&quot;: True or False, # Specifies whether to filter out adversarial queries. The default value is `false`. Google employs search-query classification to detect adversarial queries. No summary is returned if the search query is classified as an adversarial query. For example, a user might ask a question regarding negative comments about the company or submit a query designed to generate unsafe, policy-violating output. If this field is set to `true`, we skip generating summaries for adversarial queries and return fallback messages instead.
      &quot;ignoreJailBreakingQuery&quot;: True or False, # Optional. Specifies whether to filter out jail-breaking queries. The default value is `false`. Google employs search-query classification to detect jail-breaking queries. No summary is returned if the search query is classified as a jail-breaking query. A user might add instructions to the query to change the tone, style, language, content of the answer, or ask the model to act as a different entity, e.g. &quot;Reply in the tone of a competing company&#x27;s CEO&quot;. If this field is set to `true`, we skip generating summaries for jail-breaking queries and return fallback messages instead.
      &quot;ignoreLowRelevantContent&quot;: True or False, # Specifies whether to filter out queries that have low relevance. The default value is `false`. If this field is set to `false`, all search results are used regardless of relevance to generate answers. If set to `true`, only queries with high relevance search results will generate answers.
      &quot;ignoreNonSummarySeekingQuery&quot;: True or False, # Specifies whether to filter out queries that are not summary-seeking. The default value is `false`. Google employs search-query classification to detect summary-seeking queries. No summary is returned if the search query is classified as a non-summary seeking query. For example, `why is the sky blue` and `Who is the best soccer player in the world?` are summary-seeking queries, but `SFO airport` and `world cup 2026` are not. They are most likely navigational queries. If this field is set to `true`, we skip generating summaries for non-summary seeking queries and return fallback messages instead.
      &quot;includeCitations&quot;: True or False, # Specifies whether to include citations in the summary. The default value is `false`. When this field is set to `true`, summaries include in-line citation numbers. Example summary including citations: BigQuery is Google Cloud&#x27;s fully managed and completely serverless enterprise data warehouse [1]. BigQuery supports all data types, works across clouds, and has built-in machine learning and business intelligence, all within a unified platform [2, 3]. The citation numbers refer to the returned search results and are 1-indexed. For example, [1] means that the sentence is attributed to the first search result. [2, 3] means that the sentence is attributed to both the second and third search results.
      &quot;languageCode&quot;: &quot;A String&quot;, # Language code for Summary. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Note: This is an experimental feature.
      &quot;modelPromptSpec&quot;: { # Specification of the prompt to use with the model. # If specified, the spec will be used to modify the prompt provided to the LLM.
        &quot;preamble&quot;: &quot;A String&quot;, # Text at the beginning of the prompt that instructs the assistant. Examples are available in the user guide.
      },
      &quot;modelSpec&quot;: { # Specification of the model. # If specified, the spec will be used to modify the model specification provided to the LLM.
        &quot;version&quot;: &quot;A String&quot;, # The model version used to generate the summary. Supported values are: * `stable`: string. Default value when no value is specified. Uses a generally available, fine-tuned model. For more information, see [Answer generation model versions and lifecycle](https://cloud.google.com/generative-ai-app-builder/docs/answer-generation-models). * `preview`: string. (Public preview) Uses a preview model. For more information, see [Answer generation model versions and lifecycle](https://cloud.google.com/generative-ai-app-builder/docs/answer-generation-models).
      },
      &quot;multimodalSpec&quot;: { # Multimodal specification: Will return an image from specified source. If multiple sources are specified, the pick is a quality based decision. # Optional. Multimodal specification.
        &quot;imageSource&quot;: &quot;A String&quot;, # Optional. Source of image returned in the answer.
      },
      &quot;summaryResultCount&quot;: 42, # The number of top results to generate the summary from. If the number of results returned is less than `summaryResultCount`, the summary is generated from all of the results. At most 10 results for documents mode, or 50 for chunks mode, can be used to generate a summary. The chunks mode is used when SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS.
      &quot;useSemanticChunks&quot;: True or False, # If true, answer will be generated from most relevant chunks from top search results. This feature will improve summary quality. Note that with this feature enabled, not all top search results will be referenced and included in the reference list, so the citation source index only points to the search results listed in the reference list.
    },
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp the WidgetConfig was created.
  &quot;customerProvidedConfig&quot;: { # Customer provided configurations. # Optional. Output only. Describes the customer related configurations, currently only used for government customers. This field cannot be modified after project onboarding.
    &quot;customerType&quot;: &quot;A String&quot;, # Customer type.
  },
  &quot;dataStoreType&quot;: &quot;A String&quot;, # Output only. The type of the parent data store.
  &quot;dataStoreUiConfigs&quot;: [ # Configurable UI configurations per data store.
    { # UI component configuration for data store.
      &quot;facetField&quot;: [ # Facet fields that store the mapping of fields to end user widget appearance.
        { # Facet fields that store the mapping of fields to end user widget appearance.
          &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
          &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
        },
      ],
      &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
        &quot;a_key&quot;: { # Facet field that maps to a UI Component.
          &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
            &quot;A String&quot;,
          ],
          &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
          &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
        },
      },
      &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
      &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
    },
  ],
  &quot;defaultSearchRequestOrderBy&quot;: &quot;A String&quot;, # The default ordering for search results if specified. Used to set SearchRequest#order_by on applicable requests. https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1alpha/projects.locations.dataStores.servingConfigs/search#request-body
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human readable widget config display name. Used in Discovery UI. This field must be a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
  &quot;enableAutocomplete&quot;: True or False, # Whether or not to enable autocomplete.
  &quot;enableConversationalSearch&quot;: True or False, # Whether to allow conversational search (LLM, multi-turn) or not (non-LLM, single-turn).
  &quot;enablePrivateKnowledgeGraph&quot;: True or False, # Optional. Output only. Whether to enable private knowledge graph.
  &quot;enableQualityFeedback&quot;: True or False, # Turn on or off collecting the search result quality feedback from end users.
  &quot;enableResultScore&quot;: True or False, # Whether to show the result score.
  &quot;enableSafeSearch&quot;: True or False, # Whether to enable safe search.
  &quot;enableSearchAsYouType&quot;: True or False, # Whether to enable search-as-you-type behavior for the search widget
  &quot;enableSnippetResultSummary&quot;: True or False, # Turn on or off summary for each snippets result.
  &quot;enableSummarization&quot;: True or False, # Turn on or off summarization for the search response.
  &quot;enableWebApp&quot;: True or False, # Whether to enable standalone web app.
  &quot;facetField&quot;: [ # The configuration and appearance of facets in the end user view.
    { # Facet fields that store the mapping of fields to end user widget appearance.
      &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
      &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
    },
  ],
  &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
    &quot;a_key&quot;: { # Facet field that maps to a UI Component.
      &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
        &quot;A String&quot;,
      ],
      &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
      &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
    },
  },
  &quot;geminiBundle&quot;: True or False, # Output only. Whether the subscription is gemini bundle or not.
  &quot;homepageSetting&quot;: { # Describes the homepage setting of the widget. It includes all homepage related settings and configurations, such as shortcuts. # Optional. Describes the homepage settings of the widget.
    &quot;shortcuts&quot;: [ # Optional. The shortcuts to display on the homepage.
      { # Describes an entity of shortcut (aka pinned content) on the homepage. The home page will render these shortcuts in the same order as what the API returns. If a customer wants to reorder or remove a shortcut, the UI should always provide the new full list of shortcuts.
        &quot;destinationUri&quot;: &quot;A String&quot;, # Optional. Destination URL of shortcut.
        &quot;icon&quot;: { # Options to store an image. # Optional. Icon URL of shortcut.
          &quot;url&quot;: &quot;A String&quot;, # Image URL.
        },
        &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the shortcut.
      },
    ],
  },
  &quot;industryVertical&quot;: &quot;A String&quot;, # Output only. The industry vertical that the WidgetConfig registers. The WidgetConfig industry vertical is based on the associated Engine.
  &quot;llmEnabled&quot;: True or False, # Output only. Whether LLM is enabled in the corresponding data store.
  &quot;minimumDataTermAccepted&quot;: True or False, # Output only. Whether the customer accepted data use terms.
  &quot;name&quot;: &quot;A String&quot;, # Immutable. The full resource name of the widget config. Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}/widgetConfigs/{widget_config_id}`. This field must be a UTF-8 encoded string with a length limit of 1024 characters.
  &quot;resultDisplayType&quot;: &quot;A String&quot;, # The type of snippet to display in UCS widget. - RESULT_DISPLAY_TYPE_UNSPECIFIED for existing users. - SNIPPET for new non-enterprise search users. - EXTRACTIVE_ANSWER for new enterprise search users.
  &quot;solutionType&quot;: &quot;A String&quot;, # Required. Immutable. Specifies the solution type that this WidgetConfig can be used for.
  &quot;uiBranding&quot;: { # Describes widget UI branding settings. # Describes search widget UI branding settings, such as the widget title, logo, favicons, and colors.
    &quot;logo&quot;: { # Options to store an image. # Logo image.
      &quot;url&quot;: &quot;A String&quot;, # Image URL.
    },
  },
  &quot;uiSettings&quot;: { # Describes general widget (or web app) UI settings as seen in the cloud console UI configuration page. # Describes general widget search settings as seen in cloud console widget configuration page. Replaces top deprecated top level properties.
    &quot;dataStoreUiConfigs&quot;: [ # Per data store configuration.
      { # UI component configuration for data store.
        &quot;facetField&quot;: [ # Facet fields that store the mapping of fields to end user widget appearance.
          { # Facet fields that store the mapping of fields to end user widget appearance.
            &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
            &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
          },
        ],
        &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
          &quot;a_key&quot;: { # Facet field that maps to a UI Component.
            &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
              &quot;A String&quot;,
            ],
            &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
            &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
          },
        },
        &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
        &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
      },
    ],
    &quot;defaultSearchRequestOrderBy&quot;: &quot;A String&quot;, # The default ordering for search results if specified. Used to set SearchRequest#order_by on applicable requests. https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1alpha/projects.locations.dataStores.servingConfigs/search#request-body
    &quot;disableUserEventsCollection&quot;: True or False, # If set to true, the widget will not collect user events.
    &quot;enableAutocomplete&quot;: True or False, # Whether or not to enable autocomplete.
    &quot;enableCreateAgentButton&quot;: True or False, # Optional. If set to true, the widget will enable the create agent button.
    &quot;enablePeopleSearch&quot;: True or False, # Optional. If set to true, the widget will enable people search.
    &quot;enableQualityFeedback&quot;: True or False, # Turn on or off collecting the search result quality feedback from end users.
    &quot;enableSafeSearch&quot;: True or False, # Whether to enable safe search.
    &quot;enableSearchAsYouType&quot;: True or False, # Whether to enable search-as-you-type behavior for the search widget.
    &quot;enableVisualContentSummary&quot;: True or False, # If set to true, the widget will enable visual content summary on applicable search requests. Only used by healthcare search.
    &quot;features&quot;: { # Output only. Feature config for the engine to opt in or opt out of features. Supported keys: * `agent-gallery` * `no-code-agent-builder` * `prompt-gallery` * `model-selector` * `notebook-lm` * `people-search` * `people-search-org-chart` * `bi-directional-audio` * `feedback` * `session-sharing` * `personalization-memory` * `disable-agent-sharing` * `disable-image-generation` * `disable-video-generation` * `disable-onedrive-upload` * `disable-talk-to-content` * `disable-google-drive-upload`
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;generativeAnswerConfig&quot;: { # Describes configuration for generative answer. # Describes generative answer configuration.
      &quot;disableRelatedQuestions&quot;: True or False, # Whether generated answer contains suggested related questions.
      &quot;ignoreAdversarialQuery&quot;: True or False, # Optional. Specifies whether to filter out queries that are adversarial.
      &quot;ignoreLowRelevantContent&quot;: True or False, # Optional. Specifies whether to filter out queries that are not relevant to the content.
      &quot;ignoreNonAnswerSeekingQuery&quot;: True or False, # Optional. Specifies whether to filter out queries that are not answer-seeking. The default value is `false`. No answer is returned if the search query is classified as a non-answer seeking query. If this field is set to `true`, we skip generating answers for non-answer seeking queries and return fallback messages instead.
      &quot;imageSource&quot;: &quot;A String&quot;, # Optional. Source of image returned in the answer.
      &quot;languageCode&quot;: &quot;A String&quot;, # Language code for Summary. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Note: This is an experimental feature.
      &quot;maxRephraseSteps&quot;: 42, # Max rephrase steps. The max number is 5 steps. If not set or set to &lt; 1, it will be set to 1 by default.
      &quot;modelPromptPreamble&quot;: &quot;A String&quot;, # Text at the beginning of the prompt that instructs the model that generates the answer.
      &quot;modelVersion&quot;: &quot;A String&quot;, # The model version used to generate the answer.
      &quot;resultCount&quot;: 42, # The number of top results to generate the answer from. Up to 10.
    },
    &quot;interactionType&quot;: &quot;A String&quot;, # Describes widget (or web app) interaction type
    &quot;resultDescriptionType&quot;: &quot;A String&quot;, # Controls whether result extract is display and how (snippet or extractive answer). Default to no result if unspecified.
    &quot;searchAddonSpec&quot;: { # SearchAddonSpec is used to disable add-ons for search. By default, if this field is not specified, add-ons are enabled wherever applicable. # Optional. SearchAddonSpec is used to disable add-ons for search. This field is only supported for search requests.
      &quot;generativeAnswerAddOnDisabled&quot;: True or False, # Optional. If true, generative answer add-on is disabled. Generative answer add-on includes natural language to filters and simple answers.
      &quot;kpiPersonalizationAddOnDisabled&quot;: True or False, # Optional. If true, disables event re-ranking and personalization to optimize KPIs &amp; personalize results.
      &quot;semanticAddOnDisabled&quot;: True or False, # Optional. If true, semantic add-on is disabled. Semantic add-on includes embeddings and jetstream.
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Timestamp the WidgetConfig was updated.
}</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Update a WidgetConfig.

Args:
  name: string, Immutable. The full resource name of the widget config. Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}/widgetConfigs/{widget_config_id}`. This field must be a UTF-8 encoded string with a length limit of 1024 characters. (required)
  body: object, The request body.
    The object takes the form of:

{ # WidgetConfig captures configs at the Widget level.
  &quot;accessSettings&quot;: { # Describes widget access settings. # Will be used for all widget access settings seen in cloud console integration page. Replaces top deprecated top level properties.
    &quot;allowPublicAccess&quot;: True or False, # Whether public unauthenticated access is allowed.
    &quot;allowlistedDomains&quot;: [ # List of domains that are allowed to integrate the search widget.
      &quot;A String&quot;,
    ],
    &quot;enableWebApp&quot;: True or False, # Whether web app access is enabled.
    &quot;languageCode&quot;: &quot;A String&quot;, # Optional. Language code for user interface. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). If unset, the default language code is &quot;en-US&quot;.
    &quot;workforceIdentityPoolProvider&quot;: &quot;A String&quot;, # Optional. The workforce identity pool provider used to access the widget.
  },
  &quot;allowPublicAccess&quot;: True or False, # Whether allow no-auth integration with widget. If set true, public access to search or other solutions from widget is allowed without authenication token provided by customer hosted backend server.
  &quot;allowlistedDomains&quot;: [ # Allowlisted domains that can load this widget.
    &quot;A String&quot;,
  ],
  &quot;assistantSettings&quot;: { # Describes the assistant settings of the widget. # Optional. Output only. Describes the assistant settings of the widget.
    &quot;defaultWebGroundingToggleOff&quot;: True or False, # Output only. This field controls the default web grounding toggle for end users if `web_grounding_type` is set to `WEB_GROUNDING_TYPE_GOOGLE_SEARCH` or `WEB_GROUNDING_TYPE_ENTERPRISE_WEB_SEARCH`. By default, this field is set to false. If `web_grounding_type` is `WEB_GROUNDING_TYPE_GOOGLE_SEARCH` or `WEB_GROUNDING_TYPE_ENTERPRISE_WEB_SEARCH`, end users will have web grounding enabled by default on UI. If true, grounding toggle will be disabled by default on UI. End users can still enable web grounding in the UI if web grounding is enabled.
    &quot;disableLocationContext&quot;: True or False, # Optional. Output only. Whether to disable user location context.
    &quot;googleSearchGroundingEnabled&quot;: True or False, # Whether or not the Google search grounding toggle is shown. Deprecated. Use web_grounding_type instead.
    &quot;webGroundingType&quot;: &quot;A String&quot;, # Optional. The type of web grounding to use.
  },
  &quot;collectionComponents&quot;: [ # Output only. Collection components that lists all collections and child data stores associated with the widget config, those data sources can be used for filtering in widget service APIs, users can return results that from selected data sources.
    { # Read-only collection component that contains data store collections fields that may be used for filtering
      &quot;connectorIconLink&quot;: &quot;A String&quot;, # Output only. The icon link of the connector source.
      &quot;dataSource&quot;: &quot;A String&quot;, # The name of the data source, retrieved from `Collection.data_connector.data_source`.
      &quot;dataSourceDisplayName&quot;: &quot;A String&quot;, # Output only. The display name of the data source.
      &quot;dataStoreComponents&quot;: [ # For the data store collection, list of the children data stores.
        { # Read-only data store component that contains data stores fields that may be used for filtering, it&#x27;s the child of `CollectionComponent`.
          &quot;contentConfig&quot;: &quot;A String&quot;, # Output only. The content config of the data store.
          &quot;dataStoreConfigType&quot;: &quot;A String&quot;, # Output only. The type of the data store config.
          &quot;displayName&quot;: &quot;A String&quot;, # The display name of the data store.
          &quot;entityName&quot;: &quot;A String&quot;, # The name of the entity, retrieved from `Collection.data_connector.entities.entityName`.
          &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
          &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
          &quot;workspaceType&quot;: &quot;A String&quot;, # Output only. Workspace Source Types for workspace data, retrieved from `DataStore.workspace_config.type`.
        },
      ],
      &quot;displayName&quot;: &quot;A String&quot;, # The display name of the collection.
      &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the collection, used for widget service. For now it refers to collection_id, in the future we will migrate the field to encrypted collection name UUID.
      &quot;name&quot;: &quot;A String&quot;, # The name of the collection. It should be collection resource name. Format: `projects/{project}/locations/{location}/collections/{collection_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
    },
  ],
  &quot;configId&quot;: &quot;A String&quot;, # Output only. Unique obfuscated identifier of a WidgetConfig.
  &quot;contentSearchSpec&quot;: { # A specification for configuring the behavior of content search. # The content search spec that configs the desired behavior of content search.
    &quot;chunkSpec&quot;: { # Specifies the chunk spec to be returned from the search response. Only available if the SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS # Specifies the chunk spec to be returned from the search response. Only available if the SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS
      &quot;numNextChunks&quot;: 42, # The number of next chunks to be returned of the current chunk. The maximum allowed value is 3. If not specified, no next chunks will be returned.
      &quot;numPreviousChunks&quot;: 42, # The number of previous chunks to be returned of the current chunk. The maximum allowed value is 3. If not specified, no previous chunks will be returned.
    },
    &quot;extractiveContentSpec&quot;: { # A specification for configuring the extractive content in a search response. # If there is no extractive_content_spec provided, there will be no extractive answer in the search response.
      &quot;maxExtractiveAnswerCount&quot;: 42, # The maximum number of extractive answers returned in each search result. An extractive answer is a verbatim answer extracted from the original document, which provides a precise and contextually relevant answer to the search query. If the number of matching answers is less than the `max_extractive_answer_count`, return all of the answers. Otherwise, return the `max_extractive_answer_count`. At most five answers are returned for each SearchResult.
      &quot;maxExtractiveSegmentCount&quot;: 42, # The max number of extractive segments returned in each search result. Only applied if the DataStore is set to DataStore.ContentConfig.CONTENT_REQUIRED or DataStore.solution_types is SOLUTION_TYPE_CHAT. An extractive segment is a text segment extracted from the original document that is relevant to the search query, and, in general, more verbose than an extractive answer. The segment could then be used as input for LLMs to generate summaries and answers. If the number of matching segments is less than `max_extractive_segment_count`, return all of the segments. Otherwise, return the `max_extractive_segment_count`.
      &quot;numNextSegments&quot;: 42, # Return at most `num_next_segments` segments after each selected segments.
      &quot;numPreviousSegments&quot;: 42, # Specifies whether to also include the adjacent from each selected segments. Return at most `num_previous_segments` segments before each selected segments.
      &quot;returnExtractiveSegmentScore&quot;: True or False, # Specifies whether to return the confidence score from the extractive segments in each search result. This feature is available only for new or allowlisted data stores. To allowlist your data store, contact your Customer Engineer. The default value is `false`.
    },
    &quot;searchResultMode&quot;: &quot;A String&quot;, # Specifies the search result mode. If unspecified, the search result mode defaults to `DOCUMENTS`.
    &quot;snippetSpec&quot;: { # A specification for configuring snippets in a search response. # If `snippetSpec` is not specified, snippets are not included in the search response.
      &quot;maxSnippetCount&quot;: 42, # [DEPRECATED] This field is deprecated. To control snippet return, use `return_snippet` field. For backwards compatibility, we will return snippet if max_snippet_count &gt; 0.
      &quot;referenceOnly&quot;: True or False, # [DEPRECATED] This field is deprecated and will have no affect on the snippet.
      &quot;returnSnippet&quot;: True or False, # If `true`, then return snippet. If no snippet can be generated, we return &quot;No snippet is available for this page.&quot; A `snippet_status` with `SUCCESS` or `NO_SNIPPET_AVAILABLE` will also be returned.
    },
    &quot;summarySpec&quot;: { # A specification for configuring a summary returned in a search response. # If `summarySpec` is not specified, summaries are not included in the search response.
      &quot;ignoreAdversarialQuery&quot;: True or False, # Specifies whether to filter out adversarial queries. The default value is `false`. Google employs search-query classification to detect adversarial queries. No summary is returned if the search query is classified as an adversarial query. For example, a user might ask a question regarding negative comments about the company or submit a query designed to generate unsafe, policy-violating output. If this field is set to `true`, we skip generating summaries for adversarial queries and return fallback messages instead.
      &quot;ignoreJailBreakingQuery&quot;: True or False, # Optional. Specifies whether to filter out jail-breaking queries. The default value is `false`. Google employs search-query classification to detect jail-breaking queries. No summary is returned if the search query is classified as a jail-breaking query. A user might add instructions to the query to change the tone, style, language, content of the answer, or ask the model to act as a different entity, e.g. &quot;Reply in the tone of a competing company&#x27;s CEO&quot;. If this field is set to `true`, we skip generating summaries for jail-breaking queries and return fallback messages instead.
      &quot;ignoreLowRelevantContent&quot;: True or False, # Specifies whether to filter out queries that have low relevance. The default value is `false`. If this field is set to `false`, all search results are used regardless of relevance to generate answers. If set to `true`, only queries with high relevance search results will generate answers.
      &quot;ignoreNonSummarySeekingQuery&quot;: True or False, # Specifies whether to filter out queries that are not summary-seeking. The default value is `false`. Google employs search-query classification to detect summary-seeking queries. No summary is returned if the search query is classified as a non-summary seeking query. For example, `why is the sky blue` and `Who is the best soccer player in the world?` are summary-seeking queries, but `SFO airport` and `world cup 2026` are not. They are most likely navigational queries. If this field is set to `true`, we skip generating summaries for non-summary seeking queries and return fallback messages instead.
      &quot;includeCitations&quot;: True or False, # Specifies whether to include citations in the summary. The default value is `false`. When this field is set to `true`, summaries include in-line citation numbers. Example summary including citations: BigQuery is Google Cloud&#x27;s fully managed and completely serverless enterprise data warehouse [1]. BigQuery supports all data types, works across clouds, and has built-in machine learning and business intelligence, all within a unified platform [2, 3]. The citation numbers refer to the returned search results and are 1-indexed. For example, [1] means that the sentence is attributed to the first search result. [2, 3] means that the sentence is attributed to both the second and third search results.
      &quot;languageCode&quot;: &quot;A String&quot;, # Language code for Summary. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Note: This is an experimental feature.
      &quot;modelPromptSpec&quot;: { # Specification of the prompt to use with the model. # If specified, the spec will be used to modify the prompt provided to the LLM.
        &quot;preamble&quot;: &quot;A String&quot;, # Text at the beginning of the prompt that instructs the assistant. Examples are available in the user guide.
      },
      &quot;modelSpec&quot;: { # Specification of the model. # If specified, the spec will be used to modify the model specification provided to the LLM.
        &quot;version&quot;: &quot;A String&quot;, # The model version used to generate the summary. Supported values are: * `stable`: string. Default value when no value is specified. Uses a generally available, fine-tuned model. For more information, see [Answer generation model versions and lifecycle](https://cloud.google.com/generative-ai-app-builder/docs/answer-generation-models). * `preview`: string. (Public preview) Uses a preview model. For more information, see [Answer generation model versions and lifecycle](https://cloud.google.com/generative-ai-app-builder/docs/answer-generation-models).
      },
      &quot;multimodalSpec&quot;: { # Multimodal specification: Will return an image from specified source. If multiple sources are specified, the pick is a quality based decision. # Optional. Multimodal specification.
        &quot;imageSource&quot;: &quot;A String&quot;, # Optional. Source of image returned in the answer.
      },
      &quot;summaryResultCount&quot;: 42, # The number of top results to generate the summary from. If the number of results returned is less than `summaryResultCount`, the summary is generated from all of the results. At most 10 results for documents mode, or 50 for chunks mode, can be used to generate a summary. The chunks mode is used when SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS.
      &quot;useSemanticChunks&quot;: True or False, # If true, answer will be generated from most relevant chunks from top search results. This feature will improve summary quality. Note that with this feature enabled, not all top search results will be referenced and included in the reference list, so the citation source index only points to the search results listed in the reference list.
    },
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp the WidgetConfig was created.
  &quot;customerProvidedConfig&quot;: { # Customer provided configurations. # Optional. Output only. Describes the customer related configurations, currently only used for government customers. This field cannot be modified after project onboarding.
    &quot;customerType&quot;: &quot;A String&quot;, # Customer type.
  },
  &quot;dataStoreType&quot;: &quot;A String&quot;, # Output only. The type of the parent data store.
  &quot;dataStoreUiConfigs&quot;: [ # Configurable UI configurations per data store.
    { # UI component configuration for data store.
      &quot;facetField&quot;: [ # Facet fields that store the mapping of fields to end user widget appearance.
        { # Facet fields that store the mapping of fields to end user widget appearance.
          &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
          &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
        },
      ],
      &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
        &quot;a_key&quot;: { # Facet field that maps to a UI Component.
          &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
            &quot;A String&quot;,
          ],
          &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
          &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
        },
      },
      &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
      &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
    },
  ],
  &quot;defaultSearchRequestOrderBy&quot;: &quot;A String&quot;, # The default ordering for search results if specified. Used to set SearchRequest#order_by on applicable requests. https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1alpha/projects.locations.dataStores.servingConfigs/search#request-body
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human readable widget config display name. Used in Discovery UI. This field must be a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
  &quot;enableAutocomplete&quot;: True or False, # Whether or not to enable autocomplete.
  &quot;enableConversationalSearch&quot;: True or False, # Whether to allow conversational search (LLM, multi-turn) or not (non-LLM, single-turn).
  &quot;enablePrivateKnowledgeGraph&quot;: True or False, # Optional. Output only. Whether to enable private knowledge graph.
  &quot;enableQualityFeedback&quot;: True or False, # Turn on or off collecting the search result quality feedback from end users.
  &quot;enableResultScore&quot;: True or False, # Whether to show the result score.
  &quot;enableSafeSearch&quot;: True or False, # Whether to enable safe search.
  &quot;enableSearchAsYouType&quot;: True or False, # Whether to enable search-as-you-type behavior for the search widget
  &quot;enableSnippetResultSummary&quot;: True or False, # Turn on or off summary for each snippets result.
  &quot;enableSummarization&quot;: True or False, # Turn on or off summarization for the search response.
  &quot;enableWebApp&quot;: True or False, # Whether to enable standalone web app.
  &quot;facetField&quot;: [ # The configuration and appearance of facets in the end user view.
    { # Facet fields that store the mapping of fields to end user widget appearance.
      &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
      &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
    },
  ],
  &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
    &quot;a_key&quot;: { # Facet field that maps to a UI Component.
      &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
        &quot;A String&quot;,
      ],
      &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
      &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
    },
  },
  &quot;geminiBundle&quot;: True or False, # Output only. Whether the subscription is gemini bundle or not.
  &quot;homepageSetting&quot;: { # Describes the homepage setting of the widget. It includes all homepage related settings and configurations, such as shortcuts. # Optional. Describes the homepage settings of the widget.
    &quot;shortcuts&quot;: [ # Optional. The shortcuts to display on the homepage.
      { # Describes an entity of shortcut (aka pinned content) on the homepage. The home page will render these shortcuts in the same order as what the API returns. If a customer wants to reorder or remove a shortcut, the UI should always provide the new full list of shortcuts.
        &quot;destinationUri&quot;: &quot;A String&quot;, # Optional. Destination URL of shortcut.
        &quot;icon&quot;: { # Options to store an image. # Optional. Icon URL of shortcut.
          &quot;url&quot;: &quot;A String&quot;, # Image URL.
        },
        &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the shortcut.
      },
    ],
  },
  &quot;industryVertical&quot;: &quot;A String&quot;, # Output only. The industry vertical that the WidgetConfig registers. The WidgetConfig industry vertical is based on the associated Engine.
  &quot;llmEnabled&quot;: True or False, # Output only. Whether LLM is enabled in the corresponding data store.
  &quot;minimumDataTermAccepted&quot;: True or False, # Output only. Whether the customer accepted data use terms.
  &quot;name&quot;: &quot;A String&quot;, # Immutable. The full resource name of the widget config. Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}/widgetConfigs/{widget_config_id}`. This field must be a UTF-8 encoded string with a length limit of 1024 characters.
  &quot;resultDisplayType&quot;: &quot;A String&quot;, # The type of snippet to display in UCS widget. - RESULT_DISPLAY_TYPE_UNSPECIFIED for existing users. - SNIPPET for new non-enterprise search users. - EXTRACTIVE_ANSWER for new enterprise search users.
  &quot;solutionType&quot;: &quot;A String&quot;, # Required. Immutable. Specifies the solution type that this WidgetConfig can be used for.
  &quot;uiBranding&quot;: { # Describes widget UI branding settings. # Describes search widget UI branding settings, such as the widget title, logo, favicons, and colors.
    &quot;logo&quot;: { # Options to store an image. # Logo image.
      &quot;url&quot;: &quot;A String&quot;, # Image URL.
    },
  },
  &quot;uiSettings&quot;: { # Describes general widget (or web app) UI settings as seen in the cloud console UI configuration page. # Describes general widget search settings as seen in cloud console widget configuration page. Replaces top deprecated top level properties.
    &quot;dataStoreUiConfigs&quot;: [ # Per data store configuration.
      { # UI component configuration for data store.
        &quot;facetField&quot;: [ # Facet fields that store the mapping of fields to end user widget appearance.
          { # Facet fields that store the mapping of fields to end user widget appearance.
            &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
            &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
          },
        ],
        &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
          &quot;a_key&quot;: { # Facet field that maps to a UI Component.
            &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
              &quot;A String&quot;,
            ],
            &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
            &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
          },
        },
        &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
        &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
      },
    ],
    &quot;defaultSearchRequestOrderBy&quot;: &quot;A String&quot;, # The default ordering for search results if specified. Used to set SearchRequest#order_by on applicable requests. https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1alpha/projects.locations.dataStores.servingConfigs/search#request-body
    &quot;disableUserEventsCollection&quot;: True or False, # If set to true, the widget will not collect user events.
    &quot;enableAutocomplete&quot;: True or False, # Whether or not to enable autocomplete.
    &quot;enableCreateAgentButton&quot;: True or False, # Optional. If set to true, the widget will enable the create agent button.
    &quot;enablePeopleSearch&quot;: True or False, # Optional. If set to true, the widget will enable people search.
    &quot;enableQualityFeedback&quot;: True or False, # Turn on or off collecting the search result quality feedback from end users.
    &quot;enableSafeSearch&quot;: True or False, # Whether to enable safe search.
    &quot;enableSearchAsYouType&quot;: True or False, # Whether to enable search-as-you-type behavior for the search widget.
    &quot;enableVisualContentSummary&quot;: True or False, # If set to true, the widget will enable visual content summary on applicable search requests. Only used by healthcare search.
    &quot;features&quot;: { # Output only. Feature config for the engine to opt in or opt out of features. Supported keys: * `agent-gallery` * `no-code-agent-builder` * `prompt-gallery` * `model-selector` * `notebook-lm` * `people-search` * `people-search-org-chart` * `bi-directional-audio` * `feedback` * `session-sharing` * `personalization-memory` * `disable-agent-sharing` * `disable-image-generation` * `disable-video-generation` * `disable-onedrive-upload` * `disable-talk-to-content` * `disable-google-drive-upload`
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;generativeAnswerConfig&quot;: { # Describes configuration for generative answer. # Describes generative answer configuration.
      &quot;disableRelatedQuestions&quot;: True or False, # Whether generated answer contains suggested related questions.
      &quot;ignoreAdversarialQuery&quot;: True or False, # Optional. Specifies whether to filter out queries that are adversarial.
      &quot;ignoreLowRelevantContent&quot;: True or False, # Optional. Specifies whether to filter out queries that are not relevant to the content.
      &quot;ignoreNonAnswerSeekingQuery&quot;: True or False, # Optional. Specifies whether to filter out queries that are not answer-seeking. The default value is `false`. No answer is returned if the search query is classified as a non-answer seeking query. If this field is set to `true`, we skip generating answers for non-answer seeking queries and return fallback messages instead.
      &quot;imageSource&quot;: &quot;A String&quot;, # Optional. Source of image returned in the answer.
      &quot;languageCode&quot;: &quot;A String&quot;, # Language code for Summary. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Note: This is an experimental feature.
      &quot;maxRephraseSteps&quot;: 42, # Max rephrase steps. The max number is 5 steps. If not set or set to &lt; 1, it will be set to 1 by default.
      &quot;modelPromptPreamble&quot;: &quot;A String&quot;, # Text at the beginning of the prompt that instructs the model that generates the answer.
      &quot;modelVersion&quot;: &quot;A String&quot;, # The model version used to generate the answer.
      &quot;resultCount&quot;: 42, # The number of top results to generate the answer from. Up to 10.
    },
    &quot;interactionType&quot;: &quot;A String&quot;, # Describes widget (or web app) interaction type
    &quot;resultDescriptionType&quot;: &quot;A String&quot;, # Controls whether result extract is display and how (snippet or extractive answer). Default to no result if unspecified.
    &quot;searchAddonSpec&quot;: { # SearchAddonSpec is used to disable add-ons for search. By default, if this field is not specified, add-ons are enabled wherever applicable. # Optional. SearchAddonSpec is used to disable add-ons for search. This field is only supported for search requests.
      &quot;generativeAnswerAddOnDisabled&quot;: True or False, # Optional. If true, generative answer add-on is disabled. Generative answer add-on includes natural language to filters and simple answers.
      &quot;kpiPersonalizationAddOnDisabled&quot;: True or False, # Optional. If true, disables event re-ranking and personalization to optimize KPIs &amp; personalize results.
      &quot;semanticAddOnDisabled&quot;: True or False, # Optional. If true, semantic add-on is disabled. Semantic add-on includes embeddings and jetstream.
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Timestamp the WidgetConfig was updated.
}

  updateMask: string, Indicates which fields in the provided WidgetConfig to update. The following are the only supported fields: * WidgetConfig.enable_autocomplete If not set, all supported fields are updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # WidgetConfig captures configs at the Widget level.
  &quot;accessSettings&quot;: { # Describes widget access settings. # Will be used for all widget access settings seen in cloud console integration page. Replaces top deprecated top level properties.
    &quot;allowPublicAccess&quot;: True or False, # Whether public unauthenticated access is allowed.
    &quot;allowlistedDomains&quot;: [ # List of domains that are allowed to integrate the search widget.
      &quot;A String&quot;,
    ],
    &quot;enableWebApp&quot;: True or False, # Whether web app access is enabled.
    &quot;languageCode&quot;: &quot;A String&quot;, # Optional. Language code for user interface. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). If unset, the default language code is &quot;en-US&quot;.
    &quot;workforceIdentityPoolProvider&quot;: &quot;A String&quot;, # Optional. The workforce identity pool provider used to access the widget.
  },
  &quot;allowPublicAccess&quot;: True or False, # Whether allow no-auth integration with widget. If set true, public access to search or other solutions from widget is allowed without authenication token provided by customer hosted backend server.
  &quot;allowlistedDomains&quot;: [ # Allowlisted domains that can load this widget.
    &quot;A String&quot;,
  ],
  &quot;assistantSettings&quot;: { # Describes the assistant settings of the widget. # Optional. Output only. Describes the assistant settings of the widget.
    &quot;defaultWebGroundingToggleOff&quot;: True or False, # Output only. This field controls the default web grounding toggle for end users if `web_grounding_type` is set to `WEB_GROUNDING_TYPE_GOOGLE_SEARCH` or `WEB_GROUNDING_TYPE_ENTERPRISE_WEB_SEARCH`. By default, this field is set to false. If `web_grounding_type` is `WEB_GROUNDING_TYPE_GOOGLE_SEARCH` or `WEB_GROUNDING_TYPE_ENTERPRISE_WEB_SEARCH`, end users will have web grounding enabled by default on UI. If true, grounding toggle will be disabled by default on UI. End users can still enable web grounding in the UI if web grounding is enabled.
    &quot;disableLocationContext&quot;: True or False, # Optional. Output only. Whether to disable user location context.
    &quot;googleSearchGroundingEnabled&quot;: True or False, # Whether or not the Google search grounding toggle is shown. Deprecated. Use web_grounding_type instead.
    &quot;webGroundingType&quot;: &quot;A String&quot;, # Optional. The type of web grounding to use.
  },
  &quot;collectionComponents&quot;: [ # Output only. Collection components that lists all collections and child data stores associated with the widget config, those data sources can be used for filtering in widget service APIs, users can return results that from selected data sources.
    { # Read-only collection component that contains data store collections fields that may be used for filtering
      &quot;connectorIconLink&quot;: &quot;A String&quot;, # Output only. The icon link of the connector source.
      &quot;dataSource&quot;: &quot;A String&quot;, # The name of the data source, retrieved from `Collection.data_connector.data_source`.
      &quot;dataSourceDisplayName&quot;: &quot;A String&quot;, # Output only. The display name of the data source.
      &quot;dataStoreComponents&quot;: [ # For the data store collection, list of the children data stores.
        { # Read-only data store component that contains data stores fields that may be used for filtering, it&#x27;s the child of `CollectionComponent`.
          &quot;contentConfig&quot;: &quot;A String&quot;, # Output only. The content config of the data store.
          &quot;dataStoreConfigType&quot;: &quot;A String&quot;, # Output only. The type of the data store config.
          &quot;displayName&quot;: &quot;A String&quot;, # The display name of the data store.
          &quot;entityName&quot;: &quot;A String&quot;, # The name of the entity, retrieved from `Collection.data_connector.entities.entityName`.
          &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
          &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
          &quot;workspaceType&quot;: &quot;A String&quot;, # Output only. Workspace Source Types for workspace data, retrieved from `DataStore.workspace_config.type`.
        },
      ],
      &quot;displayName&quot;: &quot;A String&quot;, # The display name of the collection.
      &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the collection, used for widget service. For now it refers to collection_id, in the future we will migrate the field to encrypted collection name UUID.
      &quot;name&quot;: &quot;A String&quot;, # The name of the collection. It should be collection resource name. Format: `projects/{project}/locations/{location}/collections/{collection_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
    },
  ],
  &quot;configId&quot;: &quot;A String&quot;, # Output only. Unique obfuscated identifier of a WidgetConfig.
  &quot;contentSearchSpec&quot;: { # A specification for configuring the behavior of content search. # The content search spec that configs the desired behavior of content search.
    &quot;chunkSpec&quot;: { # Specifies the chunk spec to be returned from the search response. Only available if the SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS # Specifies the chunk spec to be returned from the search response. Only available if the SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS
      &quot;numNextChunks&quot;: 42, # The number of next chunks to be returned of the current chunk. The maximum allowed value is 3. If not specified, no next chunks will be returned.
      &quot;numPreviousChunks&quot;: 42, # The number of previous chunks to be returned of the current chunk. The maximum allowed value is 3. If not specified, no previous chunks will be returned.
    },
    &quot;extractiveContentSpec&quot;: { # A specification for configuring the extractive content in a search response. # If there is no extractive_content_spec provided, there will be no extractive answer in the search response.
      &quot;maxExtractiveAnswerCount&quot;: 42, # The maximum number of extractive answers returned in each search result. An extractive answer is a verbatim answer extracted from the original document, which provides a precise and contextually relevant answer to the search query. If the number of matching answers is less than the `max_extractive_answer_count`, return all of the answers. Otherwise, return the `max_extractive_answer_count`. At most five answers are returned for each SearchResult.
      &quot;maxExtractiveSegmentCount&quot;: 42, # The max number of extractive segments returned in each search result. Only applied if the DataStore is set to DataStore.ContentConfig.CONTENT_REQUIRED or DataStore.solution_types is SOLUTION_TYPE_CHAT. An extractive segment is a text segment extracted from the original document that is relevant to the search query, and, in general, more verbose than an extractive answer. The segment could then be used as input for LLMs to generate summaries and answers. If the number of matching segments is less than `max_extractive_segment_count`, return all of the segments. Otherwise, return the `max_extractive_segment_count`.
      &quot;numNextSegments&quot;: 42, # Return at most `num_next_segments` segments after each selected segments.
      &quot;numPreviousSegments&quot;: 42, # Specifies whether to also include the adjacent from each selected segments. Return at most `num_previous_segments` segments before each selected segments.
      &quot;returnExtractiveSegmentScore&quot;: True or False, # Specifies whether to return the confidence score from the extractive segments in each search result. This feature is available only for new or allowlisted data stores. To allowlist your data store, contact your Customer Engineer. The default value is `false`.
    },
    &quot;searchResultMode&quot;: &quot;A String&quot;, # Specifies the search result mode. If unspecified, the search result mode defaults to `DOCUMENTS`.
    &quot;snippetSpec&quot;: { # A specification for configuring snippets in a search response. # If `snippetSpec` is not specified, snippets are not included in the search response.
      &quot;maxSnippetCount&quot;: 42, # [DEPRECATED] This field is deprecated. To control snippet return, use `return_snippet` field. For backwards compatibility, we will return snippet if max_snippet_count &gt; 0.
      &quot;referenceOnly&quot;: True or False, # [DEPRECATED] This field is deprecated and will have no affect on the snippet.
      &quot;returnSnippet&quot;: True or False, # If `true`, then return snippet. If no snippet can be generated, we return &quot;No snippet is available for this page.&quot; A `snippet_status` with `SUCCESS` or `NO_SNIPPET_AVAILABLE` will also be returned.
    },
    &quot;summarySpec&quot;: { # A specification for configuring a summary returned in a search response. # If `summarySpec` is not specified, summaries are not included in the search response.
      &quot;ignoreAdversarialQuery&quot;: True or False, # Specifies whether to filter out adversarial queries. The default value is `false`. Google employs search-query classification to detect adversarial queries. No summary is returned if the search query is classified as an adversarial query. For example, a user might ask a question regarding negative comments about the company or submit a query designed to generate unsafe, policy-violating output. If this field is set to `true`, we skip generating summaries for adversarial queries and return fallback messages instead.
      &quot;ignoreJailBreakingQuery&quot;: True or False, # Optional. Specifies whether to filter out jail-breaking queries. The default value is `false`. Google employs search-query classification to detect jail-breaking queries. No summary is returned if the search query is classified as a jail-breaking query. A user might add instructions to the query to change the tone, style, language, content of the answer, or ask the model to act as a different entity, e.g. &quot;Reply in the tone of a competing company&#x27;s CEO&quot;. If this field is set to `true`, we skip generating summaries for jail-breaking queries and return fallback messages instead.
      &quot;ignoreLowRelevantContent&quot;: True or False, # Specifies whether to filter out queries that have low relevance. The default value is `false`. If this field is set to `false`, all search results are used regardless of relevance to generate answers. If set to `true`, only queries with high relevance search results will generate answers.
      &quot;ignoreNonSummarySeekingQuery&quot;: True or False, # Specifies whether to filter out queries that are not summary-seeking. The default value is `false`. Google employs search-query classification to detect summary-seeking queries. No summary is returned if the search query is classified as a non-summary seeking query. For example, `why is the sky blue` and `Who is the best soccer player in the world?` are summary-seeking queries, but `SFO airport` and `world cup 2026` are not. They are most likely navigational queries. If this field is set to `true`, we skip generating summaries for non-summary seeking queries and return fallback messages instead.
      &quot;includeCitations&quot;: True or False, # Specifies whether to include citations in the summary. The default value is `false`. When this field is set to `true`, summaries include in-line citation numbers. Example summary including citations: BigQuery is Google Cloud&#x27;s fully managed and completely serverless enterprise data warehouse [1]. BigQuery supports all data types, works across clouds, and has built-in machine learning and business intelligence, all within a unified platform [2, 3]. The citation numbers refer to the returned search results and are 1-indexed. For example, [1] means that the sentence is attributed to the first search result. [2, 3] means that the sentence is attributed to both the second and third search results.
      &quot;languageCode&quot;: &quot;A String&quot;, # Language code for Summary. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Note: This is an experimental feature.
      &quot;modelPromptSpec&quot;: { # Specification of the prompt to use with the model. # If specified, the spec will be used to modify the prompt provided to the LLM.
        &quot;preamble&quot;: &quot;A String&quot;, # Text at the beginning of the prompt that instructs the assistant. Examples are available in the user guide.
      },
      &quot;modelSpec&quot;: { # Specification of the model. # If specified, the spec will be used to modify the model specification provided to the LLM.
        &quot;version&quot;: &quot;A String&quot;, # The model version used to generate the summary. Supported values are: * `stable`: string. Default value when no value is specified. Uses a generally available, fine-tuned model. For more information, see [Answer generation model versions and lifecycle](https://cloud.google.com/generative-ai-app-builder/docs/answer-generation-models). * `preview`: string. (Public preview) Uses a preview model. For more information, see [Answer generation model versions and lifecycle](https://cloud.google.com/generative-ai-app-builder/docs/answer-generation-models).
      },
      &quot;multimodalSpec&quot;: { # Multimodal specification: Will return an image from specified source. If multiple sources are specified, the pick is a quality based decision. # Optional. Multimodal specification.
        &quot;imageSource&quot;: &quot;A String&quot;, # Optional. Source of image returned in the answer.
      },
      &quot;summaryResultCount&quot;: 42, # The number of top results to generate the summary from. If the number of results returned is less than `summaryResultCount`, the summary is generated from all of the results. At most 10 results for documents mode, or 50 for chunks mode, can be used to generate a summary. The chunks mode is used when SearchRequest.ContentSearchSpec.search_result_mode is set to CHUNKS.
      &quot;useSemanticChunks&quot;: True or False, # If true, answer will be generated from most relevant chunks from top search results. This feature will improve summary quality. Note that with this feature enabled, not all top search results will be referenced and included in the reference list, so the citation source index only points to the search results listed in the reference list.
    },
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp the WidgetConfig was created.
  &quot;customerProvidedConfig&quot;: { # Customer provided configurations. # Optional. Output only. Describes the customer related configurations, currently only used for government customers. This field cannot be modified after project onboarding.
    &quot;customerType&quot;: &quot;A String&quot;, # Customer type.
  },
  &quot;dataStoreType&quot;: &quot;A String&quot;, # Output only. The type of the parent data store.
  &quot;dataStoreUiConfigs&quot;: [ # Configurable UI configurations per data store.
    { # UI component configuration for data store.
      &quot;facetField&quot;: [ # Facet fields that store the mapping of fields to end user widget appearance.
        { # Facet fields that store the mapping of fields to end user widget appearance.
          &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
          &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
        },
      ],
      &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
        &quot;a_key&quot;: { # Facet field that maps to a UI Component.
          &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
            &quot;A String&quot;,
          ],
          &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
          &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
        },
      },
      &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
      &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
    },
  ],
  &quot;defaultSearchRequestOrderBy&quot;: &quot;A String&quot;, # The default ordering for search results if specified. Used to set SearchRequest#order_by on applicable requests. https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1alpha/projects.locations.dataStores.servingConfigs/search#request-body
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The human readable widget config display name. Used in Discovery UI. This field must be a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
  &quot;enableAutocomplete&quot;: True or False, # Whether or not to enable autocomplete.
  &quot;enableConversationalSearch&quot;: True or False, # Whether to allow conversational search (LLM, multi-turn) or not (non-LLM, single-turn).
  &quot;enablePrivateKnowledgeGraph&quot;: True or False, # Optional. Output only. Whether to enable private knowledge graph.
  &quot;enableQualityFeedback&quot;: True or False, # Turn on or off collecting the search result quality feedback from end users.
  &quot;enableResultScore&quot;: True or False, # Whether to show the result score.
  &quot;enableSafeSearch&quot;: True or False, # Whether to enable safe search.
  &quot;enableSearchAsYouType&quot;: True or False, # Whether to enable search-as-you-type behavior for the search widget
  &quot;enableSnippetResultSummary&quot;: True or False, # Turn on or off summary for each snippets result.
  &quot;enableSummarization&quot;: True or False, # Turn on or off summarization for the search response.
  &quot;enableWebApp&quot;: True or False, # Whether to enable standalone web app.
  &quot;facetField&quot;: [ # The configuration and appearance of facets in the end user view.
    { # Facet fields that store the mapping of fields to end user widget appearance.
      &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
      &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
    },
  ],
  &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
    &quot;a_key&quot;: { # Facet field that maps to a UI Component.
      &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
        &quot;A String&quot;,
      ],
      &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
      &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
    },
  },
  &quot;geminiBundle&quot;: True or False, # Output only. Whether the subscription is gemini bundle or not.
  &quot;homepageSetting&quot;: { # Describes the homepage setting of the widget. It includes all homepage related settings and configurations, such as shortcuts. # Optional. Describes the homepage settings of the widget.
    &quot;shortcuts&quot;: [ # Optional. The shortcuts to display on the homepage.
      { # Describes an entity of shortcut (aka pinned content) on the homepage. The home page will render these shortcuts in the same order as what the API returns. If a customer wants to reorder or remove a shortcut, the UI should always provide the new full list of shortcuts.
        &quot;destinationUri&quot;: &quot;A String&quot;, # Optional. Destination URL of shortcut.
        &quot;icon&quot;: { # Options to store an image. # Optional. Icon URL of shortcut.
          &quot;url&quot;: &quot;A String&quot;, # Image URL.
        },
        &quot;title&quot;: &quot;A String&quot;, # Optional. Title of the shortcut.
      },
    ],
  },
  &quot;industryVertical&quot;: &quot;A String&quot;, # Output only. The industry vertical that the WidgetConfig registers. The WidgetConfig industry vertical is based on the associated Engine.
  &quot;llmEnabled&quot;: True or False, # Output only. Whether LLM is enabled in the corresponding data store.
  &quot;minimumDataTermAccepted&quot;: True or False, # Output only. Whether the customer accepted data use terms.
  &quot;name&quot;: &quot;A String&quot;, # Immutable. The full resource name of the widget config. Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}/widgetConfigs/{widget_config_id}`. This field must be a UTF-8 encoded string with a length limit of 1024 characters.
  &quot;resultDisplayType&quot;: &quot;A String&quot;, # The type of snippet to display in UCS widget. - RESULT_DISPLAY_TYPE_UNSPECIFIED for existing users. - SNIPPET for new non-enterprise search users. - EXTRACTIVE_ANSWER for new enterprise search users.
  &quot;solutionType&quot;: &quot;A String&quot;, # Required. Immutable. Specifies the solution type that this WidgetConfig can be used for.
  &quot;uiBranding&quot;: { # Describes widget UI branding settings. # Describes search widget UI branding settings, such as the widget title, logo, favicons, and colors.
    &quot;logo&quot;: { # Options to store an image. # Logo image.
      &quot;url&quot;: &quot;A String&quot;, # Image URL.
    },
  },
  &quot;uiSettings&quot;: { # Describes general widget (or web app) UI settings as seen in the cloud console UI configuration page. # Describes general widget search settings as seen in cloud console widget configuration page. Replaces top deprecated top level properties.
    &quot;dataStoreUiConfigs&quot;: [ # Per data store configuration.
      { # UI component configuration for data store.
        &quot;facetField&quot;: [ # Facet fields that store the mapping of fields to end user widget appearance.
          { # Facet fields that store the mapping of fields to end user widget appearance.
            &quot;displayName&quot;: &quot;A String&quot;, # Optional. The field name that end users will see.
            &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
          },
        ],
        &quot;fieldsUiComponentsMap&quot;: { # The key is the UI component. Mock. Currently supported `title`, `thumbnail`, `url`, `custom1`, `custom2`, `custom3`. The value is the name of the field along with its device visibility. The 3 custom fields are optional and can be added or removed. `title`, `thumbnail`, `url` are required UI components that cannot be removed.
          &quot;a_key&quot;: { # Facet field that maps to a UI Component.
            &quot;deviceVisibility&quot;: [ # The field visibility on different types of devices.
              &quot;A String&quot;,
            ],
            &quot;displayTemplate&quot;: &quot;A String&quot;, # The template to customize how the field is displayed. An example value would be a string that looks like: &quot;Price: {value}&quot;.
            &quot;field&quot;: &quot;A String&quot;, # Required. Registered field name. The format is `field.abc`.
          },
        },
        &quot;id&quot;: &quot;A String&quot;, # Output only. the identifier of the data store, used for widget service. For now it refers to data_store_id, in the future we will migrate the field to encrypted data store name UUID.
        &quot;name&quot;: &quot;A String&quot;, # The name of the data store. It should be data store resource name Format: `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`. For APIs under WidgetService, such as WidgetService.LookUpWidgetConfig, the project number and location part is erased in this field.
      },
    ],
    &quot;defaultSearchRequestOrderBy&quot;: &quot;A String&quot;, # The default ordering for search results if specified. Used to set SearchRequest#order_by on applicable requests. https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1alpha/projects.locations.dataStores.servingConfigs/search#request-body
    &quot;disableUserEventsCollection&quot;: True or False, # If set to true, the widget will not collect user events.
    &quot;enableAutocomplete&quot;: True or False, # Whether or not to enable autocomplete.
    &quot;enableCreateAgentButton&quot;: True or False, # Optional. If set to true, the widget will enable the create agent button.
    &quot;enablePeopleSearch&quot;: True or False, # Optional. If set to true, the widget will enable people search.
    &quot;enableQualityFeedback&quot;: True or False, # Turn on or off collecting the search result quality feedback from end users.
    &quot;enableSafeSearch&quot;: True or False, # Whether to enable safe search.
    &quot;enableSearchAsYouType&quot;: True or False, # Whether to enable search-as-you-type behavior for the search widget.
    &quot;enableVisualContentSummary&quot;: True or False, # If set to true, the widget will enable visual content summary on applicable search requests. Only used by healthcare search.
    &quot;features&quot;: { # Output only. Feature config for the engine to opt in or opt out of features. Supported keys: * `agent-gallery` * `no-code-agent-builder` * `prompt-gallery` * `model-selector` * `notebook-lm` * `people-search` * `people-search-org-chart` * `bi-directional-audio` * `feedback` * `session-sharing` * `personalization-memory` * `disable-agent-sharing` * `disable-image-generation` * `disable-video-generation` * `disable-onedrive-upload` * `disable-talk-to-content` * `disable-google-drive-upload`
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;generativeAnswerConfig&quot;: { # Describes configuration for generative answer. # Describes generative answer configuration.
      &quot;disableRelatedQuestions&quot;: True or False, # Whether generated answer contains suggested related questions.
      &quot;ignoreAdversarialQuery&quot;: True or False, # Optional. Specifies whether to filter out queries that are adversarial.
      &quot;ignoreLowRelevantContent&quot;: True or False, # Optional. Specifies whether to filter out queries that are not relevant to the content.
      &quot;ignoreNonAnswerSeekingQuery&quot;: True or False, # Optional. Specifies whether to filter out queries that are not answer-seeking. The default value is `false`. No answer is returned if the search query is classified as a non-answer seeking query. If this field is set to `true`, we skip generating answers for non-answer seeking queries and return fallback messages instead.
      &quot;imageSource&quot;: &quot;A String&quot;, # Optional. Source of image returned in the answer.
      &quot;languageCode&quot;: &quot;A String&quot;, # Language code for Summary. Use language tags defined by [BCP47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Note: This is an experimental feature.
      &quot;maxRephraseSteps&quot;: 42, # Max rephrase steps. The max number is 5 steps. If not set or set to &lt; 1, it will be set to 1 by default.
      &quot;modelPromptPreamble&quot;: &quot;A String&quot;, # Text at the beginning of the prompt that instructs the model that generates the answer.
      &quot;modelVersion&quot;: &quot;A String&quot;, # The model version used to generate the answer.
      &quot;resultCount&quot;: 42, # The number of top results to generate the answer from. Up to 10.
    },
    &quot;interactionType&quot;: &quot;A String&quot;, # Describes widget (or web app) interaction type
    &quot;resultDescriptionType&quot;: &quot;A String&quot;, # Controls whether result extract is display and how (snippet or extractive answer). Default to no result if unspecified.
    &quot;searchAddonSpec&quot;: { # SearchAddonSpec is used to disable add-ons for search. By default, if this field is not specified, add-ons are enabled wherever applicable. # Optional. SearchAddonSpec is used to disable add-ons for search. This field is only supported for search requests.
      &quot;generativeAnswerAddOnDisabled&quot;: True or False, # Optional. If true, generative answer add-on is disabled. Generative answer add-on includes natural language to filters and simple answers.
      &quot;kpiPersonalizationAddOnDisabled&quot;: True or False, # Optional. If true, disables event re-ranking and personalization to optimize KPIs &amp; personalize results.
      &quot;semanticAddOnDisabled&quot;: True or False, # Optional. If true, semantic add-on is disabled. Semantic add-on includes embeddings and jetstream.
    },
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Timestamp the WidgetConfig was updated.
}</pre>
</div>

</body></html>