-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathServingService.proto
More file actions
144 lines (115 loc) · 4.84 KB
/
ServingService.proto
File metadata and controls
144 lines (115 loc) · 4.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
* Copyright 2018 The Feast Authors
*
* 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
*
* https://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 feast.serving;
import "google/protobuf/timestamp.proto";
import "feast/types/Value.proto";
option java_package = "feast.proto.serving";
option java_outer_classname = "ServingAPIProto";
option go_package = "github.com/feast-dev/feast/go/protos/feast/serving";
service ServingService {
// Get information about this Feast serving.
rpc GetFeastServingInfo (GetFeastServingInfoRequest) returns (GetFeastServingInfoResponse);
// Get online features synchronously.
rpc GetOnlineFeatures (GetOnlineFeaturesRequest) returns (GetOnlineFeaturesResponse);
}
message GetFeastServingInfoRequest {}
message GetFeastServingInfoResponse {
// Feast version of this serving deployment.
string version = 1;
}
message FeatureReferenceV2 {
// Name of the Feature View to retrieve the feature from.
string feature_view_name = 1;
// Name of the Feature to retrieve the feature from.
string feature_name = 2;
}
// ToDo (oleksii): remove this message (since it's not used) and move EntityRow on package level
message GetOnlineFeaturesRequestV2 {
// List of features that are being retrieved
repeated FeatureReferenceV2 features = 4;
// List of entity rows, containing entity id and timestamp data.
// Used during retrieval of feature rows and for joining feature
// rows into a final dataset
repeated EntityRow entity_rows = 2;
// Optional field to specify project name override. If specified, uses the
// given project for retrieval. Overrides the projects specified in
// Feature References if both are specified.
string project = 5;
message EntityRow {
// Request timestamp of this row. This value will be used,
// together with maxAge, to determine feature staleness.
google.protobuf.Timestamp timestamp = 1;
// Map containing mapping of entity name to entity value.
map<string,feast.types.Value> fields = 2;
}
}
// In JSON "val" field can be omitted
message FeatureList {
repeated string val = 1;
}
message GetOnlineFeaturesRequest {
oneof kind {
string feature_service = 1;
FeatureList features = 2;
}
// The entity data is specified in a columnar format
// A map of entity name -> list of values
map<string, feast.types.RepeatedValue> entities = 3;
bool full_feature_names = 4;
// Context for OnDemand Feature Transformation
// (was moved to dedicated parameter to avoid unnecessary separation logic on serving side)
// A map of variable name -> list of values
map<string, feast.types.RepeatedValue> request_context = 5;
// Whether to include feature view version metadata in the response
bool include_feature_view_version_metadata = 6;
}
message GetOnlineFeaturesResponse {
GetOnlineFeaturesResponseMetadata metadata = 1;
// Length of "results" array should match length of requested features.
// We also preserve the same order of features here as in metadata.feature_names
repeated FeatureVector results = 2;
message FeatureVector {
repeated feast.types.Value values = 1;
repeated FieldStatus statuses = 2;
repeated google.protobuf.Timestamp event_timestamps = 3;
}
bool status = 3;
}
message FeatureViewMetadata {
string name = 1; // Feature view name (e.g., "driver_stats")
int32 version = 2; // Version number (e.g., 2)
}
message GetOnlineFeaturesResponseMetadata {
FeatureList feature_names = 1; // Clean feature names without @v2 syntax
repeated FeatureViewMetadata feature_view_metadata = 2; // Only populated when requested
}
enum FieldStatus {
// Status is unset for this field.
INVALID = 0;
// Field value is present for this field and age is within max age.
PRESENT = 1;
// Values could be found for entity key and age is within max age, but
// this field value is not assigned a value on ingestion into feast.
NULL_VALUE = 2;
// Entity key did not return any values as they do not exist in Feast.
// This could suggest that the feature values have not yet been ingested
// into feast or the ingestion failed.
NOT_FOUND = 3;
// Values could be found for entity key, but field values are outside the maximum
// allowable range.
OUTSIDE_MAX_AGE = 4;
}