letta-client 0.1.307__py3-none-any.whl → 0.1.308__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
@@ -412,6 +412,7 @@ from .templates import (
412
412
  TemplatesListTemplateVersionsResponseVersionsItem,
413
413
  TemplatesRenameTemplateResponse,
414
414
  TemplatesSaveTemplateVersionResponse,
415
+ TemplatesUpdateTemplateDescriptionResponse,
415
416
  )
416
417
  from .tools import (
417
418
  AddMcpServerRequest,
@@ -773,6 +774,7 @@ __all__ = [
773
774
  "TemplatesListTemplateVersionsResponseVersionsItem",
774
775
  "TemplatesRenameTemplateResponse",
775
776
  "TemplatesSaveTemplateVersionResponse",
777
+ "TemplatesUpdateTemplateDescriptionResponse",
776
778
  "TerminalToolRule",
777
779
  "TestMcpServerRequest",
778
780
  "TextContent",
@@ -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.307",
27
+ "User-Agent": "letta-client/0.1.308",
28
28
  "X-Fern-Language": "Python",
29
29
  "X-Fern-SDK-Name": "letta-client",
30
- "X-Fern-SDK-Version": "0.1.307",
30
+ "X-Fern-SDK-Version": "0.1.308",
31
31
  **(self.get_custom_headers() or {}),
32
32
  }
33
33
  if self._project is not None:
@@ -34,6 +34,7 @@ from .types import (
34
34
  TemplatesListTemplateVersionsResponseVersionsItem,
35
35
  TemplatesRenameTemplateResponse,
36
36
  TemplatesSaveTemplateVersionResponse,
37
+ TemplatesUpdateTemplateDescriptionResponse,
37
38
  )
38
39
  from . import agents
39
40
  from .agents import (
@@ -77,5 +78,6 @@ __all__ = [
77
78
  "TemplatesListTemplateVersionsResponseVersionsItem",
78
79
  "TemplatesRenameTemplateResponse",
79
80
  "TemplatesSaveTemplateVersionResponse",
81
+ "TemplatesUpdateTemplateDescriptionResponse",
80
82
  "agents",
81
83
  ]
@@ -15,6 +15,7 @@ from .types.templates_list_response import TemplatesListResponse
15
15
  from .types.templates_list_template_versions_response import TemplatesListTemplateVersionsResponse
16
16
  from .types.templates_rename_template_response import TemplatesRenameTemplateResponse
17
17
  from .types.templates_save_template_version_response import TemplatesSaveTemplateVersionResponse
18
+ from .types.templates_update_template_description_response import TemplatesUpdateTemplateDescriptionResponse
18
19
 
19
20
  # this is used as the default value for optional parameters
20
21
  OMIT = typing.cast(typing.Any, ...)
@@ -396,6 +397,54 @@ class TemplatesClient:
396
397
  )
397
398
  return _response.data
398
399
 
400
+ def updatetemplatedescription(
401
+ self,
402
+ project: str,
403
+ template_name: str,
404
+ *,
405
+ description: typing.Optional[str] = OMIT,
406
+ request_options: typing.Optional[RequestOptions] = None,
407
+ ) -> TemplatesUpdateTemplateDescriptionResponse:
408
+ """
409
+ Updates the description for all versions of a template with the specified name. Versions are automatically stripped from the current template name if accidentally included.
410
+
411
+ Parameters
412
+ ----------
413
+ project : str
414
+ The project slug
415
+
416
+ template_name : str
417
+ The template name (version will be automatically stripped if included)
418
+
419
+ description : typing.Optional[str]
420
+ The new description for the template
421
+
422
+ request_options : typing.Optional[RequestOptions]
423
+ Request-specific configuration.
424
+
425
+ Returns
426
+ -------
427
+ TemplatesUpdateTemplateDescriptionResponse
428
+ 200
429
+
430
+ Examples
431
+ --------
432
+ from letta_client import Letta
433
+
434
+ client = Letta(
435
+ project="YOUR_PROJECT",
436
+ token="YOUR_TOKEN",
437
+ )
438
+ client.templates.updatetemplatedescription(
439
+ project="project",
440
+ template_name="template_name",
441
+ )
442
+ """
443
+ _response = self._raw_client.updatetemplatedescription(
444
+ project, template_name, description=description, request_options=request_options
445
+ )
446
+ return _response.data
447
+
399
448
  def listtemplateversions(
400
449
  self,
401
450
  project_slug: str,
@@ -883,6 +932,62 @@ class AsyncTemplatesClient:
883
932
  )
884
933
  return _response.data
885
934
 
935
+ async def updatetemplatedescription(
936
+ self,
937
+ project: str,
938
+ template_name: str,
939
+ *,
940
+ description: typing.Optional[str] = OMIT,
941
+ request_options: typing.Optional[RequestOptions] = None,
942
+ ) -> TemplatesUpdateTemplateDescriptionResponse:
943
+ """
944
+ Updates the description for all versions of a template with the specified name. Versions are automatically stripped from the current template name if accidentally included.
945
+
946
+ Parameters
947
+ ----------
948
+ project : str
949
+ The project slug
950
+
951
+ template_name : str
952
+ The template name (version will be automatically stripped if included)
953
+
954
+ description : typing.Optional[str]
955
+ The new description for the template
956
+
957
+ request_options : typing.Optional[RequestOptions]
958
+ Request-specific configuration.
959
+
960
+ Returns
961
+ -------
962
+ TemplatesUpdateTemplateDescriptionResponse
963
+ 200
964
+
965
+ Examples
966
+ --------
967
+ import asyncio
968
+
969
+ from letta_client import AsyncLetta
970
+
971
+ client = AsyncLetta(
972
+ project="YOUR_PROJECT",
973
+ token="YOUR_TOKEN",
974
+ )
975
+
976
+
977
+ async def main() -> None:
978
+ await client.templates.updatetemplatedescription(
979
+ project="project",
980
+ template_name="template_name",
981
+ )
982
+
983
+
984
+ asyncio.run(main())
985
+ """
986
+ _response = await self._raw_client.updatetemplatedescription(
987
+ project, template_name, description=description, request_options=request_options
988
+ )
989
+ return _response.data
990
+
886
991
  async def listtemplateversions(
887
992
  self,
888
993
  project_slug: str,
@@ -22,6 +22,7 @@ from .types.templates_list_response import TemplatesListResponse
22
22
  from .types.templates_list_template_versions_response import TemplatesListTemplateVersionsResponse
23
23
  from .types.templates_rename_template_response import TemplatesRenameTemplateResponse
24
24
  from .types.templates_save_template_version_response import TemplatesSaveTemplateVersionResponse
25
+ from .types.templates_update_template_description_response import TemplatesUpdateTemplateDescriptionResponse
25
26
 
26
27
  # this is used as the default value for optional parameters
27
28
  OMIT = typing.cast(typing.Any, ...)
@@ -524,6 +525,85 @@ class RawTemplatesClient:
524
525
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
525
526
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
526
527
 
528
+ def updatetemplatedescription(
529
+ self,
530
+ project: str,
531
+ template_name: str,
532
+ *,
533
+ description: typing.Optional[str] = OMIT,
534
+ request_options: typing.Optional[RequestOptions] = None,
535
+ ) -> HttpResponse[TemplatesUpdateTemplateDescriptionResponse]:
536
+ """
537
+ Updates the description for all versions of a template with the specified name. Versions are automatically stripped from the current template name if accidentally included.
538
+
539
+ Parameters
540
+ ----------
541
+ project : str
542
+ The project slug
543
+
544
+ template_name : str
545
+ The template name (version will be automatically stripped if included)
546
+
547
+ description : typing.Optional[str]
548
+ The new description for the template
549
+
550
+ request_options : typing.Optional[RequestOptions]
551
+ Request-specific configuration.
552
+
553
+ Returns
554
+ -------
555
+ HttpResponse[TemplatesUpdateTemplateDescriptionResponse]
556
+ 200
557
+ """
558
+ _response = self._client_wrapper.httpx_client.request(
559
+ f"v1/templates/{jsonable_encoder(project)}/{jsonable_encoder(template_name)}/description",
560
+ method="PATCH",
561
+ json={
562
+ "description": description,
563
+ },
564
+ headers={
565
+ "content-type": "application/json",
566
+ },
567
+ request_options=request_options,
568
+ omit=OMIT,
569
+ )
570
+ try:
571
+ if 200 <= _response.status_code < 300:
572
+ _data = typing.cast(
573
+ TemplatesUpdateTemplateDescriptionResponse,
574
+ construct_type(
575
+ type_=TemplatesUpdateTemplateDescriptionResponse, # type: ignore
576
+ object_=_response.json(),
577
+ ),
578
+ )
579
+ return HttpResponse(response=_response, data=_data)
580
+ if _response.status_code == 400:
581
+ raise BadRequestError(
582
+ headers=dict(_response.headers),
583
+ body=typing.cast(
584
+ typing.Optional[typing.Any],
585
+ construct_type(
586
+ type_=typing.Optional[typing.Any], # type: ignore
587
+ object_=_response.json(),
588
+ ),
589
+ ),
590
+ )
591
+ if _response.status_code == 404:
592
+ raise NotFoundError(
593
+ headers=dict(_response.headers),
594
+ body=typing.cast(
595
+ typing.Optional[typing.Any],
596
+ construct_type(
597
+ type_=typing.Optional[typing.Any], # type: ignore
598
+ object_=_response.json(),
599
+ ),
600
+ ),
601
+ )
602
+ _response_json = _response.json()
603
+ except JSONDecodeError:
604
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
605
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
606
+
527
607
  def listtemplateversions(
528
608
  self,
529
609
  project_slug: str,
@@ -1089,6 +1169,85 @@ class AsyncRawTemplatesClient:
1089
1169
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1090
1170
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1091
1171
 
1172
+ async def updatetemplatedescription(
1173
+ self,
1174
+ project: str,
1175
+ template_name: str,
1176
+ *,
1177
+ description: typing.Optional[str] = OMIT,
1178
+ request_options: typing.Optional[RequestOptions] = None,
1179
+ ) -> AsyncHttpResponse[TemplatesUpdateTemplateDescriptionResponse]:
1180
+ """
1181
+ Updates the description for all versions of a template with the specified name. Versions are automatically stripped from the current template name if accidentally included.
1182
+
1183
+ Parameters
1184
+ ----------
1185
+ project : str
1186
+ The project slug
1187
+
1188
+ template_name : str
1189
+ The template name (version will be automatically stripped if included)
1190
+
1191
+ description : typing.Optional[str]
1192
+ The new description for the template
1193
+
1194
+ request_options : typing.Optional[RequestOptions]
1195
+ Request-specific configuration.
1196
+
1197
+ Returns
1198
+ -------
1199
+ AsyncHttpResponse[TemplatesUpdateTemplateDescriptionResponse]
1200
+ 200
1201
+ """
1202
+ _response = await self._client_wrapper.httpx_client.request(
1203
+ f"v1/templates/{jsonable_encoder(project)}/{jsonable_encoder(template_name)}/description",
1204
+ method="PATCH",
1205
+ json={
1206
+ "description": description,
1207
+ },
1208
+ headers={
1209
+ "content-type": "application/json",
1210
+ },
1211
+ request_options=request_options,
1212
+ omit=OMIT,
1213
+ )
1214
+ try:
1215
+ if 200 <= _response.status_code < 300:
1216
+ _data = typing.cast(
1217
+ TemplatesUpdateTemplateDescriptionResponse,
1218
+ construct_type(
1219
+ type_=TemplatesUpdateTemplateDescriptionResponse, # type: ignore
1220
+ object_=_response.json(),
1221
+ ),
1222
+ )
1223
+ return AsyncHttpResponse(response=_response, data=_data)
1224
+ if _response.status_code == 400:
1225
+ raise BadRequestError(
1226
+ headers=dict(_response.headers),
1227
+ body=typing.cast(
1228
+ typing.Optional[typing.Any],
1229
+ construct_type(
1230
+ type_=typing.Optional[typing.Any], # type: ignore
1231
+ object_=_response.json(),
1232
+ ),
1233
+ ),
1234
+ )
1235
+ if _response.status_code == 404:
1236
+ raise NotFoundError(
1237
+ headers=dict(_response.headers),
1238
+ body=typing.cast(
1239
+ typing.Optional[typing.Any],
1240
+ construct_type(
1241
+ type_=typing.Optional[typing.Any], # type: ignore
1242
+ object_=_response.json(),
1243
+ ),
1244
+ ),
1245
+ )
1246
+ _response_json = _response.json()
1247
+ except JSONDecodeError:
1248
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1249
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1250
+
1092
1251
  async def listtemplateversions(
1093
1252
  self,
1094
1253
  project_slug: str,
@@ -65,6 +65,7 @@ from .templates_list_template_versions_response import TemplatesListTemplateVers
65
65
  from .templates_list_template_versions_response_versions_item import TemplatesListTemplateVersionsResponseVersionsItem
66
66
  from .templates_rename_template_response import TemplatesRenameTemplateResponse
67
67
  from .templates_save_template_version_response import TemplatesSaveTemplateVersionResponse
68
+ from .templates_update_template_description_response import TemplatesUpdateTemplateDescriptionResponse
68
69
 
69
70
  __all__ = [
70
71
  "TemplatesCreateTemplateResponse",
@@ -98,4 +99,5 @@ __all__ = [
98
99
  "TemplatesListTemplateVersionsResponseVersionsItem",
99
100
  "TemplatesRenameTemplateResponse",
100
101
  "TemplatesSaveTemplateVersionResponse",
102
+ "TemplatesUpdateTemplateDescriptionResponse",
101
103
  ]
@@ -0,0 +1,20 @@
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 TemplatesUpdateTemplateDescriptionResponse(UncheckedBaseModel):
11
+ success: bool
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-client
3
- Version: 0.1.307
3
+ Version: 0.1.308
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=yIQqDFRQsrM3faBRzTcdY9jIUVHAgcD3RpytQ7ee5ro,27337
1
+ letta_client/__init__.py,sha256=oUqJoq2I6-cZumZFu2cvZuw_FGQNGOaPYVTrt5BGDW0,27435
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=8r7jrTWpdOcWp-vCZdO03D9wG4qoWLa_DSNK3NQCpwU,2776
95
+ letta_client/core/client_wrapper.py,sha256=AK5r85YU_Rzg2wNIItk0TucUTeBEinlY9vOB8O-Od5Q,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=OxELqtiAhQ5iCAQ--vMrggjS0nWGFSGs_M6Vi901brw,4020
205
+ letta_client/templates/__init__.py,sha256=STQqjEhLv-6rONnJ0kYvDdZOiqM_3_LDxwQeXISn4Kw,4118
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,9 @@ 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=jSMC0kubRHe5hsrozDYJqnQW6nPPEX4W2fOkHmABnwk,27533
214
- letta_client/templates/raw_client.py,sha256=UHqX47RgBL3hDl-Tq_OKLl_6g1FfiyOJg3gTTRPTMkY,44444
215
- letta_client/templates/types/__init__.py,sha256=YMsQMFGpYXxp6NBFIdutomxq-dPtmOgfnQrXta_Ap_A,5875
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
216
216
  letta_client/templates/types/templates_create_template_response.py,sha256=UKaNiwW7WNX4Q3_IqGkFJaatMcdSS-Tsf8gDT2i677w,1082
217
217
  letta_client/templates/types/templates_delete_template_response.py,sha256=_DUyWh9jtgw8u_U_JsV8N-RhPcY32QLAQZsUCSXDCTY,583
218
218
  letta_client/templates/types/templates_fork_template_response.py,sha256=zX8aCR5Z8sEgXJHHzxsPeYRNMW2HfD26EN5Mlwrt-ZI,1080
@@ -244,6 +244,7 @@ letta_client/templates/types/templates_list_template_versions_response.py,sha256
244
244
  letta_client/templates/types/templates_list_template_versions_response_versions_item.py,sha256=HS0mrUz1qROFff1ha3SBcs63gS4spj0LUYg82Slam2Y,956
245
245
  letta_client/templates/types/templates_rename_template_response.py,sha256=iH8paSt5k0jzqTDezOw2PJbgbDJIqVkA4zWnsa64JX4,583
246
246
  letta_client/templates/types/templates_save_template_version_response.py,sha256=gmRwrpCk5UM1TH2Sru4iX_ybTAMftVsHI0DOVGxdFrw,1087
247
+ letta_client/templates/types/templates_update_template_description_response.py,sha256=0dYH6_6EcEzMSaU9Igau0xKJPVYGXA9Pf9_ON6kY0es,594
247
248
  letta_client/tools/__init__.py,sha256=ZR4ev9ZmyWZl9iJPXK_FRk79YjgIytkA_2TlNS1PaQI,725
248
249
  letta_client/tools/client.py,sha256=2nJTJaRni5ShBaXZ4CztVSBMF0kdhe6QsURFDlFQvNs,67267
249
250
  letta_client/tools/raw_client.py,sha256=gO2SEYDK3TPXR4wosGtFl-fzt5McTcESN6fO9buLciQ,113641
@@ -580,6 +581,6 @@ letta_client/version.py,sha256=bttKLbIhO3UonCYQlqs600zzbQgfhCCMjeXR9WRzid4,79
580
581
  letta_client/voice/__init__.py,sha256=_VhToAyIt_5axN6CLJwtxg3-CO7THa_23pbUzqhXJa4,85
581
582
  letta_client/voice/client.py,sha256=EbIVOQh4HXqU9McATxwga08STk-HUwPEAUr_UHqyKHg,3748
582
583
  letta_client/voice/raw_client.py,sha256=KvM_3GXuSf51bubM0RVBnxvlf20qZTFMnaA_BzhXzjQ,5938
583
- letta_client-0.1.307.dist-info/METADATA,sha256=RlrUsBamy-O5VpgLvGZlv3uyUe4FKqWoArAayHAV66Q,5782
584
- letta_client-0.1.307.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
585
- letta_client-0.1.307.dist-info/RECORD,,
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,,