Skip to content

Commit

Permalink
feat: add model service
Browse files Browse the repository at this point in the history
feat: support per-entity search and autocomplete
feat: support new filter syntax for recommendation
feat: expose A/B experiment info in search response
docs: keep the API doc up-to-date with recent changes

PiperOrigin-RevId: 522675951
  • Loading branch information
Google APIs authored and Copybara-Service committed Apr 7, 2023
1 parent 81b0808 commit f149e91
Show file tree
Hide file tree
Showing 16 changed files with 663 additions and 37 deletions.
8 changes: 6 additions & 2 deletions google/cloud/retail/v2/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ proto_library(
"control.proto",
"control_service.proto",
"import_config.proto",
"model.proto",
"model_service.proto",
"prediction_service.proto",
"product.proto",
"product_service.proto",
Expand Down Expand Up @@ -110,10 +112,12 @@ java_gapic_test(
test_classes = [
"com.google.cloud.retail.v2.CatalogServiceClientHttpJsonTest",
"com.google.cloud.retail.v2.CatalogServiceClientTest",
"com.google.cloud.retail.v2.ControlServiceClientHttpJsonTest",
"com.google.cloud.retail.v2.ControlServiceClientTest",
"com.google.cloud.retail.v2.CompletionServiceClientHttpJsonTest",
"com.google.cloud.retail.v2.CompletionServiceClientTest",
"com.google.cloud.retail.v2.ControlServiceClientHttpJsonTest",
"com.google.cloud.retail.v2.ControlServiceClientTest",
"com.google.cloud.retail.v2.ModelServiceClientHttpJsonTest",
"com.google.cloud.retail.v2.ModelServiceClientTest",
"com.google.cloud.retail.v2.PredictionServiceClientHttpJsonTest",
"com.google.cloud.retail.v2.PredictionServiceClientTest",
"com.google.cloud.retail.v2.ProductServiceClientHttpJsonTest",
Expand Down
17 changes: 11 additions & 6 deletions google/cloud/retail/v2/catalog.proto
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,7 @@ message CatalogAttribute {

// The status of the exact-searchable option of a catalog attribute.
enum ExactSearchableOption {
// Value used when unset. Defaults to
// [EXACT_SEARCHABLE_DISABLED][google.cloud.retail.v2.CatalogAttribute.ExactSearchableOption.EXACT_SEARCHABLE_DISABLED].
// Value used when unset.
EXACT_SEARCHABLE_OPTION_UNSPECIFIED = 0;

// Exact searchable option enabled for an attribute.
Expand All @@ -153,8 +152,7 @@ message CatalogAttribute {

// The status of the retrievable option of a catalog attribute.
enum RetrievableOption {
// Value used when unset. Defaults to
// [RETRIEVABLE_DISABLED][google.cloud.retail.v2.CatalogAttribute.RetrievableOption.RETRIEVABLE_DISABLED].
// Value used when unset.
RETRIEVABLE_OPTION_UNSPECIFIED = 0;

// Retrievable option enabled for an attribute.
Expand All @@ -171,6 +169,10 @@ message CatalogAttribute {
// characters and underscores. For example, an attribute named
// `attributes.abc_xyz` can be indexed, but an attribute named
// `attributes.abc-xyz` cannot be indexed.
//
// If the attribute key starts with `attributes.`, then the attribute is a
// custom attribute. Attributes such as `brands`, `patterns`, and `title` are
// built-in and called system attributes.
string key = 1 [(google.api.field_behavior) = REQUIRED];

// Output only. Indicates whether this attribute has been used by any
Expand Down Expand Up @@ -235,11 +237,14 @@ message CatalogAttribute {

// If EXACT_SEARCHABLE_ENABLED, attribute values will be exact searchable.
// This property only applies to textual custom attributes and requires
// indexable set to enabled to enable exact-searchable.
// indexable set to enabled to enable exact-searchable. If unset, the server
// behavior defaults to
// [EXACT_SEARCHABLE_DISABLED][google.cloud.retail.v2.CatalogAttribute.ExactSearchableOption.EXACT_SEARCHABLE_DISABLED].
ExactSearchableOption exact_searchable_option = 11;

// If RETRIEVABLE_ENABLED, attribute values are retrievable in the search
// results.
// results. If unset, the server behavior defaults to
// [RETRIEVABLE_DISABLED][google.cloud.retail.v2.CatalogAttribute.RetrievableOption.RETRIEVABLE_DISABLED].
RetrievableOption retrievable_option = 12;
}

Expand Down
16 changes: 15 additions & 1 deletion google/cloud/retail/v2/common.proto
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,20 @@ enum SolutionType {
SOLUTION_TYPE_SEARCH = 2;
}

// If filtering for recommendations is enabled.
enum RecommendationsFilteringOption {
// Value used when unset.
// In this case, server behavior defaults to
// [RECOMMENDATIONS_FILTERING_DISABLED][google.cloud.retail.v2.RecommendationsFilteringOption.RECOMMENDATIONS_FILTERING_DISABLED].
RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED = 0;

// Recommendation filtering is disabled.
RECOMMENDATIONS_FILTERING_DISABLED = 1;

// Recommendation filtering is enabled.
RECOMMENDATIONS_FILTERING_ENABLED = 3;
}

// The use case of Cloud Retail Search.
enum SearchSolutionUseCase {
// The value when it's unspecified. In this case, server behavior defaults to
Expand Down Expand Up @@ -362,7 +376,7 @@ message ColorInfo {
// it is expected to have only 1 color. May consider using single "Mixed"
// instead of multiple values.
//
// A maximum of 25 colors are allowed. Each value must be a UTF-8 encoded
// A maximum of 75 colors are allowed. Each value must be a UTF-8 encoded
// string with a length limit of 128 characters. Otherwise, an
// INVALID_ARGUMENT error is returned.
//
Expand Down
14 changes: 11 additions & 3 deletions google/cloud/retail/v2/completion_service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ option objc_class_prefix = "RETAIL";
option php_namespace = "Google\\Cloud\\Retail\\V2";
option ruby_package = "Google::Cloud::Retail::V2";

// Auto-completion service for retail.
// Autocomplete service for retail.
//
// This feature is only available for users who have Retail Search enabled.
// Enable Retail Search on Cloud Console before using this feature.
Expand Down Expand Up @@ -74,7 +74,7 @@ service CompletionService {
}
}

// Auto-complete parameters.
// Autocomplete parameters.
message CompleteQueryRequest {
// Required. Catalog for which the completion is performed.
//
Expand Down Expand Up @@ -150,9 +150,17 @@ message CompleteQueryRequest {
// The maximum allowed max suggestions is 20. If it is set higher, it will be
// capped by 20.
int32 max_suggestions = 5;

// The entity for customers that may run multiple different entities, domains,
// sites or regions, for example, `Google US`, `Google Ads`, `Waymo`,
// `google.com`, `youtube.com`, etc.
// If this is set, it should be exactly matched with
// [UserEvent.entity][google.cloud.retail.v2.UserEvent.entity] to get
// per-entity autocomplete results.
string entity = 10;
}

// Response of the auto-complete query.
// Response of the autocomplete query.
message CompleteQueryResponse {
// Resource that represents completion results.
message CompletionResult {
Expand Down
2 changes: 1 addition & 1 deletion google/cloud/retail/v2/import_config.proto
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ message BigQuerySource {
// The schema is available here:
// https://support.google.com/analytics/answer/7029846.
//
// Supported values for auto-completion imports:
// Supported values for autocomplete imports:
//
// * `suggestions` (default): One JSON completion suggestion per line.
// * `denylist`: One JSON deny suggestion per line.
Expand Down
239 changes: 239 additions & 0 deletions google/cloud/retail/v2/model.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.cloud.retail.v2;

import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/retail/v2/common.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Cloud.Retail.V2";
option go_package = "cloud.google.com/go/retail/apiv2/retailpb;retailpb";
option java_multiple_files = true;
option java_outer_classname = "ModelProto";
option java_package = "com.google.cloud.retail.v2";
option objc_class_prefix = "RETAIL";
option php_namespace = "Google\\Cloud\\Retail\\V2";
option ruby_package = "Google::Cloud::Retail::V2";

// Metadata that describes the training and serving parameters of a
// [Model][google.cloud.retail.v2.Model]. A
// [Model][google.cloud.retail.v2.Model] can be associated with a
// [ServingConfig][google.cloud.retail.v2.ServingConfig] and then queried
// through the Predict API.
message Model {
option (google.api.resource) = {
type: "retail.googleapis.com/Model"
pattern: "projects/{project}/locations/{location}/catalogs/{catalog}/models/{model}"
};

// Represents an ordered combination of valid serving configs, which
// can be used for `PAGE_OPTIMIZATION` recommendations.
message ServingConfigList {
// Optional. A set of valid serving configs that may be used for
// `PAGE_OPTIMIZATION`.
repeated string serving_config_ids = 1
[(google.api.field_behavior) = OPTIONAL];
}

// The serving state of the model.
enum ServingState {
// Unspecified serving state.
SERVING_STATE_UNSPECIFIED = 0;

// The model is not serving.
INACTIVE = 1;

// The model is serving and can be queried.
ACTIVE = 2;

// The model is trained on tuned hyperparameters and can be
// queried.
TUNED = 3;
}

// The training state of the model.
enum TrainingState {
// Unspecified training state.
TRAINING_STATE_UNSPECIFIED = 0;

// The model training is paused.
PAUSED = 1;

// The model is training.
TRAINING = 2;
}

// Describes whether periodic tuning is enabled for this model
// or not. Periodic tuning is scheduled at most every three months. You can
// start a tuning process manually by using the `TuneModel`
// method, which starts a tuning process immediately and resets the quarterly
// schedule. Enabling or disabling periodic tuning does not affect any
// current tuning processes.
enum PeriodicTuningState {
// Unspecified default value, should never be explicitly set.
PERIODIC_TUNING_STATE_UNSPECIFIED = 0;

// The model has periodic tuning disabled. Tuning
// can be reenabled by calling the `EnableModelPeriodicTuning`
// method or by calling the `TuneModel` method.
PERIODIC_TUNING_DISABLED = 1;

// The model cannot be tuned with periodic tuning OR the
// `TuneModel` method. Hide the options in customer UI and
// reject any requests through the backend self serve API.
ALL_TUNING_DISABLED = 3;

// The model has periodic tuning enabled. Tuning
// can be disabled by calling the `DisableModelPeriodicTuning`
// method.
PERIODIC_TUNING_ENABLED = 2;
}

// Describes whether this model have sufficient training data
// to be continuously trained.
enum DataState {
// Unspecified default value, should never be explicitly set.
DATA_STATE_UNSPECIFIED = 0;

// The model has sufficient training data.
DATA_OK = 1;

// The model does not have sufficient training data. Error
// messages can be queried via Stackdriver.
DATA_ERROR = 2;
}

// Required. The fully qualified resource name of the model.
//
// Format:
// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/models/{model_id}`
// catalog_id has char limit of 50.
// recommendation_model_id has char limit of 40.
string name = 1 [(google.api.field_behavior) = REQUIRED];

// Required. The display name of the model.
//
// Should be human readable, used to display Recommendation Models in the
// Retail Cloud Console Dashboard. UTF-8 encoded string with limit of 1024
// characters.
string display_name = 2 [(google.api.field_behavior) = REQUIRED];

// Optional. The training state that the model is in (e.g.
// `TRAINING` or `PAUSED`).
//
// Since part of the cost of running the service
// is frequency of training - this can be used to determine when to train
// model in order to control cost. If not specified: the default value for
// `CreateModel` method is `TRAINING`. The default value for
// `UpdateModel` method is to keep the state the same as before.
TrainingState training_state = 3 [(google.api.field_behavior) = OPTIONAL];

// Output only. The serving state of the model: `ACTIVE`, `NOT_ACTIVE`.
ServingState serving_state = 4 [(google.api.field_behavior) = OUTPUT_ONLY];

// Output only. Timestamp the Recommendation Model was created at.
google.protobuf.Timestamp create_time = 5
[(google.api.field_behavior) = OUTPUT_ONLY];

// Output only. Timestamp the Recommendation Model was last updated. E.g.
// if a Recommendation Model was paused - this would be the time the pause was
// initiated.
google.protobuf.Timestamp update_time = 6
[(google.api.field_behavior) = OUTPUT_ONLY];

// Required. The type of model e.g. `home-page`.
//
// Currently supported values: `recommended-for-you`, `others-you-may-like`,
// `frequently-bought-together`, `page-optimization`, `similar-items`,
// `buy-it-again`, `on-sale-items`, and `recently-viewed`(readonly value).
//
//
// This field together with
// [optimization_objective][google.cloud.retail.v2.Model.optimization_objective]
// describe model metadata to use to control model training and serving.
// See https://cloud.google.com/retail/docs/models
// for more details on what the model metadata control and which combination
// of parameters are valid. For invalid combinations of parameters (e.g. type
// = `frequently-bought-together` and optimization_objective = `ctr`), you
// receive an error 400 if you try to create/update a recommendation with
// this set of knobs.
string type = 7 [(google.api.field_behavior) = REQUIRED];

// Optional. The optimization objective e.g. `cvr`.
//
// Currently supported
// values: `ctr`, `cvr`, `revenue-per-order`.
//
// If not specified, we choose default based on model type.
// Default depends on type of recommendation:
//
// `recommended-for-you` => `ctr`
//
// `others-you-may-like` => `ctr`
//
// `frequently-bought-together` => `revenue_per_order`
//
// This field together with
// [optimization_objective][google.cloud.retail.v2.Model.type]
// describe model metadata to use to control model training and serving.
// See https://cloud.google.com/retail/docs/models
// for more details on what the model metadata control and which combination
// of parameters are valid. For invalid combinations of parameters (e.g. type
// = `frequently-bought-together` and optimization_objective = `ctr`), you
// receive an error 400 if you try to create/update a recommendation with
// this set of knobs.
string optimization_objective = 8 [(google.api.field_behavior) = OPTIONAL];

// Optional. The state of periodic tuning.
//
// The period we use is 3 months - to do a
// one-off tune earlier use the `TuneModel` method. Default value
// is `PERIODIC_TUNING_ENABLED`.
PeriodicTuningState periodic_tuning_state = 11
[(google.api.field_behavior) = OPTIONAL];

// Output only. The timestamp when the latest successful tune finished.
google.protobuf.Timestamp last_tune_time = 12
[(google.api.field_behavior) = OUTPUT_ONLY];

// Output only. The tune operation associated with the model.
//
// Can be used to determine if there is an ongoing tune for this
// recommendation. Empty field implies no tune is goig on.
string tuning_operation = 15 [(google.api.field_behavior) = OUTPUT_ONLY];

// Output only. The state of data requirements for this model: `DATA_OK` and
// `DATA_ERROR`.
//
// Recommendation model cannot be trained if the data is in
// `DATA_ERROR` state. Recommendation model can have `DATA_ERROR` state even
// if serving state is `ACTIVE`: models were trained successfully before, but
// cannot be refreshed because model no longer has sufficient
// data for training.
DataState data_state = 16 [(google.api.field_behavior) = OUTPUT_ONLY];

// Optional. If `RECOMMENDATIONS_FILTERING_ENABLED`, recommendation filtering
// by attributes is enabled for the model.
RecommendationsFilteringOption filtering_option = 18
[(google.api.field_behavior) = OPTIONAL];

// Output only. The list of valid serving configs associated with the
// PageOptimizationConfig.
repeated ServingConfigList serving_config_lists = 19
[(google.api.field_behavior) = OUTPUT_ONLY];
}
Loading

0 comments on commit f149e91

Please sign in to comment.