letta-client 0.1.54__py3-none-any.whl → 0.1.56__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
@@ -152,8 +152,10 @@ from .types import (
152
152
  ToolCallMessage,
153
153
  ToolCallMessageToolCall,
154
154
  ToolCreate,
155
+ ToolReturn,
155
156
  ToolReturnMessage,
156
157
  ToolReturnMessageStatus,
158
+ ToolReturnStatus,
157
159
  ToolType,
158
160
  UsageStatistics,
159
161
  User,
@@ -1034,8 +1036,10 @@ __all__ = [
1034
1036
  "ToolCallMessage",
1035
1037
  "ToolCallMessageToolCall",
1036
1038
  "ToolCreate",
1039
+ "ToolReturn",
1037
1040
  "ToolReturnMessage",
1038
1041
  "ToolReturnMessageStatus",
1042
+ "ToolReturnStatus",
1039
1043
  "ToolType",
1040
1044
  "UnprocessableEntityError",
1041
1045
  "UpdateAgentToolRulesItem",
@@ -26,6 +26,7 @@ from ..types.embedding_config import EmbeddingConfig
26
26
  from ..types.message_create import MessageCreate
27
27
  from ..core.serialization import convert_and_respect_annotation_metadata
28
28
  from ..core.jsonable_encoder import jsonable_encoder
29
+ from .. import core
29
30
  from .types.update_agent_tool_rules_item import UpdateAgentToolRulesItem
30
31
  import datetime as dt
31
32
  from ..types.passage import Passage
@@ -414,6 +415,136 @@ class AgentsClient:
414
415
  raise ApiError(status_code=_response.status_code, body=_response.text)
415
416
  raise ApiError(status_code=_response.status_code, body=_response_json)
416
417
 
418
+ def download_agent_serialized(
419
+ self, agent_id: str, *, request_options: typing.Optional[RequestOptions] = None
420
+ ) -> typing.Optional[typing.Any]:
421
+ """
422
+ Download the serialized JSON representation of an agent.
423
+
424
+ Parameters
425
+ ----------
426
+ agent_id : str
427
+
428
+ request_options : typing.Optional[RequestOptions]
429
+ Request-specific configuration.
430
+
431
+ Returns
432
+ -------
433
+ typing.Optional[typing.Any]
434
+ Successful Response
435
+
436
+ Examples
437
+ --------
438
+ from letta_client import Letta
439
+
440
+ client = Letta(
441
+ token="YOUR_TOKEN",
442
+ )
443
+ client.agents.download_agent_serialized(
444
+ agent_id="agent_id",
445
+ )
446
+ """
447
+ _response = self._client_wrapper.httpx_client.request(
448
+ f"v1/agents/{jsonable_encoder(agent_id)}/download",
449
+ method="GET",
450
+ request_options=request_options,
451
+ )
452
+ try:
453
+ if 200 <= _response.status_code < 300:
454
+ return typing.cast(
455
+ typing.Optional[typing.Any],
456
+ construct_type(
457
+ type_=typing.Optional[typing.Any], # type: ignore
458
+ object_=_response.json(),
459
+ ),
460
+ )
461
+ if _response.status_code == 422:
462
+ raise UnprocessableEntityError(
463
+ typing.cast(
464
+ HttpValidationError,
465
+ construct_type(
466
+ type_=HttpValidationError, # type: ignore
467
+ object_=_response.json(),
468
+ ),
469
+ )
470
+ )
471
+ _response_json = _response.json()
472
+ except JSONDecodeError:
473
+ raise ApiError(status_code=_response.status_code, body=_response.text)
474
+ raise ApiError(status_code=_response.status_code, body=_response_json)
475
+
476
+ def upload_agent_serialized(
477
+ self,
478
+ *,
479
+ file: core.File,
480
+ mark_as_copy: typing.Optional[bool] = None,
481
+ request_options: typing.Optional[RequestOptions] = None,
482
+ ) -> AgentState:
483
+ """
484
+ Upload a serialized agent JSON file and recreate the agent in the system.
485
+
486
+ Parameters
487
+ ----------
488
+ file : core.File
489
+ See core.File for more documentation
490
+
491
+ mark_as_copy : typing.Optional[bool]
492
+ Whether to mark the uploaded agent as a copy
493
+
494
+ request_options : typing.Optional[RequestOptions]
495
+ Request-specific configuration.
496
+
497
+ Returns
498
+ -------
499
+ AgentState
500
+ Successful Response
501
+
502
+ Examples
503
+ --------
504
+ from letta_client import Letta
505
+
506
+ client = Letta(
507
+ token="YOUR_TOKEN",
508
+ )
509
+ client.agents.upload_agent_serialized()
510
+ """
511
+ _response = self._client_wrapper.httpx_client.request(
512
+ "v1/agents/upload",
513
+ method="POST",
514
+ params={
515
+ "mark_as_copy": mark_as_copy,
516
+ },
517
+ data={},
518
+ files={
519
+ "file": file,
520
+ },
521
+ request_options=request_options,
522
+ omit=OMIT,
523
+ )
524
+ try:
525
+ if 200 <= _response.status_code < 300:
526
+ return typing.cast(
527
+ AgentState,
528
+ construct_type(
529
+ type_=AgentState, # type: ignore
530
+ object_=_response.json(),
531
+ ),
532
+ )
533
+ if _response.status_code == 422:
534
+ raise UnprocessableEntityError(
535
+ typing.cast(
536
+ HttpValidationError,
537
+ construct_type(
538
+ type_=HttpValidationError, # type: ignore
539
+ object_=_response.json(),
540
+ ),
541
+ )
542
+ )
543
+ _response_json = _response.json()
544
+ except JSONDecodeError:
545
+ raise ApiError(status_code=_response.status_code, body=_response.text)
546
+ raise ApiError(status_code=_response.status_code, body=_response_json)
547
+
417
548
  def retrieve(self, agent_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AgentState:
418
549
  """
419
550
  Get the state of the agent.
@@ -1359,6 +1490,152 @@ class AsyncAgentsClient:
1359
1490
  raise ApiError(status_code=_response.status_code, body=_response.text)
1360
1491
  raise ApiError(status_code=_response.status_code, body=_response_json)
1361
1492
 
1493
+ async def download_agent_serialized(
1494
+ self, agent_id: str, *, request_options: typing.Optional[RequestOptions] = None
1495
+ ) -> typing.Optional[typing.Any]:
1496
+ """
1497
+ Download the serialized JSON representation of an agent.
1498
+
1499
+ Parameters
1500
+ ----------
1501
+ agent_id : str
1502
+
1503
+ request_options : typing.Optional[RequestOptions]
1504
+ Request-specific configuration.
1505
+
1506
+ Returns
1507
+ -------
1508
+ typing.Optional[typing.Any]
1509
+ Successful Response
1510
+
1511
+ Examples
1512
+ --------
1513
+ import asyncio
1514
+
1515
+ from letta_client import AsyncLetta
1516
+
1517
+ client = AsyncLetta(
1518
+ token="YOUR_TOKEN",
1519
+ )
1520
+
1521
+
1522
+ async def main() -> None:
1523
+ await client.agents.download_agent_serialized(
1524
+ agent_id="agent_id",
1525
+ )
1526
+
1527
+
1528
+ asyncio.run(main())
1529
+ """
1530
+ _response = await self._client_wrapper.httpx_client.request(
1531
+ f"v1/agents/{jsonable_encoder(agent_id)}/download",
1532
+ method="GET",
1533
+ request_options=request_options,
1534
+ )
1535
+ try:
1536
+ if 200 <= _response.status_code < 300:
1537
+ return typing.cast(
1538
+ typing.Optional[typing.Any],
1539
+ construct_type(
1540
+ type_=typing.Optional[typing.Any], # type: ignore
1541
+ object_=_response.json(),
1542
+ ),
1543
+ )
1544
+ if _response.status_code == 422:
1545
+ raise UnprocessableEntityError(
1546
+ typing.cast(
1547
+ HttpValidationError,
1548
+ construct_type(
1549
+ type_=HttpValidationError, # type: ignore
1550
+ object_=_response.json(),
1551
+ ),
1552
+ )
1553
+ )
1554
+ _response_json = _response.json()
1555
+ except JSONDecodeError:
1556
+ raise ApiError(status_code=_response.status_code, body=_response.text)
1557
+ raise ApiError(status_code=_response.status_code, body=_response_json)
1558
+
1559
+ async def upload_agent_serialized(
1560
+ self,
1561
+ *,
1562
+ file: core.File,
1563
+ mark_as_copy: typing.Optional[bool] = None,
1564
+ request_options: typing.Optional[RequestOptions] = None,
1565
+ ) -> AgentState:
1566
+ """
1567
+ Upload a serialized agent JSON file and recreate the agent in the system.
1568
+
1569
+ Parameters
1570
+ ----------
1571
+ file : core.File
1572
+ See core.File for more documentation
1573
+
1574
+ mark_as_copy : typing.Optional[bool]
1575
+ Whether to mark the uploaded agent as a copy
1576
+
1577
+ request_options : typing.Optional[RequestOptions]
1578
+ Request-specific configuration.
1579
+
1580
+ Returns
1581
+ -------
1582
+ AgentState
1583
+ Successful Response
1584
+
1585
+ Examples
1586
+ --------
1587
+ import asyncio
1588
+
1589
+ from letta_client import AsyncLetta
1590
+
1591
+ client = AsyncLetta(
1592
+ token="YOUR_TOKEN",
1593
+ )
1594
+
1595
+
1596
+ async def main() -> None:
1597
+ await client.agents.upload_agent_serialized()
1598
+
1599
+
1600
+ asyncio.run(main())
1601
+ """
1602
+ _response = await self._client_wrapper.httpx_client.request(
1603
+ "v1/agents/upload",
1604
+ method="POST",
1605
+ params={
1606
+ "mark_as_copy": mark_as_copy,
1607
+ },
1608
+ data={},
1609
+ files={
1610
+ "file": file,
1611
+ },
1612
+ request_options=request_options,
1613
+ omit=OMIT,
1614
+ )
1615
+ try:
1616
+ if 200 <= _response.status_code < 300:
1617
+ return typing.cast(
1618
+ AgentState,
1619
+ construct_type(
1620
+ type_=AgentState, # type: ignore
1621
+ object_=_response.json(),
1622
+ ),
1623
+ )
1624
+ if _response.status_code == 422:
1625
+ raise UnprocessableEntityError(
1626
+ typing.cast(
1627
+ HttpValidationError,
1628
+ construct_type(
1629
+ type_=HttpValidationError, # type: ignore
1630
+ object_=_response.json(),
1631
+ ),
1632
+ )
1633
+ )
1634
+ _response_json = _response.json()
1635
+ except JSONDecodeError:
1636
+ raise ApiError(status_code=_response.status_code, body=_response.text)
1637
+ raise ApiError(status_code=_response.status_code, body=_response_json)
1638
+
1362
1639
  async def retrieve(self, agent_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> AgentState:
1363
1640
  """
1364
1641
  Get the state of the agent.
@@ -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.54",
19
+ "X-Fern-SDK-Version": "0.1.56",
20
20
  }
21
21
  if self.token is not None:
22
22
  headers["Authorization"] = f"Bearer {self.token}"
@@ -157,8 +157,10 @@ from .tool_call_delta import ToolCallDelta
157
157
  from .tool_call_message import ToolCallMessage
158
158
  from .tool_call_message_tool_call import ToolCallMessageToolCall
159
159
  from .tool_create import ToolCreate
160
+ from .tool_return import ToolReturn
160
161
  from .tool_return_message import ToolReturnMessage
161
162
  from .tool_return_message_status import ToolReturnMessageStatus
163
+ from .tool_return_status import ToolReturnStatus
162
164
  from .tool_type import ToolType
163
165
  from .usage_statistics import UsageStatistics
164
166
  from .user import User
@@ -321,8 +323,10 @@ __all__ = [
321
323
  "ToolCallMessage",
322
324
  "ToolCallMessageToolCall",
323
325
  "ToolCreate",
326
+ "ToolReturn",
324
327
  "ToolReturnMessage",
325
328
  "ToolReturnMessageStatus",
329
+ "ToolReturnStatus",
326
330
  "ToolType",
327
331
  "UsageStatistics",
328
332
  "User",
@@ -7,6 +7,7 @@ import datetime as dt
7
7
  from .message_role import MessageRole
8
8
  from .text_content import TextContent
9
9
  from .chat_completion_message_tool_call_output import ChatCompletionMessageToolCallOutput
10
+ from .tool_return import ToolReturn
10
11
  from ..core.pydantic_utilities import IS_PYDANTIC_V2
11
12
 
12
13
 
@@ -92,6 +93,16 @@ class Message(UncheckedBaseModel):
92
93
  The id of the step that this message was created in.
93
94
  """
94
95
 
96
+ otid: typing.Optional[str] = pydantic.Field(default=None)
97
+ """
98
+ The offline threading id associated with this message
99
+ """
100
+
101
+ tool_returns: typing.Optional[typing.List[ToolReturn]] = pydantic.Field(default=None)
102
+ """
103
+ Tool execution return information for prior tool calls
104
+ """
105
+
95
106
  if IS_PYDANTIC_V2:
96
107
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
97
108
  else:
@@ -0,0 +1,33 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.unchecked_base_model import UncheckedBaseModel
4
+ from .tool_return_status import ToolReturnStatus
5
+ import pydantic
6
+ import typing
7
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
8
+
9
+
10
+ class ToolReturn(UncheckedBaseModel):
11
+ status: ToolReturnStatus = pydantic.Field()
12
+ """
13
+ The status of the tool call
14
+ """
15
+
16
+ stdout: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
17
+ """
18
+ Captured stdout (e.g. prints, logs) from the tool invocation
19
+ """
20
+
21
+ stderr: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
22
+ """
23
+ Captured stderr from the tool invocation
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,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ ToolReturnStatus = typing.Union[typing.Literal["success", "error"], typing.Any]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-client
3
- Version: 0.1.54
3
+ Version: 0.1.56
4
4
  Summary:
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -1,8 +1,8 @@
1
- letta_client/__init__.py,sha256=gE-ZEiBn_82WiGeafvXwxQh49hjm0E16DPA5jB6s7L4,56520
1
+ letta_client/__init__.py,sha256=Ip8Q9zmaujvKwA0wFliL-9AK0GlkgB6UgwZJhcQLJKs,56600
2
2
  letta_client/agents/__init__.py,sha256=dsO71a7KQVSsJkkd31kf6RwxZOeJzjhvJZRQBS7Mlws,22384
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
5
- letta_client/agents/client.py,sha256=YUFtT3ZBHyvUcK-IbAchSbYRJprGB9aR2eedNdI6r3g,73961
5
+ letta_client/agents/client.py,sha256=rMgrx7nZH0KR-T1ye5yQIDRVpWWAbFX4ZQVN90zv0S0,82633
6
6
  letta_client/agents/context/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
7
7
  letta_client/agents/context/client.py,sha256=GKKvoG4N_K8Biz9yDjeIHpFG0C8Cwc7tHmEX3pTL_9U,4815
8
8
  letta_client/agents/core_memory/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
@@ -209,7 +209,7 @@ letta_client/blocks/client.py,sha256=AeQQ-IdYhV-zqLTt3PTrJOtJ6XtBZcXNC108Y5EogVU
209
209
  letta_client/client.py,sha256=xdSrD4IkWokZHujowd1r7zESBoVgKGNvo6RqgZ3f0Fg,12808
210
210
  letta_client/core/__init__.py,sha256=OKbX2aCZXgHCDUsCouqv-OiX32xA6eFFCKIUH9M5Vzk,1591
211
211
  letta_client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
212
- letta_client/core/client_wrapper.py,sha256=jIg6jkb0yX5-JmMNEd_l26MVdszs6wxY2UDbBauoiZM,1997
212
+ letta_client/core/client_wrapper.py,sha256=mK4Dx0fezyP7cOZVa2ReUgvouBWhs1betK1iw3Xiyv0,1997
213
213
  letta_client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
214
214
  letta_client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
215
215
  letta_client/core/http_client.py,sha256=siUQ6UV0ARZALlxubqWSSAAPC9B4VW8y6MGlHStfaeo,19552
@@ -422,7 +422,7 @@ letta_client/templates/types/templates_create_agents_response_agents_item_update
422
422
  letta_client/templates/types/templates_create_agents_response_agents_item_updated_at_item.py,sha256=T3rYnv5m_cBAEPBnEjUkkHJLYtFZfXNMbb7a9FrIwKY,175
423
423
  letta_client/tools/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
424
424
  letta_client/tools/client.py,sha256=Oyds2HAtLITB0vGiSjAgJhv2EhJP_7JHj9X7zCAgJDk,55555
425
- letta_client/types/__init__.py,sha256=CHSYpc-2xTVN0WDFZQ_eQZrSyJ1029q5TXvAfVc5-Ug,15395
425
+ letta_client/types/__init__.py,sha256=dDV5Vpf6r4bZrAeIYVCOc9eV4G33GCYYk7C0pXgUr9I,15522
426
426
  letta_client/types/action_model.py,sha256=y1e2XMv3skFaNJIBdYoBKgiORzGh05aOVvu-qVR9uHg,1240
427
427
  letta_client/types/action_parameters_model.py,sha256=LgKf5aPZG3-OHGxFdXiSokIDgce8c02xPYIAY05VgW8,828
428
428
  letta_client/types/action_response_model.py,sha256=yq2Fd9UU8j7vvtE3VqXUoRRvDzWcfJPj_95ynGdeHCs,824
@@ -532,7 +532,7 @@ letta_client/types/llm_config.py,sha256=B-LJpzPB5RNSPG-cag65yTIWc0mbD7iKg77N6ejP
532
532
  letta_client/types/llm_config_model_endpoint_type.py,sha256=HOSM5kIZDCNAVCWmASvAk52K819plqGlD66yKQ1xFkI,620
533
533
  letta_client/types/local_sandbox_config.py,sha256=jfe7akG_YrJJ8csLaLdev04Zg1x-PTN0XCAL4KifaZI,1387
534
534
  letta_client/types/memory.py,sha256=KD5MkDQB-vbRPT9f_-yFBWY1WUW_NWxYEI0IiflG6P8,1035
535
- letta_client/types/message.py,sha256=Mg6oT5sP5NVqBXSz9lpWkRW-6Sq_YiOLX-fT3KrwoaY,3137
535
+ letta_client/types/message.py,sha256=ljE4P8F3UIFlExlrNQhtn6Gzudv-sATN4Gg-ylXqlao,3476
536
536
  letta_client/types/message_create.py,sha256=x80xQYxC3IUHs7PKCqHfeJkHRh02dx0oOc0PoJO8krc,1011
537
537
  letta_client/types/message_create_content.py,sha256=N3W7IzbUk2RqEbL88noLCu4Bmbli5-yq35d0nfscGl8,185
538
538
  letta_client/types/message_create_role.py,sha256=atjQEZ8iT4gTAmrFTFnRaM66f0MGsgfGq6hpx1Q-i44,159
@@ -574,8 +574,10 @@ letta_client/types/tool_call_delta.py,sha256=wGeZwJ9pwYHD5-f4Unf5-vJqefK40eHw9i0
574
574
  letta_client/types/tool_call_message.py,sha256=PQEYtLzNMmqc86q7kqjEuALvJ4HdAC_8ODIYjArsoco,1096
575
575
  letta_client/types/tool_call_message_tool_call.py,sha256=twtq5-vZIeh1nShqm8iTCN9YFtY7LUIL-bFYuUfhF1o,219
576
576
  letta_client/types/tool_create.py,sha256=VSMd23Kkd77SPbLv2oRHEzXqR2Eexc0ervjxXYLHiqc,1522
577
+ letta_client/types/tool_return.py,sha256=f-6zaRo8Bwl0i0Q0rHl8vKOfzymFHN_tVRoC2lMWksI,984
577
578
  letta_client/types/tool_return_message.py,sha256=hQ-17bvNGoSaCow4AvWSGLTa80fKuXP2bxXGNUXuX0w,1591
578
579
  letta_client/types/tool_return_message_status.py,sha256=FvFOMaG9mnmgnHi2UBQVQQMtHFabbWnQnHTxGUDgVl0,167
580
+ letta_client/types/tool_return_status.py,sha256=TQjwYprn5F_jU9kIbrtiyk7Gw2SjcmFFZLjFbGDpBM0,160
579
581
  letta_client/types/tool_type.py,sha256=Br4Lk5nEsc8wcWP1leTqGPaYnNVWo4xMmoAksUTVqOA,271
580
582
  letta_client/types/usage_statistics.py,sha256=btEmMUxFVu7oQQtBCdQqFJ6XddgmR84799-AdlsHh0w,690
581
583
  letta_client/types/user.py,sha256=z_v1uqQ6HYwV_Pp7wDDqS6QWhslHgdUH-AldV-jnmKQ,1349
@@ -590,6 +592,6 @@ letta_client/voice/__init__.py,sha256=ZrZEuXIukVGhsfM-i0dIFfqjeSOBMPeEgDva7Vvnip
590
592
  letta_client/voice/client.py,sha256=j3feSlNzeTVFXE7RUKEHGeMl_w0TJFBRUI3pXpLpUEI,6148
591
593
  letta_client/voice/types/__init__.py,sha256=hBLJcrom99DkDxxsVRU2ni8kPx6SsCy8gtAJvNOz26w,199
592
594
  letta_client/voice/types/create_voice_chat_completions_request.py,sha256=K4__83rXRCshfdobyAmH-5fUDJQ_PeSQetTUeC4Abk0,381
593
- letta_client-0.1.54.dist-info/METADATA,sha256=bW_vwYxfAnY-_zb45lt9yg3s6H2EPpIUYK77NsOpqxo,4942
594
- letta_client-0.1.54.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
595
- letta_client-0.1.54.dist-info/RECORD,,
595
+ letta_client-0.1.56.dist-info/METADATA,sha256=MTiaisKZKR584GK72Lq4I7_ITUgZs5grOLTLepWGkvM,4942
596
+ letta_client-0.1.56.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
597
+ letta_client-0.1.56.dist-info/RECORD,,