letta-client 0.1.255__py3-none-any.whl → 0.1.257__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 letta-client might be problematic. Click here for more details.

letta_client/__init__.py CHANGED
@@ -201,7 +201,6 @@ from .types import (
201
201
  PipRequirement,
202
202
  Provider,
203
203
  ProviderCategory,
204
- ProviderCheck,
205
204
  ProviderTrace,
206
205
  ProviderType,
207
206
  ReasoningContent,
@@ -235,6 +234,7 @@ from .types import (
235
234
  StdioServerConfig,
236
235
  Step,
237
236
  StepFeedback,
237
+ StepMetrics,
238
238
  StepStatus,
239
239
  StopReasonType,
240
240
  StreamableHttpServerConfig,
@@ -609,7 +609,6 @@ __all__ = [
609
609
  "ProjectsListResponseProjectsItem",
610
610
  "Provider",
611
611
  "ProviderCategory",
612
- "ProviderCheck",
613
612
  "ProviderTrace",
614
613
  "ProviderType",
615
614
  "ReasoningContent",
@@ -643,6 +642,7 @@ __all__ = [
643
642
  "StdioServerConfig",
644
643
  "Step",
645
644
  "StepFeedback",
645
+ "StepMetrics",
646
646
  "StepStatus",
647
647
  "StepsListRequestFeedback",
648
648
  "StopReasonType",
@@ -24,10 +24,10 @@ class BaseClientWrapper:
24
24
 
25
25
  def get_headers(self) -> typing.Dict[str, str]:
26
26
  headers: typing.Dict[str, str] = {
27
- "User-Agent": "letta-client/0.1.255",
27
+ "User-Agent": "letta-client/0.1.257",
28
28
  "X-Fern-Language": "Python",
29
29
  "X-Fern-SDK-Name": "letta-client",
30
- "X-Fern-SDK-Version": "0.1.255",
30
+ "X-Fern-SDK-Version": "0.1.257",
31
31
  **(self.get_custom_headers() or {}),
32
32
  }
33
33
  if self._project is not None:
@@ -242,7 +242,7 @@ class ProvidersClient:
242
242
  )
243
243
  return _response.data
244
244
 
245
- def check(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Optional[typing.Any]:
245
+ def check(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
246
246
  """
247
247
  Parameters
248
248
  ----------
@@ -251,8 +251,7 @@ class ProvidersClient:
251
251
 
252
252
  Returns
253
253
  -------
254
- typing.Optional[typing.Any]
255
- Successful Response
254
+ None
256
255
 
257
256
  Examples
258
257
  --------
@@ -267,6 +266,70 @@ class ProvidersClient:
267
266
  _response = self._raw_client.check(request_options=request_options)
268
267
  return _response.data
269
268
 
269
+ def check_provider(
270
+ self,
271
+ *,
272
+ provider_type: ProviderType,
273
+ api_key: str,
274
+ access_key: typing.Optional[str] = OMIT,
275
+ region: typing.Optional[str] = OMIT,
276
+ base_url: typing.Optional[str] = OMIT,
277
+ api_version: typing.Optional[str] = OMIT,
278
+ request_options: typing.Optional[RequestOptions] = None,
279
+ ) -> typing.Optional[typing.Any]:
280
+ """
281
+ Parameters
282
+ ----------
283
+ provider_type : ProviderType
284
+ The type of the provider.
285
+
286
+ api_key : str
287
+ API key or secret key used for requests to the provider.
288
+
289
+ access_key : typing.Optional[str]
290
+ Access key used for requests to the provider.
291
+
292
+ region : typing.Optional[str]
293
+ Region used for requests to the provider.
294
+
295
+ base_url : typing.Optional[str]
296
+ Base URL used for requests to the provider.
297
+
298
+ api_version : typing.Optional[str]
299
+ API version used for requests to the provider.
300
+
301
+ request_options : typing.Optional[RequestOptions]
302
+ Request-specific configuration.
303
+
304
+ Returns
305
+ -------
306
+ typing.Optional[typing.Any]
307
+ Successful Response
308
+
309
+ Examples
310
+ --------
311
+ from letta_client import Letta
312
+
313
+ client = Letta(
314
+ project="YOUR_PROJECT",
315
+ token="YOUR_TOKEN",
316
+ )
317
+ client.providers.check_provider(
318
+ provider_type="anthropic",
319
+ api_key="api_key",
320
+ )
321
+ """
322
+ _response = self._raw_client.check_provider(
323
+ provider_type=provider_type,
324
+ api_key=api_key,
325
+ access_key=access_key,
326
+ region=region,
327
+ base_url=base_url,
328
+ api_version=api_version,
329
+ request_options=request_options,
330
+ )
331
+ return _response.data
332
+
270
333
 
271
334
  class AsyncProvidersClient:
272
335
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -530,7 +593,7 @@ class AsyncProvidersClient:
530
593
  )
531
594
  return _response.data
532
595
 
533
- async def check(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Optional[typing.Any]:
596
+ async def check(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
534
597
  """
535
598
  Parameters
536
599
  ----------
@@ -539,8 +602,7 @@ class AsyncProvidersClient:
539
602
 
540
603
  Returns
541
604
  -------
542
- typing.Optional[typing.Any]
543
- Successful Response
605
+ None
544
606
 
545
607
  Examples
546
608
  --------
@@ -562,3 +624,75 @@ class AsyncProvidersClient:
562
624
  """
563
625
  _response = await self._raw_client.check(request_options=request_options)
564
626
  return _response.data
627
+
628
+ async def check_provider(
629
+ self,
630
+ *,
631
+ provider_type: ProviderType,
632
+ api_key: str,
633
+ access_key: typing.Optional[str] = OMIT,
634
+ region: typing.Optional[str] = OMIT,
635
+ base_url: typing.Optional[str] = OMIT,
636
+ api_version: typing.Optional[str] = OMIT,
637
+ request_options: typing.Optional[RequestOptions] = None,
638
+ ) -> typing.Optional[typing.Any]:
639
+ """
640
+ Parameters
641
+ ----------
642
+ provider_type : ProviderType
643
+ The type of the provider.
644
+
645
+ api_key : str
646
+ API key or secret key used for requests to the provider.
647
+
648
+ access_key : typing.Optional[str]
649
+ Access key used for requests to the provider.
650
+
651
+ region : typing.Optional[str]
652
+ Region used for requests to the provider.
653
+
654
+ base_url : typing.Optional[str]
655
+ Base URL used for requests to the provider.
656
+
657
+ api_version : typing.Optional[str]
658
+ API version used for requests to the provider.
659
+
660
+ request_options : typing.Optional[RequestOptions]
661
+ Request-specific configuration.
662
+
663
+ Returns
664
+ -------
665
+ typing.Optional[typing.Any]
666
+ Successful Response
667
+
668
+ Examples
669
+ --------
670
+ import asyncio
671
+
672
+ from letta_client import AsyncLetta
673
+
674
+ client = AsyncLetta(
675
+ project="YOUR_PROJECT",
676
+ token="YOUR_TOKEN",
677
+ )
678
+
679
+
680
+ async def main() -> None:
681
+ await client.providers.check_provider(
682
+ provider_type="anthropic",
683
+ api_key="api_key",
684
+ )
685
+
686
+
687
+ asyncio.run(main())
688
+ """
689
+ _response = await self._raw_client.check_provider(
690
+ provider_type=provider_type,
691
+ api_key=api_key,
692
+ access_key=access_key,
693
+ region=region,
694
+ base_url=base_url,
695
+ api_version=api_version,
696
+ request_options=request_options,
697
+ )
698
+ return _response.data
@@ -313,12 +313,62 @@ class RawProvidersClient:
313
313
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
314
314
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
315
315
 
316
- def check(
317
- self, *, request_options: typing.Optional[RequestOptions] = None
316
+ def check(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
317
+ """
318
+ Parameters
319
+ ----------
320
+ request_options : typing.Optional[RequestOptions]
321
+ Request-specific configuration.
322
+
323
+ Returns
324
+ -------
325
+ HttpResponse[None]
326
+ """
327
+ _response = self._client_wrapper.httpx_client.request(
328
+ "v1/providers/check",
329
+ method="GET",
330
+ request_options=request_options,
331
+ )
332
+ try:
333
+ if 200 <= _response.status_code < 300:
334
+ return HttpResponse(response=_response, data=None)
335
+ _response_json = _response.json()
336
+ except JSONDecodeError:
337
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
338
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
339
+
340
+ def check_provider(
341
+ self,
342
+ *,
343
+ provider_type: ProviderType,
344
+ api_key: str,
345
+ access_key: typing.Optional[str] = OMIT,
346
+ region: typing.Optional[str] = OMIT,
347
+ base_url: typing.Optional[str] = OMIT,
348
+ api_version: typing.Optional[str] = OMIT,
349
+ request_options: typing.Optional[RequestOptions] = None,
318
350
  ) -> HttpResponse[typing.Optional[typing.Any]]:
319
351
  """
320
352
  Parameters
321
353
  ----------
354
+ provider_type : ProviderType
355
+ The type of the provider.
356
+
357
+ api_key : str
358
+ API key or secret key used for requests to the provider.
359
+
360
+ access_key : typing.Optional[str]
361
+ Access key used for requests to the provider.
362
+
363
+ region : typing.Optional[str]
364
+ Region used for requests to the provider.
365
+
366
+ base_url : typing.Optional[str]
367
+ Base URL used for requests to the provider.
368
+
369
+ api_version : typing.Optional[str]
370
+ API version used for requests to the provider.
371
+
322
372
  request_options : typing.Optional[RequestOptions]
323
373
  Request-specific configuration.
324
374
 
@@ -329,8 +379,20 @@ class RawProvidersClient:
329
379
  """
330
380
  _response = self._client_wrapper.httpx_client.request(
331
381
  "v1/providers/check",
332
- method="GET",
382
+ method="POST",
383
+ json={
384
+ "provider_type": provider_type,
385
+ "api_key": api_key,
386
+ "access_key": access_key,
387
+ "region": region,
388
+ "base_url": base_url,
389
+ "api_version": api_version,
390
+ },
391
+ headers={
392
+ "content-type": "application/json",
393
+ },
333
394
  request_options=request_options,
395
+ omit=OMIT,
334
396
  )
335
397
  try:
336
398
  if _response is None or not _response.text.strip():
@@ -656,12 +718,62 @@ class AsyncRawProvidersClient:
656
718
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
657
719
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
658
720
 
659
- async def check(
660
- self, *, request_options: typing.Optional[RequestOptions] = None
721
+ async def check(self, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[None]:
722
+ """
723
+ Parameters
724
+ ----------
725
+ request_options : typing.Optional[RequestOptions]
726
+ Request-specific configuration.
727
+
728
+ Returns
729
+ -------
730
+ AsyncHttpResponse[None]
731
+ """
732
+ _response = await self._client_wrapper.httpx_client.request(
733
+ "v1/providers/check",
734
+ method="GET",
735
+ request_options=request_options,
736
+ )
737
+ try:
738
+ if 200 <= _response.status_code < 300:
739
+ return AsyncHttpResponse(response=_response, data=None)
740
+ _response_json = _response.json()
741
+ except JSONDecodeError:
742
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
743
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
744
+
745
+ async def check_provider(
746
+ self,
747
+ *,
748
+ provider_type: ProviderType,
749
+ api_key: str,
750
+ access_key: typing.Optional[str] = OMIT,
751
+ region: typing.Optional[str] = OMIT,
752
+ base_url: typing.Optional[str] = OMIT,
753
+ api_version: typing.Optional[str] = OMIT,
754
+ request_options: typing.Optional[RequestOptions] = None,
661
755
  ) -> AsyncHttpResponse[typing.Optional[typing.Any]]:
662
756
  """
663
757
  Parameters
664
758
  ----------
759
+ provider_type : ProviderType
760
+ The type of the provider.
761
+
762
+ api_key : str
763
+ API key or secret key used for requests to the provider.
764
+
765
+ access_key : typing.Optional[str]
766
+ Access key used for requests to the provider.
767
+
768
+ region : typing.Optional[str]
769
+ Region used for requests to the provider.
770
+
771
+ base_url : typing.Optional[str]
772
+ Base URL used for requests to the provider.
773
+
774
+ api_version : typing.Optional[str]
775
+ API version used for requests to the provider.
776
+
665
777
  request_options : typing.Optional[RequestOptions]
666
778
  Request-specific configuration.
667
779
 
@@ -672,8 +784,20 @@ class AsyncRawProvidersClient:
672
784
  """
673
785
  _response = await self._client_wrapper.httpx_client.request(
674
786
  "v1/providers/check",
675
- method="GET",
787
+ method="POST",
788
+ json={
789
+ "provider_type": provider_type,
790
+ "api_key": api_key,
791
+ "access_key": access_key,
792
+ "region": region,
793
+ "base_url": base_url,
794
+ "api_version": api_version,
795
+ },
796
+ headers={
797
+ "content-type": "application/json",
798
+ },
676
799
  request_options=request_options,
800
+ omit=OMIT,
677
801
  )
678
802
  try:
679
803
  if _response is None or not _response.text.strip():
@@ -5,6 +5,7 @@ import typing
5
5
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
6
  from ..core.request_options import RequestOptions
7
7
  from ..types.step import Step
8
+ from ..types.step_metrics import StepMetrics
8
9
  from .feedback.client import AsyncFeedbackClient, FeedbackClient
9
10
  from .raw_client import AsyncRawStepsClient, RawStepsClient
10
11
  from .types.steps_list_request_feedback import StepsListRequestFeedback
@@ -156,6 +157,39 @@ class StepsClient:
156
157
  _response = self._raw_client.retrieve(step_id, request_options=request_options)
157
158
  return _response.data
158
159
 
160
+ def retrieve_step_metrics(
161
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
162
+ ) -> StepMetrics:
163
+ """
164
+ Get step metrics by step ID.
165
+
166
+ Parameters
167
+ ----------
168
+ step_id : str
169
+
170
+ request_options : typing.Optional[RequestOptions]
171
+ Request-specific configuration.
172
+
173
+ Returns
174
+ -------
175
+ StepMetrics
176
+ Successful Response
177
+
178
+ Examples
179
+ --------
180
+ from letta_client import Letta
181
+
182
+ client = Letta(
183
+ project="YOUR_PROJECT",
184
+ token="YOUR_TOKEN",
185
+ )
186
+ client.steps.retrieve_step_metrics(
187
+ step_id="step_id",
188
+ )
189
+ """
190
+ _response = self._raw_client.retrieve_step_metrics(step_id, request_options=request_options)
191
+ return _response.data
192
+
159
193
 
160
194
  class AsyncStepsClient:
161
195
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -318,3 +352,44 @@ class AsyncStepsClient:
318
352
  """
319
353
  _response = await self._raw_client.retrieve(step_id, request_options=request_options)
320
354
  return _response.data
355
+
356
+ async def retrieve_step_metrics(
357
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
358
+ ) -> StepMetrics:
359
+ """
360
+ Get step metrics by step ID.
361
+
362
+ Parameters
363
+ ----------
364
+ step_id : str
365
+
366
+ request_options : typing.Optional[RequestOptions]
367
+ Request-specific configuration.
368
+
369
+ Returns
370
+ -------
371
+ StepMetrics
372
+ Successful Response
373
+
374
+ Examples
375
+ --------
376
+ import asyncio
377
+
378
+ from letta_client import AsyncLetta
379
+
380
+ client = AsyncLetta(
381
+ project="YOUR_PROJECT",
382
+ token="YOUR_TOKEN",
383
+ )
384
+
385
+
386
+ async def main() -> None:
387
+ await client.steps.retrieve_step_metrics(
388
+ step_id="step_id",
389
+ )
390
+
391
+
392
+ asyncio.run(main())
393
+ """
394
+ _response = await self._raw_client.retrieve_step_metrics(step_id, request_options=request_options)
395
+ return _response.data
@@ -12,6 +12,7 @@ from ..core.unchecked_base_model import construct_type
12
12
  from ..errors.unprocessable_entity_error import UnprocessableEntityError
13
13
  from ..types.http_validation_error import HttpValidationError
14
14
  from ..types.step import Step
15
+ from ..types.step_metrics import StepMetrics
15
16
  from .types.steps_list_request_feedback import StepsListRequestFeedback
16
17
 
17
18
 
@@ -183,6 +184,55 @@ class RawStepsClient:
183
184
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
184
185
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
185
186
 
187
+ def retrieve_step_metrics(
188
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
189
+ ) -> HttpResponse[StepMetrics]:
190
+ """
191
+ Get step metrics by step ID.
192
+
193
+ Parameters
194
+ ----------
195
+ step_id : str
196
+
197
+ request_options : typing.Optional[RequestOptions]
198
+ Request-specific configuration.
199
+
200
+ Returns
201
+ -------
202
+ HttpResponse[StepMetrics]
203
+ Successful Response
204
+ """
205
+ _response = self._client_wrapper.httpx_client.request(
206
+ f"v1/steps/{jsonable_encoder(step_id)}/metrics",
207
+ method="GET",
208
+ request_options=request_options,
209
+ )
210
+ try:
211
+ if 200 <= _response.status_code < 300:
212
+ _data = typing.cast(
213
+ StepMetrics,
214
+ construct_type(
215
+ type_=StepMetrics, # type: ignore
216
+ object_=_response.json(),
217
+ ),
218
+ )
219
+ return HttpResponse(response=_response, data=_data)
220
+ if _response.status_code == 422:
221
+ raise UnprocessableEntityError(
222
+ headers=dict(_response.headers),
223
+ body=typing.cast(
224
+ HttpValidationError,
225
+ construct_type(
226
+ type_=HttpValidationError, # type: ignore
227
+ object_=_response.json(),
228
+ ),
229
+ ),
230
+ )
231
+ _response_json = _response.json()
232
+ except JSONDecodeError:
233
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
234
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
235
+
186
236
 
187
237
  class AsyncRawStepsClient:
188
238
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -353,3 +403,52 @@ class AsyncRawStepsClient:
353
403
  except JSONDecodeError:
354
404
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
355
405
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
406
+
407
+ async def retrieve_step_metrics(
408
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
409
+ ) -> AsyncHttpResponse[StepMetrics]:
410
+ """
411
+ Get step metrics by step ID.
412
+
413
+ Parameters
414
+ ----------
415
+ step_id : str
416
+
417
+ request_options : typing.Optional[RequestOptions]
418
+ Request-specific configuration.
419
+
420
+ Returns
421
+ -------
422
+ AsyncHttpResponse[StepMetrics]
423
+ Successful Response
424
+ """
425
+ _response = await self._client_wrapper.httpx_client.request(
426
+ f"v1/steps/{jsonable_encoder(step_id)}/metrics",
427
+ method="GET",
428
+ request_options=request_options,
429
+ )
430
+ try:
431
+ if 200 <= _response.status_code < 300:
432
+ _data = typing.cast(
433
+ StepMetrics,
434
+ construct_type(
435
+ type_=StepMetrics, # type: ignore
436
+ object_=_response.json(),
437
+ ),
438
+ )
439
+ return AsyncHttpResponse(response=_response, data=_data)
440
+ if _response.status_code == 422:
441
+ raise UnprocessableEntityError(
442
+ headers=dict(_response.headers),
443
+ body=typing.cast(
444
+ HttpValidationError,
445
+ construct_type(
446
+ type_=HttpValidationError, # type: ignore
447
+ object_=_response.json(),
448
+ ),
449
+ ),
450
+ )
451
+ _response_json = _response.json()
452
+ except JSONDecodeError:
453
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
454
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -212,7 +212,6 @@ from .payment_required_error_body import PaymentRequiredErrorBody
212
212
  from .pip_requirement import PipRequirement
213
213
  from .provider import Provider
214
214
  from .provider_category import ProviderCategory
215
- from .provider_check import ProviderCheck
216
215
  from .provider_trace import ProviderTrace
217
216
  from .provider_type import ProviderType
218
217
  from .reasoning_content import ReasoningContent
@@ -246,6 +245,7 @@ from .sse_server_config import SseServerConfig
246
245
  from .stdio_server_config import StdioServerConfig
247
246
  from .step import Step
248
247
  from .step_feedback import StepFeedback
248
+ from .step_metrics import StepMetrics
249
249
  from .step_status import StepStatus
250
250
  from .stop_reason_type import StopReasonType
251
251
  from .streamable_http_server_config import StreamableHttpServerConfig
@@ -498,7 +498,6 @@ __all__ = [
498
498
  "PipRequirement",
499
499
  "Provider",
500
500
  "ProviderCategory",
501
- "ProviderCheck",
502
501
  "ProviderTrace",
503
502
  "ProviderType",
504
503
  "ReasoningContent",
@@ -532,6 +531,7 @@ __all__ = [
532
531
  "StdioServerConfig",
533
532
  "Step",
534
533
  "StepFeedback",
534
+ "StepMetrics",
535
535
  "StepStatus",
536
536
  "StopReasonType",
537
537
  "StreamableHttpServerConfig",
@@ -0,0 +1,68 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+
9
+
10
+ class StepMetrics(UncheckedBaseModel):
11
+ id: str = pydantic.Field()
12
+ """
13
+ The id of the step this metric belongs to (matches steps.id).
14
+ """
15
+
16
+ provider_id: typing.Optional[str] = pydantic.Field(default=None)
17
+ """
18
+ The unique identifier of the provider.
19
+ """
20
+
21
+ job_id: typing.Optional[str] = pydantic.Field(default=None)
22
+ """
23
+ The unique identifier of the job.
24
+ """
25
+
26
+ agent_id: typing.Optional[str] = pydantic.Field(default=None)
27
+ """
28
+ The unique identifier of the agent.
29
+ """
30
+
31
+ llm_request_ns: typing.Optional[int] = pydantic.Field(default=None)
32
+ """
33
+ Time spent on LLM requests in nanoseconds.
34
+ """
35
+
36
+ tool_execution_ns: typing.Optional[int] = pydantic.Field(default=None)
37
+ """
38
+ Time spent on tool execution in nanoseconds.
39
+ """
40
+
41
+ step_ns: typing.Optional[int] = pydantic.Field(default=None)
42
+ """
43
+ Total time for the step in nanoseconds.
44
+ """
45
+
46
+ base_template_id: typing.Optional[str] = pydantic.Field(default=None)
47
+ """
48
+ The base template ID that the step belongs to (cloud only).
49
+ """
50
+
51
+ template_id: typing.Optional[str] = pydantic.Field(default=None)
52
+ """
53
+ The template ID that the step belongs to (cloud only).
54
+ """
55
+
56
+ project_id: typing.Optional[str] = pydantic.Field(default=None)
57
+ """
58
+ The project that the step belongs to (cloud only).
59
+ """
60
+
61
+ if IS_PYDANTIC_V2:
62
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
63
+ else:
64
+
65
+ class Config:
66
+ frozen = True
67
+ smart_union = True
68
+ extra = pydantic.Extra.allow
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-client
3
- Version: 0.1.255
3
+ Version: 0.1.257
4
4
  Summary:
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -1,4 +1,4 @@
1
- letta_client/__init__.py,sha256=isnKGKGh5zDATxOMjBPWT___aqetotIXc-wEGUsISHk,21236
1
+ letta_client/__init__.py,sha256=EAT9kpeazjGtXHZ-FuznqefNwW251mIxdqfEgPhCwXg,21232
2
2
  letta_client/agents/__init__.py,sha256=JkuWGGNJsCfnMr2DFzQ1SiqEB1tcFZnafdidODi0_DY,2166
3
3
  letta_client/agents/blocks/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
4
4
  letta_client/agents/blocks/client.py,sha256=Akx-1SYEXkmdtLtytPtdFNhVts8JkjC2aMQnnWgd8Ug,14735
@@ -92,7 +92,7 @@ letta_client/client_side_access_tokens/types/client_side_access_tokens_list_clie
92
92
  letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy_data_item_access_item.py,sha256=kNHfEWFl7u71Pu8NPqutod0a2NXfvq8il05Hqm0iBB4,284
93
93
  letta_client/core/__init__.py,sha256=tpn7rjb6C2UIkYZYIqdrNpI7Yax2jw88sXh2baxaxAI,1715
94
94
  letta_client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
95
- letta_client/core/client_wrapper.py,sha256=4i5CiybWeYjh68AA0cCYiil0uVe0uMDdhsplMKG8f3s,2776
95
+ letta_client/core/client_wrapper.py,sha256=__QCy6F8lLEBlsgTAaIsaErVk5fb1Bo4FG2kSSR78lU,2776
96
96
  letta_client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
97
97
  letta_client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
98
98
  letta_client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
@@ -163,8 +163,8 @@ letta_client/projects/types/__init__.py,sha256=o_1s2iqf5SY1ojqTeewCt6c7sxrn6gzka
163
163
  letta_client/projects/types/projects_list_response.py,sha256=WJ_LHfEujdpeFL6wM3RP1uYgsAAwFK03-rEwmr3UU1w,859
164
164
  letta_client/projects/types/projects_list_response_projects_item.py,sha256=VyG_OR4KlZIA3mgd7FCFk1kSM7NxAi3MNBzAgDrUddo,606
165
165
  letta_client/providers/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
166
- letta_client/providers/client.py,sha256=hxUV42wuRzmg9yPkNKnYs_Z96aUBbvOwnvHfpbrcn4w,15007
167
- letta_client/providers/raw_client.py,sha256=98vhRddD_tmMgQQoOlEdmPST7CwBXp8dsHznJvjksbk,25768
166
+ letta_client/providers/client.py,sha256=999OcO9GFtwmgx9PxA3lF-dEOp4ZEADsWDckeIKcKI0,18717
167
+ letta_client/providers/raw_client.py,sha256=vg3z7P7UOjtLraW6GYb2YS5q496GYoyWN1s7u127q8E,30135
168
168
  letta_client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
169
169
  letta_client/runs/__init__.py,sha256=uuC70ZTE_Kcll7LqC18Orc60J5kBAfUo4ZJFB6FRgWA,164
170
170
  letta_client/runs/client.py,sha256=FCH2UqXqe12RORyO10mcctNiDh5T1725CmKewCM76uk,9235
@@ -188,11 +188,11 @@ letta_client/sources/passages/client.py,sha256=6wo3iTfQcDLvmS-TaoX6wUXZ31t1l3VAd
188
188
  letta_client/sources/passages/raw_client.py,sha256=iPIHJs_pmSsbyu5vBFuQdopymxlfQDkEKN4cs4YKVB8,5901
189
189
  letta_client/sources/raw_client.py,sha256=6fyI0Y_agaebPZ_lOykNf1TybmRU-09vfrYEVgyGsz0,46078
190
190
  letta_client/steps/__init__.py,sha256=aL21TXi3Lbs5vlhlmonxgk1mNdx_MRPwobryhwVelpg,204
191
- letta_client/steps/client.py,sha256=bVVb6po0lW3K5ko6EfrrwxP6r2sp1bZTcUJA0NAhDS8,9823
191
+ letta_client/steps/client.py,sha256=zDoaXlSu2zLOUzXUKz3egGuc4VLE2JG_FJCXOFU6ub0,11686
192
192
  letta_client/steps/feedback/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
193
193
  letta_client/steps/feedback/client.py,sha256=KrblygVLvdLQDMDA7NigcR34fiJzd8xLsQQlJxzwyUA,3234
194
194
  letta_client/steps/feedback/raw_client.py,sha256=ILfN7fX-ZRl3_VpOVVBpbGMJO1twP02zLjnub23MlQE,4979
195
- letta_client/steps/raw_client.py,sha256=91CKYtHV365SVKzTLJLib0p-sYxhSRy421euSH9nGv4,13491
195
+ letta_client/steps/raw_client.py,sha256=0L5g4Qkz3E15jSzXWwMX3EMwonYwI0G6j8zM7oH00BY,17243
196
196
  letta_client/steps/types/__init__.py,sha256=quEAP-ttL6qyeTg4wUY4b2m2PNbdXKqOdQVXgGk0seQ,191
197
197
  letta_client/steps/types/steps_list_request_feedback.py,sha256=Au1YSn3UYRc_b4yxUT6hFqru4iJ-SX-_Ndb3PwCYGp8,172
198
198
  letta_client/tags/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
@@ -228,7 +228,7 @@ letta_client/tools/types/streaming_response.py,sha256=V1qT-XAqm-z7zffJ7W1JKPCaxZ
228
228
  letta_client/tools/types/test_mcp_server_request.py,sha256=3SqjEL3EYi7iV57TjTIzuBSKv8O3Y7qSUFrCiXEvSRk,373
229
229
  letta_client/tools/types/update_mcp_server_request.py,sha256=MHouV3iyZCTROguOQP5rOYvnmvDbBeXe5VtEejRvrEs,403
230
230
  letta_client/tools/types/update_mcp_server_response.py,sha256=BJTPHWkb8hwgd4FvftQ8eZjl2QzCQT-vZAUVnLft9hw,376
231
- letta_client/types/__init__.py,sha256=kvRmeOAPGjDrTTz4RZJpsPelL77W0tzk4POxIgOSuVc,25777
231
+ letta_client/types/__init__.py,sha256=x73IHWkxzhYCIJgthgXWlx4EJRdO5GL8dWoyXFg5rZA,25771
232
232
  letta_client/types/action_model.py,sha256=VTXavHB6J2d4MjjTMEpkuEyVaiTHyj1FGfa4j8kN6hQ,1241
233
233
  letta_client/types/action_parameters_model.py,sha256=s1mJ4tycms8UmCFsxyjKr6RbghSuqv35xpa9mK42sjg,829
234
234
  letta_client/types/action_response_model.py,sha256=LcML150OvsKimVV3sP4jSFh8pVxQXn_r_ff8DADOr3c,825
@@ -427,7 +427,6 @@ letta_client/types/payment_required_error_body.py,sha256=ODQ2fA8EF1Y_pfZocseOg1R
427
427
  letta_client/types/pip_requirement.py,sha256=A9mFgoz-yAlVHsy8vljtYdtJInfN7qL1JePPaPuTr2Y,774
428
428
  letta_client/types/provider.py,sha256=hUTNL8HIolqPtKwPdSxjElEhENIYh05nB12ma9pcZ1g,1890
429
429
  letta_client/types/provider_category.py,sha256=St4tSc_Wc5huF79kb088-L-tRz9Cj2_b5DqEoU4eDIs,156
430
- letta_client/types/provider_check.py,sha256=8azqy6twmmMMRi8sL67DzAg1hF9yRFHnhHqPizwvtxg,1326
431
430
  letta_client/types/provider_trace.py,sha256=d7_IpoEgLeqnPaElWjOp6iAL8SbeI4DZsBaaaFtkorM,2201
432
431
  letta_client/types/provider_type.py,sha256=GChNOHlZBAq3J0H4gv_1Hmg3Ju678iffL5HU6mGdKQE,481
433
432
  letta_client/types/reasoning_content.py,sha256=YPmNwwSH_toPAThpE5gq7gaxBlvvjh33csKBRdFI_iY,996
@@ -461,6 +460,7 @@ letta_client/types/sse_server_config.py,sha256=UbSmODGr5nxVMqTGtSvEbZyN2V8P_T0cO
461
460
  letta_client/types/stdio_server_config.py,sha256=kuPmwj9lDTz7jBY1jh5VH-ns3ffctWwatT_emXyyTFE,1092
462
461
  letta_client/types/step.py,sha256=r0RWvPiLUDstHKakLjMFC6SajsMNisPhiBuo32F48U4,4190
463
462
  letta_client/types/step_feedback.py,sha256=JXUkclvJ6C-6ZTgd2lteOxqEyO5KRDNQ8ronBPYMdbo,160
463
+ letta_client/types/step_metrics.py,sha256=yR_CQL3rH7S9p5NUUzIUwUVfUxtzR99s5eSsKV3TOzg,1870
464
464
  letta_client/types/step_status.py,sha256=OruAXMfFrCL0Bgoj7Wfjr8400ok5jcV4busa9NV-KIw,179
465
465
  letta_client/types/stop_reason_type.py,sha256=BgrPBP-v9YBOpGmpusQvVQqCLPNOQFl57kVrEpPMRKU,246
466
466
  letta_client/types/streamable_http_server_config.py,sha256=GNbt2KO9VepHUtiMoK6htJLpFHcGoFJaoH1Az6zkt-Q,1776
@@ -517,6 +517,6 @@ letta_client/version.py,sha256=bttKLbIhO3UonCYQlqs600zzbQgfhCCMjeXR9WRzid4,79
517
517
  letta_client/voice/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
518
518
  letta_client/voice/client.py,sha256=EbIVOQh4HXqU9McATxwga08STk-HUwPEAUr_UHqyKHg,3748
519
519
  letta_client/voice/raw_client.py,sha256=KvM_3GXuSf51bubM0RVBnxvlf20qZTFMnaA_BzhXzjQ,5938
520
- letta_client-0.1.255.dist-info/METADATA,sha256=rdg-rNaM7d-KrehBPcGb8Jm7gCP-4XfcWuFN5umSj04,5781
521
- letta_client-0.1.255.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
522
- letta_client-0.1.255.dist-info/RECORD,,
520
+ letta_client-0.1.257.dist-info/METADATA,sha256=4CnkwTdoxPRFRvUMuTLGJrSmV7T11y7LRW0xSIBCxSM,5781
521
+ letta_client-0.1.257.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
522
+ letta_client-0.1.257.dist-info/RECORD,,
@@ -1,49 +0,0 @@
1
- # This file was auto-generated by Fern from our API Definition.
2
-
3
- import typing
4
-
5
- import pydantic
6
- from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
- from ..core.unchecked_base_model import UncheckedBaseModel
8
- from .provider_type import ProviderType
9
-
10
-
11
- class ProviderCheck(UncheckedBaseModel):
12
- provider_type: ProviderType = pydantic.Field()
13
- """
14
- The type of the provider.
15
- """
16
-
17
- api_key: str = pydantic.Field()
18
- """
19
- API key or secret key used for requests to the provider.
20
- """
21
-
22
- access_key: typing.Optional[str] = pydantic.Field(default=None)
23
- """
24
- Access key used for requests to the provider.
25
- """
26
-
27
- region: typing.Optional[str] = pydantic.Field(default=None)
28
- """
29
- Region used for requests to the provider.
30
- """
31
-
32
- base_url: typing.Optional[str] = pydantic.Field(default=None)
33
- """
34
- Base URL used for requests to the provider.
35
- """
36
-
37
- api_version: typing.Optional[str] = pydantic.Field(default=None)
38
- """
39
- API version used for requests to the provider.
40
- """
41
-
42
- if IS_PYDANTIC_V2:
43
- model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
44
- else:
45
-
46
- class Config:
47
- frozen = True
48
- smart_union = True
49
- extra = pydantic.Extra.allow