letta-client 0.1.221__py3-none-any.whl → 0.1.223__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
@@ -334,6 +334,7 @@ from .templates import TemplatesListResponse, TemplatesListResponseTemplatesItem
334
334
  from .tools import (
335
335
  AddMcpServerRequest,
336
336
  AddMcpServerResponseItem,
337
+ ConnectMcpServerRequest,
337
338
  DeleteMcpServerResponseItem,
338
339
  ListMcpServersResponseValue,
339
340
  TestMcpServerRequest,
@@ -449,6 +450,7 @@ __all__ = [
449
450
  "ConditionalToolRuleSchema",
450
451
  "ConflictError",
451
452
  "ConflictErrorBody",
453
+ "ConnectMcpServerRequest",
452
454
  "ContextWindowOverview",
453
455
  "ContinueToolRule",
454
456
  "CoreMemoryBlockSchema",
@@ -90,6 +90,7 @@ class BlocksClient:
90
90
  *,
91
91
  value: typing.Optional[str] = OMIT,
92
92
  limit: typing.Optional[int] = OMIT,
93
+ project_id: typing.Optional[str] = OMIT,
93
94
  name: typing.Optional[str] = OMIT,
94
95
  is_template: typing.Optional[bool] = OMIT,
95
96
  preserve_on_migration: typing.Optional[bool] = OMIT,
@@ -114,6 +115,9 @@ class BlocksClient:
114
115
  limit : typing.Optional[int]
115
116
  Character limit of the block.
116
117
 
118
+ project_id : typing.Optional[str]
119
+ The associated project id.
120
+
117
121
  name : typing.Optional[str]
118
122
  Name of the block if it is a template.
119
123
 
@@ -162,6 +166,7 @@ class BlocksClient:
162
166
  json={
163
167
  "value": value,
164
168
  "limit": limit,
169
+ "project_id": project_id,
165
170
  "name": name,
166
171
  "is_template": is_template,
167
172
  "preserve_on_migration": preserve_on_migration,
@@ -460,6 +465,7 @@ class AsyncBlocksClient:
460
465
  *,
461
466
  value: typing.Optional[str] = OMIT,
462
467
  limit: typing.Optional[int] = OMIT,
468
+ project_id: typing.Optional[str] = OMIT,
463
469
  name: typing.Optional[str] = OMIT,
464
470
  is_template: typing.Optional[bool] = OMIT,
465
471
  preserve_on_migration: typing.Optional[bool] = OMIT,
@@ -484,6 +490,9 @@ class AsyncBlocksClient:
484
490
  limit : typing.Optional[int]
485
491
  Character limit of the block.
486
492
 
493
+ project_id : typing.Optional[str]
494
+ The associated project id.
495
+
487
496
  name : typing.Optional[str]
488
497
  Name of the block if it is a template.
489
498
 
@@ -540,6 +549,7 @@ class AsyncBlocksClient:
540
549
  json={
541
550
  "value": value,
542
551
  "limit": limit,
552
+ "project_id": project_id,
543
553
  "name": name,
544
554
  "is_template": is_template,
545
555
  "preserve_on_migration": preserve_on_migration,
@@ -31,6 +31,7 @@ class BlocksClient:
31
31
  name: typing.Optional[str] = None,
32
32
  identity_id: typing.Optional[str] = None,
33
33
  identifier_keys: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
34
+ project_id: typing.Optional[str] = None,
34
35
  limit: typing.Optional[int] = None,
35
36
  request_options: typing.Optional[RequestOptions] = None,
36
37
  ) -> typing.List[Block]:
@@ -52,6 +53,9 @@ class BlocksClient:
52
53
  identifier_keys : typing.Optional[typing.Union[str, typing.Sequence[str]]]
53
54
  Search agents by identifier keys
54
55
 
56
+ project_id : typing.Optional[str]
57
+ Search blocks by project id
58
+
55
59
  limit : typing.Optional[int]
56
60
  Number of blocks to return
57
61
 
@@ -82,6 +86,7 @@ class BlocksClient:
82
86
  "name": name,
83
87
  "identity_id": identity_id,
84
88
  "identifier_keys": identifier_keys,
89
+ "project_id": project_id,
85
90
  "limit": limit,
86
91
  },
87
92
  request_options=request_options,
@@ -116,6 +121,7 @@ class BlocksClient:
116
121
  value: str,
117
122
  label: str,
118
123
  limit: typing.Optional[int] = OMIT,
124
+ project_id: typing.Optional[str] = OMIT,
119
125
  name: typing.Optional[str] = OMIT,
120
126
  is_template: typing.Optional[bool] = OMIT,
121
127
  preserve_on_migration: typing.Optional[bool] = OMIT,
@@ -136,6 +142,9 @@ class BlocksClient:
136
142
  limit : typing.Optional[int]
137
143
  Character limit of the block.
138
144
 
145
+ project_id : typing.Optional[str]
146
+ The associated project id.
147
+
139
148
  name : typing.Optional[str]
140
149
  Name of the block if it is a template.
141
150
 
@@ -180,6 +189,7 @@ class BlocksClient:
180
189
  json={
181
190
  "value": value,
182
191
  "limit": limit,
192
+ "project_id": project_id,
183
193
  "name": name,
184
194
  "is_template": is_template,
185
195
  "preserve_on_migration": preserve_on_migration,
@@ -386,6 +396,7 @@ class BlocksClient:
386
396
  *,
387
397
  value: typing.Optional[str] = OMIT,
388
398
  limit: typing.Optional[int] = OMIT,
399
+ project_id: typing.Optional[str] = OMIT,
389
400
  name: typing.Optional[str] = OMIT,
390
401
  is_template: typing.Optional[bool] = OMIT,
391
402
  preserve_on_migration: typing.Optional[bool] = OMIT,
@@ -406,6 +417,9 @@ class BlocksClient:
406
417
  limit : typing.Optional[int]
407
418
  Character limit of the block.
408
419
 
420
+ project_id : typing.Optional[str]
421
+ The associated project id.
422
+
409
423
  name : typing.Optional[str]
410
424
  Name of the block if it is a template.
411
425
 
@@ -453,6 +467,7 @@ class BlocksClient:
453
467
  json={
454
468
  "value": value,
455
469
  "limit": limit,
470
+ "project_id": project_id,
456
471
  "name": name,
457
472
  "is_template": is_template,
458
473
  "preserve_on_migration": preserve_on_migration,
@@ -502,6 +517,7 @@ class AsyncBlocksClient:
502
517
  name: typing.Optional[str] = None,
503
518
  identity_id: typing.Optional[str] = None,
504
519
  identifier_keys: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
520
+ project_id: typing.Optional[str] = None,
505
521
  limit: typing.Optional[int] = None,
506
522
  request_options: typing.Optional[RequestOptions] = None,
507
523
  ) -> typing.List[Block]:
@@ -523,6 +539,9 @@ class AsyncBlocksClient:
523
539
  identifier_keys : typing.Optional[typing.Union[str, typing.Sequence[str]]]
524
540
  Search agents by identifier keys
525
541
 
542
+ project_id : typing.Optional[str]
543
+ Search blocks by project id
544
+
526
545
  limit : typing.Optional[int]
527
546
  Number of blocks to return
528
547
 
@@ -561,6 +580,7 @@ class AsyncBlocksClient:
561
580
  "name": name,
562
581
  "identity_id": identity_id,
563
582
  "identifier_keys": identifier_keys,
583
+ "project_id": project_id,
564
584
  "limit": limit,
565
585
  },
566
586
  request_options=request_options,
@@ -595,6 +615,7 @@ class AsyncBlocksClient:
595
615
  value: str,
596
616
  label: str,
597
617
  limit: typing.Optional[int] = OMIT,
618
+ project_id: typing.Optional[str] = OMIT,
598
619
  name: typing.Optional[str] = OMIT,
599
620
  is_template: typing.Optional[bool] = OMIT,
600
621
  preserve_on_migration: typing.Optional[bool] = OMIT,
@@ -615,6 +636,9 @@ class AsyncBlocksClient:
615
636
  limit : typing.Optional[int]
616
637
  Character limit of the block.
617
638
 
639
+ project_id : typing.Optional[str]
640
+ The associated project id.
641
+
618
642
  name : typing.Optional[str]
619
643
  Name of the block if it is a template.
620
644
 
@@ -667,6 +691,7 @@ class AsyncBlocksClient:
667
691
  json={
668
692
  "value": value,
669
693
  "limit": limit,
694
+ "project_id": project_id,
670
695
  "name": name,
671
696
  "is_template": is_template,
672
697
  "preserve_on_migration": preserve_on_migration,
@@ -897,6 +922,7 @@ class AsyncBlocksClient:
897
922
  *,
898
923
  value: typing.Optional[str] = OMIT,
899
924
  limit: typing.Optional[int] = OMIT,
925
+ project_id: typing.Optional[str] = OMIT,
900
926
  name: typing.Optional[str] = OMIT,
901
927
  is_template: typing.Optional[bool] = OMIT,
902
928
  preserve_on_migration: typing.Optional[bool] = OMIT,
@@ -917,6 +943,9 @@ class AsyncBlocksClient:
917
943
  limit : typing.Optional[int]
918
944
  Character limit of the block.
919
945
 
946
+ project_id : typing.Optional[str]
947
+ The associated project id.
948
+
920
949
  name : typing.Optional[str]
921
950
  Name of the block if it is a template.
922
951
 
@@ -972,6 +1001,7 @@ class AsyncBlocksClient:
972
1001
  json={
973
1002
  "value": value,
974
1003
  "limit": limit,
1004
+ "project_id": project_id,
975
1005
  "name": name,
976
1006
  "is_template": is_template,
977
1007
  "preserve_on_migration": preserve_on_migration,
@@ -24,7 +24,7 @@ class BaseClientWrapper:
24
24
  headers: typing.Dict[str, str] = {
25
25
  "X-Fern-Language": "Python",
26
26
  "X-Fern-SDK-Name": "letta-client",
27
- "X-Fern-SDK-Version": "0.1.221",
27
+ "X-Fern-SDK-Version": "0.1.223",
28
28
  }
29
29
  if self._project is not None:
30
30
  headers["X-Project"] = self._project
@@ -117,6 +117,7 @@ class GroupsClient:
117
117
  agent_ids: typing.Sequence[str],
118
118
  description: str,
119
119
  manager_config: typing.Optional[GroupCreateManagerConfig] = OMIT,
120
+ project_id: typing.Optional[str] = OMIT,
120
121
  shared_block_ids: typing.Optional[typing.Sequence[str]] = OMIT,
121
122
  request_options: typing.Optional[RequestOptions] = None,
122
123
  ) -> Group:
@@ -134,6 +135,9 @@ class GroupsClient:
134
135
  manager_config : typing.Optional[GroupCreateManagerConfig]
135
136
 
136
137
 
138
+ project_id : typing.Optional[str]
139
+ The associated project id.
140
+
137
141
  shared_block_ids : typing.Optional[typing.Sequence[str]]
138
142
 
139
143
 
@@ -167,6 +171,7 @@ class GroupsClient:
167
171
  "manager_config": convert_and_respect_annotation_metadata(
168
172
  object_=manager_config, annotation=GroupCreateManagerConfig, direction="write"
169
173
  ),
174
+ "project_id": project_id,
170
175
  "shared_block_ids": shared_block_ids,
171
176
  },
172
177
  headers={
@@ -375,6 +380,7 @@ class GroupsClient:
375
380
  agent_ids: typing.Optional[typing.Sequence[str]] = OMIT,
376
381
  description: typing.Optional[str] = OMIT,
377
382
  manager_config: typing.Optional[GroupUpdateManagerConfig] = OMIT,
383
+ project_id: typing.Optional[str] = OMIT,
378
384
  shared_block_ids: typing.Optional[typing.Sequence[str]] = OMIT,
379
385
  request_options: typing.Optional[RequestOptions] = None,
380
386
  ) -> Group:
@@ -394,6 +400,9 @@ class GroupsClient:
394
400
  manager_config : typing.Optional[GroupUpdateManagerConfig]
395
401
 
396
402
 
403
+ project_id : typing.Optional[str]
404
+ The associated project id.
405
+
397
406
  shared_block_ids : typing.Optional[typing.Sequence[str]]
398
407
 
399
408
 
@@ -426,6 +435,7 @@ class GroupsClient:
426
435
  "manager_config": convert_and_respect_annotation_metadata(
427
436
  object_=manager_config, annotation=GroupUpdateManagerConfig, direction="write"
428
437
  ),
438
+ "project_id": project_id,
429
439
  "shared_block_ids": shared_block_ids,
430
440
  },
431
441
  headers={
@@ -562,6 +572,7 @@ class AsyncGroupsClient:
562
572
  agent_ids: typing.Sequence[str],
563
573
  description: str,
564
574
  manager_config: typing.Optional[GroupCreateManagerConfig] = OMIT,
575
+ project_id: typing.Optional[str] = OMIT,
565
576
  shared_block_ids: typing.Optional[typing.Sequence[str]] = OMIT,
566
577
  request_options: typing.Optional[RequestOptions] = None,
567
578
  ) -> Group:
@@ -579,6 +590,9 @@ class AsyncGroupsClient:
579
590
  manager_config : typing.Optional[GroupCreateManagerConfig]
580
591
 
581
592
 
593
+ project_id : typing.Optional[str]
594
+ The associated project id.
595
+
582
596
  shared_block_ids : typing.Optional[typing.Sequence[str]]
583
597
 
584
598
 
@@ -620,6 +634,7 @@ class AsyncGroupsClient:
620
634
  "manager_config": convert_and_respect_annotation_metadata(
621
635
  object_=manager_config, annotation=GroupCreateManagerConfig, direction="write"
622
636
  ),
637
+ "project_id": project_id,
623
638
  "shared_block_ids": shared_block_ids,
624
639
  },
625
640
  headers={
@@ -852,6 +867,7 @@ class AsyncGroupsClient:
852
867
  agent_ids: typing.Optional[typing.Sequence[str]] = OMIT,
853
868
  description: typing.Optional[str] = OMIT,
854
869
  manager_config: typing.Optional[GroupUpdateManagerConfig] = OMIT,
870
+ project_id: typing.Optional[str] = OMIT,
855
871
  shared_block_ids: typing.Optional[typing.Sequence[str]] = OMIT,
856
872
  request_options: typing.Optional[RequestOptions] = None,
857
873
  ) -> Group:
@@ -871,6 +887,9 @@ class AsyncGroupsClient:
871
887
  manager_config : typing.Optional[GroupUpdateManagerConfig]
872
888
 
873
889
 
890
+ project_id : typing.Optional[str]
891
+ The associated project id.
892
+
874
893
  shared_block_ids : typing.Optional[typing.Sequence[str]]
875
894
 
876
895
 
@@ -911,6 +930,7 @@ class AsyncGroupsClient:
911
930
  "manager_config": convert_and_respect_annotation_metadata(
912
931
  object_=manager_config, annotation=GroupUpdateManagerConfig, direction="write"
913
932
  ),
933
+ "project_id": project_id,
914
934
  "shared_block_ids": shared_block_ids,
915
935
  },
916
936
  headers={
@@ -3,6 +3,7 @@
3
3
  from .types import (
4
4
  AddMcpServerRequest,
5
5
  AddMcpServerResponseItem,
6
+ ConnectMcpServerRequest,
6
7
  DeleteMcpServerResponseItem,
7
8
  ListMcpServersResponseValue,
8
9
  TestMcpServerRequest,
@@ -13,6 +14,7 @@ from .types import (
13
14
  __all__ = [
14
15
  "AddMcpServerRequest",
15
16
  "AddMcpServerResponseItem",
17
+ "ConnectMcpServerRequest",
16
18
  "DeleteMcpServerResponseItem",
17
19
  "ListMcpServersResponseValue",
18
20
  "TestMcpServerRequest",
@@ -23,6 +23,7 @@ from .types.delete_mcp_server_response_item import DeleteMcpServerResponseItem
23
23
  from .types.update_mcp_server_request import UpdateMcpServerRequest
24
24
  from .types.update_mcp_server_response import UpdateMcpServerResponse
25
25
  from .types.test_mcp_server_request import TestMcpServerRequest
26
+ from .types.connect_mcp_server_request import ConnectMcpServerRequest
26
27
  from ..core.client_wrapper import AsyncClientWrapper
27
28
 
28
29
  # this is used as the default value for optional parameters
@@ -1320,10 +1321,10 @@ class ToolsClient:
1320
1321
 
1321
1322
  def test_mcp_server(
1322
1323
  self, *, request: TestMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
1323
- ) -> typing.List[McpTool]:
1324
+ ) -> typing.Optional[typing.Any]:
1324
1325
  """
1325
1326
  Test connection to an MCP server without adding it.
1326
- Returns the list of available tools if successful.
1327
+ Returns the list of available tools if successful, or OAuth information if OAuth is required.
1327
1328
 
1328
1329
  Parameters
1329
1330
  ----------
@@ -1334,7 +1335,7 @@ class ToolsClient:
1334
1335
 
1335
1336
  Returns
1336
1337
  -------
1337
- typing.List[McpTool]
1338
+ typing.Optional[typing.Any]
1338
1339
  Successful Response
1339
1340
 
1340
1341
  Examples
@@ -1365,9 +1366,77 @@ class ToolsClient:
1365
1366
  try:
1366
1367
  if 200 <= _response.status_code < 300:
1367
1368
  return typing.cast(
1368
- typing.List[McpTool],
1369
+ typing.Optional[typing.Any],
1369
1370
  construct_type(
1370
- type_=typing.List[McpTool], # type: ignore
1371
+ type_=typing.Optional[typing.Any], # type: ignore
1372
+ object_=_response.json(),
1373
+ ),
1374
+ )
1375
+ if _response.status_code == 422:
1376
+ raise UnprocessableEntityError(
1377
+ typing.cast(
1378
+ HttpValidationError,
1379
+ construct_type(
1380
+ type_=HttpValidationError, # type: ignore
1381
+ object_=_response.json(),
1382
+ ),
1383
+ )
1384
+ )
1385
+ _response_json = _response.json()
1386
+ except JSONDecodeError:
1387
+ raise ApiError(status_code=_response.status_code, body=_response.text)
1388
+ raise ApiError(status_code=_response.status_code, body=_response_json)
1389
+
1390
+ def connect_mcp_server(
1391
+ self, *, request: ConnectMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
1392
+ ) -> typing.Optional[typing.Any]:
1393
+ """
1394
+ Connect to an MCP server with support for OAuth via SSE.
1395
+ Returns a stream of events handling authorization state and exchange if OAuth is required.
1396
+
1397
+ Parameters
1398
+ ----------
1399
+ request : ConnectMcpServerRequest
1400
+
1401
+ request_options : typing.Optional[RequestOptions]
1402
+ Request-specific configuration.
1403
+
1404
+ Returns
1405
+ -------
1406
+ typing.Optional[typing.Any]
1407
+ Successful response
1408
+
1409
+ Examples
1410
+ --------
1411
+ from letta_client import Letta, StdioServerConfig
1412
+
1413
+ client = Letta(
1414
+ project="YOUR_PROJECT",
1415
+ token="YOUR_TOKEN",
1416
+ )
1417
+ client.tools.connect_mcp_server(
1418
+ request=StdioServerConfig(
1419
+ server_name="server_name",
1420
+ command="command",
1421
+ args=["args"],
1422
+ ),
1423
+ )
1424
+ """
1425
+ _response = self._client_wrapper.httpx_client.request(
1426
+ "v1/tools/mcp/servers/connect",
1427
+ method="POST",
1428
+ json=convert_and_respect_annotation_metadata(
1429
+ object_=request, annotation=ConnectMcpServerRequest, direction="write"
1430
+ ),
1431
+ request_options=request_options,
1432
+ omit=OMIT,
1433
+ )
1434
+ try:
1435
+ if 200 <= _response.status_code < 300:
1436
+ return typing.cast(
1437
+ typing.Optional[typing.Any],
1438
+ construct_type(
1439
+ type_=typing.Optional[typing.Any], # type: ignore
1371
1440
  object_=_response.json(),
1372
1441
  ),
1373
1442
  )
@@ -1386,6 +1455,83 @@ class ToolsClient:
1386
1455
  raise ApiError(status_code=_response.status_code, body=_response.text)
1387
1456
  raise ApiError(status_code=_response.status_code, body=_response_json)
1388
1457
 
1458
+ def mcp_oauth_callback(
1459
+ self,
1460
+ session_id: str,
1461
+ *,
1462
+ code: typing.Optional[str] = None,
1463
+ state: typing.Optional[str] = None,
1464
+ error: typing.Optional[str] = None,
1465
+ error_description: typing.Optional[str] = None,
1466
+ request_options: typing.Optional[RequestOptions] = None,
1467
+ ) -> None:
1468
+ """
1469
+ Handle OAuth callback for MCP server authentication.
1470
+
1471
+ Parameters
1472
+ ----------
1473
+ session_id : str
1474
+
1475
+ code : typing.Optional[str]
1476
+ OAuth authorization code
1477
+
1478
+ state : typing.Optional[str]
1479
+ OAuth state parameter
1480
+
1481
+ error : typing.Optional[str]
1482
+ OAuth error
1483
+
1484
+ error_description : typing.Optional[str]
1485
+ OAuth error description
1486
+
1487
+ request_options : typing.Optional[RequestOptions]
1488
+ Request-specific configuration.
1489
+
1490
+ Returns
1491
+ -------
1492
+ None
1493
+
1494
+ Examples
1495
+ --------
1496
+ from letta_client import Letta
1497
+
1498
+ client = Letta(
1499
+ project="YOUR_PROJECT",
1500
+ token="YOUR_TOKEN",
1501
+ )
1502
+ client.tools.mcp_oauth_callback(
1503
+ session_id="session_id",
1504
+ )
1505
+ """
1506
+ _response = self._client_wrapper.httpx_client.request(
1507
+ f"v1/tools/mcp/oauth/callback/{jsonable_encoder(session_id)}",
1508
+ method="GET",
1509
+ params={
1510
+ "code": code,
1511
+ "state": state,
1512
+ "error": error,
1513
+ "error_description": error_description,
1514
+ },
1515
+ request_options=request_options,
1516
+ )
1517
+ try:
1518
+ if 200 <= _response.status_code < 300:
1519
+ return
1520
+ if _response.status_code == 422:
1521
+ raise UnprocessableEntityError(
1522
+ typing.cast(
1523
+ HttpValidationError,
1524
+ construct_type(
1525
+ type_=HttpValidationError, # type: ignore
1526
+ object_=_response.json(),
1527
+ ),
1528
+ )
1529
+ )
1530
+ _response_json = _response.json()
1531
+ except JSONDecodeError:
1532
+ raise ApiError(status_code=_response.status_code, body=_response.text)
1533
+ raise ApiError(status_code=_response.status_code, body=_response_json)
1534
+
1389
1535
 
1390
1536
  class AsyncToolsClient:
1391
1537
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -2822,10 +2968,10 @@ class AsyncToolsClient:
2822
2968
 
2823
2969
  async def test_mcp_server(
2824
2970
  self, *, request: TestMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
2825
- ) -> typing.List[McpTool]:
2971
+ ) -> typing.Optional[typing.Any]:
2826
2972
  """
2827
2973
  Test connection to an MCP server without adding it.
2828
- Returns the list of available tools if successful.
2974
+ Returns the list of available tools if successful, or OAuth information if OAuth is required.
2829
2975
 
2830
2976
  Parameters
2831
2977
  ----------
@@ -2836,7 +2982,7 @@ class AsyncToolsClient:
2836
2982
 
2837
2983
  Returns
2838
2984
  -------
2839
- typing.List[McpTool]
2985
+ typing.Optional[typing.Any]
2840
2986
  Successful Response
2841
2987
 
2842
2988
  Examples
@@ -2875,9 +3021,9 @@ class AsyncToolsClient:
2875
3021
  try:
2876
3022
  if 200 <= _response.status_code < 300:
2877
3023
  return typing.cast(
2878
- typing.List[McpTool],
3024
+ typing.Optional[typing.Any],
2879
3025
  construct_type(
2880
- type_=typing.List[McpTool], # type: ignore
3026
+ type_=typing.Optional[typing.Any], # type: ignore
2881
3027
  object_=_response.json(),
2882
3028
  ),
2883
3029
  )
@@ -2895,3 +3041,164 @@ class AsyncToolsClient:
2895
3041
  except JSONDecodeError:
2896
3042
  raise ApiError(status_code=_response.status_code, body=_response.text)
2897
3043
  raise ApiError(status_code=_response.status_code, body=_response_json)
3044
+
3045
+ async def connect_mcp_server(
3046
+ self, *, request: ConnectMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
3047
+ ) -> typing.Optional[typing.Any]:
3048
+ """
3049
+ Connect to an MCP server with support for OAuth via SSE.
3050
+ Returns a stream of events handling authorization state and exchange if OAuth is required.
3051
+
3052
+ Parameters
3053
+ ----------
3054
+ request : ConnectMcpServerRequest
3055
+
3056
+ request_options : typing.Optional[RequestOptions]
3057
+ Request-specific configuration.
3058
+
3059
+ Returns
3060
+ -------
3061
+ typing.Optional[typing.Any]
3062
+ Successful response
3063
+
3064
+ Examples
3065
+ --------
3066
+ import asyncio
3067
+
3068
+ from letta_client import AsyncLetta, StdioServerConfig
3069
+
3070
+ client = AsyncLetta(
3071
+ project="YOUR_PROJECT",
3072
+ token="YOUR_TOKEN",
3073
+ )
3074
+
3075
+
3076
+ async def main() -> None:
3077
+ await client.tools.connect_mcp_server(
3078
+ request=StdioServerConfig(
3079
+ server_name="server_name",
3080
+ command="command",
3081
+ args=["args"],
3082
+ ),
3083
+ )
3084
+
3085
+
3086
+ asyncio.run(main())
3087
+ """
3088
+ _response = await self._client_wrapper.httpx_client.request(
3089
+ "v1/tools/mcp/servers/connect",
3090
+ method="POST",
3091
+ json=convert_and_respect_annotation_metadata(
3092
+ object_=request, annotation=ConnectMcpServerRequest, direction="write"
3093
+ ),
3094
+ request_options=request_options,
3095
+ omit=OMIT,
3096
+ )
3097
+ try:
3098
+ if 200 <= _response.status_code < 300:
3099
+ return typing.cast(
3100
+ typing.Optional[typing.Any],
3101
+ construct_type(
3102
+ type_=typing.Optional[typing.Any], # type: ignore
3103
+ object_=_response.json(),
3104
+ ),
3105
+ )
3106
+ if _response.status_code == 422:
3107
+ raise UnprocessableEntityError(
3108
+ typing.cast(
3109
+ HttpValidationError,
3110
+ construct_type(
3111
+ type_=HttpValidationError, # type: ignore
3112
+ object_=_response.json(),
3113
+ ),
3114
+ )
3115
+ )
3116
+ _response_json = _response.json()
3117
+ except JSONDecodeError:
3118
+ raise ApiError(status_code=_response.status_code, body=_response.text)
3119
+ raise ApiError(status_code=_response.status_code, body=_response_json)
3120
+
3121
+ async def mcp_oauth_callback(
3122
+ self,
3123
+ session_id: str,
3124
+ *,
3125
+ code: typing.Optional[str] = None,
3126
+ state: typing.Optional[str] = None,
3127
+ error: typing.Optional[str] = None,
3128
+ error_description: typing.Optional[str] = None,
3129
+ request_options: typing.Optional[RequestOptions] = None,
3130
+ ) -> None:
3131
+ """
3132
+ Handle OAuth callback for MCP server authentication.
3133
+
3134
+ Parameters
3135
+ ----------
3136
+ session_id : str
3137
+
3138
+ code : typing.Optional[str]
3139
+ OAuth authorization code
3140
+
3141
+ state : typing.Optional[str]
3142
+ OAuth state parameter
3143
+
3144
+ error : typing.Optional[str]
3145
+ OAuth error
3146
+
3147
+ error_description : typing.Optional[str]
3148
+ OAuth error description
3149
+
3150
+ request_options : typing.Optional[RequestOptions]
3151
+ Request-specific configuration.
3152
+
3153
+ Returns
3154
+ -------
3155
+ None
3156
+
3157
+ Examples
3158
+ --------
3159
+ import asyncio
3160
+
3161
+ from letta_client import AsyncLetta
3162
+
3163
+ client = AsyncLetta(
3164
+ project="YOUR_PROJECT",
3165
+ token="YOUR_TOKEN",
3166
+ )
3167
+
3168
+
3169
+ async def main() -> None:
3170
+ await client.tools.mcp_oauth_callback(
3171
+ session_id="session_id",
3172
+ )
3173
+
3174
+
3175
+ asyncio.run(main())
3176
+ """
3177
+ _response = await self._client_wrapper.httpx_client.request(
3178
+ f"v1/tools/mcp/oauth/callback/{jsonable_encoder(session_id)}",
3179
+ method="GET",
3180
+ params={
3181
+ "code": code,
3182
+ "state": state,
3183
+ "error": error,
3184
+ "error_description": error_description,
3185
+ },
3186
+ request_options=request_options,
3187
+ )
3188
+ try:
3189
+ if 200 <= _response.status_code < 300:
3190
+ return
3191
+ if _response.status_code == 422:
3192
+ raise UnprocessableEntityError(
3193
+ typing.cast(
3194
+ HttpValidationError,
3195
+ construct_type(
3196
+ type_=HttpValidationError, # type: ignore
3197
+ object_=_response.json(),
3198
+ ),
3199
+ )
3200
+ )
3201
+ _response_json = _response.json()
3202
+ except JSONDecodeError:
3203
+ raise ApiError(status_code=_response.status_code, body=_response.text)
3204
+ raise ApiError(status_code=_response.status_code, body=_response_json)
@@ -2,6 +2,7 @@
2
2
 
3
3
  from .add_mcp_server_request import AddMcpServerRequest
4
4
  from .add_mcp_server_response_item import AddMcpServerResponseItem
5
+ from .connect_mcp_server_request import ConnectMcpServerRequest
5
6
  from .delete_mcp_server_response_item import DeleteMcpServerResponseItem
6
7
  from .list_mcp_servers_response_value import ListMcpServersResponseValue
7
8
  from .test_mcp_server_request import TestMcpServerRequest
@@ -11,6 +12,7 @@ from .update_mcp_server_response import UpdateMcpServerResponse
11
12
  __all__ = [
12
13
  "AddMcpServerRequest",
13
14
  "AddMcpServerResponseItem",
15
+ "ConnectMcpServerRequest",
14
16
  "DeleteMcpServerResponseItem",
15
17
  "ListMcpServersResponseValue",
16
18
  "TestMcpServerRequest",
@@ -0,0 +1,8 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from ...types.stdio_server_config import StdioServerConfig
5
+ from ...types.sse_server_config import SseServerConfig
6
+ from ...types.streamable_http_server_config import StreamableHttpServerConfig
7
+
8
+ ConnectMcpServerRequest = typing.Union[StdioServerConfig, SseServerConfig, StreamableHttpServerConfig]
@@ -32,6 +32,11 @@ class Block(UncheckedBaseModel):
32
32
  Character limit of the block.
33
33
  """
34
34
 
35
+ project_id: typing.Optional[str] = pydantic.Field(default=None)
36
+ """
37
+ The associated project id.
38
+ """
39
+
35
40
  name: typing.Optional[str] = pydantic.Field(default=None)
36
41
  """
37
42
  Name of the block if it is a template.
@@ -21,6 +21,11 @@ class BlockUpdate(UncheckedBaseModel):
21
21
  Character limit of the block.
22
22
  """
23
23
 
24
+ project_id: typing.Optional[str] = pydantic.Field(default=None)
25
+ """
26
+ The associated project id.
27
+ """
28
+
24
29
  name: typing.Optional[str] = pydantic.Field(default=None)
25
30
  """
26
31
  Name of the block if it is a template.
@@ -21,6 +21,11 @@ class CreateBlock(UncheckedBaseModel):
21
21
  Character limit of the block.
22
22
  """
23
23
 
24
+ project_id: typing.Optional[str] = pydantic.Field(default=None)
25
+ """
26
+ The associated project id.
27
+ """
28
+
24
29
  name: typing.Optional[str] = pydantic.Field(default=None)
25
30
  """
26
31
  Name of the block if it is a template.
@@ -18,6 +18,11 @@ class FileBlock(UncheckedBaseModel):
18
18
  Character limit of the block.
19
19
  """
20
20
 
21
+ project_id: typing.Optional[str] = pydantic.Field(default=None)
22
+ """
23
+ The associated project id.
24
+ """
25
+
21
26
  name: typing.Optional[str] = pydantic.Field(default=None)
22
27
  """
23
28
  Name of the block if it is a template.
@@ -28,6 +28,11 @@ class Group(UncheckedBaseModel):
28
28
 
29
29
  """
30
30
 
31
+ project_id: typing.Optional[str] = pydantic.Field(default=None)
32
+ """
33
+ The associated project id.
34
+ """
35
+
31
36
  shared_block_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
32
37
  """
33
38
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-client
3
- Version: 0.1.221
3
+ Version: 0.1.223
4
4
  Summary:
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -1,7 +1,7 @@
1
- letta_client/__init__.py,sha256=aiCSJoHJGKQtTMjXahT6WjiMyw1IlwC6owUrb1tIu2s,19424
1
+ letta_client/__init__.py,sha256=SHGQJZEiJUN0sO7ZVdwwTenizJTldEs9YqrB-ux8vCk,19484
2
2
  letta_client/agents/__init__.py,sha256=9wEJMighDL1OFg_7Qh-D50bubPbV4BWo1ZKYxdDJGIQ,2146
3
3
  letta_client/agents/blocks/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
4
- letta_client/agents/blocks/client.py,sha256=4UGPYxfGwNN3ZW-SkIdfVZK6cvCcumVAw0_AM8OmoBY,25046
4
+ letta_client/agents/blocks/client.py,sha256=kCAcU1ACOKRCrjEYPyCQslWBjtsq7m4QboQP0wwLQy8,25392
5
5
  letta_client/agents/client.py,sha256=6txh-ARpVOKXcDlzzu_H8U652JnO3cYTUQx_xWMl_zA,92585
6
6
  letta_client/agents/context/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
7
7
  letta_client/agents/context/client.py,sha256=O1gxStQyfzXi4MblatWalLTWM425gS_fndW3W_es08U,4887
@@ -57,7 +57,7 @@ letta_client/batches/client.py,sha256=DHnsRYHgxVh6OvfAE8etlbno1FMg4cIzAYiydJrfmJ
57
57
  letta_client/blocks/__init__.py,sha256=c6SGOs9_YGdydYAzhe5TUiaXq52rpWT1mNMcke8qGTQ,108
58
58
  letta_client/blocks/agents/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
59
59
  letta_client/blocks/agents/client.py,sha256=2mBOt6CZanLUi_8Nc-bthaGoKhU3WgSA9vL1UjMdZE8,6066
60
- letta_client/blocks/client.py,sha256=TSVtPLfkeNJ-l8PenMSE3vskdemKs12KfziwQw1hvxc,32311
60
+ letta_client/blocks/client.py,sha256=dkF-SBlCuWUye5IY18c9fD9_OIPO1H8wVDRmAgDar7U,33351
61
61
  letta_client/client.py,sha256=iXqKTuQ0F9jIjkTwD73apLlLQqUF1IF6V_PhenY_CJo,22470
62
62
  letta_client/client_side_access_tokens/__init__.py,sha256=e9NgxUsEnfbJVCM2npPuQ02dAS5jlXmneqU9DS6Q3d8,1561
63
63
  letta_client/client_side_access_tokens/client.py,sha256=5aiqgKkzXElPgJszjyT-1wPRsBziH32UJwPVGQdZOFg,18215
@@ -75,7 +75,7 @@ letta_client/client_side_access_tokens/types/client_side_access_tokens_list_clie
75
75
  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
76
76
  letta_client/core/__init__.py,sha256=OKbX2aCZXgHCDUsCouqv-OiX32xA6eFFCKIUH9M5Vzk,1591
77
77
  letta_client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
78
- letta_client/core/client_wrapper.py,sha256=igW7nKm6krTfc7tX6GMLo5a0-zx49SPQFt-ITwtC9s4,2336
78
+ letta_client/core/client_wrapper.py,sha256=AKDJ8FeAmzJGgSJcWcxkvn68sw-Q-ehE72K03YCXxVI,2336
79
79
  letta_client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
80
80
  letta_client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
81
81
  letta_client/core/http_client.py,sha256=Z77OIxIbL4OAB2IDqjRq_sYa5yNYAWfmdhdCSSvh6Y4,19552
@@ -103,7 +103,7 @@ letta_client/folders/files/client.py,sha256=oSEduN6Q9iw13aRpc2Mm8LxD06tHxJqnBNUM
103
103
  letta_client/folders/passages/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
104
104
  letta_client/folders/passages/client.py,sha256=ejEUmwrwfUBG4UihNTrIk7b1-a1v6QziRggL_BgcrZw,6041
105
105
  letta_client/groups/__init__.py,sha256=WzkNp5Q_5zQj_NHv4hJCOKvW6ftM9EuNxw8hkPRRbko,434
106
- letta_client/groups/client.py,sha256=M_DX9fYU2aie46-g47ifGywEoszvETwFkakfDfig15Q,29677
106
+ letta_client/groups/client.py,sha256=H6PW_E2QUX_hfoa5aunu90KEU1sF5d4xpTL1hxZFifU,30369
107
107
  letta_client/groups/messages/__init__.py,sha256=M7Ar6Rmb8we4dfYE6jj3FCL9UvVFy1bNQIPflUXMWHA,243
108
108
  letta_client/groups/messages/client.py,sha256=lK8P1J3ETHxdsS8zbdNnxagVSef03Z_tLiqQiEXq6t0,36386
109
109
  letta_client/groups/messages/types/__init__.py,sha256=Oc2j0oGOs96IEFf9xsJIkjBjoq3OMtse64YwWv3F9Io,335
@@ -168,11 +168,12 @@ letta_client/templates/client.py,sha256=wcidkaF0eRgKEYRrDTgKAS_A57MO7H2S_muzznEV
168
168
  letta_client/templates/types/__init__.py,sha256=dAr_dEh0BdwUxAcV1sJ9RM07Z8nCv4dCK6fmTltqQ6c,286
169
169
  letta_client/templates/types/templates_list_response.py,sha256=HYloMVzk086c6fFGRYZz-Ozc_Yylozp2aPpweHS5uXI,866
170
170
  letta_client/templates/types/templates_list_response_templates_item.py,sha256=yyJq8wEOb2XIg99uhRMKoy2qD2CbuvI_5FAspwYWnfI,593
171
- letta_client/tools/__init__.py,sha256=kSIxsMdzxX6TlriU43BYesswM2yq_iPoF-6-p0LbJKI,525
172
- letta_client/tools/client.py,sha256=hedvLbLtOgS5evYipbQdp8RBQjUja9Mk9nWfuUrNtxQ,97003
173
- letta_client/tools/types/__init__.py,sha256=-U2DGiEFPko6D5VRQQRoiJeHDJqb2iZnrbtHSxhkL5w,751
171
+ letta_client/tools/__init__.py,sha256=qPV3aBl81CCoPAvuGdX-GiMyYkz0i49KerSRO-7BWXA,585
172
+ letta_client/tools/client.py,sha256=ljRP0WZUhkgMFGXwM327QJReaW_dt4WRYkcDWJ1SIzY,107013
173
+ letta_client/tools/types/__init__.py,sha256=U6Z2ZrKY4czFQyksSjoeoQHPbNQ0gJBM7QOGPJltqAA,846
174
174
  letta_client/tools/types/add_mcp_server_request.py,sha256=m3QdTmY2ZHQUWbxMTNsOhPnseWHVipsOTdSXuC7KHQI,371
175
175
  letta_client/tools/types/add_mcp_server_response_item.py,sha256=DNrB3LwstJzKrw_GRJ8tb3XCEJWfD16WzBoGrGY_ZQI,376
176
+ letta_client/tools/types/connect_mcp_server_request.py,sha256=KDHYKXnRRf9g8bHUUWvWdyIiJk-enBZ5EO7N80r-i80,375
176
177
  letta_client/tools/types/delete_mcp_server_response_item.py,sha256=YLIBE7OD535NJAncGpzMDGaQRe1831DNKcj2UzS9e0c,379
177
178
  letta_client/tools/types/list_mcp_servers_response_value.py,sha256=Eyji5qB7FhowiogsAbpcU_aMyH9zClv9lUMmHOmNPYk,379
178
179
  letta_client/tools/types/test_mcp_server_request.py,sha256=sLlOEZdmLfkHqHCkUjntGbr8_MkBhsqpMQ-HwdNOnq0,372
@@ -202,8 +203,8 @@ letta_client/types/bad_request_error_body.py,sha256=E4_eWEc9xeW9BkXGViBDrevV8Jf6
202
203
  letta_client/types/base_64_image.py,sha256=RarQnUE-5AnRAZF8W73h6y9K-b6Deq27KnMe93te5Lw,964
203
204
  letta_client/types/base_tool_rule_schema.py,sha256=FbnJy6gb8wY_DPiU3Gs-u1Ol_l4K7-nAmPTc1oR3kOo,582
204
205
  letta_client/types/batch_job.py,sha256=MIycCFHvBeVqSoi4WX_L_MPI92jnq-x4-F5XnHw-sYg,2364
205
- letta_client/types/block.py,sha256=43aeirQFWcifNrXLjQnfEekQjfodO6DbTQXKjy8gofY,3185
206
- letta_client/types/block_update.py,sha256=ALEConFeolPh9N1fhW9oY3De9JWOs75KK6DtkTUaWV4,1781
206
+ letta_client/types/block.py,sha256=7lWUsOoXKA4GyY9VYKq2UcQrUD3lq-EF8EScOBaGThs,3301
207
+ letta_client/types/block_update.py,sha256=zoGWquhG6M2rH_kwK85eQL4NLB3fErmzkp574VZsAVE,1897
207
208
  letta_client/types/chat_completion_assistant_message_param.py,sha256=QwxAJ9RQqxtZKnt6g6RfDppuMIt-1RAIlpnfSrVdHgg,1219
208
209
  letta_client/types/chat_completion_assistant_message_param_content.py,sha256=CJ7Z_Jik2fzBYGy0UuvgDk0aLt3-Xpj3qswBLmWM0Sg,323
209
210
  letta_client/types/chat_completion_assistant_message_param_content_item.py,sha256=tF-E0jNH0ilRJgm4vPTqHguCb-TZZ0LJfTXxOnon23w,405
@@ -262,7 +263,7 @@ letta_client/types/conflict_error_body.py,sha256=Mena-q1jti6nv_7-xrp6sDb_5MXNKPG
262
263
  letta_client/types/context_window_overview.py,sha256=9pwiObSxu-SFyQ1pxSTlQiRatVAyFgqa6t0_qrrsGfU,2815
263
264
  letta_client/types/continue_tool_rule.py,sha256=cGKyCh9LwxXJfWKEi8HMAcyBv3QTrmZkwt9YugzwtqY,1035
264
265
  letta_client/types/core_memory_block_schema.py,sha256=DGHyLAcFhHBm7oXkhkGIkkckcl9S2bCaU9b3qrUeNtc,984
265
- letta_client/types/create_block.py,sha256=cyyufU4MBcLGjCNeTFZE7TX4LUhQXIaZAVwaoYkMlpE,1562
266
+ letta_client/types/create_block.py,sha256=jco0Hpi2UQu4FkALpizz6rfW0isQo7H1AwKoZSVv-eY,1678
266
267
  letta_client/types/duplicate_file_handling.py,sha256=H7pDhPZSSbnqPHPo2yGl7xkpHAD9L0yZOdcU5n-9BdE,172
267
268
  letta_client/types/dynamic_manager.py,sha256=5DRNqtUnjeTwOe5mkNB-SXItqLOfEX0avSrwsrJt1Aw,853
268
269
  letta_client/types/dynamic_manager_update.py,sha256=Kew94BsFP6vP9pUXpZDMFZAo3TyaYWKu1KPgoQQjKYg,888
@@ -271,7 +272,7 @@ letta_client/types/embedding_config.py,sha256=47DxstNToHfirYxgIn4jNqkt8vDh5taRu6
271
272
  letta_client/types/embedding_config_embedding_endpoint_type.py,sha256=9-C0KAbQbi2nm5ECDmKVbeqyCbBB6w6Izy5vXvMBAXA,579
272
273
  letta_client/types/feedback_type.py,sha256=sDfsniSnnpSwzZqfIkRL7vYPxYqdwURpI6LMI7eDkoQ,160
273
274
  letta_client/types/file.py,sha256=ZLCEYJqIJ1pzAJn4Pke6gVdKivKU9FrIg98P4GmFY8M,628
274
- letta_client/types/file_block.py,sha256=gHLshCMmyn5embgV3LoN_KgXtWRGEwCK6EfGORVLO6g,2660
275
+ letta_client/types/file_block.py,sha256=HSfMx6SpCpQv2vdIiqqZ0oxfZoHPquxuU-AG0QtrW-k,2776
275
276
  letta_client/types/file_file.py,sha256=jbWcPKn-fSUlq9kl8n2us9fPU6x-Z20IKScHD_pJruw,665
276
277
  letta_client/types/file_metadata.py,sha256=51abJ_M4dmpRJetdWcMf_P39l3EaJ1R2kjuexzEWwMI,2957
277
278
  letta_client/types/file_processing_status.py,sha256=8W8VAx9-jCaUx6q6mvyCMyLoa2peLTE_sgIaGloOWo4,201
@@ -284,7 +285,7 @@ letta_client/types/function_output.py,sha256=7b8550BllXxtZQ3T3jfvZjcCU_ZGWNBvjlr
284
285
  letta_client/types/function_tool.py,sha256=TOETpZdqgPIgd4g9JFo3yvDBpTx4lDFzJNZH8PxAjpI,697
285
286
  letta_client/types/generate_tool_input.py,sha256=6_r00rctGxSa1mNDEFCwAc2JOXlmf9BO_rIG7ZksB4Q,1095
286
287
  letta_client/types/generate_tool_output.py,sha256=y22000DeKje2FwSaLEXorLfmnrqFE1QbBrQ3nFIWULE,860
287
- letta_client/types/group.py,sha256=6Cv30-JOOfRsOG_T9d1rifW40-eYj9g6OR9BvdP7Ppc,2106
288
+ letta_client/types/group.py,sha256=_szcUZN3fUOu_2-KnG3r8ptx8H9bOmeQlcQPig6nxMg,2222
288
289
  letta_client/types/health.py,sha256=nQwx5ysn_cJMKUoqsfaPcGNSRSjfwX5S272UiSQJ03w,618
289
290
  letta_client/types/hidden_reasoning_message.py,sha256=FrzJv12sgz6W5VWk74q2jX6UaqB_MItqhDYuUCozPTE,1610
290
291
  letta_client/types/hidden_reasoning_message_state.py,sha256=qotAgF_P4T7OEHzbhGDVFaLZYOs1ULMPVHmiFvoRIfM,174
@@ -444,6 +445,6 @@ letta_client/types/web_search_options_user_location_approximate.py,sha256=Ywk01J
444
445
  letta_client/version.py,sha256=bttKLbIhO3UonCYQlqs600zzbQgfhCCMjeXR9WRzid4,79
445
446
  letta_client/voice/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
446
447
  letta_client/voice/client.py,sha256=47iQYCuW_qpKI4hM3pYVxn3hw7kgQj3emU1_oRpkRMA,5811
447
- letta_client-0.1.221.dist-info/METADATA,sha256=nMGSzoL0jIZOL35N-cSn_pQdxiK6y5lw34y0jfHt7yQ,5177
448
- letta_client-0.1.221.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
449
- letta_client-0.1.221.dist-info/RECORD,,
448
+ letta_client-0.1.223.dist-info/METADATA,sha256=-XudpJyiA6UaAxDd2y_QS1OgRFpkhPQWecBsi2KyYvY,5177
449
+ letta_client-0.1.223.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
450
+ letta_client-0.1.223.dist-info/RECORD,,