letta-client 0.1.127__py3-none-any.whl → 0.1.129__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
@@ -233,6 +233,7 @@ from . import (
233
233
  batches,
234
234
  blocks,
235
235
  client_side_access_tokens,
236
+ embedding_models,
236
237
  embeddings,
237
238
  groups,
238
239
  health,
@@ -551,6 +552,7 @@ __all__ = [
551
552
  "batches",
552
553
  "blocks",
553
554
  "client_side_access_tokens",
555
+ "embedding_models",
554
556
  "embeddings",
555
557
  "groups",
556
558
  "health",
@@ -10,7 +10,7 @@ from .agents.client import AgentsClient
10
10
  from .groups.client import GroupsClient
11
11
  from .identities.client import IdentitiesClient
12
12
  from .models.client import ModelsClient
13
- from .embeddings.client import EmbeddingsClient
13
+ from .embedding_models.client import EmbeddingModelsClient
14
14
  from .blocks.client import BlocksClient
15
15
  from .jobs.client import JobsClient
16
16
  from .health.client import HealthClient
@@ -20,6 +20,7 @@ from .steps.client import StepsClient
20
20
  from .tags.client import TagsClient
21
21
  from .batches.client import BatchesClient
22
22
  from .voice.client import VoiceClient
23
+ from .embeddings.client import EmbeddingsClient
23
24
  from .templates.client import TemplatesClient
24
25
  from .client_side_access_tokens.client import ClientSideAccessTokensClient
25
26
  from .projects.client import ProjectsClient
@@ -30,7 +31,7 @@ from .agents.client import AsyncAgentsClient
30
31
  from .groups.client import AsyncGroupsClient
31
32
  from .identities.client import AsyncIdentitiesClient
32
33
  from .models.client import AsyncModelsClient
33
- from .embeddings.client import AsyncEmbeddingsClient
34
+ from .embedding_models.client import AsyncEmbeddingModelsClient
34
35
  from .blocks.client import AsyncBlocksClient
35
36
  from .jobs.client import AsyncJobsClient
36
37
  from .health.client import AsyncHealthClient
@@ -40,6 +41,7 @@ from .steps.client import AsyncStepsClient
40
41
  from .tags.client import AsyncTagsClient
41
42
  from .batches.client import AsyncBatchesClient
42
43
  from .voice.client import AsyncVoiceClient
44
+ from .embeddings.client import AsyncEmbeddingsClient
43
45
  from .templates.client import AsyncTemplatesClient
44
46
  from .client_side_access_tokens.client import AsyncClientSideAccessTokensClient
45
47
  from .projects.client import AsyncProjectsClient
@@ -109,7 +111,7 @@ class LettaBase:
109
111
  self.groups = GroupsClient(client_wrapper=self._client_wrapper)
110
112
  self.identities = IdentitiesClient(client_wrapper=self._client_wrapper)
111
113
  self.models = ModelsClient(client_wrapper=self._client_wrapper)
112
- self.embeddings = EmbeddingsClient(client_wrapper=self._client_wrapper)
114
+ self.embedding_models = EmbeddingModelsClient(client_wrapper=self._client_wrapper)
113
115
  self.blocks = BlocksClient(client_wrapper=self._client_wrapper)
114
116
  self.jobs = JobsClient(client_wrapper=self._client_wrapper)
115
117
  self.health = HealthClient(client_wrapper=self._client_wrapper)
@@ -119,6 +121,7 @@ class LettaBase:
119
121
  self.tags = TagsClient(client_wrapper=self._client_wrapper)
120
122
  self.batches = BatchesClient(client_wrapper=self._client_wrapper)
121
123
  self.voice = VoiceClient(client_wrapper=self._client_wrapper)
124
+ self.embeddings = EmbeddingsClient(client_wrapper=self._client_wrapper)
122
125
  self.templates = TemplatesClient(client_wrapper=self._client_wrapper)
123
126
  self.client_side_access_tokens = ClientSideAccessTokensClient(client_wrapper=self._client_wrapper)
124
127
  self.projects = ProjectsClient(client_wrapper=self._client_wrapper)
@@ -188,7 +191,7 @@ class AsyncLettaBase:
188
191
  self.groups = AsyncGroupsClient(client_wrapper=self._client_wrapper)
189
192
  self.identities = AsyncIdentitiesClient(client_wrapper=self._client_wrapper)
190
193
  self.models = AsyncModelsClient(client_wrapper=self._client_wrapper)
191
- self.embeddings = AsyncEmbeddingsClient(client_wrapper=self._client_wrapper)
194
+ self.embedding_models = AsyncEmbeddingModelsClient(client_wrapper=self._client_wrapper)
192
195
  self.blocks = AsyncBlocksClient(client_wrapper=self._client_wrapper)
193
196
  self.jobs = AsyncJobsClient(client_wrapper=self._client_wrapper)
194
197
  self.health = AsyncHealthClient(client_wrapper=self._client_wrapper)
@@ -198,6 +201,7 @@ class AsyncLettaBase:
198
201
  self.tags = AsyncTagsClient(client_wrapper=self._client_wrapper)
199
202
  self.batches = AsyncBatchesClient(client_wrapper=self._client_wrapper)
200
203
  self.voice = AsyncVoiceClient(client_wrapper=self._client_wrapper)
204
+ self.embeddings = AsyncEmbeddingsClient(client_wrapper=self._client_wrapper)
201
205
  self.templates = AsyncTemplatesClient(client_wrapper=self._client_wrapper)
202
206
  self.client_side_access_tokens = AsyncClientSideAccessTokensClient(client_wrapper=self._client_wrapper)
203
207
  self.projects = AsyncProjectsClient(client_wrapper=self._client_wrapper)
@@ -16,7 +16,7 @@ class BaseClientWrapper:
16
16
  headers: typing.Dict[str, str] = {
17
17
  "X-Fern-Language": "Python",
18
18
  "X-Fern-SDK-Name": "letta-client",
19
- "X-Fern-SDK-Version": "0.1.127",
19
+ "X-Fern-SDK-Version": "0.1.129",
20
20
  }
21
21
  if self.token is not None:
22
22
  headers["Authorization"] = f"Bearer {self.token}"
@@ -0,0 +1,2 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
@@ -0,0 +1,108 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.client_wrapper import SyncClientWrapper
4
+ import typing
5
+ from ..core.request_options import RequestOptions
6
+ from ..types.embedding_config import EmbeddingConfig
7
+ from ..core.unchecked_base_model import construct_type
8
+ from json.decoder import JSONDecodeError
9
+ from ..core.api_error import ApiError
10
+ from ..core.client_wrapper import AsyncClientWrapper
11
+
12
+
13
+ class EmbeddingModelsClient:
14
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
15
+ self._client_wrapper = client_wrapper
16
+
17
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[EmbeddingConfig]:
18
+ """
19
+ Parameters
20
+ ----------
21
+ request_options : typing.Optional[RequestOptions]
22
+ Request-specific configuration.
23
+
24
+ Returns
25
+ -------
26
+ typing.List[EmbeddingConfig]
27
+ Successful Response
28
+
29
+ Examples
30
+ --------
31
+ from letta_client import Letta
32
+
33
+ client = Letta(
34
+ token="YOUR_TOKEN",
35
+ )
36
+ client.embedding_models.list()
37
+ """
38
+ _response = self._client_wrapper.httpx_client.request(
39
+ "v1/models/embedding",
40
+ method="GET",
41
+ request_options=request_options,
42
+ )
43
+ try:
44
+ if 200 <= _response.status_code < 300:
45
+ return typing.cast(
46
+ typing.List[EmbeddingConfig],
47
+ construct_type(
48
+ type_=typing.List[EmbeddingConfig], # type: ignore
49
+ object_=_response.json(),
50
+ ),
51
+ )
52
+ _response_json = _response.json()
53
+ except JSONDecodeError:
54
+ raise ApiError(status_code=_response.status_code, body=_response.text)
55
+ raise ApiError(status_code=_response.status_code, body=_response_json)
56
+
57
+
58
+ class AsyncEmbeddingModelsClient:
59
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
60
+ self._client_wrapper = client_wrapper
61
+
62
+ async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[EmbeddingConfig]:
63
+ """
64
+ Parameters
65
+ ----------
66
+ request_options : typing.Optional[RequestOptions]
67
+ Request-specific configuration.
68
+
69
+ Returns
70
+ -------
71
+ typing.List[EmbeddingConfig]
72
+ Successful Response
73
+
74
+ Examples
75
+ --------
76
+ import asyncio
77
+
78
+ from letta_client import AsyncLetta
79
+
80
+ client = AsyncLetta(
81
+ token="YOUR_TOKEN",
82
+ )
83
+
84
+
85
+ async def main() -> None:
86
+ await client.embedding_models.list()
87
+
88
+
89
+ asyncio.run(main())
90
+ """
91
+ _response = await self._client_wrapper.httpx_client.request(
92
+ "v1/models/embedding",
93
+ method="GET",
94
+ request_options=request_options,
95
+ )
96
+ try:
97
+ if 200 <= _response.status_code < 300:
98
+ return typing.cast(
99
+ typing.List[EmbeddingConfig],
100
+ construct_type(
101
+ type_=typing.List[EmbeddingConfig], # type: ignore
102
+ object_=_response.json(),
103
+ ),
104
+ )
105
+ _response_json = _response.json()
106
+ except JSONDecodeError:
107
+ raise ApiError(status_code=_response.status_code, body=_response.text)
108
+ raise ApiError(status_code=_response.status_code, body=_response_json)
@@ -3,8 +3,6 @@
3
3
  from ..core.client_wrapper import SyncClientWrapper
4
4
  import typing
5
5
  from ..core.request_options import RequestOptions
6
- from ..types.embedding_config import EmbeddingConfig
7
- from ..core.unchecked_base_model import construct_type
8
6
  from json.decoder import JSONDecodeError
9
7
  from ..core.api_error import ApiError
10
8
  from ..core.client_wrapper import AsyncClientWrapper
@@ -14,7 +12,7 @@ class EmbeddingsClient:
14
12
  def __init__(self, *, client_wrapper: SyncClientWrapper):
15
13
  self._client_wrapper = client_wrapper
16
14
 
17
- def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[EmbeddingConfig]:
15
+ def get_total_storage_size(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
18
16
  """
19
17
  Parameters
20
18
  ----------
@@ -23,8 +21,7 @@ class EmbeddingsClient:
23
21
 
24
22
  Returns
25
23
  -------
26
- typing.List[EmbeddingConfig]
27
- Successful Response
24
+ None
28
25
 
29
26
  Examples
30
27
  --------
@@ -33,22 +30,16 @@ class EmbeddingsClient:
33
30
  client = Letta(
34
31
  token="YOUR_TOKEN",
35
32
  )
36
- client.embeddings.list()
33
+ client.embeddings.get_total_storage_size()
37
34
  """
38
35
  _response = self._client_wrapper.httpx_client.request(
39
- "v1/models/embedding",
36
+ "v1/embeddings/get_total_storage_size",
40
37
  method="GET",
41
38
  request_options=request_options,
42
39
  )
43
40
  try:
44
41
  if 200 <= _response.status_code < 300:
45
- return typing.cast(
46
- typing.List[EmbeddingConfig],
47
- construct_type(
48
- type_=typing.List[EmbeddingConfig], # type: ignore
49
- object_=_response.json(),
50
- ),
51
- )
42
+ return
52
43
  _response_json = _response.json()
53
44
  except JSONDecodeError:
54
45
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -59,7 +50,7 @@ class AsyncEmbeddingsClient:
59
50
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
60
51
  self._client_wrapper = client_wrapper
61
52
 
62
- async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[EmbeddingConfig]:
53
+ async def get_total_storage_size(self, *, request_options: typing.Optional[RequestOptions] = None) -> None:
63
54
  """
64
55
  Parameters
65
56
  ----------
@@ -68,8 +59,7 @@ class AsyncEmbeddingsClient:
68
59
 
69
60
  Returns
70
61
  -------
71
- typing.List[EmbeddingConfig]
72
- Successful Response
62
+ None
73
63
 
74
64
  Examples
75
65
  --------
@@ -83,25 +73,19 @@ class AsyncEmbeddingsClient:
83
73
 
84
74
 
85
75
  async def main() -> None:
86
- await client.embeddings.list()
76
+ await client.embeddings.get_total_storage_size()
87
77
 
88
78
 
89
79
  asyncio.run(main())
90
80
  """
91
81
  _response = await self._client_wrapper.httpx_client.request(
92
- "v1/models/embedding",
82
+ "v1/embeddings/get_total_storage_size",
93
83
  method="GET",
94
84
  request_options=request_options,
95
85
  )
96
86
  try:
97
87
  if 200 <= _response.status_code < 300:
98
- return typing.cast(
99
- typing.List[EmbeddingConfig],
100
- construct_type(
101
- type_=typing.List[EmbeddingConfig], # type: ignore
102
- object_=_response.json(),
103
- ),
104
- )
88
+ return
105
89
  _response_json = _response.json()
106
90
  except JSONDecodeError:
107
91
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -5,13 +5,13 @@ from ..core.client_wrapper import SyncClientWrapper
5
5
  from .files.client import FilesClient
6
6
  from .passages.client import PassagesClient
7
7
  from ..core.request_options import RequestOptions
8
- from ..types.source import Source
9
- from ..core.jsonable_encoder import jsonable_encoder
10
8
  from ..core.unchecked_base_model import construct_type
11
9
  from ..errors.unprocessable_entity_error import UnprocessableEntityError
12
10
  from ..types.http_validation_error import HttpValidationError
13
11
  from json.decoder import JSONDecodeError
14
12
  from ..core.api_error import ApiError
13
+ from ..types.source import Source
14
+ from ..core.jsonable_encoder import jsonable_encoder
15
15
  from ..types.embedding_config import EmbeddingConfig
16
16
  from ..core.serialization import convert_and_respect_annotation_metadata
17
17
  from ..core.client_wrapper import AsyncClientWrapper
@@ -28,6 +28,58 @@ class SourcesClient:
28
28
  self.files = FilesClient(client_wrapper=self._client_wrapper)
29
29
  self.passages = PassagesClient(client_wrapper=self._client_wrapper)
30
30
 
31
+ def count(self, *, request_options: typing.Optional[RequestOptions] = None) -> int:
32
+ """
33
+ Count all data sources created by a user.
34
+
35
+ Parameters
36
+ ----------
37
+ request_options : typing.Optional[RequestOptions]
38
+ Request-specific configuration.
39
+
40
+ Returns
41
+ -------
42
+ int
43
+ Successful Response
44
+
45
+ Examples
46
+ --------
47
+ from letta_client import Letta
48
+
49
+ client = Letta(
50
+ token="YOUR_TOKEN",
51
+ )
52
+ client.sources.count()
53
+ """
54
+ _response = self._client_wrapper.httpx_client.request(
55
+ "v1/sources/count",
56
+ method="GET",
57
+ request_options=request_options,
58
+ )
59
+ try:
60
+ if 200 <= _response.status_code < 300:
61
+ return typing.cast(
62
+ int,
63
+ construct_type(
64
+ type_=int, # type: ignore
65
+ object_=_response.json(),
66
+ ),
67
+ )
68
+ if _response.status_code == 422:
69
+ raise UnprocessableEntityError(
70
+ typing.cast(
71
+ HttpValidationError,
72
+ construct_type(
73
+ type_=HttpValidationError, # type: ignore
74
+ object_=_response.json(),
75
+ ),
76
+ )
77
+ )
78
+ _response_json = _response.json()
79
+ except JSONDecodeError:
80
+ raise ApiError(status_code=_response.status_code, body=_response.text)
81
+ raise ApiError(status_code=_response.status_code, body=_response_json)
82
+
31
83
  def retrieve(self, source_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Source:
32
84
  """
33
85
  Get all sources
@@ -435,7 +487,14 @@ class SourcesClient:
435
487
  raise ApiError(status_code=_response.status_code, body=_response.text)
436
488
  raise ApiError(status_code=_response.status_code, body=_response_json)
437
489
 
438
- def count(self, *, request_options: typing.Optional[RequestOptions] = None) -> int:
490
+
491
+ class AsyncSourcesClient:
492
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
493
+ self._client_wrapper = client_wrapper
494
+ self.files = AsyncFilesClient(client_wrapper=self._client_wrapper)
495
+ self.passages = AsyncPassagesClient(client_wrapper=self._client_wrapper)
496
+
497
+ async def count(self, *, request_options: typing.Optional[RequestOptions] = None) -> int:
439
498
  """
440
499
  Count all data sources created by a user.
441
500
 
@@ -451,14 +510,22 @@ class SourcesClient:
451
510
 
452
511
  Examples
453
512
  --------
454
- from letta_client import Letta
513
+ import asyncio
455
514
 
456
- client = Letta(
515
+ from letta_client import AsyncLetta
516
+
517
+ client = AsyncLetta(
457
518
  token="YOUR_TOKEN",
458
519
  )
459
- client.sources.count()
520
+
521
+
522
+ async def main() -> None:
523
+ await client.sources.count()
524
+
525
+
526
+ asyncio.run(main())
460
527
  """
461
- _response = self._client_wrapper.httpx_client.request(
528
+ _response = await self._client_wrapper.httpx_client.request(
462
529
  "v1/sources/count",
463
530
  method="GET",
464
531
  request_options=request_options,
@@ -487,13 +554,6 @@ class SourcesClient:
487
554
  raise ApiError(status_code=_response.status_code, body=_response.text)
488
555
  raise ApiError(status_code=_response.status_code, body=_response_json)
489
556
 
490
-
491
- class AsyncSourcesClient:
492
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
493
- self._client_wrapper = client_wrapper
494
- self.files = AsyncFilesClient(client_wrapper=self._client_wrapper)
495
- self.passages = AsyncPassagesClient(client_wrapper=self._client_wrapper)
496
-
497
557
  async def retrieve(self, source_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Source:
498
558
  """
499
559
  Get all sources
@@ -950,63 +1010,3 @@ class AsyncSourcesClient:
950
1010
  except JSONDecodeError:
951
1011
  raise ApiError(status_code=_response.status_code, body=_response.text)
952
1012
  raise ApiError(status_code=_response.status_code, body=_response_json)
953
-
954
- async def count(self, *, request_options: typing.Optional[RequestOptions] = None) -> int:
955
- """
956
- Count all data sources created by a user.
957
-
958
- Parameters
959
- ----------
960
- request_options : typing.Optional[RequestOptions]
961
- Request-specific configuration.
962
-
963
- Returns
964
- -------
965
- int
966
- Successful Response
967
-
968
- Examples
969
- --------
970
- import asyncio
971
-
972
- from letta_client import AsyncLetta
973
-
974
- client = AsyncLetta(
975
- token="YOUR_TOKEN",
976
- )
977
-
978
-
979
- async def main() -> None:
980
- await client.sources.count()
981
-
982
-
983
- asyncio.run(main())
984
- """
985
- _response = await self._client_wrapper.httpx_client.request(
986
- "v1/sources/count",
987
- method="GET",
988
- request_options=request_options,
989
- )
990
- try:
991
- if 200 <= _response.status_code < 300:
992
- return typing.cast(
993
- int,
994
- construct_type(
995
- type_=int, # type: ignore
996
- object_=_response.json(),
997
- ),
998
- )
999
- if _response.status_code == 422:
1000
- raise UnprocessableEntityError(
1001
- typing.cast(
1002
- HttpValidationError,
1003
- construct_type(
1004
- type_=HttpValidationError, # type: ignore
1005
- object_=_response.json(),
1006
- ),
1007
- )
1008
- )
1009
- _response_json = _response.json()
1010
- except JSONDecodeError:
1011
- raise ApiError(status_code=_response.status_code, body=_response.text)
1012
- raise ApiError(status_code=_response.status_code, body=_response_json)
@@ -245,6 +245,69 @@ class ToolsClient:
245
245
  raise ApiError(status_code=_response.status_code, body=_response.text)
246
246
  raise ApiError(status_code=_response.status_code, body=_response_json)
247
247
 
248
+ def count(
249
+ self,
250
+ *,
251
+ include_base_tools: typing.Optional[bool] = None,
252
+ request_options: typing.Optional[RequestOptions] = None,
253
+ ) -> int:
254
+ """
255
+ Get a count of all tools available to agents belonging to the org of the user.
256
+
257
+ Parameters
258
+ ----------
259
+ include_base_tools : typing.Optional[bool]
260
+ Include built-in Letta tools in the count
261
+
262
+ request_options : typing.Optional[RequestOptions]
263
+ Request-specific configuration.
264
+
265
+ Returns
266
+ -------
267
+ int
268
+ Successful Response
269
+
270
+ Examples
271
+ --------
272
+ from letta_client import Letta
273
+
274
+ client = Letta(
275
+ token="YOUR_TOKEN",
276
+ )
277
+ client.tools.count()
278
+ """
279
+ _response = self._client_wrapper.httpx_client.request(
280
+ "v1/tools/count",
281
+ method="GET",
282
+ params={
283
+ "include_base_tools": include_base_tools,
284
+ },
285
+ request_options=request_options,
286
+ )
287
+ try:
288
+ if 200 <= _response.status_code < 300:
289
+ return typing.cast(
290
+ int,
291
+ construct_type(
292
+ type_=int, # type: ignore
293
+ object_=_response.json(),
294
+ ),
295
+ )
296
+ if _response.status_code == 422:
297
+ raise UnprocessableEntityError(
298
+ typing.cast(
299
+ HttpValidationError,
300
+ construct_type(
301
+ type_=HttpValidationError, # type: ignore
302
+ object_=_response.json(),
303
+ ),
304
+ )
305
+ )
306
+ _response_json = _response.json()
307
+ except JSONDecodeError:
308
+ raise ApiError(status_code=_response.status_code, body=_response.text)
309
+ raise ApiError(status_code=_response.status_code, body=_response_json)
310
+
248
311
  def list(
249
312
  self,
250
313
  *,
@@ -507,58 +570,6 @@ class ToolsClient:
507
570
  raise ApiError(status_code=_response.status_code, body=_response.text)
508
571
  raise ApiError(status_code=_response.status_code, body=_response_json)
509
572
 
510
- def count(self, *, request_options: typing.Optional[RequestOptions] = None) -> int:
511
- """
512
- Get a count of all tools available to agents belonging to the org of the user
513
-
514
- Parameters
515
- ----------
516
- request_options : typing.Optional[RequestOptions]
517
- Request-specific configuration.
518
-
519
- Returns
520
- -------
521
- int
522
- Successful Response
523
-
524
- Examples
525
- --------
526
- from letta_client import Letta
527
-
528
- client = Letta(
529
- token="YOUR_TOKEN",
530
- )
531
- client.tools.count()
532
- """
533
- _response = self._client_wrapper.httpx_client.request(
534
- "v1/tools/count",
535
- method="GET",
536
- request_options=request_options,
537
- )
538
- try:
539
- if 200 <= _response.status_code < 300:
540
- return typing.cast(
541
- int,
542
- construct_type(
543
- type_=int, # type: ignore
544
- object_=_response.json(),
545
- ),
546
- )
547
- if _response.status_code == 422:
548
- raise UnprocessableEntityError(
549
- typing.cast(
550
- HttpValidationError,
551
- construct_type(
552
- type_=HttpValidationError, # type: ignore
553
- object_=_response.json(),
554
- ),
555
- )
556
- )
557
- _response_json = _response.json()
558
- except JSONDecodeError:
559
- raise ApiError(status_code=_response.status_code, body=_response.text)
560
- raise ApiError(status_code=_response.status_code, body=_response_json)
561
-
562
573
  def upsert_base_tools(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[Tool]:
563
574
  """
564
575
  Upsert base tools
@@ -1433,6 +1444,77 @@ class AsyncToolsClient:
1433
1444
  raise ApiError(status_code=_response.status_code, body=_response.text)
1434
1445
  raise ApiError(status_code=_response.status_code, body=_response_json)
1435
1446
 
1447
+ async def count(
1448
+ self,
1449
+ *,
1450
+ include_base_tools: typing.Optional[bool] = None,
1451
+ request_options: typing.Optional[RequestOptions] = None,
1452
+ ) -> int:
1453
+ """
1454
+ Get a count of all tools available to agents belonging to the org of the user.
1455
+
1456
+ Parameters
1457
+ ----------
1458
+ include_base_tools : typing.Optional[bool]
1459
+ Include built-in Letta tools in the count
1460
+
1461
+ request_options : typing.Optional[RequestOptions]
1462
+ Request-specific configuration.
1463
+
1464
+ Returns
1465
+ -------
1466
+ int
1467
+ Successful Response
1468
+
1469
+ Examples
1470
+ --------
1471
+ import asyncio
1472
+
1473
+ from letta_client import AsyncLetta
1474
+
1475
+ client = AsyncLetta(
1476
+ token="YOUR_TOKEN",
1477
+ )
1478
+
1479
+
1480
+ async def main() -> None:
1481
+ await client.tools.count()
1482
+
1483
+
1484
+ asyncio.run(main())
1485
+ """
1486
+ _response = await self._client_wrapper.httpx_client.request(
1487
+ "v1/tools/count",
1488
+ method="GET",
1489
+ params={
1490
+ "include_base_tools": include_base_tools,
1491
+ },
1492
+ request_options=request_options,
1493
+ )
1494
+ try:
1495
+ if 200 <= _response.status_code < 300:
1496
+ return typing.cast(
1497
+ int,
1498
+ construct_type(
1499
+ type_=int, # type: ignore
1500
+ object_=_response.json(),
1501
+ ),
1502
+ )
1503
+ if _response.status_code == 422:
1504
+ raise UnprocessableEntityError(
1505
+ typing.cast(
1506
+ HttpValidationError,
1507
+ construct_type(
1508
+ type_=HttpValidationError, # type: ignore
1509
+ object_=_response.json(),
1510
+ ),
1511
+ )
1512
+ )
1513
+ _response_json = _response.json()
1514
+ except JSONDecodeError:
1515
+ raise ApiError(status_code=_response.status_code, body=_response.text)
1516
+ raise ApiError(status_code=_response.status_code, body=_response_json)
1517
+
1436
1518
  async def list(
1437
1519
  self,
1438
1520
  *,
@@ -1719,66 +1801,6 @@ class AsyncToolsClient:
1719
1801
  raise ApiError(status_code=_response.status_code, body=_response.text)
1720
1802
  raise ApiError(status_code=_response.status_code, body=_response_json)
1721
1803
 
1722
- async def count(self, *, request_options: typing.Optional[RequestOptions] = None) -> int:
1723
- """
1724
- Get a count of all tools available to agents belonging to the org of the user
1725
-
1726
- Parameters
1727
- ----------
1728
- request_options : typing.Optional[RequestOptions]
1729
- Request-specific configuration.
1730
-
1731
- Returns
1732
- -------
1733
- int
1734
- Successful Response
1735
-
1736
- Examples
1737
- --------
1738
- import asyncio
1739
-
1740
- from letta_client import AsyncLetta
1741
-
1742
- client = AsyncLetta(
1743
- token="YOUR_TOKEN",
1744
- )
1745
-
1746
-
1747
- async def main() -> None:
1748
- await client.tools.count()
1749
-
1750
-
1751
- asyncio.run(main())
1752
- """
1753
- _response = await self._client_wrapper.httpx_client.request(
1754
- "v1/tools/count",
1755
- method="GET",
1756
- request_options=request_options,
1757
- )
1758
- try:
1759
- if 200 <= _response.status_code < 300:
1760
- return typing.cast(
1761
- int,
1762
- construct_type(
1763
- type_=int, # type: ignore
1764
- object_=_response.json(),
1765
- ),
1766
- )
1767
- if _response.status_code == 422:
1768
- raise UnprocessableEntityError(
1769
- typing.cast(
1770
- HttpValidationError,
1771
- construct_type(
1772
- type_=HttpValidationError, # type: ignore
1773
- object_=_response.json(),
1774
- ),
1775
- )
1776
- )
1777
- _response_json = _response.json()
1778
- except JSONDecodeError:
1779
- raise ApiError(status_code=_response.status_code, body=_response.text)
1780
- raise ApiError(status_code=_response.status_code, body=_response_json)
1781
-
1782
1804
  async def upsert_base_tools(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[Tool]:
1783
1805
  """
1784
1806
  Upsert base tools
@@ -13,7 +13,7 @@ class LocalSandboxConfig(UncheckedBaseModel):
13
13
  Directory for the sandbox environment.
14
14
  """
15
15
 
16
- use_venv: typing.Optional[bool] = pydantic.Field(default=None)
16
+ force_create_venv: typing.Optional[bool] = pydantic.Field(default=None)
17
17
  """
18
18
  Whether or not to use the venv, or run directly in the same run loop.
19
19
  """
@@ -25,7 +25,7 @@ class LocalSandboxConfig(UncheckedBaseModel):
25
25
 
26
26
  pip_requirements: typing.Optional[typing.List[PipRequirement]] = pydantic.Field(default=None)
27
27
  """
28
- List of pip packages to install with mandatory name and optional version following semantic versioning. This only is considered when use_venv is True.
28
+ List of pip packages to install with mandatory name and optional version following semantic versioning. This only is considered when force_create_venv is True.
29
29
  """
30
30
 
31
31
  if IS_PYDANTIC_V2:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-client
3
- Version: 0.1.127
3
+ Version: 0.1.129
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=f_0v4oYXbsq-6Y56HWxtvUlCjeKPm5jeS_2TjyONXwI,16349
1
+ letta_client/__init__.py,sha256=rsGorrng28XqthYUiWILPS8dqaER3cXAfoHG0bygjYw,16395
2
2
  letta_client/agents/__init__.py,sha256=C46uidjw-_nowv5mqI7lsXUKvoW49utJHL_k-F7HIyY,1616
3
3
  letta_client/agents/blocks/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
4
4
  letta_client/agents/blocks/client.py,sha256=u5zvutxoH_DqfSLWhRtNSRBC9_ezQDx682cxkxDz3JA,23822
@@ -42,7 +42,7 @@ letta_client/agents/types/create_agent_request_response_format.py,sha256=1GUV3rF
42
42
  letta_client/agents/types/create_agent_request_tool_rules_item.py,sha256=L3FNsFTG9kVmuPbQhbCKNg3H2E5bB2Rgp92gWmGd-LM,689
43
43
  letta_client/agents/types/update_agent_response_format.py,sha256=oCoGofTKP7no6gNbDV6nJOpF8IlIplr1iPn5_7BA0cU,402
44
44
  letta_client/agents/types/update_agent_tool_rules_item.py,sha256=k9MmcVPsK-EGl8XlT3JQwdlBNLgpGw528jmi8fCFS7g,682
45
- letta_client/base_client.py,sha256=yhzh-KitRM5idpGSn16_rJ8d9RRviTnWdaZ_14ooHo4,9769
45
+ letta_client/base_client.py,sha256=nJ03_MNI8K9S356AgqrTMSsm6cqii7FxJyOkHdQ09JA,10079
46
46
  letta_client/batches/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
47
47
  letta_client/batches/client.py,sha256=AyfQpG9d856XS9BYHjxCIwu08ye03KQjuwA-jd-9kWQ,18774
48
48
  letta_client/blocks/__init__.py,sha256=c6SGOs9_YGdydYAzhe5TUiaXq52rpWT1mNMcke8qGTQ,108
@@ -61,7 +61,7 @@ letta_client/client_side_access_tokens/types/client_side_access_tokens_create_re
61
61
  letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy_data_item_access_item.py,sha256=R-H25IpNp9feSrW8Yj3h9O3UTMVvFniQJElogKxLuoE,254
62
62
  letta_client/core/__init__.py,sha256=OKbX2aCZXgHCDUsCouqv-OiX32xA6eFFCKIUH9M5Vzk,1591
63
63
  letta_client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
64
- letta_client/core/client_wrapper.py,sha256=M5e7QgBpycY6Cljkh-azqIReqTxjthSkqBHbltTJaQ4,1998
64
+ letta_client/core/client_wrapper.py,sha256=KGzHEuOuf1jvkHQycDJkO5UpOkN_l07clX2E3chPCjY,1998
65
65
  letta_client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
66
66
  letta_client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
67
67
  letta_client/core/http_client.py,sha256=Z77OIxIbL4OAB2IDqjRq_sYa5yNYAWfmdhdCSSvh6Y4,19552
@@ -72,8 +72,10 @@ letta_client/core/remove_none_from_dict.py,sha256=EU9SGgYidWq7SexuJbNs4-PZ-5Bl3V
72
72
  letta_client/core/request_options.py,sha256=h0QUNCFVdCW_7GclVySCAY2w4NhtXVBUCmHgmzaxpcg,1681
73
73
  letta_client/core/serialization.py,sha256=D9h_t-RQON3-CHWs1C4ESY9B-Yd5d-l5lnTLb_X896g,9601
74
74
  letta_client/core/unchecked_base_model.py,sha256=zliEPgLnK9yQ1dZ0mHP6agQ7H0bTZk8AvX6VC1r9oPQ,10754
75
+ letta_client/embedding_models/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
76
+ letta_client/embedding_models/client.py,sha256=3D_iX5yokSmW6QkHzHT0SRuZtv2ZVQ9s0hdlKrFbk9k,3489
75
77
  letta_client/embeddings/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
76
- letta_client/embeddings/client.py,sha256=-ZnjO_6acDCMR51qsuHpBkIj93Nnj1sbvDbF_GlhdYY,3467
78
+ letta_client/embeddings/client.py,sha256=II4xZQMLifdmBDypCYwrulsLJLKnkY_uCCcdHkMhCbk,2773
77
79
  letta_client/environment.py,sha256=91gYLF9bT4-hTPQ9dcPfmub4LgEl-T4a5kW7NXzRIJU,198
78
80
  letta_client/errors/__init__.py,sha256=sf5qYBpvBUchcwEIvulM7AYVGJkiVxknC9OX6TOpOdo,433
79
81
  letta_client/errors/bad_request_error.py,sha256=_EbO8mWqN9kFZPvIap8qa1lL_EWkRcsZe1HKV9GDWJY,264
@@ -119,7 +121,7 @@ letta_client/runs/steps/client.py,sha256=f916x0x6FH7_WzBSl6uw03l-j-QMzr7HzOMNsvC
119
121
  letta_client/runs/usage/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
120
122
  letta_client/runs/usage/client.py,sha256=ea7e0R-Lv3VtbkJ-JC4RgYSr4TI2OjD31XeNLiDmUUg,4666
121
123
  letta_client/sources/__init__.py,sha256=kswgCv4UdkSVk1Y4tsMM1HadOwvhh_Fr96VTSMV4Umc,128
122
- letta_client/sources/client.py,sha256=gr1v_xYz0M9VqqVecy2jJU8SH1Br6hWIADhrxC7ZXYI,32579
124
+ letta_client/sources/client.py,sha256=ozZYAKtO44VZoKIvex26b8nmkMzsvDMD5266Sw_gOyU,32579
123
125
  letta_client/sources/files/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
124
126
  letta_client/sources/files/client.py,sha256=R-9zHK_wWtvW-2K7erQVVh9rR7a5JC4zxmTK3rrWJoU,13289
125
127
  letta_client/sources/passages/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
@@ -138,7 +140,7 @@ letta_client/templates/types/__init__.py,sha256=dAr_dEh0BdwUxAcV1sJ9RM07Z8nCv4dC
138
140
  letta_client/templates/types/templates_list_response.py,sha256=HYloMVzk086c6fFGRYZz-Ozc_Yylozp2aPpweHS5uXI,866
139
141
  letta_client/templates/types/templates_list_response_templates_item.py,sha256=yyJq8wEOb2XIg99uhRMKoy2qD2CbuvI_5FAspwYWnfI,593
140
142
  letta_client/tools/__init__.py,sha256=XsuAkxHDA-Z98gLNNW_fiEwFP3fP4XQipflrK2bHl8k,353
141
- letta_client/tools/client.py,sha256=IH_ZwvhOVYpz1zmjbDUN_k5PBWe8kfwxSONn1lhmX3A,81896
143
+ letta_client/tools/client.py,sha256=hB-Of9ejHugQ1VAVv6bbeH_jSy02TIFeIrXeyQJcsXA,82476
142
144
  letta_client/tools/types/__init__.py,sha256=R11LYBi6lxkud_DRyaHFUHtlnbfnEI93-SEo7FL4tzs,478
143
145
  letta_client/tools/types/add_mcp_server_request.py,sha256=EieZjfOT95sjkpxXdqy7glpxF4J4J3fm6tlaHFnYk84,265
144
146
  letta_client/tools/types/add_mcp_server_response_item.py,sha256=TWdsKqGb1INhYtpGnAckz0Pw4nZShumSp4pfocRfxCA,270
@@ -273,7 +275,7 @@ letta_client/types/letta_usage_statistics.py,sha256=k6V72J2TEPd-RQBuUQxF3oylrAMc
273
275
  letta_client/types/llm_config.py,sha256=Sg1W1Jx1Ubi368RIzEhcS0wJUsFddBUq-HJ43DcBz3s,3689
274
276
  letta_client/types/llm_config_model_endpoint_type.py,sha256=HOSM5kIZDCNAVCWmASvAk52K819plqGlD66yKQ1xFkI,620
275
277
  letta_client/types/llm_config_reasoning_effort.py,sha256=AHL2nI5aeTfPhijnhaL3aiP8EoJhy_Wdupi2pyMm4sA,173
276
- letta_client/types/local_sandbox_config.py,sha256=jfe7akG_YrJJ8csLaLdev04Zg1x-PTN0XCAL4KifaZI,1387
278
+ letta_client/types/local_sandbox_config.py,sha256=gJNyEJDgyMDEP2798vbXZ5UcRu-yc_ge6XuppwtMLC0,1405
277
279
  letta_client/types/manager_type.py,sha256=GyGqWAihoS81T4RJtOcVSbiOSy-v1cpCWfRB_qU46Y0,197
278
280
  letta_client/types/max_count_per_step_tool_rule.py,sha256=sUhnoL1jolz2sygrmCuF4KfaDUGlBui-FGCXR5762Nc,1056
279
281
  letta_client/types/max_count_per_step_tool_rule_schema.py,sha256=1Zq4vblRTqFycqk7cBQ3gVCUy-MPWvE_tNXV5Fz0VTs,618
@@ -375,6 +377,6 @@ letta_client/voice/__init__.py,sha256=7hX85553PiRMtIMM12a0DSoFzsglNiUziYR2ekS84Q
375
377
  letta_client/voice/client.py,sha256=STjswa5oOLoP59QwTJvQwi73kgn0UzKOaXc2CsTRI4k,6912
376
378
  letta_client/voice/types/__init__.py,sha256=FRc3iKRTONE4N8Lf1IqvnqWZ2kXdrFFvkL7PxVcR8Ew,212
377
379
  letta_client/voice/types/create_voice_chat_completions_request_body.py,sha256=ZLfKgNK1T6IAwLEvaBVFfy7jEAoPUXP28n-nfmHkklc,391
378
- letta_client-0.1.127.dist-info/METADATA,sha256=ryuq9nPT-sCPi0IhVzMK3t74CuP4-rIDWukUsIchi20,5042
379
- letta_client-0.1.127.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
380
- letta_client-0.1.127.dist-info/RECORD,,
380
+ letta_client-0.1.129.dist-info/METADATA,sha256=_tz95T8DIxJf_ET2VHObsv6C2DMm4nbM7a7LZ9sbCBw,5042
381
+ letta_client-0.1.129.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
382
+ letta_client-0.1.129.dist-info/RECORD,,