shaped 0.14.1__py3-none-any.whl → 1.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
shaped/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "1.0.0"
1
+ __version__ = "1.0.1"
2
2
  from .client import Client
3
3
  from .autogen.models.inference_config import InferenceConfig
4
4
  from .autogen.models.retriever_top_k_override import RetrieverTopKOverride
@@ -73,6 +73,7 @@ from shaped.autogen.models.rank_grid_attribute_response import RankGridAttribute
73
73
  from shaped.autogen.models.rank_response import RankResponse
74
74
  from shaped.autogen.models.redshift_dataset_config import RedshiftDatasetConfig
75
75
  from shaped.autogen.models.retrieve_request import RetrieveRequest
76
+ from shaped.autogen.models.retrieve_response import RetrieveResponse
76
77
  from shaped.autogen.models.retriever_top_k_override import RetrieverTopKOverride
77
78
  from shaped.autogen.models.rudder_stack_dataset_config import RudderStackDatasetConfig
78
79
  from shaped.autogen.models.segment_dataset_config import SegmentDatasetConfig
@@ -272,7 +272,9 @@ class DatasetApi:
272
272
  _query_params: List[Tuple[str, str]] = []
273
273
  _header_params: Dict[str, Optional[str]] = _headers or {}
274
274
  _form_params: List[Tuple[str, str]] = []
275
- _files: Dict[str, Union[str, bytes]] = {}
275
+ _files: Dict[
276
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
277
+ ] = {}
276
278
  _body_params: Optional[bytes] = None
277
279
 
278
280
  # process the path parameters
@@ -561,7 +563,9 @@ class DatasetApi:
561
563
  _query_params: List[Tuple[str, str]] = []
562
564
  _header_params: Dict[str, Optional[str]] = _headers or {}
563
565
  _form_params: List[Tuple[str, str]] = []
564
- _files: Dict[str, Union[str, bytes]] = {}
566
+ _files: Dict[
567
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
568
+ ] = {}
565
569
  _body_params: Optional[bytes] = None
566
570
 
567
571
  # process the path parameters
@@ -837,7 +841,9 @@ class DatasetApi:
837
841
  _query_params: List[Tuple[str, str]] = []
838
842
  _header_params: Dict[str, Optional[str]] = _headers or {}
839
843
  _form_params: List[Tuple[str, str]] = []
840
- _files: Dict[str, Union[str, bytes]] = {}
844
+ _files: Dict[
845
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
846
+ ] = {}
841
847
  _body_params: Optional[bytes] = None
842
848
 
843
849
  # process the path parameters
@@ -1100,7 +1106,9 @@ class DatasetApi:
1100
1106
  _query_params: List[Tuple[str, str]] = []
1101
1107
  _header_params: Dict[str, Optional[str]] = _headers or {}
1102
1108
  _form_params: List[Tuple[str, str]] = []
1103
- _files: Dict[str, Union[str, bytes]] = {}
1109
+ _files: Dict[
1110
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1111
+ ] = {}
1104
1112
  _body_params: Optional[bytes] = None
1105
1113
 
1106
1114
  # process the path parameters
@@ -31,6 +31,7 @@ from shaped.autogen.models.rank_grid_attribute_request1 import RankGridAttribute
31
31
  from shaped.autogen.models.rank_grid_attribute_response import RankGridAttributeResponse
32
32
  from shaped.autogen.models.rank_response import RankResponse
33
33
  from shaped.autogen.models.retrieve_request import RetrieveRequest
34
+ from shaped.autogen.models.retrieve_response import RetrieveResponse
34
35
  from shaped.autogen.models.similar_item_request import SimilarItemRequest
35
36
  from shaped.autogen.models.similar_response import SimilarResponse
36
37
  from shaped.autogen.models.similar_users_request import SimilarUsersRequest
@@ -297,7 +298,9 @@ class ModelInferenceApi:
297
298
  _query_params: List[Tuple[str, str]] = []
298
299
  _header_params: Dict[str, Optional[str]] = _headers or {}
299
300
  _form_params: List[Tuple[str, str]] = []
300
- _files: Dict[str, Union[str, bytes]] = {}
301
+ _files: Dict[
302
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
303
+ ] = {}
301
304
  _body_params: Optional[bytes] = None
302
305
 
303
306
  # process the path parameters
@@ -601,7 +604,9 @@ class ModelInferenceApi:
601
604
  _query_params: List[Tuple[str, str]] = []
602
605
  _header_params: Dict[str, Optional[str]] = _headers or {}
603
606
  _form_params: List[Tuple[str, str]] = []
604
- _files: Dict[str, Union[str, bytes]] = {}
607
+ _files: Dict[
608
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
609
+ ] = {}
605
610
  _body_params: Optional[bytes] = None
606
611
 
607
612
  # process the path parameters
@@ -905,7 +910,9 @@ class ModelInferenceApi:
905
910
  _query_params: List[Tuple[str, str]] = []
906
911
  _header_params: Dict[str, Optional[str]] = _headers or {}
907
912
  _form_params: List[Tuple[str, str]] = []
908
- _files: Dict[str, Union[str, bytes]] = {}
913
+ _files: Dict[
914
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
915
+ ] = {}
909
916
  _body_params: Optional[bytes] = None
910
917
 
911
918
  # process the path parameters
@@ -1209,7 +1216,9 @@ class ModelInferenceApi:
1209
1216
  _query_params: List[Tuple[str, str]] = []
1210
1217
  _header_params: Dict[str, Optional[str]] = _headers or {}
1211
1218
  _form_params: List[Tuple[str, str]] = []
1212
- _files: Dict[str, Union[str, bytes]] = {}
1219
+ _files: Dict[
1220
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1221
+ ] = {}
1213
1222
  _body_params: Optional[bytes] = None
1214
1223
 
1215
1224
  # process the path parameters
@@ -1513,7 +1522,9 @@ class ModelInferenceApi:
1513
1522
  _query_params: List[Tuple[str, str]] = []
1514
1523
  _header_params: Dict[str, Optional[str]] = _headers or {}
1515
1524
  _form_params: List[Tuple[str, str]] = []
1516
- _files: Dict[str, Union[str, bytes]] = {}
1525
+ _files: Dict[
1526
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1527
+ ] = {}
1517
1528
  _body_params: Optional[bytes] = None
1518
1529
 
1519
1530
  # process the path parameters
@@ -1817,7 +1828,9 @@ class ModelInferenceApi:
1817
1828
  _query_params: List[Tuple[str, str]] = []
1818
1829
  _header_params: Dict[str, Optional[str]] = _headers or {}
1819
1830
  _form_params: List[Tuple[str, str]] = []
1820
- _files: Dict[str, Union[str, bytes]] = {}
1831
+ _files: Dict[
1832
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1833
+ ] = {}
1821
1834
  _body_params: Optional[bytes] = None
1822
1835
 
1823
1836
  # process the path parameters
@@ -1895,7 +1908,7 @@ class ModelInferenceApi:
1895
1908
  _content_type: Optional[StrictStr] = None,
1896
1909
  _headers: Optional[Dict[StrictStr, Any]] = None,
1897
1910
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1898
- ) -> RankResponse:
1911
+ ) -> RetrieveResponse:
1899
1912
  """Retrieve
1900
1913
 
1901
1914
  Retrieve returns relevant item_ids for the given input text or user query. It can be used instead of rank if the filtering, scoring and ordering stages aren't needed for the final ranking. Typically people use this endpoint over rank if they want to reduce latency and complexity of the ranking pipeline and only need a subset of the functionality, e.g. just search but without personalization.
@@ -1939,7 +1952,7 @@ class ModelInferenceApi:
1939
1952
  )
1940
1953
 
1941
1954
  _response_types_map: Dict[str, Optional[str]] = {
1942
- '200': "RankResponse",
1955
+ '200': "RetrieveResponse",
1943
1956
  '422': "HTTPValidationError",
1944
1957
  }
1945
1958
  response_data = self.api_client.call_api(
@@ -1971,7 +1984,7 @@ class ModelInferenceApi:
1971
1984
  _content_type: Optional[StrictStr] = None,
1972
1985
  _headers: Optional[Dict[StrictStr, Any]] = None,
1973
1986
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1974
- ) -> ApiResponse[RankResponse]:
1987
+ ) -> ApiResponse[RetrieveResponse]:
1975
1988
  """Retrieve
1976
1989
 
1977
1990
  Retrieve returns relevant item_ids for the given input text or user query. It can be used instead of rank if the filtering, scoring and ordering stages aren't needed for the final ranking. Typically people use this endpoint over rank if they want to reduce latency and complexity of the ranking pipeline and only need a subset of the functionality, e.g. just search but without personalization.
@@ -2015,7 +2028,7 @@ class ModelInferenceApi:
2015
2028
  )
2016
2029
 
2017
2030
  _response_types_map: Dict[str, Optional[str]] = {
2018
- '200': "RankResponse",
2031
+ '200': "RetrieveResponse",
2019
2032
  '422': "HTTPValidationError",
2020
2033
  }
2021
2034
  response_data = self.api_client.call_api(
@@ -2091,7 +2104,7 @@ class ModelInferenceApi:
2091
2104
  )
2092
2105
 
2093
2106
  _response_types_map: Dict[str, Optional[str]] = {
2094
- '200': "RankResponse",
2107
+ '200': "RetrieveResponse",
2095
2108
  '422': "HTTPValidationError",
2096
2109
  }
2097
2110
  response_data = self.api_client.call_api(
@@ -2121,7 +2134,9 @@ class ModelInferenceApi:
2121
2134
  _query_params: List[Tuple[str, str]] = []
2122
2135
  _header_params: Dict[str, Optional[str]] = _headers or {}
2123
2136
  _form_params: List[Tuple[str, str]] = []
2124
- _files: Dict[str, Union[str, bytes]] = {}
2137
+ _files: Dict[
2138
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
2139
+ ] = {}
2125
2140
  _body_params: Optional[bytes] = None
2126
2141
 
2127
2142
  # process the path parameters
@@ -2425,7 +2440,9 @@ class ModelInferenceApi:
2425
2440
  _query_params: List[Tuple[str, str]] = []
2426
2441
  _header_params: Dict[str, Optional[str]] = _headers or {}
2427
2442
  _form_params: List[Tuple[str, str]] = []
2428
- _files: Dict[str, Union[str, bytes]] = {}
2443
+ _files: Dict[
2444
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
2445
+ ] = {}
2429
2446
  _body_params: Optional[bytes] = None
2430
2447
 
2431
2448
  # process the path parameters
@@ -2742,7 +2759,9 @@ class ModelInferenceApi:
2742
2759
  _query_params: List[Tuple[str, str]] = []
2743
2760
  _header_params: Dict[str, Optional[str]] = _headers or {}
2744
2761
  _form_params: List[Tuple[str, str]] = []
2745
- _files: Dict[str, Union[str, bytes]] = {}
2762
+ _files: Dict[
2763
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
2764
+ ] = {}
2746
2765
  _body_params: Optional[bytes] = None
2747
2766
 
2748
2767
  # process the path parameters
@@ -273,7 +273,9 @@ class ModelManagementApi:
273
273
  _query_params: List[Tuple[str, str]] = []
274
274
  _header_params: Dict[str, Optional[str]] = _headers or {}
275
275
  _form_params: List[Tuple[str, str]] = []
276
- _files: Dict[str, Union[str, bytes]] = {}
276
+ _files: Dict[
277
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
278
+ ] = {}
277
279
  _body_params: Optional[bytes] = None
278
280
 
279
281
  # process the path parameters
@@ -549,7 +551,9 @@ class ModelManagementApi:
549
551
  _query_params: List[Tuple[str, str]] = []
550
552
  _header_params: Dict[str, Optional[str]] = _headers or {}
551
553
  _form_params: List[Tuple[str, str]] = []
552
- _files: Dict[str, Union[str, bytes]] = {}
554
+ _files: Dict[
555
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
556
+ ] = {}
553
557
  _body_params: Optional[bytes] = None
554
558
 
555
559
  # process the path parameters
@@ -812,7 +816,9 @@ class ModelManagementApi:
812
816
  _query_params: List[Tuple[str, str]] = []
813
817
  _header_params: Dict[str, Optional[str]] = _headers or {}
814
818
  _form_params: List[Tuple[str, str]] = []
815
- _files: Dict[str, Union[str, bytes]] = {}
819
+ _files: Dict[
820
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
821
+ ] = {}
816
822
  _body_params: Optional[bytes] = None
817
823
 
818
824
  # process the path parameters
@@ -1086,7 +1092,9 @@ class ModelManagementApi:
1086
1092
  _query_params: List[Tuple[str, str]] = []
1087
1093
  _header_params: Dict[str, Optional[str]] = _headers or {}
1088
1094
  _form_params: List[Tuple[str, str]] = []
1089
- _files: Dict[str, Union[str, bytes]] = {}
1095
+ _files: Dict[
1096
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1097
+ ] = {}
1090
1098
  _body_params: Optional[bytes] = None
1091
1099
 
1092
1100
  # process the path parameters
@@ -1375,7 +1383,9 @@ class ModelManagementApi:
1375
1383
  _query_params: List[Tuple[str, str]] = []
1376
1384
  _header_params: Dict[str, Optional[str]] = _headers or {}
1377
1385
  _form_params: List[Tuple[str, str]] = []
1378
- _files: Dict[str, Union[str, bytes]] = {}
1386
+ _files: Dict[
1387
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1388
+ ] = {}
1379
1389
  _body_params: Optional[bytes] = None
1380
1390
 
1381
1391
  # process the path parameters
@@ -15,6 +15,7 @@
15
15
  import datetime
16
16
  from dateutil.parser import parse
17
17
  from enum import Enum
18
+ import decimal
18
19
  import json
19
20
  import mimetypes
20
21
  import os
@@ -66,6 +67,7 @@ class ApiClient:
66
67
  'bool': bool,
67
68
  'date': datetime.date,
68
69
  'datetime': datetime.datetime,
70
+ 'decimal': decimal.Decimal,
69
71
  'object': object,
70
72
  }
71
73
  _pool = None
@@ -338,6 +340,7 @@ class ApiClient:
338
340
  If obj is str, int, long, float, bool, return directly.
339
341
  If obj is datetime.datetime, datetime.date
340
342
  convert to string in iso8601 format.
343
+ If obj is decimal.Decimal return string representation.
341
344
  If obj is list, sanitize each element in the list.
342
345
  If obj is dict, return the dict.
343
346
  If obj is OpenAPI model, return the properties dict.
@@ -363,6 +366,8 @@ class ApiClient:
363
366
  )
364
367
  elif isinstance(obj, (datetime.datetime, datetime.date)):
365
368
  return obj.isoformat()
369
+ elif isinstance(obj, decimal.Decimal):
370
+ return str(obj)
366
371
 
367
372
  elif isinstance(obj, dict):
368
373
  obj_dict = obj
@@ -399,12 +404,12 @@ class ApiClient:
399
404
  data = json.loads(response_text)
400
405
  except ValueError:
401
406
  data = response_text
402
- elif content_type.startswith("application/json"):
407
+ elif re.match(r'^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE):
403
408
  if response_text == "":
404
409
  data = ""
405
410
  else:
406
411
  data = json.loads(response_text)
407
- elif content_type.startswith("text/plain"):
412
+ elif re.match(r'^text\/[a-z.+-]+\s*(;|$)', content_type, re.IGNORECASE):
408
413
  data = response_text
409
414
  else:
410
415
  raise ApiException(
@@ -454,6 +459,8 @@ class ApiClient:
454
459
  return self.__deserialize_date(data)
455
460
  elif klass == datetime.datetime:
456
461
  return self.__deserialize_datetime(data)
462
+ elif klass == decimal.Decimal:
463
+ return decimal.Decimal(data)
457
464
  elif issubclass(klass, Enum):
458
465
  return self.__deserialize_enum(data, klass)
459
466
  else:
@@ -528,7 +535,10 @@ class ApiClient:
528
535
 
529
536
  return "&".join(["=".join(map(str, item)) for item in new_params])
530
537
 
531
- def files_parameters(self, files: Dict[str, Union[str, bytes]]):
538
+ def files_parameters(
539
+ self,
540
+ files: Dict[str, Union[str, bytes, List[str], List[bytes], Tuple[str, bytes]]],
541
+ ):
532
542
  """Builds form parameters.
533
543
 
534
544
  :param files: File parameters.
@@ -543,6 +553,12 @@ class ApiClient:
543
553
  elif isinstance(v, bytes):
544
554
  filename = k
545
555
  filedata = v
556
+ elif isinstance(v, tuple):
557
+ filename, filedata = v
558
+ elif isinstance(v, list):
559
+ for file_param in v:
560
+ params.extend(self.files_parameters({k: file_param}))
561
+ continue
546
562
  else:
547
563
  raise ValueError("Unsupported file value")
548
564
  mimetype = (
@@ -13,14 +13,16 @@
13
13
 
14
14
 
15
15
  import copy
16
+ import http.client as httplib
16
17
  import logging
17
18
  from logging import FileHandler
18
19
  import multiprocessing
19
20
  import sys
20
- from typing import Optional
21
+ from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict
22
+ from typing_extensions import NotRequired, Self
23
+
21
24
  import urllib3
22
25
 
23
- import http.client as httplib
24
26
 
25
27
  JSON_SCHEMA_VALIDATION_KEYWORDS = {
26
28
  'multipleOf', 'maximum', 'exclusiveMaximum',
@@ -28,6 +30,106 @@ JSON_SCHEMA_VALIDATION_KEYWORDS = {
28
30
  'minLength', 'pattern', 'maxItems', 'minItems'
29
31
  }
30
32
 
33
+ ServerVariablesT = Dict[str, str]
34
+
35
+ GenericAuthSetting = TypedDict(
36
+ "GenericAuthSetting",
37
+ {
38
+ "type": str,
39
+ "in": str,
40
+ "key": str,
41
+ "value": str,
42
+ },
43
+ )
44
+
45
+
46
+ OAuth2AuthSetting = TypedDict(
47
+ "OAuth2AuthSetting",
48
+ {
49
+ "type": Literal["oauth2"],
50
+ "in": Literal["header"],
51
+ "key": Literal["Authorization"],
52
+ "value": str,
53
+ },
54
+ )
55
+
56
+
57
+ APIKeyAuthSetting = TypedDict(
58
+ "APIKeyAuthSetting",
59
+ {
60
+ "type": Literal["api_key"],
61
+ "in": str,
62
+ "key": str,
63
+ "value": Optional[str],
64
+ },
65
+ )
66
+
67
+
68
+ BasicAuthSetting = TypedDict(
69
+ "BasicAuthSetting",
70
+ {
71
+ "type": Literal["basic"],
72
+ "in": Literal["header"],
73
+ "key": Literal["Authorization"],
74
+ "value": Optional[str],
75
+ },
76
+ )
77
+
78
+
79
+ BearerFormatAuthSetting = TypedDict(
80
+ "BearerFormatAuthSetting",
81
+ {
82
+ "type": Literal["bearer"],
83
+ "in": Literal["header"],
84
+ "format": Literal["JWT"],
85
+ "key": Literal["Authorization"],
86
+ "value": str,
87
+ },
88
+ )
89
+
90
+
91
+ BearerAuthSetting = TypedDict(
92
+ "BearerAuthSetting",
93
+ {
94
+ "type": Literal["bearer"],
95
+ "in": Literal["header"],
96
+ "key": Literal["Authorization"],
97
+ "value": str,
98
+ },
99
+ )
100
+
101
+
102
+ HTTPSignatureAuthSetting = TypedDict(
103
+ "HTTPSignatureAuthSetting",
104
+ {
105
+ "type": Literal["http-signature"],
106
+ "in": Literal["header"],
107
+ "key": Literal["Authorization"],
108
+ "value": None,
109
+ },
110
+ )
111
+
112
+
113
+ AuthSettings = TypedDict(
114
+ "AuthSettings",
115
+ {
116
+ },
117
+ total=False,
118
+ )
119
+
120
+
121
+ class HostSettingVariable(TypedDict):
122
+ description: str
123
+ default_value: str
124
+ enum_values: List[str]
125
+
126
+
127
+ class HostSetting(TypedDict):
128
+ url: str
129
+ description: str
130
+ variables: NotRequired[Dict[str, HostSettingVariable]]
131
+
132
+
31
133
  class Configuration:
32
134
  """This class contains various settings of the API client.
33
135
 
@@ -61,20 +163,26 @@ class Configuration:
61
163
 
62
164
  """
63
165
 
64
- _default = None
65
-
66
- def __init__(self, host=None,
67
- api_key=None, api_key_prefix=None,
68
- username=None, password=None,
69
- access_token=None,
70
- server_index=None, server_variables=None,
71
- server_operation_index=None, server_operation_variables=None,
72
- ignore_operation_servers=False,
73
- ssl_ca_cert=None,
74
- retries=None,
75
- *,
76
- debug: Optional[bool] = None
77
- ) -> None:
166
+ _default: ClassVar[Optional[Self]] = None
167
+
168
+ def __init__(
169
+ self,
170
+ host: Optional[str]=None,
171
+ api_key: Optional[Dict[str, str]]=None,
172
+ api_key_prefix: Optional[Dict[str, str]]=None,
173
+ username: Optional[str]=None,
174
+ password: Optional[str]=None,
175
+ access_token: Optional[str]=None,
176
+ server_index: Optional[int]=None,
177
+ server_variables: Optional[ServerVariablesT]=None,
178
+ server_operation_index: Optional[Dict[int, int]]=None,
179
+ server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None,
180
+ ignore_operation_servers: bool=False,
181
+ ssl_ca_cert: Optional[str]=None,
182
+ retries: Optional[int] = None,
183
+ *,
184
+ debug: Optional[bool] = None,
185
+ ) -> None:
78
186
  """Constructor
79
187
  """
80
188
  self._base_path = "https://api.shaped.ai/v1" if host is None else host
@@ -198,7 +306,7 @@ class Configuration:
198
306
  """date format
199
307
  """
200
308
 
201
- def __deepcopy__(self, memo):
309
+ def __deepcopy__(self, memo: Dict[int, Any]) -> Self:
202
310
  cls = self.__class__
203
311
  result = cls.__new__(cls)
204
312
  memo[id(self)] = result
@@ -212,11 +320,11 @@ class Configuration:
212
320
  result.debug = self.debug
213
321
  return result
214
322
 
215
- def __setattr__(self, name, value):
323
+ def __setattr__(self, name: str, value: Any) -> None:
216
324
  object.__setattr__(self, name, value)
217
325
 
218
326
  @classmethod
219
- def set_default(cls, default):
327
+ def set_default(cls, default: Optional[Self]) -> None:
220
328
  """Set default instance of configuration.
221
329
 
222
330
  It stores default configuration, which can be
@@ -227,7 +335,7 @@ class Configuration:
227
335
  cls._default = default
228
336
 
229
337
  @classmethod
230
- def get_default_copy(cls):
338
+ def get_default_copy(cls) -> Self:
231
339
  """Deprecated. Please use `get_default` instead.
232
340
 
233
341
  Deprecated. Please use `get_default` instead.
@@ -237,7 +345,7 @@ class Configuration:
237
345
  return cls.get_default()
238
346
 
239
347
  @classmethod
240
- def get_default(cls):
348
+ def get_default(cls) -> Self:
241
349
  """Return the default configuration.
242
350
 
243
351
  This method returns newly created, based on default constructor,
@@ -247,11 +355,11 @@ class Configuration:
247
355
  :return: The configuration object.
248
356
  """
249
357
  if cls._default is None:
250
- cls._default = Configuration()
358
+ cls._default = cls()
251
359
  return cls._default
252
360
 
253
361
  @property
254
- def logger_file(self):
362
+ def logger_file(self) -> Optional[str]:
255
363
  """The logger file.
256
364
 
257
365
  If the logger_file is None, then add stream handler and remove file
@@ -263,7 +371,7 @@ class Configuration:
263
371
  return self.__logger_file
264
372
 
265
373
  @logger_file.setter
266
- def logger_file(self, value):
374
+ def logger_file(self, value: Optional[str]) -> None:
267
375
  """The logger file.
268
376
 
269
377
  If the logger_file is None, then add stream handler and remove file
@@ -282,7 +390,7 @@ class Configuration:
282
390
  logger.addHandler(self.logger_file_handler)
283
391
 
284
392
  @property
285
- def debug(self):
393
+ def debug(self) -> bool:
286
394
  """Debug status
287
395
 
288
396
  :param value: The debug status, True or False.
@@ -291,7 +399,7 @@ class Configuration:
291
399
  return self.__debug
292
400
 
293
401
  @debug.setter
294
- def debug(self, value):
402
+ def debug(self, value: bool) -> None:
295
403
  """Debug status
296
404
 
297
405
  :param value: The debug status, True or False.
@@ -313,7 +421,7 @@ class Configuration:
313
421
  httplib.HTTPConnection.debuglevel = 0
314
422
 
315
423
  @property
316
- def logger_format(self):
424
+ def logger_format(self) -> str:
317
425
  """The logger format.
318
426
 
319
427
  The logger_formatter will be updated when sets logger_format.
@@ -324,7 +432,7 @@ class Configuration:
324
432
  return self.__logger_format
325
433
 
326
434
  @logger_format.setter
327
- def logger_format(self, value):
435
+ def logger_format(self, value: str) -> None:
328
436
  """The logger format.
329
437
 
330
438
  The logger_formatter will be updated when sets logger_format.
@@ -335,7 +443,7 @@ class Configuration:
335
443
  self.__logger_format = value
336
444
  self.logger_formatter = logging.Formatter(self.__logger_format)
337
445
 
338
- def get_api_key_with_prefix(self, identifier, alias=None):
446
+ def get_api_key_with_prefix(self, identifier: str, alias: Optional[str]=None) -> Optional[str]:
339
447
  """Gets API key (with prefix if set).
340
448
 
341
449
  :param identifier: The identifier of apiKey.
@@ -352,7 +460,9 @@ class Configuration:
352
460
  else:
353
461
  return key
354
462
 
355
- def get_basic_auth_token(self):
463
+ return None
464
+
465
+ def get_basic_auth_token(self) -> Optional[str]:
356
466
  """Gets HTTP basic authentication header (string).
357
467
 
358
468
  :return: The token for basic HTTP authentication.
@@ -367,15 +477,15 @@ class Configuration:
367
477
  basic_auth=username + ':' + password
368
478
  ).get('authorization')
369
479
 
370
- def auth_settings(self):
480
+ def auth_settings(self)-> AuthSettings:
371
481
  """Gets Auth Settings dict for api client.
372
482
 
373
483
  :return: The Auth Settings information dict.
374
484
  """
375
- auth = {}
485
+ auth: AuthSettings = {}
376
486
  return auth
377
487
 
378
- def to_debug_report(self):
488
+ def to_debug_report(self) -> str:
379
489
  """Gets the essential information for debugging.
380
490
 
381
491
  :return: The report for debugging.
@@ -387,7 +497,7 @@ class Configuration:
387
497
  "SDK Package Version: 1.0.0".\
388
498
  format(env=sys.platform, pyversion=sys.version)
389
499
 
390
- def get_host_settings(self):
500
+ def get_host_settings(self) -> List[HostSetting]:
391
501
  """Gets an array of host settings
392
502
 
393
503
  :return: An array of host settings
@@ -399,7 +509,12 @@ class Configuration:
399
509
  }
400
510
  ]
401
511
 
402
- def get_host_from_settings(self, index, variables=None, servers=None):
512
+ def get_host_from_settings(
513
+ self,
514
+ index: Optional[int],
515
+ variables: Optional[ServerVariablesT]=None,
516
+ servers: Optional[List[HostSetting]]=None,
517
+ ) -> str:
403
518
  """Gets host URL based on the index and variables
404
519
  :param index: array index of the host settings
405
520
  :param variables: hash of variable and the corresponding value
@@ -439,12 +554,12 @@ class Configuration:
439
554
  return url
440
555
 
441
556
  @property
442
- def host(self):
557
+ def host(self) -> str:
443
558
  """Return generated host."""
444
559
  return self.get_host_from_settings(self.server_index, variables=self.server_variables)
445
560
 
446
561
  @host.setter
447
- def host(self, value):
562
+ def host(self, value: str) -> None:
448
563
  """Fix base path."""
449
564
  self._base_path = value
450
565
  self.server_index = None
@@ -54,6 +54,7 @@ from shaped.autogen.models.rank_grid_attribute_response import RankGridAttribute
54
54
  from shaped.autogen.models.rank_response import RankResponse
55
55
  from shaped.autogen.models.redshift_dataset_config import RedshiftDatasetConfig
56
56
  from shaped.autogen.models.retrieve_request import RetrieveRequest
57
+ from shaped.autogen.models.retrieve_response import RetrieveResponse
57
58
  from shaped.autogen.models.retriever_top_k_override import RetrieverTopKOverride
58
59
  from shaped.autogen.models.rudder_stack_dataset_config import RudderStackDatasetConfig
59
60
  from shaped.autogen.models.segment_dataset_config import SegmentDatasetConfig
@@ -17,7 +17,7 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictBool, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
22
  from shaped.autogen.models.inference_config import InferenceConfig
23
23
  from typing import Optional, Set
@@ -30,8 +30,9 @@ class ComplementItemsRequest(BaseModel):
30
30
  item_ids: List[StrictStr]
31
31
  user_id: Optional[StrictStr] = None
32
32
  return_metadata: Optional[StrictBool] = None
33
+ filter_predicate: Optional[StrictStr] = Field(default=None, description="A SQL where query that can be used to filter candidate items.")
33
34
  config: Optional[InferenceConfig] = None
34
- __properties: ClassVar[List[str]] = ["item_ids", "user_id", "return_metadata", "config"]
35
+ __properties: ClassVar[List[str]] = ["item_ids", "user_id", "return_metadata", "filter_predicate", "config"]
35
36
 
36
37
  model_config = ConfigDict(
37
38
  populate_by_name=True,
@@ -90,6 +91,7 @@ class ComplementItemsRequest(BaseModel):
90
91
  "item_ids": obj.get("item_ids"),
91
92
  "user_id": obj.get("user_id"),
92
93
  "return_metadata": obj.get("return_metadata"),
94
+ "filter_predicate": obj.get("filter_predicate"),
93
95
  "config": InferenceConfig.from_dict(obj["config"]) if obj.get("config") is not None else None
94
96
  })
95
97
  return _obj
@@ -79,9 +79,9 @@ class CreateModelArguments(BaseModel):
79
79
  # override the default output from pydantic by calling `to_dict()` of each item in connectors (list)
80
80
  _items = []
81
81
  if self.connectors:
82
- for _item in self.connectors:
83
- if _item:
84
- _items.append(_item.to_dict())
82
+ for _item_connectors in self.connectors:
83
+ if _item_connectors:
84
+ _items.append(_item_connectors.to_dict())
85
85
  _dict['connectors'] = _items
86
86
  # override the default output from pydantic by calling `to_dict()` of fetch
87
87
  if self.fetch:
@@ -72,9 +72,9 @@ class HTTPValidationError(BaseModel):
72
72
  # override the default output from pydantic by calling `to_dict()` of each item in detail (list)
73
73
  _items = []
74
74
  if self.detail:
75
- for _item in self.detail:
76
- if _item:
77
- _items.append(_item.to_dict())
75
+ for _item_detail in self.detail:
76
+ if _item_detail:
77
+ _items.append(_item_detail.to_dict())
78
78
  _dict['detail'] = _items
79
79
  return _dict
80
80
 
@@ -72,9 +72,9 @@ class ListDatasetsResponse(BaseModel):
72
72
  # override the default output from pydantic by calling `to_dict()` of each item in datasets (list)
73
73
  _items = []
74
74
  if self.datasets:
75
- for _item in self.datasets:
76
- if _item:
77
- _items.append(_item.to_dict())
75
+ for _item_datasets in self.datasets:
76
+ if _item_datasets:
77
+ _items.append(_item_datasets.to_dict())
78
78
  _dict['datasets'] = _items
79
79
  return _dict
80
80
 
@@ -72,9 +72,9 @@ class ListModelsResponse(BaseModel):
72
72
  # override the default output from pydantic by calling `to_dict()` of each item in models (list)
73
73
  _items = []
74
74
  if self.models:
75
- for _item in self.models:
76
- if _item:
77
- _items.append(_item.to_dict())
75
+ for _item_models in self.models:
76
+ if _item_models:
77
+ _items.append(_item_models.to_dict())
78
78
  _dict['models'] = _items
79
79
  return _dict
80
80
 
@@ -82,9 +82,9 @@ class PostRankRequest(BaseModel):
82
82
  # override the default output from pydantic by calling `to_dict()` of each item in interactions (list)
83
83
  _items = []
84
84
  if self.interactions:
85
- for _item in self.interactions:
86
- if _item:
87
- _items.append(_item.to_dict())
85
+ for _item_interactions in self.interactions:
86
+ if _item_interactions:
87
+ _items.append(_item_interactions.to_dict())
88
88
  _dict['interactions'] = _items
89
89
  # override the default output from pydantic by calling `to_dict()` of config
90
90
  if self.config:
@@ -0,0 +1,91 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Shaped API
5
+
6
+ Welcome to Shaped's API reference docs. These provide a detailed view of the endpoints and CLI commands that Shaped provides and brief explanations of how they should be used. Shaped's API is composed of 3 components: 1. **Dataset** - used to provision and manage 'Shaped Datasets', which are persisted data views of external data. Shaped Datasets can be created from any of our 'Shaped connectors' (e.g. S3, Segment, Snowflake, etc.) and support both batch ingestion (up to a 15min delay) and stream ingestion (up to a 30 second delay) depending on the specific connector used. Shaped datasets can also be created from local files, which is particularly useful for getting started with a snapshot of data. 2. **Model Management** - used to provision and manage 'Shaped Models', which represent a system of data pipelines, training and serving infrastructure for your ranking use-case. 3. **Model Inference** - a high performance API that's used to make user-understanding requests or ranking inferences to your 'Shaped Models'. For example, the 'rank' endpoint can be used to determine for a given user id query, what is the content that is most engaging to that user. The recommended workflow to interact with the Shaped API is as follows: 1. First create 'Shaped Datasets' to sync over data that your Shaped understanding models will need. The models at the minimum need interaction data to understand behavior of your users, so start with that and add your item and user catalog data later. 2. Then create 'Shaped Models' that use your created 'Shaped Datasets' as input. Your Shaped Model will will start streaming, processing and training from your connected data immediately. After a few hours your model will have tuned all parameters based on your data and will deploy an active model. 3. You can now use the 'Model Inference' endpoints to make real-time inferences to your model based on your use-case.
7
+
8
+ The version of the OpenAPI document: 1.0.1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, StrictFloat, StrictInt, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional, Union
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class RetrieveResponse(BaseModel):
26
+ """
27
+ RetrieveResponse
28
+ """ # noqa: E501
29
+ ids: List[StrictStr]
30
+ scores: Optional[List[Union[StrictFloat, StrictInt]]] = None
31
+ metadata: Optional[List[Dict[str, Any]]] = None
32
+ __properties: ClassVar[List[str]] = ["ids", "scores", "metadata"]
33
+
34
+ model_config = ConfigDict(
35
+ populate_by_name=True,
36
+ validate_assignment=True,
37
+ protected_namespaces=(),
38
+ )
39
+
40
+
41
+ def to_str(self) -> str:
42
+ """Returns the string representation of the model using alias"""
43
+ return pprint.pformat(self.model_dump(by_alias=True))
44
+
45
+ def to_json(self) -> str:
46
+ """Returns the JSON representation of the model using alias"""
47
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
48
+ return json.dumps(self.to_dict())
49
+
50
+ @classmethod
51
+ def from_json(cls, json_str: str) -> Optional[Self]:
52
+ """Create an instance of RetrieveResponse from a JSON string"""
53
+ return cls.from_dict(json.loads(json_str))
54
+
55
+ def to_dict(self) -> Dict[str, Any]:
56
+ """Return the dictionary representation of the model using alias.
57
+
58
+ This has the following differences from calling pydantic's
59
+ `self.model_dump(by_alias=True)`:
60
+
61
+ * `None` is only added to the output dict for nullable fields that
62
+ were set at model initialization. Other fields with value `None`
63
+ are ignored.
64
+ """
65
+ excluded_fields: Set[str] = set([
66
+ ])
67
+
68
+ _dict = self.model_dump(
69
+ by_alias=True,
70
+ exclude=excluded_fields,
71
+ exclude_none=True,
72
+ )
73
+ return _dict
74
+
75
+ @classmethod
76
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
77
+ """Create an instance of RetrieveResponse from a dict"""
78
+ if obj is None:
79
+ return None
80
+
81
+ if not isinstance(obj, dict):
82
+ return cls.model_validate(obj)
83
+
84
+ _obj = cls.model_validate({
85
+ "ids": obj.get("ids"),
86
+ "scores": obj.get("scores"),
87
+ "metadata": obj.get("metadata")
88
+ })
89
+ return _obj
90
+
91
+
@@ -28,11 +28,11 @@ class RetrieverTopKOverride(BaseModel):
28
28
  """ # noqa: E501
29
29
  knn: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The number of items to retrieve from the knn retriever. This retriever makes a vector store lookup to find the most relevant items for the given query. If not set, 300 will be retrieved. Note, when a filter predicate or text query all other retrievers are disabled. ")
30
30
  chronological: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The number of items to retrieve from the chronological retriever. If not set, 300 will be retrieved. ")
31
- toplist: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The number of items to retrieve from the toplist retriever. Toplist refers to the most popular items historically. If not set, 300 will be retrieved. ")
31
+ popular: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The number of items to retrieve from the Popular retriever. Popular refers to the most popular items historically. If not set, 300 will be retrieved. ")
32
32
  trending: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The number of items to retrieve from the trending retriever. Trending refers to recently popular items. If not set, 300 will be retrieved ")
33
33
  random: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The number of items to retrieve from the random retriever. If not set, 0 will be retrieved. ")
34
34
  cold_start: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The number of items to retrieve from the cold-start retriever. This retriever pulls from the set of items with the lowest number of interactions. If not set, 50 will be retrieved. ")
35
- __properties: ClassVar[List[str]] = ["knn", "chronological", "toplist", "trending", "random", "cold_start"]
35
+ __properties: ClassVar[List[str]] = ["knn", "chronological", "popular", "trending", "random", "cold_start"]
36
36
 
37
37
  model_config = ConfigDict(
38
38
  populate_by_name=True,
@@ -87,7 +87,7 @@ class RetrieverTopKOverride(BaseModel):
87
87
  _obj = cls.model_validate({
88
88
  "knn": obj.get("knn"),
89
89
  "chronological": obj.get("chronological"),
90
- "toplist": obj.get("toplist"),
90
+ "popular": obj.get("popular"),
91
91
  "trending": obj.get("trending"),
92
92
  "random": obj.get("random"),
93
93
  "cold_start": obj.get("cold_start")
@@ -31,8 +31,9 @@ class SimilarItemRequest(BaseModel):
31
31
  user_id: Optional[StrictStr] = Field(default=None, description="An optional user to personalize results for.")
32
32
  return_metadata: Optional[StrictBool] = Field(default=False, description="If true, return the corresponding metadata for the ranked ids.")
33
33
  flush_paginations: Optional[StrictBool] = Field(default=False, description="Clears the pagination store for the given input user. This is useful if you want to implement paginations on client side or if you want to start the rankings again, e.g. on a page refresh. ")
34
+ filter_predicate: Optional[StrictStr] = Field(default=None, description="A SQL where query that can be used to filter candidate items.")
34
35
  config: Optional[InferenceConfig] = None
35
- __properties: ClassVar[List[str]] = ["item_id", "user_id", "return_metadata", "flush_paginations", "config"]
36
+ __properties: ClassVar[List[str]] = ["item_id", "user_id", "return_metadata", "flush_paginations", "filter_predicate", "config"]
36
37
 
37
38
  model_config = ConfigDict(
38
39
  populate_by_name=True,
@@ -92,6 +93,7 @@ class SimilarItemRequest(BaseModel):
92
93
  "user_id": obj.get("user_id"),
93
94
  "return_metadata": obj.get("return_metadata") if obj.get("return_metadata") is not None else False,
94
95
  "flush_paginations": obj.get("flush_paginations") if obj.get("flush_paginations") is not None else False,
96
+ "filter_predicate": obj.get("filter_predicate"),
95
97
  "config": InferenceConfig.from_dict(obj["config"]) if obj.get("config") is not None else None
96
98
  })
97
99
  return _obj
@@ -30,8 +30,9 @@ class SimilarUsersRequest(BaseModel):
30
30
  user_id: StrictStr = Field(description="The query user to find similar results for.")
31
31
  return_metadata: Optional[StrictBool] = Field(default=False, description="If true, return the corresponding metadata for the ranked ids.")
32
32
  flush_paginations: Optional[StrictBool] = Field(default=False, description="Clears the pagination store for the given input user. This is useful if you want to implement paginations on client side or if you want to start the rankings again, e.g. on a page refresh. ")
33
+ filter_predicate: Optional[StrictStr] = Field(default=None, description="A SQL where query that can be used to filter candidate users.")
33
34
  config: Optional[InferenceConfig] = None
34
- __properties: ClassVar[List[str]] = ["user_id", "return_metadata", "flush_paginations", "config"]
35
+ __properties: ClassVar[List[str]] = ["user_id", "return_metadata", "flush_paginations", "filter_predicate", "config"]
35
36
 
36
37
  model_config = ConfigDict(
37
38
  populate_by_name=True,
@@ -90,6 +91,7 @@ class SimilarUsersRequest(BaseModel):
90
91
  "user_id": obj.get("user_id"),
91
92
  "return_metadata": obj.get("return_metadata") if obj.get("return_metadata") is not None else False,
92
93
  "flush_paginations": obj.get("flush_paginations") if obj.get("flush_paginations") is not None else False,
94
+ "filter_predicate": obj.get("filter_predicate"),
93
95
  "config": InferenceConfig.from_dict(obj["config"]) if obj.get("config") is not None else None
94
96
  })
95
97
  return _obj
shaped/autogen/rest.py CHANGED
@@ -225,7 +225,7 @@ class RESTClientObject:
225
225
  headers=headers,
226
226
  preload_content=False
227
227
  )
228
- elif headers['Content-Type'] == 'text/plain' and isinstance(body, bool):
228
+ elif headers['Content-Type'].startswith('text/') and isinstance(body, bool):
229
229
  request_body = "true" if body else "false"
230
230
  r = self.pool_manager.request(
231
231
  method,
shaped/cli/shaped_cli.py CHANGED
@@ -260,9 +260,9 @@ def create_dataset_from_uri(
260
260
 
261
261
  chunk_column_definitions = {col: "String" for col in chunk_columns}
262
262
  dataset_definition = {
263
- "dataset_name": name,
263
+ "name": name,
264
264
  "schema_type": "CUSTOM",
265
- "schema": chunk_column_definitions,
265
+ "column_schema": chunk_column_definitions,
266
266
  }
267
267
  dataset_created = _create_dataset_from_payload(json.dumps(dataset_definition))
268
268
  if dataset_created:
shaped/client.py CHANGED
@@ -122,6 +122,7 @@ class Client:
122
122
  user_id: Optional[StrictStr] = None,
123
123
  return_metadata: Optional[StrictBool] = None,
124
124
  flush_paginations: Optional[StrictBool] = None,
125
+ filter_predicate: Optional[StrictStr] = None,
125
126
  config: Optional[InferenceConfig] = None,
126
127
  ):
127
128
  """
@@ -135,6 +136,7 @@ class Client:
135
136
  user_id=user_id,
136
137
  return_metadata=return_metadata,
137
138
  flush_paginations=flush_paginations,
139
+ filter_predicate=filter_predicate,
138
140
  config=config,
139
141
  )
140
142
  return (
@@ -152,6 +154,7 @@ class Client:
152
154
  user_id: StrictStr = None,
153
155
  return_metadata: Optional[StrictBool] = None,
154
156
  flush_paginations: Optional[StrictBool] = None,
157
+ filter_predicate: Optional[StrictStr] = None,
155
158
  config: Optional[InferenceConfig] = None,
156
159
  ):
157
160
  """
@@ -162,6 +165,7 @@ class Client:
162
165
  user_id=user_id,
163
166
  return_metadata=return_metadata,
164
167
  flush_paginations=flush_paginations,
168
+ filter_predicate=filter_predicate,
165
169
  config=config,
166
170
  )
167
171
  return (
@@ -180,6 +184,7 @@ class Client:
180
184
  item_ids: List[StrictStr],
181
185
  user_id: Optional[StrictStr] = None,
182
186
  return_metadata: Optional[StrictBool] = None,
187
+ filter_predicate: Optional[StrictStr] = None,
183
188
  config: Optional[InferenceConfig] = None,
184
189
  ):
185
190
  """
@@ -193,6 +198,7 @@ class Client:
193
198
  item_ids=item_ids,
194
199
  user_id=user_id,
195
200
  return_metadata=return_metadata,
201
+ filter_predicate=filter_predicate,
196
202
  config=config,
197
203
  )
198
204
  return (
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: shaped
3
- Version: 0.14.1
3
+ Version: 1.0.2
4
4
  Summary: CLI and SDK tools for interacting with the Shaped API.
5
5
  Home-page: https://github.com/shaped-ai/shaped-cli
6
6
  Author: Shaped Team
@@ -13,21 +13,31 @@ Classifier: Development Status :: 5 - Production/Stable
13
13
  Classifier: Intended Audience :: Developers
14
14
  Requires-Python: >=3.8, <3.12
15
15
  Description-Content-Type: text/markdown
16
- Requires-Dist: typer >=0.7.0
17
- Requires-Dist: requests >=2.28.1
18
- Requires-Dist: pydantic >=2.8.2
19
- Requires-Dist: pyyaml >=6.0
20
- Requires-Dist: pyarrow ==11.0.0
21
- Requires-Dist: pandas ==1.5.3
22
- Requires-Dist: tqdm ==4.65.0
23
- Requires-Dist: s3fs ==0.4.2
24
- Requires-Dist: fsspec ==2023.5.0
25
- Requires-Dist: numpy ==1.26.4
26
- Requires-Dist: urllib3 <2.1.0,>=1.25.3
16
+ Requires-Dist: typer>=0.7.0
17
+ Requires-Dist: requests>=2.28.1
18
+ Requires-Dist: pydantic>=2.8.2
19
+ Requires-Dist: pyyaml>=6.0
20
+ Requires-Dist: pyarrow==11.0.0
21
+ Requires-Dist: pandas==1.5.3
22
+ Requires-Dist: tqdm==4.65.0
23
+ Requires-Dist: s3fs==0.4.2
24
+ Requires-Dist: fsspec==2023.5.0
25
+ Requires-Dist: numpy==1.26.4
26
+ Requires-Dist: urllib3<2.1.0,>=1.25.3
27
27
  Requires-Dist: python-dateutil
28
- Requires-Dist: typing-extensions >=4.7.1
29
- Requires-Dist: pytest >=6.2.5
30
- Requires-Dist: pytest-mock ==3.14.0
28
+ Requires-Dist: typing-extensions>=4.7.1
29
+ Requires-Dist: pytest>=6.2.5
30
+ Requires-Dist: pytest-mock==3.14.0
31
+ Dynamic: author
32
+ Dynamic: author-email
33
+ Dynamic: classifier
34
+ Dynamic: description
35
+ Dynamic: description-content-type
36
+ Dynamic: home-page
37
+ Dynamic: keywords
38
+ Dynamic: requires-dist
39
+ Dynamic: requires-python
40
+ Dynamic: summary
31
41
 
32
42
  # Python SDK
33
43
 
@@ -1,26 +1,26 @@
1
- shaped/__init__.py,sha256=oPg0RwEQOD2WTwzuujrETTWpcCL9r8q76EE2tFAELVk,184
2
- shaped/client.py,sha256=v_u9LyP_1BeoFd0YOSiuNQey7Uou0XBGo6aCoabua0o,8069
3
- shaped/autogen/__init__.py,sha256=JbYo6slNApI-rKmogQZ0KrDbsWI8m0dIYdJ_PRCdzNY,6790
4
- shaped/autogen/api_client.py,sha256=HX_8aj2K5PVYdKE6gtiU5NiviukXoVVN5ju4Y7bXdDM,28704
1
+ shaped/__init__.py,sha256=ikq1AG3uapaJAzN7dx3V4WLl6Hx95vQTr_d8fO8ebJ4,184
2
+ shaped/client.py,sha256=4poRVpvupQEm3RjdQJ2zuwIkFwTZziXY0sln-v9mQck,8372
3
+ shaped/autogen/__init__.py,sha256=wKYfoKohE39ud3mAORGhwGT9Ouq9A-VoN2N2lVvM1TA,6859
4
+ shaped/autogen/api_client.py,sha256=JC6ZcpvzPYK1krMeIdH-sXBkR2XsFM0HCO5YbmFylB4,29368
5
5
  shaped/autogen/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
6
- shaped/autogen/configuration.py,sha256=YMXxgCxr4yAEKO54qZNDNSPst9X48NDvnHoeFd4sLP4,16976
6
+ shaped/autogen/configuration.py,sha256=rTPXrCmxc1gn375s6gxaeR5-DzKUZ31bJnplg77PmSE,19513
7
7
  shaped/autogen/exceptions.py,sha256=5muki093ghdifnr96i9wLiRBACuzCRIcken82pKvbXM,7873
8
- shaped/autogen/rest.py,sha256=7iqvWI7oXJ3TCbQrX4JPjmMAGNqBQ6Wm_-M20zvBrhM,11309
8
+ shaped/autogen/rest.py,sha256=ycxoXj-E1oIl1x4xuogvQJViYYrDaUgcxSNXZ6UlTik,11313
9
9
  shaped/autogen/api/__init__.py,sha256=ljAq90mlHSU5qdMLEZpf4uLd5SyLR8DcllMgDsZLFo0,242
10
- shaped/autogen/api/dataset_api.py,sha256=7Ek2Ta3z0GDQir-Sw7LPamVDsf72p7efF8_bVsWN8KU,48859
11
- shaped/autogen/api/model_inference_api.py,sha256=3ZleRwYBcEJpxIjkRH-vaVvrjNeGTCgBQK83K0f_wGU,130193
12
- shaped/autogen/api/model_management_api.py,sha256=ksFmi9JvuH6KBdGaCQz4p-iRn2mWJgR8zYcBhnHJ4b8,60494
13
- shaped/autogen/models/__init__.py,sha256=4ppE18cZEL4IeP3UrM873TALzRlCoOXw2WbxAwmHeDg,6052
10
+ shaped/autogen/api/dataset_api.py,sha256=RkOwlddbLtop1Zhdm4agP4Eic5nRVes-INylNRftQ3Q,49143
11
+ shaped/autogen/api/model_inference_api.py,sha256=JBIFALi-eR1_U4Bt_jjJf_4Mu3Mx6_CKYs3uYi1naRU,130921
12
+ shaped/autogen/api/model_management_api.py,sha256=1qRUUFCbcle1KtGH6OzhmsbK6Fk36zzAZ_CiTPHn0l4,60849
13
+ shaped/autogen/models/__init__.py,sha256=wEJt1anUDMx3Q3NnW_f-eCXee_nPrWWw8h8y1ab-IFw,6121
14
14
  shaped/autogen/models/amplitude_dataset_config.py,sha256=wsH4E2dATObPZHPnbLK9QQT5pyqmAp0cjqDCHHKhios,4770
15
15
  shaped/autogen/models/aws_pinpoint_dataset_config.py,sha256=bhCN4SezUSQ66ofuib_k7o51QNLwpTb-45HK7ubAm10,4852
16
16
  shaped/autogen/models/big_query_dataset_config.py,sha256=xNfaQOvWjDQe-tlH7bBSNvsKlYiuo0589noZ-4dPGU8,5711
17
- shaped/autogen/models/complement_items_request.py,sha256=k4HtzOtUq4Pl1_EX3bfsI6uGu4ZtnVkHuVwp-RWJiSg,5060
17
+ shaped/autogen/models/complement_items_request.py,sha256=KJLw_ztHn8smrgrgB7iinHAULG7KtjULPk6bvUVv9gY,5289
18
18
  shaped/autogen/models/complement_items_response.py,sha256=eg3f9wtW94ErrPWt3L_yQkCQi4qDkZXWDl4IHnaHTuI,4530
19
19
  shaped/autogen/models/connectors_inner.py,sha256=tsiFiE21KUz3mUqASR1OQyIwyGQC8G5KsxA6pBK9J6w,6750
20
20
  shaped/autogen/models/create_dataset_arguments.py,sha256=-yKKVi_vUMJJcilbU4BxDFN5Z0pWnJDch87b6FEvyyQ,15473
21
21
  shaped/autogen/models/create_embedding_response.py,sha256=2SiEooeVQq342thw-iap1dlW0wtUdi3OcxSGHDllvLk,4485
22
22
  shaped/autogen/models/create_item_embedding_request.py,sha256=if10EuiWUoE0RORd6ni4ou3lnOV1XAlBgqx5Xxrmbic,4566
23
- shaped/autogen/models/create_model_arguments.py,sha256=EJAf_8bFd1uTjndcZiZYoByy3hz5ukUbzwEgx07EqpU,5593
23
+ shaped/autogen/models/create_model_arguments.py,sha256=9IvLu5K75w6DO9lizNoeJVZi44ajP2BVeo0lHx5QOY0,5626
24
24
  shaped/autogen/models/create_model_response.py,sha256=vi8bUhKlbGGXvv-JxTZ9xMzxO26_acRw9lLkHDZNEEQ,4413
25
25
  shaped/autogen/models/create_user_embedding_request.py,sha256=jmv43RlAgY_4V2mvWUF74PolAo5FmTslH-jKpjlBMQE,4566
26
26
  shaped/autogen/models/custom_dataset_config.py,sha256=st8Fs4sio4lPV35ot_gW99mdarQdnJSjKSxy8t1J3kQ,6190
@@ -31,18 +31,18 @@ shaped/autogen/models/delete_model_response.py,sha256=X23iIe_LSq2kKkHuLcFgmBhizB
31
31
  shaped/autogen/models/fetch_config.py,sha256=p5tLHOmxAgY7iQ0O3Uwsd-ABmJZ7fS60oz-gAGUBINw,6032
32
32
  shaped/autogen/models/file_config.py,sha256=Xd3dVYLUjVxqnEugQsnrPEzhLO-ygbZBIVMr1idkjHg,5163
33
33
  shaped/autogen/models/file_source_config.py,sha256=pbKudXQqyx8DG_GTFGHnCTOJ3EedZLCQq7gzhxIr9cQ,4559
34
- shaped/autogen/models/http_validation_error.py,sha256=lJ6SHMqKo2lckZ_Jr__o-XmAdIWFCvLFEbhppyWDWmw,4884
34
+ shaped/autogen/models/http_validation_error.py,sha256=gQLYz56RE9XsXHl25Hus142IENnZn5kpDMp8DRXyxyA,4905
35
35
  shaped/autogen/models/inference_config.py,sha256=TL0RUsyV112PCZYA71b-FjMFyS54xwce2LrhA0KwuYg,7148
36
36
  shaped/autogen/models/insert_model_response.py,sha256=5_Y_ZeXmlwVPUvwVuZfbGhZqS24Aw63dvhT519i_nGI,4432
37
37
  shaped/autogen/models/interaction.py,sha256=YuHXFfejjkAnYogyjJZHWZ0nrmg3yHsbN7EC43U4T6E,4373
38
- shaped/autogen/models/list_datasets_response.py,sha256=8iat9Cp0sMgGDQbQnZoamxCRBdmzYmqHEoiRzmdpX0o,4871
39
- shaped/autogen/models/list_models_response.py,sha256=5AHiQyVJqD1HrObUMW2-UmC-HiRRclPzO_s17K1jPKQ,4845
38
+ shaped/autogen/models/list_datasets_response.py,sha256=ogXMA72jgaHLSBgQuuWTsbFcbGeS2v5GzhdqnclTBT4,4898
39
+ shaped/autogen/models/list_models_response.py,sha256=lLDGfP2T7Vh9sqeq6bNGc1kB--B1vNQ62sXSuqAVfBI,4866
40
40
  shaped/autogen/models/model_config.py,sha256=2iDd3ZOEVoK5vcCnEwNJoruEDN-5ojBCtNWTuNLimz0,5915
41
41
  shaped/autogen/models/model_response.py,sha256=J9iKVIUlYIalXPa7Hti76NRbMlTfecOJCchT1dxSKH0,5428
42
42
  shaped/autogen/models/mongo_db_dataset_config.py,sha256=yNjuT5CBZAtc-Gc0RtCvcUtEcWihd9h-7qzrZiniWOg,6012
43
43
  shaped/autogen/models/my_sql_dataset_config.py,sha256=63ODzapQguEyVmE6LPIGljpYfRnm9aOZMSxJmVdb8K8,8797
44
44
  shaped/autogen/models/path.py,sha256=dyMZsvg5oekbRNWTLHWzCGo4pE2yNwaCH-zS05_tExk,6741
45
- shaped/autogen/models/post_rank_request.py,sha256=5IBH4R16YF8GBMxl8UNvWih1eQjrhkEzqQvM-Q6xdj4,7975
45
+ shaped/autogen/models/post_rank_request.py,sha256=oaJh8y-nZpNGbGkA7lvZtjBzwbnp04zqzxAlTS_fBQc,8014
46
46
  shaped/autogen/models/postgres_dataset_config.py,sha256=loTx56lxMCuirIgIQF41EnGOB70Jw14CnfIeZTj7nw4,8815
47
47
  shaped/autogen/models/rank_attribute_response.py,sha256=ZRhyj3bwo16Ul78LSGPtKuJ-2xPyw8JsauzbrkFpHzk,4561
48
48
  shaped/autogen/models/rank_grid_attribute_request.py,sha256=84vVMGO8Td2j8qRfDz1l8gb3QM1a-1yY9UNmjA6pZ9A,4732
@@ -51,22 +51,23 @@ shaped/autogen/models/rank_grid_attribute_response.py,sha256=1GsgjCBZuBLn6H3P64H
51
51
  shaped/autogen/models/rank_response.py,sha256=ttP-e5744WVpA30FYHosoyNF5ytqOUoYvi4coc9tsLk,4616
52
52
  shaped/autogen/models/redshift_dataset_config.py,sha256=PB8w0ecT2vbfEvWGLOjX7lQexJGocf8d_4apPUa86Yo,6743
53
53
  shaped/autogen/models/retrieve_request.py,sha256=Llrk-9gAZS6u1q8NRv8MiRiOsAJi9QhT46Rj8hzomqQ,6066
54
- shaped/autogen/models/retriever_top_k_override.py,sha256=cP-VpLDAT_jS4ArrBt5Le2OXvA8WLIDg0zSK5a5wry0,6190
54
+ shaped/autogen/models/retrieve_response.py,sha256=AsnkhIZp8rfPoH0u7imbOZ7FfK-yMGxBS368s8TJhM4,4649
55
+ shaped/autogen/models/retriever_top_k_override.py,sha256=PQ3dLXp2Pq_l3NooKWMqA3IPpduvyyp5W_YVom3FTm8,6190
55
56
  shaped/autogen/models/rudder_stack_dataset_config.py,sha256=z3fUCHf7sPAh5yUCz8_GDNVN1LHazu3VsLvDt5EFHwM,4782
56
57
  shaped/autogen/models/segment_dataset_config.py,sha256=1OPaweyV4Pd2KGpWByAAl_yaPR-PN8R_cg_teft1XLQ,4758
57
- shaped/autogen/models/similar_item_request.py,sha256=1GKr8wMmoj7D0Zc6WkmohZRvyvOHXKGjmpY8DAx5OPE,5741
58
+ shaped/autogen/models/similar_item_request.py,sha256=pPnq9EqIpQ56KiKqdqOHCFvLwyDrtboH0r75KNbvfog,5963
58
59
  shaped/autogen/models/similar_response.py,sha256=kk8tY1oJgnuehLD4orddtAnnb5zewtVXst9NPEoFjiQ,4498
59
- shaped/autogen/models/similar_users_request.py,sha256=U9UGO5SKOQjNnMTgharXHE0L3iXRpM7i5Iy4pXcosJg,5576
60
+ shaped/autogen/models/similar_users_request.py,sha256=xbtRy90CcS2U8_rBOE8GMfOFDfUCgc5VDMIJmn5WXOg,5798
60
61
  shaped/autogen/models/snowflake_dataset_config.py,sha256=Io0IKwcE69pzJrbONXPWdMYkfjw6J8dBT1h9iKN_NRk,6974
61
62
  shaped/autogen/models/successful_response.py,sha256=sQ3oVhrvJUQ9ApgDd4jsr7eZfZvu-goghD8xZCeDFzk,4428
62
63
  shaped/autogen/models/validation_error.py,sha256=kVstUJ1nwQ6Y9kssgDBpeoKGFScWegporYC6klUoMe0,4438
63
64
  shaped/autogen/models/value_type.py,sha256=uxlGNPto3CK17jHKDRvAl3BqNCPkHlxfRBPdofi_qdM,2917
64
65
  shaped/autogen/models/view_model_response.py,sha256=4xzesZSHMcPCZHsevo5Bt_3P9jBNiEbd_PFTWQ5Q9KU,5757
65
66
  shaped/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- shaped/cli/shaped_cli.py,sha256=kOxCiPivUEjNPs4mNETGpi43_PzTXp61dN-dr9fp7C0,12822
67
- shaped-0.14.1.dist-info/METADATA,sha256=thrHS_hfUqWd74uh_yUpaFgZhGnjlJV3wZtjLBW7_YU,5448
68
- shaped-0.14.1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
69
- shaped-0.14.1.dist-info/entry_points.txt,sha256=4xoVmnNTKtmzjGNX5ezp9MCWLgi7880TtfqFByN1u5U,53
70
- shaped-0.14.1.dist-info/top_level.txt,sha256=w-lDaoadQVYpze9N9gZyK9qngb7fZCJ-KCdHLGvt0SU,7
71
- shaped-0.14.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
72
- shaped-0.14.1.dist-info/RECORD,,
67
+ shaped/cli/shaped_cli.py,sha256=k2GSO1zNKvf_o_bRcJoJUZxGQxYdyedbL7XJvPJguMU,12821
68
+ shaped-1.0.2.dist-info/METADATA,sha256=IyMKtYZlOL-NnTz3-W_9csMg_JjdmRx-poVGDrH9GJQ,5648
69
+ shaped-1.0.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
70
+ shaped-1.0.2.dist-info/entry_points.txt,sha256=4xoVmnNTKtmzjGNX5ezp9MCWLgi7880TtfqFByN1u5U,53
71
+ shaped-1.0.2.dist-info/top_level.txt,sha256=w-lDaoadQVYpze9N9gZyK9qngb7fZCJ-KCdHLGvt0SU,7
72
+ shaped-1.0.2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
73
+ shaped-1.0.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5