payi 0.1.0a63__py3-none-any.whl → 0.1.0a64__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.

Potentially problematic release.


This version of payi might be problematic. Click here for more details.

payi/_utils/_transform.py CHANGED
@@ -142,6 +142,10 @@ def _maybe_transform_key(key: str, type_: type) -> str:
142
142
  return key
143
143
 
144
144
 
145
+ def _no_transform_needed(annotation: type) -> bool:
146
+ return annotation == float or annotation == int
147
+
148
+
145
149
  def _transform_recursive(
146
150
  data: object,
147
151
  *,
@@ -184,6 +188,15 @@ def _transform_recursive(
184
188
  return cast(object, data)
185
189
 
186
190
  inner_type = extract_type_arg(stripped_type, 0)
191
+ if _no_transform_needed(inner_type):
192
+ # for some types there is no need to transform anything, so we can get a small
193
+ # perf boost from skipping that work.
194
+ #
195
+ # but we still need to convert to a list to ensure the data is json-serializable
196
+ if is_list(data):
197
+ return data
198
+ return list(data)
199
+
187
200
  return [_transform_recursive(d, annotation=annotation, inner_type=inner_type) for d in data]
188
201
 
189
202
  if is_union_type(stripped_type):
@@ -332,6 +345,15 @@ async def _async_transform_recursive(
332
345
  return cast(object, data)
333
346
 
334
347
  inner_type = extract_type_arg(stripped_type, 0)
348
+ if _no_transform_needed(inner_type):
349
+ # for some types there is no need to transform anything, so we can get a small
350
+ # perf boost from skipping that work.
351
+ #
352
+ # but we still need to convert to a list to ensure the data is json-serializable
353
+ if is_list(data):
354
+ return data
355
+ return list(data)
356
+
335
357
  return [await _async_transform_recursive(d, annotation=annotation, inner_type=inner_type) for d in data]
336
358
 
337
359
  if is_union_type(stripped_type):
payi/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "payi"
4
- __version__ = "0.1.0-alpha.63" # x-release-please-version
4
+ __version__ = "0.1.0-alpha.64" # x-release-please-version
payi/lib/helpers.py CHANGED
@@ -49,6 +49,7 @@ def create_headers(
49
49
  use_case_id: Union[str, None] = None,
50
50
  use_case_name: Union[str, None] = None,
51
51
  use_case_version: Union[int, None] = None,
52
+ route_as_resource: Union[str, None] = None,
52
53
  ) -> Dict[str, str]:
53
54
  headers: Dict[str, str] = {}
54
55
 
@@ -68,6 +69,8 @@ def create_headers(
68
69
  headers.update({ PayiHeaderNames.use_case_name: use_case_name})
69
70
  if use_case_version:
70
71
  headers.update({ PayiHeaderNames.use_case_version: str(use_case_version)})
72
+ if route_as_resource:
73
+ headers.update({ PayiHeaderNames.route_as_resource: route_as_resource})
71
74
  return headers
72
75
 
73
76
  def _resolve_payi_base_url(payi_base_url: Union[str, None]) -> str:
payi/lib/instrument.py CHANGED
@@ -23,8 +23,8 @@ from .Stopwatch import Stopwatch
23
23
 
24
24
  class PayiInstrumentConfig(TypedDict, total=False):
25
25
  proxy: bool
26
+ global_instrumentation_enabled: bool
26
27
  limit_ids: Optional["list[str]"]
27
- request_tags: Optional["list[str]"]
28
28
  experience_name: Optional[str]
29
29
  experience_id: Optional[str]
30
30
  use_case_name: Optional[str]
@@ -40,18 +40,8 @@ class _Context(TypedDict, total=False):
40
40
  use_case_id: Optional[str]
41
41
  use_case_version: Optional[int]
42
42
  limit_ids: Optional['list[str]']
43
- request_tags: Optional['list[str]']
44
43
  user_id: Optional[str]
45
44
 
46
- class _ParentState(TypedDict, total=False):
47
- experience_name: Optional[str]
48
- experience_id: Optional[str]
49
- use_case_name: Optional[str]
50
- use_case_id: Optional[str]
51
- use_case_version: Optional[int]
52
- limit_ids: Optional['list[str]']
53
- request_tags: Optional['list[str]']
54
-
55
45
  class _IsStreaming(Enum):
56
46
  false = 0
57
47
  true = 1
@@ -86,11 +76,23 @@ class _PayiInstrumentor:
86
76
  else:
87
77
  self._instrument_specific(instruments)
88
78
 
89
- if global_config and len(global_config) > 0:
79
+ global_instrumentation_enabled = global_config.pop("global_instrumentation_enabled", True) if global_config else True
80
+
81
+ if global_instrumentation_enabled:
82
+ if global_config is None:
83
+ global_config = {}
84
+ if "proxy" not in global_config:
85
+ global_config["proxy"] = False
86
+
87
+ # Use default clients if not provided for global ingest instrumentation
88
+ if not self._payi and not self._apayi and global_config.get("proxy") == False:
89
+ self._payi = Payi()
90
+ self._apayi = AsyncPayi()
91
+
90
92
  context: _Context = {}
91
93
  self._context_stack.append(context)
92
94
  # init_context will update the currrent context stack location
93
- self._init_context(context=context, parentState={}, **global_config)
95
+ self._init_context(context=context, parentContext={}, **global_config) # type: ignore
94
96
 
95
97
  def _instrument_all(self) -> None:
96
98
  self._instrument_openai()
@@ -252,31 +254,24 @@ class _PayiInstrumentor:
252
254
 
253
255
  def _setup_call_func(
254
256
  self
255
- ) -> 'tuple[_Context, _ParentState]':
257
+ ) -> 'tuple[_Context, _Context]':
256
258
  context: _Context = {}
257
- parentState: _ParentState = {}
259
+ parentContext: _Context = {}
258
260
 
259
261
  if len(self._context_stack) > 0:
260
262
  # copy current context into the upcoming context
261
263
  context = self._context_stack[-1].copy()
262
264
  context.pop("proxy")
263
- parentState["experience_name"] = context.get("experience_name", None)
264
- parentState["experience_id"] = context.get("experience_id", None)
265
- parentState["use_case_name"] = context.get("use_case_name", None)
266
- parentState["use_case_id"] = context.get("use_case_id", None)
267
- parentState["use_case_version"] = context.get("use_case_version", None)
268
- parentState["limit_ids"] = context.get("limit_ids", None)
269
- parentState["request_tags"] = context.get("request_tags", None)
265
+ parentContext = {**context}
270
266
 
271
- return (context, parentState)
267
+ return (context, parentContext)
272
268
 
273
269
  def _init_context(
274
270
  self,
275
271
  context: _Context,
276
- parentState: _ParentState,
272
+ parentContext: _Context,
277
273
  proxy: bool,
278
274
  limit_ids: Optional["list[str]"] = None,
279
- request_tags: Optional["list[str]"] = None,
280
275
  experience_name: Optional[str] = None,
281
276
  experience_id: Optional[str] = None,
282
277
  use_case_name: Optional[str]= None,
@@ -286,56 +281,72 @@ class _PayiInstrumentor:
286
281
  ) -> None:
287
282
  context["proxy"] = proxy
288
283
 
289
- # TODO use case what if caller specified epxerience / use_case ID and no name?
284
+ parent_experience_name = parentContext.get("experience_name", None)
285
+ parent_experience_id = parentContext.get("experience_id", None)
290
286
 
291
- # Handle experience name and ID logic
292
- if not experience_name:
287
+ if experience_name is None:
293
288
  # If no experience_name specified, use previous values
294
- context["experience_name"] = parentState.get("experience_name", None)
295
- context["experience_id"] = parentState.get("experience_id", None)
289
+ context["experience_name"] = parent_experience_name
290
+ context["experience_id"] = parent_experience_id
291
+ elif len(experience_name) == 0:
292
+ # Empty string explicitly blocks inheriting from the parent state
293
+ context["experience_name"] = None
294
+ context["experience_id"] = None
296
295
  else:
297
- previous_experience_name = parentState.get("experience_name", None)
298
- previous_experience_id = parentState.get("experience_id", None)
299
-
300
- # If experience_name is specified
301
- if experience_name == previous_experience_name:
296
+ # Check if experience_name is the same as the previous one
297
+ if experience_name == parent_experience_name:
302
298
  # Same experience name, use previous ID unless new one specified
303
299
  context["experience_name"] = experience_name
304
- context["experience_id"] = experience_id if experience_id else previous_experience_id
300
+ context["experience_id"] = experience_id if experience_id else parent_experience_id
305
301
  else:
306
302
  # Different experience name, use specified ID or generate one
307
303
  context["experience_name"] = experience_name
308
304
  context["experience_id"] = experience_id if experience_id else str(uuid.uuid4())
309
305
 
310
- # Handle use case name and ID logic
311
- if not use_case_name: # TODO use case
306
+ parent_use_case_name = parentContext.get("use_case_name", None)
307
+ parent_use_case_id = parentContext.get("use_case_id", None)
308
+ parent_use_case_version = parentContext.get("use_case_version", None)
309
+
310
+ if use_case_name is None:
312
311
  # If no use_case_name specified, use previous values
313
- context["use_case_name"] = parentState.get("use_case_name", None)
314
- context["use_case_id"] = parentState.get("use_case_id", None)
315
- context["use_case_version"] = parentState.get("use_case_version", None)
312
+ context["use_case_name"] = parent_use_case_name
313
+ context["use_case_id"] = parent_use_case_id
314
+ context["use_case_version"] = parent_use_case_version
315
+ elif len(use_case_name) == 0:
316
+ # Empty string explicitly blocks inheriting from the parent state
317
+ context["use_case_name"] = None
318
+ context["use_case_id"] = None
319
+ context["use_case_version"] = None
316
320
  else:
317
- previous_use_case_name = parentState.get("use_case_name", None)
318
- previous_use_case_id = parentState.get("use_case_id", None)
319
- previous_use_case_version = parentState.get("use_case_version", None)
320
-
321
- # If use_case_name is specified
322
- if use_case_name == previous_use_case_name:
321
+ if use_case_name == parent_use_case_name:
323
322
  # Same use case name, use previous ID unless new one specified
324
323
  context["use_case_name"] = use_case_name
325
- context["use_case_id"] = use_case_id if use_case_id else previous_use_case_id
326
- context["use_case_version"] = use_case_version if use_case_version else previous_use_case_version
324
+ context["use_case_id"] = use_case_id if use_case_id else parent_use_case_id
325
+ context["use_case_version"] = use_case_version if use_case_version else parent_use_case_version
327
326
  else:
328
- # Different experience name, use specified ID or generate one
327
+ # Different use case name, use specified ID or generate one
329
328
  context["use_case_name"] = use_case_name
330
329
  context["use_case_id"] = use_case_id if use_case_id else str(uuid.uuid4())
331
- context["use_case_version"] = use_case_version
332
-
333
- # set any values explicitly passed by the caller, otherwise use what is already in the context
334
- if limit_ids:
335
- context["limit_ids"] = limit_ids
336
- if request_tags:
337
- context["request_tags"] = request_tags
338
- if user_id:
330
+ context["use_case_version"] = use_case_version if use_case_version else None
331
+
332
+ parent_limit_ids = parentContext.get("limit_ids", None)
333
+ if limit_ids is None:
334
+ # use the parent limit_ids if it exists
335
+ context["limit_ids"] = parent_limit_ids
336
+ elif len(limit_ids) == 0:
337
+ # caller passing an empty array explicitly blocks inheriting from the parent state
338
+ context["limit_ids"] = None
339
+ else:
340
+ # union of new and parent lists if the parent context contains limit ids
341
+ context["limit_ids"] = list(set(limit_ids) | set(parent_limit_ids)) if parent_limit_ids else limit_ids
342
+
343
+ if user_id is None:
344
+ # use the parent user_id if it exists
345
+ context["user_id"] = parentContext.get("user_id", None)
346
+ elif len(user_id) == 0:
347
+ # caller passing an empty string explicitly blocks inheriting from the parent state
348
+ context["user_id"] = None
349
+ else:
339
350
  context["user_id"] = user_id
340
351
 
341
352
  self.set_context(context)
@@ -345,7 +356,6 @@ class _PayiInstrumentor:
345
356
  func: Any,
346
357
  proxy: bool,
347
358
  limit_ids: Optional["list[str]"],
348
- request_tags: Optional["list[str]"],
349
359
  experience_name: Optional[str],
350
360
  experience_id: Optional[str],
351
361
  use_case_name: Optional[str],
@@ -355,15 +365,14 @@ class _PayiInstrumentor:
355
365
  *args: Any,
356
366
  **kwargs: Any,
357
367
  ) -> Any:
358
- context, parentState = self._setup_call_func()
368
+ context, parentContext = self._setup_call_func()
359
369
 
360
370
  with self:
361
371
  self._init_context(
362
372
  context,
363
- parentState,
373
+ parentContext,
364
374
  proxy,
365
375
  limit_ids,
366
- request_tags,
367
376
  experience_name,
368
377
  experience_id,
369
378
  use_case_name,
@@ -377,7 +386,6 @@ class _PayiInstrumentor:
377
386
  func: Any,
378
387
  proxy: bool,
379
388
  limit_ids: Optional["list[str]"],
380
- request_tags: Optional["list[str]"],
381
389
  experience_name: Optional[str],
382
390
  experience_id: Optional[str],
383
391
  use_case_name: Optional[str],
@@ -387,15 +395,14 @@ class _PayiInstrumentor:
387
395
  *args: Any,
388
396
  **kwargs: Any,
389
397
  ) -> Any:
390
- context, parentState = self._setup_call_func()
398
+ context, parentContext = self._setup_call_func()
391
399
 
392
400
  with self:
393
401
  self._init_context(
394
402
  context,
395
- parentState,
403
+ parentContext,
396
404
  proxy,
397
405
  limit_ids,
398
- request_tags,
399
406
  experience_name,
400
407
  experience_id,
401
408
  use_case_name,
@@ -496,7 +503,7 @@ class _PayiInstrumentor:
496
503
 
497
504
  # after _udpate_headers, all metadata to add to ingest is in extra_headers, keyed by the xproxy-xxx header name
498
505
  extra_headers = kwargs.get("extra_headers", {})
499
- self._update_headers(context, extra_headers)
506
+ self._update_extra_headers(context, extra_headers)
500
507
 
501
508
  if context.get("proxy", True):
502
509
  if "extra_headers" not in kwargs:
@@ -620,7 +627,7 @@ class _PayiInstrumentor:
620
627
 
621
628
  # after _udpate_headers, all metadata to add to ingest is in extra_headers, keyed by the xproxy-xxx header name
622
629
  extra_headers = kwargs.get("extra_headers", {})
623
- self._update_headers(context, extra_headers)
630
+ self._update_extra_headers(context, extra_headers)
624
631
 
625
632
  if context.get("proxy", True):
626
633
  if "extra_headers" not in kwargs:
@@ -731,88 +738,74 @@ class _PayiInstrumentor:
731
738
  return response
732
739
 
733
740
  @staticmethod
734
- def _update_headers(
741
+ def _update_extra_headers(
735
742
  context: _Context,
736
743
  extra_headers: "dict[str, str]",
737
744
  ) -> None:
738
- limit_ids: Optional[list[str]] = context.get("limit_ids")
739
- request_tags: Optional[list[str]] = context.get("request_tags")
740
- experience_name: Optional[str] = context.get("experience_name")
741
- experience_id: Optional[str] = context.get("experience_id")
742
- use_case_name: Optional[str] = context.get("use_case_name")
743
- use_case_id: Optional[str] = context.get("use_case_id")
744
- use_case_version: Optional[int] = context.get("use_case_version")
745
- user_id: Optional[str] = context.get("user_id")
746
-
747
- # Merge limits from the decorator and extra headers
748
- if limit_ids is not None:
749
- existing_limit_ids = extra_headers.get(PayiHeaderNames.limit_ids, None)
750
-
751
- if not existing_limit_ids:
752
- extra_headers[PayiHeaderNames.limit_ids] = ",".join(limit_ids)
745
+ context_limit_ids: Optional[list[str]] = context.get("limit_ids")
746
+ context_experience_name: Optional[str] = context.get("experience_name")
747
+ context_experience_id: Optional[str] = context.get("experience_id")
748
+ context_use_case_name: Optional[str] = context.get("use_case_name")
749
+ context_use_case_id: Optional[str] = context.get("use_case_id")
750
+ context_use_case_version: Optional[int] = context.get("use_case_version")
751
+ context_user_id: Optional[str] = context.get("user_id")
752
+
753
+ # headers_limit_ids = extra_headers.get(PayiHeaderNames.limit_ids, None)
754
+
755
+ # If the caller specifies limit_ids in extra_headers, it takes precedence over the decorator
756
+ if PayiHeaderNames.limit_ids in extra_headers:
757
+ headers_limit_ids = extra_headers.get(PayiHeaderNames.limit_ids)
758
+
759
+ if headers_limit_ids is None or len(headers_limit_ids) == 0:
760
+ # headers_limit_ids is empty, remove it from extra_headers
761
+ extra_headers.pop(PayiHeaderNames.limit_ids, None)
762
+ else:
763
+ # leave the value in extra_headers
764
+ ...
765
+ elif context_limit_ids:
766
+ extra_headers[PayiHeaderNames.limit_ids] = ",".join(context_limit_ids)
767
+
768
+ if PayiHeaderNames.user_id in extra_headers:
769
+ headers_user_id = extra_headers.get(PayiHeaderNames.user_id, None)
770
+ if headers_user_id is None or len(headers_user_id) == 0:
771
+ # headers_user_id is empty, remove it from extra_headers
772
+ extra_headers.pop(PayiHeaderNames.user_id, None)
753
773
  else:
754
- existing_ids = existing_limit_ids.split(',')
755
- combined_ids = list(set(existing_ids + limit_ids))
756
- extra_headers[PayiHeaderNames.limit_ids] = ",".join(combined_ids)
757
-
758
- # Merge request from the decorator and extra headers
759
- if request_tags is not None:
760
- existing_request_tags = extra_headers.get(PayiHeaderNames.request_tags, None)
761
-
762
- if not existing_request_tags:
763
- extra_headers[PayiHeaderNames.request_tags] = ",".join(request_tags)
774
+ # leave the value in extra_headers
775
+ ...
776
+ elif context_user_id:
777
+ extra_headers[PayiHeaderNames.user_id] = context_user_id
778
+
779
+ if PayiHeaderNames.use_case_name in extra_headers:
780
+ headers_use_case_name = extra_headers.get(PayiHeaderNames.use_case_name, None)
781
+ if headers_use_case_name is None or len(headers_use_case_name) == 0:
782
+ # headers_use_case_name is empty, remove all use case related headers
783
+ extra_headers.pop(PayiHeaderNames.use_case_name, None)
784
+ extra_headers.pop(PayiHeaderNames.use_case_id, None)
785
+ extra_headers.pop(PayiHeaderNames.use_case_version, None)
764
786
  else:
765
- existing_tags = existing_request_tags.split(',')
766
- combined_tags = list(set(existing_tags + request_tags))
767
- extra_headers[PayiHeaderNames.request_tags] = ",".join(combined_tags)
768
-
769
- # inner extra_headers user_id takes precedence over outer decorator user_id
770
- if user_id is not None and extra_headers.get(PayiHeaderNames.user_id, None) is None:
771
- extra_headers[PayiHeaderNames.user_id] = user_id
772
-
773
- # inner extra_headers experience_name and experience_id take precedence over outer decorator experience_name and experience_id
774
- # if either inner value is specified, ignore outer decorator values
775
- if PayiHeaderNames.experience_name not in extra_headers and PayiHeaderNames.experience_id not in extra_headers:
776
-
777
- # use both decorator values
778
- if experience_name is not None:
779
- extra_headers[PayiHeaderNames.experience_name] = experience_name
780
- if experience_id is not None:
781
- extra_headers[PayiHeaderNames.experience_id] = experience_id
782
-
783
- elif PayiHeaderNames.experience_id in extra_headers and PayiHeaderNames.experience_name not in extra_headers:
784
- # use the decorator experience name and the inner experience id
785
- if experience_name is not None:
786
- extra_headers[PayiHeaderNames.experience_name] = experience_name
787
-
788
- else:
789
- # use the inner experience name and id as-is
790
- ...
791
-
792
- # inner extra_headers use_casee_name and use_case_id take precedence over outer decorator use_case_name and use_case_id
793
- # if either inner value is specified, ignore outer decorator values
794
- if PayiHeaderNames.use_case_name not in extra_headers and PayiHeaderNames.use_case_id not in extra_headers:
795
-
796
- # use decorator values
797
- if use_case_name is not None:
798
- extra_headers[PayiHeaderNames.use_case_name] = use_case_name
799
- if use_case_id is not None:
800
- extra_headers[PayiHeaderNames.use_case_id] = use_case_id
801
- if use_case_version is not None:
802
- extra_headers[PayiHeaderNames.use_case_version] = str(use_case_version)
803
-
804
- elif PayiHeaderNames.use_case_id in extra_headers and PayiHeaderNames.use_case_name not in extra_headers:
805
- # use the decorator experience name and the inner experience id
806
- if use_case_name is not None:
807
- extra_headers[PayiHeaderNames.use_case_name] = use_case_name
808
-
809
- # use the decorator experience version and the inner experience id
810
- if use_case_version is not None:
811
- extra_headers[PayiHeaderNames.use_case_version] = str(use_case_version) # TODO use case
812
-
813
- else:
814
- # use the inner experience name and id as-is
815
- ...
787
+ # leave the value in extra_headers
788
+ ...
789
+ elif context_use_case_name:
790
+ extra_headers[PayiHeaderNames.use_case_name] = context_use_case_name
791
+ if context_use_case_id is not None:
792
+ extra_headers[PayiHeaderNames.use_case_id] = context_use_case_id
793
+ if context_use_case_version is not None:
794
+ extra_headers[PayiHeaderNames.use_case_version] = str(context_use_case_version)
795
+
796
+ if PayiHeaderNames.experience_name in extra_headers:
797
+ headers_experience_name = extra_headers.get(PayiHeaderNames.experience_name, None)
798
+ if headers_experience_name is None or len(headers_experience_name) == 0:
799
+ # headers_experience_name is empty, remove all experience related headers
800
+ extra_headers.pop(PayiHeaderNames.experience_name, None)
801
+ extra_headers.pop(PayiHeaderNames.experience_id, None)
802
+ else:
803
+ # leave the value in extra_headers
804
+ ...
805
+ elif context_experience_name is not None:
806
+ extra_headers[PayiHeaderNames.experience_name] = context_experience_name
807
+ if context_experience_id is not None:
808
+ extra_headers[PayiHeaderNames.experience_id] = context_experience_id
816
809
 
817
810
  @staticmethod
818
811
  def update_for_vision(input: int, units: 'dict[str, Units]') -> int:
@@ -1023,18 +1016,6 @@ def payi_instrument(
1023
1016
  elif isinstance(p, AsyncPayi): # type: ignore
1024
1017
  apayi_param = p
1025
1018
 
1026
- global_context_ingest: Optional[bool] = None
1027
-
1028
- if config is not None:
1029
- if "proxy" not in config:
1030
- config["proxy"] = False
1031
- global_context_ingest = config.get("proxy") == False
1032
-
1033
- # Use default clients if not provided for global ingest instrumentation
1034
- if not payi_param and not apayi_param and global_context_ingest:
1035
- payi_param = Payi()
1036
- apayi_param = AsyncPayi()
1037
-
1038
1019
  # allow for both payi and apayi to be None for the @proxy case
1039
1020
  _instrumentor = _PayiInstrumentor(
1040
1021
  payi=payi_param,
@@ -1047,7 +1028,6 @@ def payi_instrument(
1047
1028
 
1048
1029
  def ingest(
1049
1030
  limit_ids: Optional["list[str]"] = None,
1050
- request_tags: Optional["list[str]"] = None,
1051
1031
  experience_name: Optional[str] = None,
1052
1032
  experience_id: Optional[str] = None,
1053
1033
  use_case_name: Optional[str] = None,
@@ -1066,7 +1046,6 @@ def ingest(
1066
1046
  func,
1067
1047
  False,
1068
1048
  limit_ids,
1069
- request_tags,
1070
1049
  experience_name,
1071
1050
  experience_id,
1072
1051
  use_case_name,
@@ -1085,7 +1064,6 @@ def ingest(
1085
1064
  func,
1086
1065
  False,
1087
1066
  limit_ids,
1088
- request_tags,
1089
1067
  experience_name,
1090
1068
  experience_id,
1091
1069
  use_case_name,
@@ -1100,7 +1078,6 @@ def ingest(
1100
1078
 
1101
1079
  def proxy(
1102
1080
  limit_ids: Optional["list[str]"] = None,
1103
- request_tags: Optional["list[str]"] = None,
1104
1081
  experience_name: Optional[str] = None,
1105
1082
  experience_id: Optional[str] = None,
1106
1083
  use_case_id: Optional[str] = None,
@@ -1118,7 +1095,6 @@ def proxy(
1118
1095
  func,
1119
1096
  True,
1120
1097
  limit_ids,
1121
- request_tags,
1122
1098
  experience_name,
1123
1099
  experience_id,
1124
1100
  use_case_name,
@@ -1138,7 +1114,6 @@ def proxy(
1138
1114
  func,
1139
1115
  True,
1140
1116
  limit_ids,
1141
- request_tags,
1142
1117
  experience_name,
1143
1118
  experience_id,
1144
1119
  use_case_name,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: payi
3
- Version: 0.1.0a63
3
+ Version: 0.1.0a64
4
4
  Summary: The official Python library for the payi API
5
5
  Project-URL: Homepage, https://github.com/Pay-i/pay-i-python
6
6
  Project-URL: Repository, https://github.com/Pay-i/pay-i-python
@@ -11,7 +11,7 @@ payi/_resource.py,sha256=j2jIkTr8OIC8sU6-05nxSaCyj4MaFlbZrwlyg4_xJos,1088
11
11
  payi/_response.py,sha256=CfrNS_3wbL8o9dRyRVfZQ5E1GUlA4CUIUEK8olmfGqE,28777
12
12
  payi/_streaming.py,sha256=Z_wIyo206T6Jqh2rolFg2VXZgX24PahLmpURp0-NssU,10092
13
13
  payi/_types.py,sha256=2mbMK86K3W1aMTW7sOGQ-VND6-A2IuXKm8p4sYFztBU,6141
14
- payi/_version.py,sha256=5gn07SjbIInFCLWQqQ6R8QB9o4KeaJjOx8vNoUQgSGA,165
14
+ payi/_version.py,sha256=NwcYowxE17eI_XA6hOCHPtbfRQYksPdV6qi3Qzr03Zg,165
15
15
  payi/pagination.py,sha256=k2356QGPOUSjRF2vHpwLBdF6P-2vnQzFfRIJQAHGQ7A,1258
16
16
  payi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  payi/_utils/__init__.py,sha256=PNZ_QJuzZEgyYXqkO1HVhGkj5IU9bglVUcw7H-Knjzw,2062
@@ -20,7 +20,7 @@ payi/_utils/_proxy.py,sha256=z3zsateHtb0EARTWKk8QZNHfPkqJbqwd1lM993LBwGE,1902
20
20
  payi/_utils/_reflection.py,sha256=ZmGkIgT_PuwedyNBrrKGbxoWtkpytJNU1uU4QHnmEMU,1364
21
21
  payi/_utils/_streams.py,sha256=SMC90diFFecpEg_zgDRVbdR3hSEIgVVij4taD-noMLM,289
22
22
  payi/_utils/_sync.py,sha256=TpGLrrhRNWTJtODNE6Fup3_k7zrWm1j2RlirzBwre-0,2862
23
- payi/_utils/_transform.py,sha256=asrbdx4Pf5NupzaB8QdEjypW_DgHjjkpswHT0Jum4S0,13987
23
+ payi/_utils/_transform.py,sha256=xfcRTFidCyPhQ7hXeivxpAS0x-NhTyr20iXm1cKcJYk,14857
24
24
  payi/_utils/_typing.py,sha256=nTJz0jcrQbEgxwy4TtAkNxuU0QHHlmc6mQtA6vIR8tg,4501
25
25
  payi/_utils/_utils.py,sha256=8UmbPOy_AAr2uUjjFui-VZSrVBHRj6bfNEKRp5YZP2A,12004
26
26
  payi/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224
@@ -28,8 +28,8 @@ payi/lib/AnthropicInstrumentor.py,sha256=mqSkULumXbGQ9N2Q6Qf5f0IHo0E0Ss9wPWxXaTl
28
28
  payi/lib/BedrockInstrumentor.py,sha256=UGJiPSjYEuVWLLQu4kUMVrZfx6YJhC3IX4JNoOdcJQ8,10088
29
29
  payi/lib/OpenAIInstrumentor.py,sha256=Zdjaj1l2vteujPp3Bt7zwwbveUEQx6CglB1QIniVzL8,6898
30
30
  payi/lib/Stopwatch.py,sha256=7OJlxvr2Jyb6Zr1LYCYKczRB7rDVKkIR7gc4YoleNdE,764
31
- payi/lib/helpers.py,sha256=C6asrzTVal4qbe8GVpDc74eM9SLa9LDEx2pWSPuapMU,3676
32
- payi/lib/instrument.py,sha256=RLuycwD3IFKKBqNcGY8V-cw4ATrwur82J9u48-57b1E,44143
31
+ payi/lib/helpers.py,sha256=dEscgoiCneUx1rbgayt8P-s-xi0gKiN2vWiKYMS7oiQ,3830
32
+ payi/lib/instrument.py,sha256=k8Vb0Y6Qe8UVEPcXnNJn4Ovw08fpaO1XduI77tkEslo,43182
33
33
  payi/resources/__init__.py,sha256=1rtrPLWbNt8oJGOp6nwPumKLJ-ftez0B6qwLFyfcoP4,2972
34
34
  payi/resources/ingest.py,sha256=ifKMKylIkfCF-uGFPttr_VG3vWxsqntOOBrrU4_g1zk,21627
35
35
  payi/resources/categories/__init__.py,sha256=w5gMiPdBSzJA_qfoVtFBElaoe8wGf_O63R7R1Spr6Gk,1093
@@ -135,7 +135,7 @@ payi/types/use_cases/definitions/kpi_retrieve_response.py,sha256=uQXliSvS3k-yDYw
135
135
  payi/types/use_cases/definitions/kpi_update_params.py,sha256=jbawdWAdMnsTWVH0qfQGb8W7_TXe3lq4zjSRu44d8p8,373
136
136
  payi/types/use_cases/definitions/kpi_update_response.py,sha256=zLyEoT0S8d7XHsnXZYT8tM7yDw0Aze0Mk-_Z6QeMtc8,459
137
137
  payi/types/use_cases/definitions/limit_config_create_params.py,sha256=pzQza_16N3z8cFNEKr6gPbFvuGFrwNuGxAYb--Kbo2M,449
138
- payi-0.1.0a63.dist-info/METADATA,sha256=mtsMIPCDOgNljt5rgY95i-0zIOzbsADs_SaFM6-DX-s,15290
139
- payi-0.1.0a63.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
140
- payi-0.1.0a63.dist-info/licenses/LICENSE,sha256=CQt03aM-P4a3Yg5qBg3JSLVoQS3smMyvx7tYg_6V7Gk,11334
141
- payi-0.1.0a63.dist-info/RECORD,,
138
+ payi-0.1.0a64.dist-info/METADATA,sha256=_O20WUNp7iEAAIvh7f_e0ULa7_JqhM73sx5XlGpcjT8,15290
139
+ payi-0.1.0a64.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
140
+ payi-0.1.0a64.dist-info/licenses/LICENSE,sha256=CQt03aM-P4a3Yg5qBg3JSLVoQS3smMyvx7tYg_6V7Gk,11334
141
+ payi-0.1.0a64.dist-info/RECORD,,