letta-client 0.1.308__py3-none-any.whl → 0.1.309__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
@@ -381,6 +381,9 @@ from .projects import ProjectsListResponse, ProjectsListResponseProjectsItem
381
381
  from .runs import LettaStreamingResponse
382
382
  from .steps import StepsListRequestFeedback
383
383
  from .templates import (
384
+ TemplatesCreateTemplateRequest,
385
+ TemplatesCreateTemplateRequestAgentFile,
386
+ TemplatesCreateTemplateRequestAgentId,
384
387
  TemplatesCreateTemplateResponse,
385
388
  TemplatesDeleteTemplateResponse,
386
389
  TemplatesForkTemplateResponse,
@@ -743,6 +746,9 @@ __all__ = [
743
746
  "SupervisorManagerUpdate",
744
747
  "SystemMessage",
745
748
  "TagSchema",
749
+ "TemplatesCreateTemplateRequest",
750
+ "TemplatesCreateTemplateRequestAgentFile",
751
+ "TemplatesCreateTemplateRequestAgentId",
746
752
  "TemplatesCreateTemplateResponse",
747
753
  "TemplatesDeleteTemplateResponse",
748
754
  "TemplatesForkTemplateResponse",
@@ -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.308",
27
+ "User-Agent": "letta-client/0.1.309",
28
28
  "X-Fern-Language": "Python",
29
29
  "X-Fern-SDK-Name": "letta-client",
30
- "X-Fern-SDK-Version": "0.1.308",
30
+ "X-Fern-SDK-Version": "0.1.309",
31
31
  **(self.get_custom_headers() or {}),
32
32
  }
33
33
  if self._project is not None:
@@ -3,6 +3,9 @@
3
3
  # isort: skip_file
4
4
 
5
5
  from .types import (
6
+ TemplatesCreateTemplateRequest,
7
+ TemplatesCreateTemplateRequestAgentFile,
8
+ TemplatesCreateTemplateRequestAgentId,
6
9
  TemplatesCreateTemplateResponse,
7
10
  TemplatesDeleteTemplateResponse,
8
11
  TemplatesForkTemplateResponse,
@@ -47,6 +50,9 @@ __all__ = [
47
50
  "AgentsCreateRequestInitialMessageSequenceItem",
48
51
  "AgentsCreateRequestInitialMessageSequenceItemRole",
49
52
  "AgentsCreateResponse",
53
+ "TemplatesCreateTemplateRequest",
54
+ "TemplatesCreateTemplateRequestAgentFile",
55
+ "TemplatesCreateTemplateRequestAgentId",
50
56
  "TemplatesCreateTemplateResponse",
51
57
  "TemplatesDeleteTemplateResponse",
52
58
  "TemplatesForkTemplateResponse",
@@ -6,6 +6,7 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
6
  from ..core.request_options import RequestOptions
7
7
  from .agents.client import AgentsClient, AsyncAgentsClient
8
8
  from .raw_client import AsyncRawTemplatesClient, RawTemplatesClient
9
+ from .types.templates_create_template_request import TemplatesCreateTemplateRequest
9
10
  from .types.templates_create_template_response import TemplatesCreateTemplateResponse
10
11
  from .types.templates_delete_template_response import TemplatesDeleteTemplateResponse
11
12
  from .types.templates_fork_template_response import TemplatesForkTemplateResponse
@@ -304,23 +305,18 @@ class TemplatesClient:
304
305
  self,
305
306
  project: str,
306
307
  *,
307
- agent_id: str,
308
- name: typing.Optional[str] = OMIT,
308
+ request: TemplatesCreateTemplateRequest,
309
309
  request_options: typing.Optional[RequestOptions] = None,
310
310
  ) -> TemplatesCreateTemplateResponse:
311
311
  """
312
- Creates a new template from an existing agent
312
+ Creates a new template from an existing agent or agent file
313
313
 
314
314
  Parameters
315
315
  ----------
316
316
  project : str
317
317
  The project slug
318
318
 
319
- agent_id : str
320
- The ID of the agent to use as a template, can be from any project
321
-
322
- name : typing.Optional[str]
323
- Optional custom name for the template. If not provided, a random name will be generated.
319
+ request : TemplatesCreateTemplateRequest
324
320
 
325
321
  request_options : typing.Optional[RequestOptions]
326
322
  Request-specific configuration.
@@ -333,6 +329,7 @@ class TemplatesClient:
333
329
  Examples
334
330
  --------
335
331
  from letta_client import Letta
332
+ from letta_client.templates import TemplatesCreateTemplateRequestAgentId
336
333
 
337
334
  client = Letta(
338
335
  project="YOUR_PROJECT",
@@ -340,12 +337,12 @@ class TemplatesClient:
340
337
  )
341
338
  client.templates.createtemplate(
342
339
  project="project",
343
- agent_id="agent_id",
340
+ request=TemplatesCreateTemplateRequestAgentId(
341
+ agent_id="agent_id",
342
+ ),
344
343
  )
345
344
  """
346
- _response = self._raw_client.createtemplate(
347
- project, agent_id=agent_id, name=name, request_options=request_options
348
- )
345
+ _response = self._raw_client.createtemplate(project, request=request, request_options=request_options)
349
346
  return _response.data
350
347
 
351
348
  def renametemplate(
@@ -823,23 +820,18 @@ class AsyncTemplatesClient:
823
820
  self,
824
821
  project: str,
825
822
  *,
826
- agent_id: str,
827
- name: typing.Optional[str] = OMIT,
823
+ request: TemplatesCreateTemplateRequest,
828
824
  request_options: typing.Optional[RequestOptions] = None,
829
825
  ) -> TemplatesCreateTemplateResponse:
830
826
  """
831
- Creates a new template from an existing agent
827
+ Creates a new template from an existing agent or agent file
832
828
 
833
829
  Parameters
834
830
  ----------
835
831
  project : str
836
832
  The project slug
837
833
 
838
- agent_id : str
839
- The ID of the agent to use as a template, can be from any project
840
-
841
- name : typing.Optional[str]
842
- Optional custom name for the template. If not provided, a random name will be generated.
834
+ request : TemplatesCreateTemplateRequest
843
835
 
844
836
  request_options : typing.Optional[RequestOptions]
845
837
  Request-specific configuration.
@@ -854,6 +846,7 @@ class AsyncTemplatesClient:
854
846
  import asyncio
855
847
 
856
848
  from letta_client import AsyncLetta
849
+ from letta_client.templates import TemplatesCreateTemplateRequestAgentId
857
850
 
858
851
  client = AsyncLetta(
859
852
  project="YOUR_PROJECT",
@@ -864,15 +857,15 @@ class AsyncTemplatesClient:
864
857
  async def main() -> None:
865
858
  await client.templates.createtemplate(
866
859
  project="project",
867
- agent_id="agent_id",
860
+ request=TemplatesCreateTemplateRequestAgentId(
861
+ agent_id="agent_id",
862
+ ),
868
863
  )
869
864
 
870
865
 
871
866
  asyncio.run(main())
872
867
  """
873
- _response = await self._raw_client.createtemplate(
874
- project, agent_id=agent_id, name=name, request_options=request_options
875
- )
868
+ _response = await self._raw_client.createtemplate(project, request=request, request_options=request_options)
876
869
  return _response.data
877
870
 
878
871
  async def renametemplate(
@@ -8,11 +8,13 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
8
  from ..core.http_response import AsyncHttpResponse, HttpResponse
9
9
  from ..core.jsonable_encoder import jsonable_encoder
10
10
  from ..core.request_options import RequestOptions
11
+ from ..core.serialization import convert_and_respect_annotation_metadata
11
12
  from ..core.unchecked_base_model import construct_type
12
13
  from ..errors.bad_request_error import BadRequestError
13
14
  from ..errors.conflict_error import ConflictError
14
15
  from ..errors.not_found_error import NotFoundError
15
16
  from ..types.conflict_error_body import ConflictErrorBody
17
+ from .types.templates_create_template_request import TemplatesCreateTemplateRequest
16
18
  from .types.templates_create_template_response import TemplatesCreateTemplateResponse
17
19
  from .types.templates_delete_template_response import TemplatesDeleteTemplateResponse
18
20
  from .types.templates_fork_template_response import TemplatesForkTemplateResponse
@@ -369,23 +371,18 @@ class RawTemplatesClient:
369
371
  self,
370
372
  project: str,
371
373
  *,
372
- agent_id: str,
373
- name: typing.Optional[str] = OMIT,
374
+ request: TemplatesCreateTemplateRequest,
374
375
  request_options: typing.Optional[RequestOptions] = None,
375
376
  ) -> HttpResponse[TemplatesCreateTemplateResponse]:
376
377
  """
377
- Creates a new template from an existing agent
378
+ Creates a new template from an existing agent or agent file
378
379
 
379
380
  Parameters
380
381
  ----------
381
382
  project : str
382
383
  The project slug
383
384
 
384
- agent_id : str
385
- The ID of the agent to use as a template, can be from any project
386
-
387
- name : typing.Optional[str]
388
- Optional custom name for the template. If not provided, a random name will be generated.
385
+ request : TemplatesCreateTemplateRequest
389
386
 
390
387
  request_options : typing.Optional[RequestOptions]
391
388
  Request-specific configuration.
@@ -398,11 +395,9 @@ class RawTemplatesClient:
398
395
  _response = self._client_wrapper.httpx_client.request(
399
396
  f"v1/templates/{jsonable_encoder(project)}",
400
397
  method="POST",
401
- json={
402
- "agent_id": agent_id,
403
- "name": name,
404
- "type": "agent",
405
- },
398
+ json=convert_and_respect_annotation_metadata(
399
+ object_=request, annotation=TemplatesCreateTemplateRequest, direction="write"
400
+ ),
406
401
  headers={
407
402
  "content-type": "application/json",
408
403
  },
@@ -1013,23 +1008,18 @@ class AsyncRawTemplatesClient:
1013
1008
  self,
1014
1009
  project: str,
1015
1010
  *,
1016
- agent_id: str,
1017
- name: typing.Optional[str] = OMIT,
1011
+ request: TemplatesCreateTemplateRequest,
1018
1012
  request_options: typing.Optional[RequestOptions] = None,
1019
1013
  ) -> AsyncHttpResponse[TemplatesCreateTemplateResponse]:
1020
1014
  """
1021
- Creates a new template from an existing agent
1015
+ Creates a new template from an existing agent or agent file
1022
1016
 
1023
1017
  Parameters
1024
1018
  ----------
1025
1019
  project : str
1026
1020
  The project slug
1027
1021
 
1028
- agent_id : str
1029
- The ID of the agent to use as a template, can be from any project
1030
-
1031
- name : typing.Optional[str]
1032
- Optional custom name for the template. If not provided, a random name will be generated.
1022
+ request : TemplatesCreateTemplateRequest
1033
1023
 
1034
1024
  request_options : typing.Optional[RequestOptions]
1035
1025
  Request-specific configuration.
@@ -1042,11 +1032,9 @@ class AsyncRawTemplatesClient:
1042
1032
  _response = await self._client_wrapper.httpx_client.request(
1043
1033
  f"v1/templates/{jsonable_encoder(project)}",
1044
1034
  method="POST",
1045
- json={
1046
- "agent_id": agent_id,
1047
- "name": name,
1048
- "type": "agent",
1049
- },
1035
+ json=convert_and_respect_annotation_metadata(
1036
+ object_=request, annotation=TemplatesCreateTemplateRequest, direction="write"
1037
+ ),
1050
1038
  headers={
1051
1039
  "content-type": "application/json",
1052
1040
  },
@@ -2,6 +2,9 @@
2
2
 
3
3
  # isort: skip_file
4
4
 
5
+ from .templates_create_template_request import TemplatesCreateTemplateRequest
6
+ from .templates_create_template_request_agent_file import TemplatesCreateTemplateRequestAgentFile
7
+ from .templates_create_template_request_agent_id import TemplatesCreateTemplateRequestAgentId
5
8
  from .templates_create_template_response import TemplatesCreateTemplateResponse
6
9
  from .templates_delete_template_response import TemplatesDeleteTemplateResponse
7
10
  from .templates_fork_template_response import TemplatesForkTemplateResponse
@@ -68,6 +71,9 @@ from .templates_save_template_version_response import TemplatesSaveTemplateVersi
68
71
  from .templates_update_template_description_response import TemplatesUpdateTemplateDescriptionResponse
69
72
 
70
73
  __all__ = [
74
+ "TemplatesCreateTemplateRequest",
75
+ "TemplatesCreateTemplateRequestAgentFile",
76
+ "TemplatesCreateTemplateRequestAgentId",
71
77
  "TemplatesCreateTemplateResponse",
72
78
  "TemplatesDeleteTemplateResponse",
73
79
  "TemplatesForkTemplateResponse",
@@ -0,0 +1,10 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from .templates_create_template_request_agent_file import TemplatesCreateTemplateRequestAgentFile
6
+ from .templates_create_template_request_agent_id import TemplatesCreateTemplateRequestAgentId
7
+
8
+ TemplatesCreateTemplateRequest = typing.Union[
9
+ TemplatesCreateTemplateRequestAgentId, TemplatesCreateTemplateRequestAgentFile
10
+ ]
@@ -0,0 +1,33 @@
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 TemplatesCreateTemplateRequestAgentFile(UncheckedBaseModel):
11
+ """
12
+ Create a template from an uploaded agent file
13
+ """
14
+
15
+ type: typing.Literal["agent_file"] = "agent_file"
16
+ agent_file: typing.Dict[str, typing.Optional[typing.Any]] = pydantic.Field()
17
+ """
18
+ The agent file to use as a template, this should be a JSON file exported from the platform
19
+ """
20
+
21
+ name: typing.Optional[str] = pydantic.Field(default=None)
22
+ """
23
+ Optional custom name for the template. If not provided, a random name will be generated.
24
+ """
25
+
26
+ if IS_PYDANTIC_V2:
27
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
28
+ else:
29
+
30
+ class Config:
31
+ frozen = True
32
+ smart_union = True
33
+ extra = pydantic.Extra.allow
@@ -0,0 +1,33 @@
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 TemplatesCreateTemplateRequestAgentId(UncheckedBaseModel):
11
+ """
12
+ Create a template from an existing agent
13
+ """
14
+
15
+ type: typing.Literal["agent"] = "agent"
16
+ agent_id: str = pydantic.Field()
17
+ """
18
+ The ID of the agent to use as a template, can be from any project
19
+ """
20
+
21
+ name: typing.Optional[str] = pydantic.Field(default=None)
22
+ """
23
+ Optional custom name for the template. If not provided, a random name will be generated.
24
+ """
25
+
26
+ if IS_PYDANTIC_V2:
27
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
28
+ else:
29
+
30
+ class Config:
31
+ frozen = True
32
+ smart_union = True
33
+ extra = pydantic.Extra.allow
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-client
3
- Version: 0.1.308
3
+ Version: 0.1.309
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=oUqJoq2I6-cZumZFu2cvZuw_FGQNGOaPYVTrt5BGDW0,27435
1
+ letta_client/__init__.py,sha256=IIdmY3HofPua98UN0RPnbkJTH5EHoFgLO8iKy-tsPbQ,27689
2
2
  letta_client/agents/__init__.py,sha256=6U2CPqYOtgufFoEhev61AzE-oOqgAQPUBsN8H7YJDbg,2081
3
3
  letta_client/agents/blocks/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
4
4
  letta_client/agents/blocks/client.py,sha256=CUwVh5FHgD0YP3VNhUrWdkedMWk49yH3IiDD589AWEM,15809
@@ -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=AK5r85YU_Rzg2wNIItk0TucUTeBEinlY9vOB8O-Od5Q,2776
95
+ letta_client/core/client_wrapper.py,sha256=tpWsnxrslDAHGnlZuLOEHVm6kJ_StLbTGthXT-F6I-U,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
@@ -202,7 +202,7 @@ letta_client/tags/raw_client.py,sha256=DQXEgzOuCygBMbzX63Sc9UwfueALa5rUHH3c8jb4O
202
202
  letta_client/telemetry/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
203
203
  letta_client/telemetry/client.py,sha256=cHMxfLAFjbT-XLtG0o04tGMaRnabrPuixbfHV3HFitE,3042
204
204
  letta_client/telemetry/raw_client.py,sha256=Zxs3KkYCfs6M1b4vJbzHunZs7SzSiYAiy4Nb7tFAKC8,4962
205
- letta_client/templates/__init__.py,sha256=STQqjEhLv-6rONnJ0kYvDdZOiqM_3_LDxwQeXISn4Kw,4118
205
+ letta_client/templates/__init__.py,sha256=A-h3ZYJPXZsRGvUdk9UrSOir_NawVjkqLVXoeX_noxI,4372
206
206
  letta_client/templates/agents/__init__.py,sha256=Nb3AeDuJhSba_DbgHKuCUY1b3PT1jj3-YMJ7uW7RIAk,393
207
207
  letta_client/templates/agents/client.py,sha256=HCCEZZ3b0tGonxDNbiPuXadoZu_x1G_OtBdTHRBpG4M,7088
208
208
  letta_client/templates/agents/raw_client.py,sha256=RGf_8ZaBbkS3sE7qrKqirL8Mu-E7CDRZNEKFWCJ3v4E,9552
@@ -210,9 +210,12 @@ letta_client/templates/agents/types/__init__.py,sha256=gDThrVEf3npLrxCqHWKgJLwB6
210
210
  letta_client/templates/agents/types/agents_create_request_initial_message_sequence_item.py,sha256=0--NEWDhbw-1WBF5wr5tl25ucWkqHvhmSm8iuQOr6tw,986
211
211
  letta_client/templates/agents/types/agents_create_request_initial_message_sequence_item_role.py,sha256=Xp6uU0_CfWtIBtHdwicF9b4yAcrCYXQyYvxtNKyq-K4,210
212
212
  letta_client/templates/agents/types/agents_create_response.py,sha256=P5sppbD_qW7I9suv5Ykm7tlgnh5a3omYggA8JgLw2RY,637
213
- letta_client/templates/client.py,sha256=0UpeHDFK00shNQPsK736MK6TCdsEWkU4vOOEavs6cUw,30760
214
- letta_client/templates/raw_client.py,sha256=IyPa-8Dvr4XEoc9IHLuo3502ERv8gheYD0SjI_I09Fw,50862
215
- letta_client/templates/types/__init__.py,sha256=tIFC9HGWRUfXqjTFd4CIptby9Uwx9E-pdYXrBOIv9gc,6028
213
+ letta_client/templates/client.py,sha256=cUyfi2AqglBR8JvDzyV43znUmQnwyOdq3lrWPElTKsQ,30714
214
+ letta_client/templates/raw_client.py,sha256=U9x3mGpgptDFm2sbHri4o4yB3pPLFCoCeVP9XK18IFk,50697
215
+ letta_client/templates/types/__init__.py,sha256=Joib6wxgIzQ4cmKKD2In6Ts8iF8YuCtyrdX0pN0Izuo,6428
216
+ letta_client/templates/types/templates_create_template_request.py,sha256=8Po-a33Bdyosx-Y08cnbTmmHYog7GJC--ZcZse5Opkk,405
217
+ letta_client/templates/types/templates_create_template_request_agent_file.py,sha256=LVlJq2JWT9Bgo3BPRcLaf5inWX034SvEOEd4fkM4gvg,1058
218
+ letta_client/templates/types/templates_create_template_request_agent_id.py,sha256=M5MG3wNcbGHZR2Z-zxwgj9PA03VkKB8gTGmZQwuApuM,972
216
219
  letta_client/templates/types/templates_create_template_response.py,sha256=UKaNiwW7WNX4Q3_IqGkFJaatMcdSS-Tsf8gDT2i677w,1082
217
220
  letta_client/templates/types/templates_delete_template_response.py,sha256=_DUyWh9jtgw8u_U_JsV8N-RhPcY32QLAQZsUCSXDCTY,583
218
221
  letta_client/templates/types/templates_fork_template_response.py,sha256=zX8aCR5Z8sEgXJHHzxsPeYRNMW2HfD26EN5Mlwrt-ZI,1080
@@ -581,6 +584,6 @@ letta_client/version.py,sha256=bttKLbIhO3UonCYQlqs600zzbQgfhCCMjeXR9WRzid4,79
581
584
  letta_client/voice/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
582
585
  letta_client/voice/client.py,sha256=EbIVOQh4HXqU9McATxwga08STk-HUwPEAUr_UHqyKHg,3748
583
586
  letta_client/voice/raw_client.py,sha256=KvM_3GXuSf51bubM0RVBnxvlf20qZTFMnaA_BzhXzjQ,5938
584
- letta_client-0.1.308.dist-info/METADATA,sha256=zVCwLDdV5zF6ckaJ386SCIC4rUPAXlrylM-BUi32W6U,5782
585
- letta_client-0.1.308.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
586
- letta_client-0.1.308.dist-info/RECORD,,
587
+ letta_client-0.1.309.dist-info/METADATA,sha256=W3_nfTYQVulj7OQn8Jeo7_g6f00kYUwHhXJ5Gl33YwY,5782
588
+ letta_client-0.1.309.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
589
+ letta_client-0.1.309.dist-info/RECORD,,