letta-client 0.1.114__py3-none-any.whl → 0.1.116__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.

Files changed (29) hide show
  1. letta_client/__init__.py +32 -2
  2. letta_client/base_client.py +8 -0
  3. letta_client/client_side_access_tokens/__init__.py +19 -0
  4. letta_client/client_side_access_tokens/client.py +365 -0
  5. letta_client/client_side_access_tokens/types/__init__.py +29 -0
  6. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_request_policy_item.py +24 -0
  7. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_request_policy_item_access_item.py +7 -0
  8. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_response.py +27 -0
  9. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_response_policy.py +23 -0
  10. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_response_policy_data_item.py +24 -0
  11. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_response_policy_data_item_access_item.py +7 -0
  12. letta_client/core/client_wrapper.py +1 -1
  13. letta_client/errors/__init__.py +2 -1
  14. letta_client/errors/bad_request_error.py +9 -0
  15. letta_client/projects/__init__.py +5 -0
  16. letta_client/projects/client.py +148 -0
  17. letta_client/projects/types/__init__.py +6 -0
  18. letta_client/projects/types/projects_list_projects_response.py +23 -0
  19. letta_client/projects/types/projects_list_projects_response_projects_item.py +21 -0
  20. letta_client/templates/__init__.py +10 -2
  21. letta_client/templates/client.py +137 -0
  22. letta_client/templates/types/__init__.py +7 -1
  23. letta_client/templates/types/templates_list_templates_response.py +23 -0
  24. letta_client/templates/types/templates_list_templates_response_templates_item.py +20 -0
  25. letta_client/types/__init__.py +2 -0
  26. letta_client/types/bad_request_error_body.py +19 -0
  27. {letta_client-0.1.114.dist-info → letta_client-0.1.116.dist-info}/METADATA +1 -1
  28. {letta_client-0.1.114.dist-info → letta_client-0.1.116.dist-info}/RECORD +29 -11
  29. {letta_client-0.1.114.dist-info → letta_client-0.1.116.dist-info}/WHEEL +0 -0
letta_client/__init__.py CHANGED
@@ -19,6 +19,7 @@ from .types import (
19
19
  AuthRequest,
20
20
  AuthResponse,
21
21
  AuthSchemeField,
22
+ BadRequestErrorBody,
22
23
  BaseToolRuleSchema,
23
24
  Block,
24
25
  BlockUpdate,
@@ -220,15 +221,17 @@ from .types import (
220
221
  WebSearchOptionsUserLocation,
221
222
  WebSearchOptionsUserLocationApproximate,
222
223
  )
223
- from .errors import ConflictError, InternalServerError, NotFoundError, UnprocessableEntityError
224
+ from .errors import BadRequestError, ConflictError, InternalServerError, NotFoundError, UnprocessableEntityError
224
225
  from . import (
225
226
  agents,
226
227
  blocks,
228
+ client_side_access_tokens,
227
229
  groups,
228
230
  health,
229
231
  identities,
230
232
  jobs,
231
233
  models,
234
+ projects,
232
235
  providers,
233
236
  runs,
234
237
  sources,
@@ -250,9 +253,22 @@ from .agents import (
250
253
  UpdateAgentToolRulesItem,
251
254
  )
252
255
  from .client import AsyncLetta, Letta
256
+ from .client_side_access_tokens import (
257
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem,
258
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem,
259
+ ClientSideAccessTokensCreateClientSideAccessTokenResponse,
260
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy,
261
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem,
262
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem,
263
+ )
253
264
  from .environment import LettaEnvironment
254
265
  from .groups import GroupCreateManagerConfig, GroupUpdateManagerConfig
255
- from .templates import TemplatesCreateAgentsResponse
266
+ from .projects import ProjectsListProjectsResponse, ProjectsListProjectsResponseProjectsItem
267
+ from .templates import (
268
+ TemplatesCreateAgentsResponse,
269
+ TemplatesListTemplatesResponse,
270
+ TemplatesListTemplatesResponseTemplatesItem,
271
+ )
256
272
  from .tools import (
257
273
  AddMcpServerRequest,
258
274
  AddMcpServerResponseItem,
@@ -291,6 +307,8 @@ __all__ = [
291
307
  "AuthRequest",
292
308
  "AuthResponse",
293
309
  "AuthSchemeField",
310
+ "BadRequestError",
311
+ "BadRequestErrorBody",
294
312
  "BaseToolRuleSchema",
295
313
  "Block",
296
314
  "BlockUpdate",
@@ -324,6 +342,12 @@ __all__ = [
324
342
  "ChatCompletionUserMessageParamContentItem",
325
343
  "ChildToolRule",
326
344
  "ChildToolRuleSchema",
345
+ "ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem",
346
+ "ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem",
347
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponse",
348
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy",
349
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem",
350
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem",
327
351
  "CompletionCreateParamsNonStreaming",
328
352
  "CompletionCreateParamsNonStreamingFunctionCall",
329
353
  "CompletionCreateParamsNonStreamingMessagesItem",
@@ -436,6 +460,8 @@ __all__ = [
436
460
  "ParentToolRule",
437
461
  "Passage",
438
462
  "PipRequirement",
463
+ "ProjectsListProjectsResponse",
464
+ "ProjectsListProjectsResponseProjectsItem",
439
465
  "Provider",
440
466
  "ReasoningContent",
441
467
  "ReasoningMessage",
@@ -467,6 +493,8 @@ __all__ = [
467
493
  "SystemMessage",
468
494
  "TagSchema",
469
495
  "TemplatesCreateAgentsResponse",
496
+ "TemplatesListTemplatesResponse",
497
+ "TemplatesListTemplatesResponseTemplatesItem",
470
498
  "TerminalToolRule",
471
499
  "TextContent",
472
500
  "Tool",
@@ -508,11 +536,13 @@ __all__ = [
508
536
  "__version__",
509
537
  "agents",
510
538
  "blocks",
539
+ "client_side_access_tokens",
511
540
  "groups",
512
541
  "health",
513
542
  "identities",
514
543
  "jobs",
515
544
  "models",
545
+ "projects",
516
546
  "providers",
517
547
  "runs",
518
548
  "sources",
@@ -19,6 +19,8 @@ from .steps.client import StepsClient
19
19
  from .tag.client import TagClient
20
20
  from .voice.client import VoiceClient
21
21
  from .templates.client import TemplatesClient
22
+ from .client_side_access_tokens.client import ClientSideAccessTokensClient
23
+ from .projects.client import ProjectsClient
22
24
  from .core.client_wrapper import AsyncClientWrapper
23
25
  from .tools.client import AsyncToolsClient
24
26
  from .sources.client import AsyncSourcesClient
@@ -35,6 +37,8 @@ from .steps.client import AsyncStepsClient
35
37
  from .tag.client import AsyncTagClient
36
38
  from .voice.client import AsyncVoiceClient
37
39
  from .templates.client import AsyncTemplatesClient
40
+ from .client_side_access_tokens.client import AsyncClientSideAccessTokensClient
41
+ from .projects.client import AsyncProjectsClient
38
42
 
39
43
 
40
44
  class LettaBase:
@@ -110,6 +114,8 @@ class LettaBase:
110
114
  self.tag = TagClient(client_wrapper=self._client_wrapper)
111
115
  self.voice = VoiceClient(client_wrapper=self._client_wrapper)
112
116
  self.templates = TemplatesClient(client_wrapper=self._client_wrapper)
117
+ self.client_side_access_tokens = ClientSideAccessTokensClient(client_wrapper=self._client_wrapper)
118
+ self.projects = ProjectsClient(client_wrapper=self._client_wrapper)
113
119
 
114
120
 
115
121
  class AsyncLettaBase:
@@ -185,6 +191,8 @@ class AsyncLettaBase:
185
191
  self.tag = AsyncTagClient(client_wrapper=self._client_wrapper)
186
192
  self.voice = AsyncVoiceClient(client_wrapper=self._client_wrapper)
187
193
  self.templates = AsyncTemplatesClient(client_wrapper=self._client_wrapper)
194
+ self.client_side_access_tokens = AsyncClientSideAccessTokensClient(client_wrapper=self._client_wrapper)
195
+ self.projects = AsyncProjectsClient(client_wrapper=self._client_wrapper)
188
196
 
189
197
 
190
198
  def _get_base_url(*, base_url: typing.Optional[str] = None, environment: LettaEnvironment) -> str:
@@ -0,0 +1,19 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from .types import (
4
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem,
5
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem,
6
+ ClientSideAccessTokensCreateClientSideAccessTokenResponse,
7
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy,
8
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem,
9
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem,
10
+ )
11
+
12
+ __all__ = [
13
+ "ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem",
14
+ "ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem",
15
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponse",
16
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy",
17
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem",
18
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem",
19
+ ]
@@ -0,0 +1,365 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from ..core.client_wrapper import SyncClientWrapper
5
+ from .types.client_side_access_tokens_create_client_side_access_token_request_policy_item import (
6
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem,
7
+ )
8
+ from ..core.request_options import RequestOptions
9
+ from .types.client_side_access_tokens_create_client_side_access_token_response import (
10
+ ClientSideAccessTokensCreateClientSideAccessTokenResponse,
11
+ )
12
+ from ..core.serialization import convert_and_respect_annotation_metadata
13
+ from ..core.unchecked_base_model import construct_type
14
+ from ..errors.bad_request_error import BadRequestError
15
+ from json.decoder import JSONDecodeError
16
+ from ..core.api_error import ApiError
17
+ from ..core.jsonable_encoder import jsonable_encoder
18
+ from ..core.client_wrapper import AsyncClientWrapper
19
+
20
+ # this is used as the default value for optional parameters
21
+ OMIT = typing.cast(typing.Any, ...)
22
+
23
+
24
+ class ClientSideAccessTokensClient:
25
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
26
+ self._client_wrapper = client_wrapper
27
+
28
+ def client_side_access_tokens_create_client_side_access_token(
29
+ self,
30
+ *,
31
+ policy: typing.Sequence[ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem],
32
+ hostname: str,
33
+ expires_at: typing.Optional[str] = OMIT,
34
+ request_options: typing.Optional[RequestOptions] = None,
35
+ ) -> ClientSideAccessTokensCreateClientSideAccessTokenResponse:
36
+ """
37
+ Create a new client side access token with the specified configuration.
38
+
39
+ Parameters
40
+ ----------
41
+ policy : typing.Sequence[ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem]
42
+
43
+ hostname : str
44
+ The hostname of the client side application. Please specify the full URL including the protocol (http or https).
45
+
46
+ expires_at : typing.Optional[str]
47
+ The expiration date of the token. If not provided, the token will expire in 5 minutes
48
+
49
+ request_options : typing.Optional[RequestOptions]
50
+ Request-specific configuration.
51
+
52
+ Returns
53
+ -------
54
+ ClientSideAccessTokensCreateClientSideAccessTokenResponse
55
+ 201
56
+
57
+ Examples
58
+ --------
59
+ from letta_client import Letta
60
+ from letta_client.client_side_access_tokens import (
61
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem,
62
+ )
63
+
64
+ client = Letta(
65
+ token="YOUR_TOKEN",
66
+ )
67
+ client.client_side_access_tokens.client_side_access_tokens_create_client_side_access_token(
68
+ policy=[
69
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem(
70
+ id="id",
71
+ access=["read_messages"],
72
+ )
73
+ ],
74
+ hostname="hostname",
75
+ )
76
+ """
77
+ _response = self._client_wrapper.httpx_client.request(
78
+ "v1/client-side-access-tokens",
79
+ method="POST",
80
+ json={
81
+ "policy": convert_and_respect_annotation_metadata(
82
+ object_=policy,
83
+ annotation=typing.Sequence[ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem],
84
+ direction="write",
85
+ ),
86
+ "hostname": hostname,
87
+ "expires_at": expires_at,
88
+ },
89
+ headers={
90
+ "content-type": "application/json",
91
+ },
92
+ request_options=request_options,
93
+ omit=OMIT,
94
+ )
95
+ try:
96
+ if 200 <= _response.status_code < 300:
97
+ return typing.cast(
98
+ ClientSideAccessTokensCreateClientSideAccessTokenResponse,
99
+ construct_type(
100
+ type_=ClientSideAccessTokensCreateClientSideAccessTokenResponse, # type: ignore
101
+ object_=_response.json(),
102
+ ),
103
+ )
104
+ if _response.status_code == 400:
105
+ raise BadRequestError(
106
+ typing.cast(
107
+ typing.Optional[typing.Any],
108
+ construct_type(
109
+ type_=typing.Optional[typing.Any], # type: ignore
110
+ object_=_response.json(),
111
+ ),
112
+ )
113
+ )
114
+ _response_json = _response.json()
115
+ except JSONDecodeError:
116
+ raise ApiError(status_code=_response.status_code, body=_response.text)
117
+ raise ApiError(status_code=_response.status_code, body=_response_json)
118
+
119
+ def client_side_access_tokens_delete_client_side_access_token(
120
+ self,
121
+ token: str,
122
+ *,
123
+ request: typing.Optional[typing.Any] = None,
124
+ request_options: typing.Optional[RequestOptions] = None,
125
+ ) -> typing.Optional[typing.Any]:
126
+ """
127
+ Delete a client side access token.
128
+
129
+ Parameters
130
+ ----------
131
+ token : str
132
+ The access token to delete
133
+
134
+ request : typing.Optional[typing.Any]
135
+
136
+ request_options : typing.Optional[RequestOptions]
137
+ Request-specific configuration.
138
+
139
+ Returns
140
+ -------
141
+ typing.Optional[typing.Any]
142
+ 204
143
+
144
+ Examples
145
+ --------
146
+ from letta_client import Letta
147
+
148
+ client = Letta(
149
+ token="YOUR_TOKEN",
150
+ )
151
+ client.client_side_access_tokens.client_side_access_tokens_delete_client_side_access_token(
152
+ token="token",
153
+ request={"key": "value"},
154
+ )
155
+ """
156
+ _response = self._client_wrapper.httpx_client.request(
157
+ f"v1/client-side-access-tokens/{jsonable_encoder(token)}",
158
+ method="DELETE",
159
+ json=request,
160
+ request_options=request_options,
161
+ omit=OMIT,
162
+ )
163
+ try:
164
+ if 200 <= _response.status_code < 300:
165
+ return typing.cast(
166
+ typing.Optional[typing.Any],
167
+ construct_type(
168
+ type_=typing.Optional[typing.Any], # type: ignore
169
+ object_=_response.json(),
170
+ ),
171
+ )
172
+ if _response.status_code == 400:
173
+ raise BadRequestError(
174
+ typing.cast(
175
+ typing.Optional[typing.Any],
176
+ construct_type(
177
+ type_=typing.Optional[typing.Any], # type: ignore
178
+ object_=_response.json(),
179
+ ),
180
+ )
181
+ )
182
+ _response_json = _response.json()
183
+ except JSONDecodeError:
184
+ raise ApiError(status_code=_response.status_code, body=_response.text)
185
+ raise ApiError(status_code=_response.status_code, body=_response_json)
186
+
187
+
188
+ class AsyncClientSideAccessTokensClient:
189
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
190
+ self._client_wrapper = client_wrapper
191
+
192
+ async def client_side_access_tokens_create_client_side_access_token(
193
+ self,
194
+ *,
195
+ policy: typing.Sequence[ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem],
196
+ hostname: str,
197
+ expires_at: typing.Optional[str] = OMIT,
198
+ request_options: typing.Optional[RequestOptions] = None,
199
+ ) -> ClientSideAccessTokensCreateClientSideAccessTokenResponse:
200
+ """
201
+ Create a new client side access token with the specified configuration.
202
+
203
+ Parameters
204
+ ----------
205
+ policy : typing.Sequence[ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem]
206
+
207
+ hostname : str
208
+ The hostname of the client side application. Please specify the full URL including the protocol (http or https).
209
+
210
+ expires_at : typing.Optional[str]
211
+ The expiration date of the token. If not provided, the token will expire in 5 minutes
212
+
213
+ request_options : typing.Optional[RequestOptions]
214
+ Request-specific configuration.
215
+
216
+ Returns
217
+ -------
218
+ ClientSideAccessTokensCreateClientSideAccessTokenResponse
219
+ 201
220
+
221
+ Examples
222
+ --------
223
+ import asyncio
224
+
225
+ from letta_client import AsyncLetta
226
+ from letta_client.client_side_access_tokens import (
227
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem,
228
+ )
229
+
230
+ client = AsyncLetta(
231
+ token="YOUR_TOKEN",
232
+ )
233
+
234
+
235
+ async def main() -> None:
236
+ await client.client_side_access_tokens.client_side_access_tokens_create_client_side_access_token(
237
+ policy=[
238
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem(
239
+ id="id",
240
+ access=["read_messages"],
241
+ )
242
+ ],
243
+ hostname="hostname",
244
+ )
245
+
246
+
247
+ asyncio.run(main())
248
+ """
249
+ _response = await self._client_wrapper.httpx_client.request(
250
+ "v1/client-side-access-tokens",
251
+ method="POST",
252
+ json={
253
+ "policy": convert_and_respect_annotation_metadata(
254
+ object_=policy,
255
+ annotation=typing.Sequence[ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem],
256
+ direction="write",
257
+ ),
258
+ "hostname": hostname,
259
+ "expires_at": expires_at,
260
+ },
261
+ headers={
262
+ "content-type": "application/json",
263
+ },
264
+ request_options=request_options,
265
+ omit=OMIT,
266
+ )
267
+ try:
268
+ if 200 <= _response.status_code < 300:
269
+ return typing.cast(
270
+ ClientSideAccessTokensCreateClientSideAccessTokenResponse,
271
+ construct_type(
272
+ type_=ClientSideAccessTokensCreateClientSideAccessTokenResponse, # type: ignore
273
+ object_=_response.json(),
274
+ ),
275
+ )
276
+ if _response.status_code == 400:
277
+ raise BadRequestError(
278
+ typing.cast(
279
+ typing.Optional[typing.Any],
280
+ construct_type(
281
+ type_=typing.Optional[typing.Any], # type: ignore
282
+ object_=_response.json(),
283
+ ),
284
+ )
285
+ )
286
+ _response_json = _response.json()
287
+ except JSONDecodeError:
288
+ raise ApiError(status_code=_response.status_code, body=_response.text)
289
+ raise ApiError(status_code=_response.status_code, body=_response_json)
290
+
291
+ async def client_side_access_tokens_delete_client_side_access_token(
292
+ self,
293
+ token: str,
294
+ *,
295
+ request: typing.Optional[typing.Any] = None,
296
+ request_options: typing.Optional[RequestOptions] = None,
297
+ ) -> typing.Optional[typing.Any]:
298
+ """
299
+ Delete a client side access token.
300
+
301
+ Parameters
302
+ ----------
303
+ token : str
304
+ The access token to delete
305
+
306
+ request : typing.Optional[typing.Any]
307
+
308
+ request_options : typing.Optional[RequestOptions]
309
+ Request-specific configuration.
310
+
311
+ Returns
312
+ -------
313
+ typing.Optional[typing.Any]
314
+ 204
315
+
316
+ Examples
317
+ --------
318
+ import asyncio
319
+
320
+ from letta_client import AsyncLetta
321
+
322
+ client = AsyncLetta(
323
+ token="YOUR_TOKEN",
324
+ )
325
+
326
+
327
+ async def main() -> None:
328
+ await client.client_side_access_tokens.client_side_access_tokens_delete_client_side_access_token(
329
+ token="token",
330
+ request={"key": "value"},
331
+ )
332
+
333
+
334
+ asyncio.run(main())
335
+ """
336
+ _response = await self._client_wrapper.httpx_client.request(
337
+ f"v1/client-side-access-tokens/{jsonable_encoder(token)}",
338
+ method="DELETE",
339
+ json=request,
340
+ request_options=request_options,
341
+ omit=OMIT,
342
+ )
343
+ try:
344
+ if 200 <= _response.status_code < 300:
345
+ return typing.cast(
346
+ typing.Optional[typing.Any],
347
+ construct_type(
348
+ type_=typing.Optional[typing.Any], # type: ignore
349
+ object_=_response.json(),
350
+ ),
351
+ )
352
+ if _response.status_code == 400:
353
+ raise BadRequestError(
354
+ typing.cast(
355
+ typing.Optional[typing.Any],
356
+ construct_type(
357
+ type_=typing.Optional[typing.Any], # type: ignore
358
+ object_=_response.json(),
359
+ ),
360
+ )
361
+ )
362
+ _response_json = _response.json()
363
+ except JSONDecodeError:
364
+ raise ApiError(status_code=_response.status_code, body=_response.text)
365
+ raise ApiError(status_code=_response.status_code, body=_response_json)
@@ -0,0 +1,29 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from .client_side_access_tokens_create_client_side_access_token_request_policy_item import (
4
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem,
5
+ )
6
+ from .client_side_access_tokens_create_client_side_access_token_request_policy_item_access_item import (
7
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem,
8
+ )
9
+ from .client_side_access_tokens_create_client_side_access_token_response import (
10
+ ClientSideAccessTokensCreateClientSideAccessTokenResponse,
11
+ )
12
+ from .client_side_access_tokens_create_client_side_access_token_response_policy import (
13
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy,
14
+ )
15
+ from .client_side_access_tokens_create_client_side_access_token_response_policy_data_item import (
16
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem,
17
+ )
18
+ from .client_side_access_tokens_create_client_side_access_token_response_policy_data_item_access_item import (
19
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem,
20
+ )
21
+
22
+ __all__ = [
23
+ "ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem",
24
+ "ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem",
25
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponse",
26
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy",
27
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem",
28
+ "ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem",
29
+ ]
@@ -0,0 +1,24 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.unchecked_base_model import UncheckedBaseModel
4
+ import typing
5
+ from .client_side_access_tokens_create_client_side_access_token_request_policy_item_access_item import (
6
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem,
7
+ )
8
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
9
+ import pydantic
10
+
11
+
12
+ class ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItem(UncheckedBaseModel):
13
+ type: typing.Literal["agent"] = "agent"
14
+ id: str
15
+ access: typing.List[ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem]
16
+
17
+ if IS_PYDANTIC_V2:
18
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
19
+ else:
20
+
21
+ class Config:
22
+ frozen = True
23
+ smart_union = True
24
+ extra = pydantic.Extra.allow
@@ -0,0 +1,7 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ ClientSideAccessTokensCreateClientSideAccessTokenRequestPolicyItemAccessItem = typing.Union[
6
+ typing.Literal["read_messages", "write_messages", "read_agent", "write_agent"], typing.Any
7
+ ]
@@ -0,0 +1,27 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.unchecked_base_model import UncheckedBaseModel
4
+ from .client_side_access_tokens_create_client_side_access_token_response_policy import (
5
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy,
6
+ )
7
+ import typing_extensions
8
+ from ...core.serialization import FieldMetadata
9
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
10
+ import typing
11
+ import pydantic
12
+
13
+
14
+ class ClientSideAccessTokensCreateClientSideAccessTokenResponse(UncheckedBaseModel):
15
+ policy: ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy
16
+ token: str
17
+ hostname: str
18
+ expires_at: typing_extensions.Annotated[str, FieldMetadata(alias="expiresAt")]
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
@@ -0,0 +1,23 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.unchecked_base_model import UncheckedBaseModel
4
+ import typing
5
+ from .client_side_access_tokens_create_client_side_access_token_response_policy_data_item import (
6
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem,
7
+ )
8
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
9
+ import pydantic
10
+
11
+
12
+ class ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicy(UncheckedBaseModel):
13
+ version: typing.Literal["1"] = "1"
14
+ data: typing.List[ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem]
15
+
16
+ if IS_PYDANTIC_V2:
17
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
18
+ else:
19
+
20
+ class Config:
21
+ frozen = True
22
+ smart_union = True
23
+ extra = pydantic.Extra.allow
@@ -0,0 +1,24 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.unchecked_base_model import UncheckedBaseModel
4
+ import typing
5
+ from .client_side_access_tokens_create_client_side_access_token_response_policy_data_item_access_item import (
6
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem,
7
+ )
8
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
9
+ import pydantic
10
+
11
+
12
+ class ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItem(UncheckedBaseModel):
13
+ type: typing.Literal["agent"] = "agent"
14
+ id: str
15
+ access: typing.List[ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem]
16
+
17
+ if IS_PYDANTIC_V2:
18
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
19
+ else:
20
+
21
+ class Config:
22
+ frozen = True
23
+ smart_union = True
24
+ extra = pydantic.Extra.allow
@@ -0,0 +1,7 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ ClientSideAccessTokensCreateClientSideAccessTokenResponsePolicyDataItemAccessItem = typing.Union[
6
+ typing.Literal["read_messages", "write_messages", "read_agent", "write_agent"], typing.Any
7
+ ]
@@ -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.114",
19
+ "X-Fern-SDK-Version": "0.1.116",
20
20
  }
21
21
  if self.token is not None:
22
22
  headers["Authorization"] = f"Bearer {self.token}"
@@ -1,8 +1,9 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
+ from .bad_request_error import BadRequestError
3
4
  from .conflict_error import ConflictError
4
5
  from .internal_server_error import InternalServerError
5
6
  from .not_found_error import NotFoundError
6
7
  from .unprocessable_entity_error import UnprocessableEntityError
7
8
 
8
- __all__ = ["ConflictError", "InternalServerError", "NotFoundError", "UnprocessableEntityError"]
9
+ __all__ = ["BadRequestError", "ConflictError", "InternalServerError", "NotFoundError", "UnprocessableEntityError"]
@@ -0,0 +1,9 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.api_error import ApiError
4
+ import typing
5
+
6
+
7
+ class BadRequestError(ApiError):
8
+ def __init__(self, body: typing.Optional[typing.Any]):
9
+ super().__init__(status_code=400, body=body)
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from .types import ProjectsListProjectsResponse, ProjectsListProjectsResponseProjectsItem
4
+
5
+ __all__ = ["ProjectsListProjectsResponse", "ProjectsListProjectsResponseProjectsItem"]
@@ -0,0 +1,148 @@
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.projects_list_projects_response import ProjectsListProjectsResponse
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 ProjectsClient:
14
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
15
+ self._client_wrapper = client_wrapper
16
+
17
+ def listprojects(
18
+ self,
19
+ *,
20
+ name: typing.Optional[str] = None,
21
+ offset: typing.Optional[float] = None,
22
+ limit: typing.Optional[float] = None,
23
+ request_options: typing.Optional[RequestOptions] = None,
24
+ ) -> ProjectsListProjectsResponse:
25
+ """
26
+ List all projects
27
+
28
+ Parameters
29
+ ----------
30
+ name : typing.Optional[str]
31
+
32
+ offset : typing.Optional[float]
33
+
34
+ limit : typing.Optional[float]
35
+
36
+ request_options : typing.Optional[RequestOptions]
37
+ Request-specific configuration.
38
+
39
+ Returns
40
+ -------
41
+ ProjectsListProjectsResponse
42
+ 200
43
+
44
+ Examples
45
+ --------
46
+ from letta_client import Letta
47
+
48
+ client = Letta(
49
+ token="YOUR_TOKEN",
50
+ )
51
+ client.projects.listprojects()
52
+ """
53
+ _response = self._client_wrapper.httpx_client.request(
54
+ "v1/projects",
55
+ method="GET",
56
+ params={
57
+ "name": name,
58
+ "offset": offset,
59
+ "limit": limit,
60
+ },
61
+ request_options=request_options,
62
+ )
63
+ try:
64
+ if 200 <= _response.status_code < 300:
65
+ return typing.cast(
66
+ ProjectsListProjectsResponse,
67
+ construct_type(
68
+ type_=ProjectsListProjectsResponse, # type: ignore
69
+ object_=_response.json(),
70
+ ),
71
+ )
72
+ _response_json = _response.json()
73
+ except JSONDecodeError:
74
+ raise ApiError(status_code=_response.status_code, body=_response.text)
75
+ raise ApiError(status_code=_response.status_code, body=_response_json)
76
+
77
+
78
+ class AsyncProjectsClient:
79
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
80
+ self._client_wrapper = client_wrapper
81
+
82
+ async def listprojects(
83
+ self,
84
+ *,
85
+ name: typing.Optional[str] = None,
86
+ offset: typing.Optional[float] = None,
87
+ limit: typing.Optional[float] = None,
88
+ request_options: typing.Optional[RequestOptions] = None,
89
+ ) -> ProjectsListProjectsResponse:
90
+ """
91
+ List all projects
92
+
93
+ Parameters
94
+ ----------
95
+ name : typing.Optional[str]
96
+
97
+ offset : typing.Optional[float]
98
+
99
+ limit : typing.Optional[float]
100
+
101
+ request_options : typing.Optional[RequestOptions]
102
+ Request-specific configuration.
103
+
104
+ Returns
105
+ -------
106
+ ProjectsListProjectsResponse
107
+ 200
108
+
109
+ Examples
110
+ --------
111
+ import asyncio
112
+
113
+ from letta_client import AsyncLetta
114
+
115
+ client = AsyncLetta(
116
+ token="YOUR_TOKEN",
117
+ )
118
+
119
+
120
+ async def main() -> None:
121
+ await client.projects.listprojects()
122
+
123
+
124
+ asyncio.run(main())
125
+ """
126
+ _response = await self._client_wrapper.httpx_client.request(
127
+ "v1/projects",
128
+ method="GET",
129
+ params={
130
+ "name": name,
131
+ "offset": offset,
132
+ "limit": limit,
133
+ },
134
+ request_options=request_options,
135
+ )
136
+ try:
137
+ if 200 <= _response.status_code < 300:
138
+ return typing.cast(
139
+ ProjectsListProjectsResponse,
140
+ construct_type(
141
+ type_=ProjectsListProjectsResponse, # type: ignore
142
+ object_=_response.json(),
143
+ ),
144
+ )
145
+ _response_json = _response.json()
146
+ except JSONDecodeError:
147
+ raise ApiError(status_code=_response.status_code, body=_response.text)
148
+ raise ApiError(status_code=_response.status_code, body=_response_json)
@@ -0,0 +1,6 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from .projects_list_projects_response import ProjectsListProjectsResponse
4
+ from .projects_list_projects_response_projects_item import ProjectsListProjectsResponseProjectsItem
5
+
6
+ __all__ = ["ProjectsListProjectsResponse", "ProjectsListProjectsResponseProjectsItem"]
@@ -0,0 +1,23 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.unchecked_base_model import UncheckedBaseModel
4
+ import typing
5
+ from .projects_list_projects_response_projects_item import ProjectsListProjectsResponseProjectsItem
6
+ import typing_extensions
7
+ from ...core.serialization import FieldMetadata
8
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
9
+ import pydantic
10
+
11
+
12
+ class ProjectsListProjectsResponse(UncheckedBaseModel):
13
+ projects: typing.List[ProjectsListProjectsResponseProjectsItem]
14
+ has_next_page: typing_extensions.Annotated[bool, FieldMetadata(alias="hasNextPage")]
15
+
16
+ if IS_PYDANTIC_V2:
17
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
18
+ else:
19
+
20
+ class Config:
21
+ frozen = True
22
+ smart_union = True
23
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.unchecked_base_model import UncheckedBaseModel
4
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
5
+ import typing
6
+ import pydantic
7
+
8
+
9
+ class ProjectsListProjectsResponseProjectsItem(UncheckedBaseModel):
10
+ name: str
11
+ slug: str
12
+ id: str
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -1,5 +1,13 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
- from .types import TemplatesCreateAgentsResponse
3
+ from .types import (
4
+ TemplatesCreateAgentsResponse,
5
+ TemplatesListTemplatesResponse,
6
+ TemplatesListTemplatesResponseTemplatesItem,
7
+ )
4
8
 
5
- __all__ = ["TemplatesCreateAgentsResponse"]
9
+ __all__ = [
10
+ "TemplatesCreateAgentsResponse",
11
+ "TemplatesListTemplatesResponse",
12
+ "TemplatesListTemplatesResponseTemplatesItem",
13
+ ]
@@ -8,6 +8,7 @@ from ..core.jsonable_encoder import jsonable_encoder
8
8
  from ..core.unchecked_base_model import construct_type
9
9
  from json.decoder import JSONDecodeError
10
10
  from ..core.api_error import ApiError
11
+ from .types.templates_list_templates_response import TemplatesListTemplatesResponse
11
12
  from ..core.client_wrapper import AsyncClientWrapper
12
13
 
13
14
  # this is used as the default value for optional parameters
@@ -106,6 +107,70 @@ class TemplatesClient:
106
107
  raise ApiError(status_code=_response.status_code, body=_response.text)
107
108
  raise ApiError(status_code=_response.status_code, body=_response_json)
108
109
 
110
+ def listtemplates(
111
+ self,
112
+ *,
113
+ limit: typing.Optional[float] = None,
114
+ offset: typing.Optional[float] = None,
115
+ name: typing.Optional[str] = None,
116
+ project_id: typing.Optional[str] = None,
117
+ request_options: typing.Optional[RequestOptions] = None,
118
+ ) -> TemplatesListTemplatesResponse:
119
+ """
120
+ List all templates
121
+
122
+ Parameters
123
+ ----------
124
+ limit : typing.Optional[float]
125
+
126
+ offset : typing.Optional[float]
127
+
128
+ name : typing.Optional[str]
129
+
130
+ project_id : typing.Optional[str]
131
+
132
+ request_options : typing.Optional[RequestOptions]
133
+ Request-specific configuration.
134
+
135
+ Returns
136
+ -------
137
+ TemplatesListTemplatesResponse
138
+ 200
139
+
140
+ Examples
141
+ --------
142
+ from letta_client import Letta
143
+
144
+ client = Letta(
145
+ token="YOUR_TOKEN",
146
+ )
147
+ client.templates.listtemplates()
148
+ """
149
+ _response = self._client_wrapper.httpx_client.request(
150
+ "v1/templates",
151
+ method="GET",
152
+ params={
153
+ "limit": limit,
154
+ "offset": offset,
155
+ "name": name,
156
+ "projectId": project_id,
157
+ },
158
+ request_options=request_options,
159
+ )
160
+ try:
161
+ if 200 <= _response.status_code < 300:
162
+ return typing.cast(
163
+ TemplatesListTemplatesResponse,
164
+ construct_type(
165
+ type_=TemplatesListTemplatesResponse, # type: ignore
166
+ object_=_response.json(),
167
+ ),
168
+ )
169
+ _response_json = _response.json()
170
+ except JSONDecodeError:
171
+ raise ApiError(status_code=_response.status_code, body=_response.text)
172
+ raise ApiError(status_code=_response.status_code, body=_response_json)
173
+
109
174
 
110
175
  class AsyncTemplatesClient:
111
176
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -206,3 +271,75 @@ class AsyncTemplatesClient:
206
271
  except JSONDecodeError:
207
272
  raise ApiError(status_code=_response.status_code, body=_response.text)
208
273
  raise ApiError(status_code=_response.status_code, body=_response_json)
274
+
275
+ async def listtemplates(
276
+ self,
277
+ *,
278
+ limit: typing.Optional[float] = None,
279
+ offset: typing.Optional[float] = None,
280
+ name: typing.Optional[str] = None,
281
+ project_id: typing.Optional[str] = None,
282
+ request_options: typing.Optional[RequestOptions] = None,
283
+ ) -> TemplatesListTemplatesResponse:
284
+ """
285
+ List all templates
286
+
287
+ Parameters
288
+ ----------
289
+ limit : typing.Optional[float]
290
+
291
+ offset : typing.Optional[float]
292
+
293
+ name : typing.Optional[str]
294
+
295
+ project_id : typing.Optional[str]
296
+
297
+ request_options : typing.Optional[RequestOptions]
298
+ Request-specific configuration.
299
+
300
+ Returns
301
+ -------
302
+ TemplatesListTemplatesResponse
303
+ 200
304
+
305
+ Examples
306
+ --------
307
+ import asyncio
308
+
309
+ from letta_client import AsyncLetta
310
+
311
+ client = AsyncLetta(
312
+ token="YOUR_TOKEN",
313
+ )
314
+
315
+
316
+ async def main() -> None:
317
+ await client.templates.listtemplates()
318
+
319
+
320
+ asyncio.run(main())
321
+ """
322
+ _response = await self._client_wrapper.httpx_client.request(
323
+ "v1/templates",
324
+ method="GET",
325
+ params={
326
+ "limit": limit,
327
+ "offset": offset,
328
+ "name": name,
329
+ "projectId": project_id,
330
+ },
331
+ request_options=request_options,
332
+ )
333
+ try:
334
+ if 200 <= _response.status_code < 300:
335
+ return typing.cast(
336
+ TemplatesListTemplatesResponse,
337
+ construct_type(
338
+ type_=TemplatesListTemplatesResponse, # type: ignore
339
+ object_=_response.json(),
340
+ ),
341
+ )
342
+ _response_json = _response.json()
343
+ except JSONDecodeError:
344
+ raise ApiError(status_code=_response.status_code, body=_response.text)
345
+ raise ApiError(status_code=_response.status_code, body=_response_json)
@@ -1,5 +1,11 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
3
  from .templates_create_agents_response import TemplatesCreateAgentsResponse
4
+ from .templates_list_templates_response import TemplatesListTemplatesResponse
5
+ from .templates_list_templates_response_templates_item import TemplatesListTemplatesResponseTemplatesItem
4
6
 
5
- __all__ = ["TemplatesCreateAgentsResponse"]
7
+ __all__ = [
8
+ "TemplatesCreateAgentsResponse",
9
+ "TemplatesListTemplatesResponse",
10
+ "TemplatesListTemplatesResponseTemplatesItem",
11
+ ]
@@ -0,0 +1,23 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.unchecked_base_model import UncheckedBaseModel
4
+ import typing
5
+ from .templates_list_templates_response_templates_item import TemplatesListTemplatesResponseTemplatesItem
6
+ import typing_extensions
7
+ from ...core.serialization import FieldMetadata
8
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
9
+ import pydantic
10
+
11
+
12
+ class TemplatesListTemplatesResponse(UncheckedBaseModel):
13
+ templates: typing.List[TemplatesListTemplatesResponseTemplatesItem]
14
+ has_next_page: typing_extensions.Annotated[bool, FieldMetadata(alias="hasNextPage")]
15
+
16
+ if IS_PYDANTIC_V2:
17
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
18
+ else:
19
+
20
+ class Config:
21
+ frozen = True
22
+ smart_union = True
23
+ extra = pydantic.Extra.allow
@@ -0,0 +1,20 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.unchecked_base_model import UncheckedBaseModel
4
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
5
+ import typing
6
+ import pydantic
7
+
8
+
9
+ class TemplatesListTemplatesResponseTemplatesItem(UncheckedBaseModel):
10
+ name: str
11
+ id: str
12
+
13
+ if IS_PYDANTIC_V2:
14
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
15
+ else:
16
+
17
+ class Config:
18
+ frozen = True
19
+ smart_union = True
20
+ extra = pydantic.Extra.allow
@@ -18,6 +18,7 @@ from .audio import Audio
18
18
  from .auth_request import AuthRequest
19
19
  from .auth_response import AuthResponse
20
20
  from .auth_scheme_field import AuthSchemeField
21
+ from .bad_request_error_body import BadRequestErrorBody
21
22
  from .base_tool_rule_schema import BaseToolRuleSchema
22
23
  from .block import Block
23
24
  from .block_update import BlockUpdate
@@ -242,6 +243,7 @@ __all__ = [
242
243
  "AuthRequest",
243
244
  "AuthResponse",
244
245
  "AuthSchemeField",
246
+ "BadRequestErrorBody",
245
247
  "BaseToolRuleSchema",
246
248
  "Block",
247
249
  "BlockUpdate",
@@ -0,0 +1,19 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.unchecked_base_model import UncheckedBaseModel
4
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
5
+ import typing
6
+ import pydantic
7
+
8
+
9
+ class BadRequestErrorBody(UncheckedBaseModel):
10
+ message: str
11
+
12
+ if IS_PYDANTIC_V2:
13
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
14
+ else:
15
+
16
+ class Config:
17
+ frozen = True
18
+ smart_union = True
19
+ extra = pydantic.Extra.allow
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-client
3
- Version: 0.1.114
3
+ Version: 0.1.116
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=d1gnZZWntFsL6yIr_dKOqcnHqMkHuHvkiXC35I5vrUs,14663
1
+ letta_client/__init__.py,sha256=8odG3X3w-YCoHYdIinxLvVvTRJh6e2vrmeTjerbSnXk,16164
2
2
  letta_client/agents/__init__.py,sha256=CveigJGrnkw3yZ8S9yZ2DpK1HV0v1fU-khsiLJJ0uaU,1452
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
@@ -38,13 +38,22 @@ letta_client/agents/types/agents_search_request_search_item_zero.py,sha256=tGjwn
38
38
  letta_client/agents/types/agents_search_response.py,sha256=AQJVKps-bjCx2ujqESzW1Iy9ZYFS17hH_UFIeBeK4S8,815
39
39
  letta_client/agents/types/create_agent_request_tool_rules_item.py,sha256=L3FNsFTG9kVmuPbQhbCKNg3H2E5bB2Rgp92gWmGd-LM,689
40
40
  letta_client/agents/types/update_agent_tool_rules_item.py,sha256=k9MmcVPsK-EGl8XlT3JQwdlBNLgpGw528jmi8fCFS7g,682
41
- letta_client/base_client.py,sha256=bF1nEcPGrhNqelaWz3DgROYdroGsBFCjpAHHri0uq7I,8629
41
+ letta_client/base_client.py,sha256=G8Ag35gITyN71r_CDrb_hsmJ3PlHPgIK6cCEMU2fVw0,9253
42
42
  letta_client/blocks/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
43
43
  letta_client/blocks/client.py,sha256=LE9dsHaBxFLC3G035f0VpNDG7XKWRK8y9OXpeFCMvUw,30082
44
44
  letta_client/client.py,sha256=k2mZqqEWciVmEQHgipjCK4kQILk74hpSqzcdNwdql9A,21212
45
+ letta_client/client_side_access_tokens/__init__.py,sha256=ivKMiZVIc5IjBZvinNK_aVy1RpvD9lWstT1XJzXc_ak,1015
46
+ letta_client/client_side_access_tokens/client.py,sha256=69zUzYSphr_r8HpnPpidXotKIDdFCS9YSK8haU8BiVM,13168
47
+ letta_client/client_side_access_tokens/types/__init__.py,sha256=Cjp8P6wW6EJKf4yiv1U1FzDiVI21dOv1IG_fn4Xzazc,1583
48
+ letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_request_policy_item.py,sha256=blQBjrrqrV6eqCqi2iP4KHkg_83bqkcs3F4kKvjH_gc,946
49
+ letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_request_policy_item_access_item.py,sha256=gFROGOsd-Gkj2JgVLBr_qgowdjywr5W__Z0Prj1osfE,270
50
+ letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_response.py,sha256=WK7Ekd6i-NiBvmD4dyvSiBCHtadXAOV3gl_-W8-e_0Q,1015
51
+ letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_response_policy.py,sha256=JusvFIWRKx9rOAw-qB7XrG7zQ4AkpNm_Qwm5hF-HudA,908
52
+ letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_response_policy_data_item.py,sha256=ou-3g9-saP3FftVHkWH9I3cGTk8ez4p8aZ_mChEgfH0,967
53
+ letta_client/client_side_access_tokens/types/client_side_access_tokens_create_client_side_access_token_response_policy_data_item_access_item.py,sha256=vefuUVB3pLCbCNBJACXMsEKZuwhMAGvLwSU3TU3Q4l4,275
45
54
  letta_client/core/__init__.py,sha256=OKbX2aCZXgHCDUsCouqv-OiX32xA6eFFCKIUH9M5Vzk,1591
46
55
  letta_client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
47
- letta_client/core/client_wrapper.py,sha256=J-2xR0tPxzouI60voBOA1Cj19O7nBlMt7WXGhSqr9Qs,1998
56
+ letta_client/core/client_wrapper.py,sha256=60C6g_Z9X2ZqS7osrPIqdXkJqLaAQOwLKTN3nmztSM0,1998
48
57
  letta_client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
49
58
  letta_client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
50
59
  letta_client/core/http_client.py,sha256=Z77OIxIbL4OAB2IDqjRq_sYa5yNYAWfmdhdCSSvh6Y4,19552
@@ -56,7 +65,8 @@ letta_client/core/request_options.py,sha256=h0QUNCFVdCW_7GclVySCAY2w4NhtXVBUCmHg
56
65
  letta_client/core/serialization.py,sha256=D9h_t-RQON3-CHWs1C4ESY9B-Yd5d-l5lnTLb_X896g,9601
57
66
  letta_client/core/unchecked_base_model.py,sha256=zliEPgLnK9yQ1dZ0mHP6agQ7H0bTZk8AvX6VC1r9oPQ,10754
58
67
  letta_client/environment.py,sha256=91gYLF9bT4-hTPQ9dcPfmub4LgEl-T4a5kW7NXzRIJU,198
59
- letta_client/errors/__init__.py,sha256=wqo3GnyT9iRy7zuPMs6TXOg9GMNfDp4fxq7M8lFFgK8,367
68
+ letta_client/errors/__init__.py,sha256=sf5qYBpvBUchcwEIvulM7AYVGJkiVxknC9OX6TOpOdo,433
69
+ letta_client/errors/bad_request_error.py,sha256=_EbO8mWqN9kFZPvIap8qa1lL_EWkRcsZe1HKV9GDWJY,264
60
70
  letta_client/errors/conflict_error.py,sha256=INHRMcX6i0ywcbZfw-vn3aBoVi06bDjev3p_O8U8IA4,296
61
71
  letta_client/errors/internal_server_error.py,sha256=8USCagXyJJ1MOm9snpcXIUt6eNXvrd_aq7Gfcu1vlOI,268
62
72
  letta_client/errors/not_found_error.py,sha256=tBVCeBC8n3C811WHRj_n-hs3h8MqwR5gp0vLiobk7W8,262
@@ -80,6 +90,11 @@ letta_client/jobs/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw
80
90
  letta_client/jobs/client.py,sha256=z1Zq6dGs2xbf3EAFuD3-m-qbpbUeqpCBYqtIFKkGoMk,15622
81
91
  letta_client/models/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
82
92
  letta_client/models/client.py,sha256=Rd9IHjSdXRzzZyabpq8pDTc9XDnwLPnmm5by335g1D0,6306
93
+ letta_client/projects/__init__.py,sha256=CccxELBuPLqC6SfAJMNP3I4tEzYBNNA9CUrhuPk-TVI,243
94
+ letta_client/projects/client.py,sha256=xq3LosG_w5Yk1AjajIOvkthJNffsSGkBu8RQwfvYGZA,4358
95
+ letta_client/projects/types/__init__.py,sha256=SXy0WSkK5BUuFYis1LNUUWGuY9B8n6c6e_3OtrrSfWo,327
96
+ letta_client/projects/types/projects_list_projects_response.py,sha256=NfKqXLGBdi1b5qX1EgEeGhw1w8a1rVUHaFJeMdLHctk,891
97
+ letta_client/projects/types/projects_list_projects_response_projects_item.py,sha256=-pAUwD9lMESWnRM0XlwWKHBk4Yc3Qjpm1CKCZR__hBk,613
83
98
  letta_client/providers/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
84
99
  letta_client/providers/client.py,sha256=RLpTHd9iQ5wlZqYEG4cF8YsDCdaQZ0odCFprukauCuc,18228
85
100
  letta_client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -95,10 +110,12 @@ letta_client/steps/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_p
95
110
  letta_client/steps/client.py,sha256=g4XUUtdKzkSiRkxJW6ACrYe8ySvJ_tUMGK4ag6QRZT4,11284
96
111
  letta_client/tag/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
97
112
  letta_client/tag/client.py,sha256=TBAotdb0e2_x2pANF4dOE1qmWY3GIgb7nOhvN7iZ3_4,5183
98
- letta_client/templates/__init__.py,sha256=6DQ8ZWaSAT11j47fNjr5SU_kjtEy8-SvGWpBIlw9wU4,159
99
- letta_client/templates/client.py,sha256=k1eya9jpfKw8CwKP8U7qIhKVmpk1IBqPG-oeK8C6fOM,7188
100
- letta_client/templates/types/__init__.py,sha256=3FsEzDuUDXJcCtfPhQCs-WcWEXMEdkCxvzx611pUJ5E,186
113
+ letta_client/templates/__init__.py,sha256=Vm6KTxJSLP2ORjXRYqv0f-LNPhnvja0MML0n2AvV_0o,349
114
+ letta_client/templates/client.py,sha256=V-4OBGO-SQrUFSAZBNhHn5yhtDCYFgTTldsN4E71Qx0,11204
115
+ letta_client/templates/types/__init__.py,sha256=EK2nGJWTbYTT4PFO9BcnMdw3kd5cKyxARZlleAxpw_I,466
101
116
  letta_client/templates/types/templates_create_agents_response.py,sha256=MNyR1Qr0d14_bj_xkQVEBXkDr2xvEsqMy1pzvn7nr4M,642
117
+ letta_client/templates/types/templates_list_templates_response.py,sha256=1aXGfSWPlGm-ZoT4XvRtXiy3zUSHARHAbcppNZT9KSA,903
118
+ letta_client/templates/types/templates_list_templates_response_templates_item.py,sha256=73PdtnZYkCOk9zdU0nRONQldO_0CeZVUysd4F1U9to8,602
102
119
  letta_client/tools/__init__.py,sha256=XsuAkxHDA-Z98gLNNW_fiEwFP3fP4XQipflrK2bHl8k,353
103
120
  letta_client/tools/client.py,sha256=aJqW1sNecrsjBAs6eFubMo2Up0u3lJxpafo1mkj2fnQ,78344
104
121
  letta_client/tools/types/__init__.py,sha256=R11LYBi6lxkud_DRyaHFUHtlnbfnEI93-SEo7FL4tzs,478
@@ -106,7 +123,7 @@ letta_client/tools/types/add_mcp_server_request.py,sha256=EieZjfOT95sjkpxXdqy7gl
106
123
  letta_client/tools/types/add_mcp_server_response_item.py,sha256=TWdsKqGb1INhYtpGnAckz0Pw4nZShumSp4pfocRfxCA,270
107
124
  letta_client/tools/types/delete_mcp_server_response_item.py,sha256=MeZObU-7tMSCd-S5yuUjNDse6A1hUz1LLjbko0pXaro,273
108
125
  letta_client/tools/types/list_mcp_servers_response_value.py,sha256=AIoXu4bO8QNSU7zjL1jj0Rg4313wVtPaTt13W0aevLQ,273
109
- letta_client/types/__init__.py,sha256=3g30SRiC6aVG5mzeT9BPulQNV0A6IdK8msZiMofiHSs,19775
126
+ letta_client/types/__init__.py,sha256=WL1kUXfr7I6CDtXjtiw05YOpJ-7DYHFKslCKkoQgw8I,19858
110
127
  letta_client/types/action_model.py,sha256=y1e2XMv3skFaNJIBdYoBKgiORzGh05aOVvu-qVR9uHg,1240
111
128
  letta_client/types/action_parameters_model.py,sha256=LgKf5aPZG3-OHGxFdXiSokIDgce8c02xPYIAY05VgW8,828
112
129
  letta_client/types/action_response_model.py,sha256=yq2Fd9UU8j7vvtE3VqXUoRRvDzWcfJPj_95ynGdeHCs,824
@@ -125,6 +142,7 @@ letta_client/types/audio.py,sha256=aCgzL9SmkmM4yU7hy2IWwPrC-wtllplo3dQF9mjk7Fg,5
125
142
  letta_client/types/auth_request.py,sha256=q63VMj39aCmljDuzUeAClXEqyaoa_HKv5IraSv8ry9M,683
126
143
  letta_client/types/auth_response.py,sha256=jtG9Nn0voJcOWkBtvnuGGwhpUhYz9A8O7soOJZo_E_E,861
127
144
  letta_client/types/auth_scheme_field.py,sha256=W4-qgKtKUSpBHaSvjLyzLybOIsGo7Ggk4VECpsoPnqQ,881
145
+ letta_client/types/bad_request_error_body.py,sha256=E4_eWEc9xeW9BkXGViBDrevV8Jf6PjgEweeGS3vJLD4,567
128
146
  letta_client/types/base_tool_rule_schema.py,sha256=FbnJy6gb8wY_DPiU3Gs-u1Ol_l4K7-nAmPTc1oR3kOo,582
129
147
  letta_client/types/block.py,sha256=J8McqSpellhd-KsPYontU8DYg3YV41_fQW5rR-85qMk,2900
130
148
  letta_client/types/block_update.py,sha256=oIgxvSnav5vxztBdslRMiWOgRaAp3dh43pinZpoLzxk,1496
@@ -330,6 +348,6 @@ letta_client/voice/__init__.py,sha256=7hX85553PiRMtIMM12a0DSoFzsglNiUziYR2ekS84Q
330
348
  letta_client/voice/client.py,sha256=STjswa5oOLoP59QwTJvQwi73kgn0UzKOaXc2CsTRI4k,6912
331
349
  letta_client/voice/types/__init__.py,sha256=FRc3iKRTONE4N8Lf1IqvnqWZ2kXdrFFvkL7PxVcR8Ew,212
332
350
  letta_client/voice/types/create_voice_chat_completions_request_body.py,sha256=ZLfKgNK1T6IAwLEvaBVFfy7jEAoPUXP28n-nfmHkklc,391
333
- letta_client-0.1.114.dist-info/METADATA,sha256=1wNYLSLYEtjzRn9GgYNSvEcrCbdtBISBKPaDjpuAw_0,5042
334
- letta_client-0.1.114.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
335
- letta_client-0.1.114.dist-info/RECORD,,
351
+ letta_client-0.1.116.dist-info/METADATA,sha256=gzBG41gPHxqDKIDINM2rLVUrGZdzl37tSYjutqsVhL4,5042
352
+ letta_client-0.1.116.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
353
+ letta_client-0.1.116.dist-info/RECORD,,