letta-client 0.1.319__py3-none-any.whl → 0.1.320__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of letta-client might be problematic. Click here for more details.

Files changed (211) hide show
  1. letta_client/__init__.py +51 -9
  2. letta_client/agents/__init__.py +6 -2
  3. letta_client/agents/client.py +50 -213
  4. letta_client/agents/files/client.py +51 -6
  5. letta_client/agents/files/raw_client.py +94 -9
  6. letta_client/agents/messages/__init__.py +2 -2
  7. letta_client/agents/messages/client.py +104 -24
  8. letta_client/agents/messages/raw_client.py +109 -17
  9. letta_client/agents/messages/types/__init__.py +2 -2
  10. letta_client/agents/messages/types/{messages_preview_raw_payload_request.py → messages_preview_request.py} +1 -1
  11. letta_client/agents/raw_client.py +50 -253
  12. letta_client/agents/types/__init__.py +4 -0
  13. letta_client/agents/types/agents_list_request_order.py +5 -0
  14. letta_client/agents/types/agents_list_request_order_by.py +5 -0
  15. letta_client/archives/__init__.py +7 -0
  16. letta_client/archives/client.py +362 -0
  17. letta_client/archives/raw_client.py +448 -0
  18. letta_client/archives/types/__init__.py +7 -0
  19. letta_client/archives/types/list_archives_request_order.py +5 -0
  20. letta_client/base_client.py +3 -6
  21. letta_client/batches/__init__.py +5 -0
  22. letta_client/batches/client.py +68 -8
  23. letta_client/batches/messages/__init__.py +7 -0
  24. letta_client/{messages → batches/messages}/client.py +50 -43
  25. letta_client/{messages → batches/messages}/raw_client.py +52 -45
  26. letta_client/batches/messages/types/__init__.py +7 -0
  27. letta_client/batches/messages/types/messages_list_request_order.py +5 -0
  28. letta_client/batches/raw_client.py +71 -6
  29. letta_client/batches/types/__init__.py +7 -0
  30. letta_client/batches/types/batches_list_request_order.py +5 -0
  31. letta_client/blocks/__init__.py +3 -1
  32. letta_client/blocks/agents/__init__.py +3 -0
  33. letta_client/blocks/agents/client.py +57 -2
  34. letta_client/blocks/agents/raw_client.py +51 -0
  35. letta_client/blocks/agents/types/__init__.py +7 -0
  36. letta_client/blocks/agents/types/agents_list_request_order.py +5 -0
  37. letta_client/blocks/client.py +25 -4
  38. letta_client/blocks/raw_client.py +25 -4
  39. letta_client/blocks/types/__init__.py +7 -0
  40. letta_client/blocks/types/blocks_list_request_order.py +5 -0
  41. letta_client/core/client_wrapper.py +2 -2
  42. letta_client/errors/__init__.py +9 -1
  43. letta_client/errors/internal_server_error.py +10 -0
  44. letta_client/folders/__init__.py +14 -2
  45. letta_client/folders/agents/__init__.py +7 -0
  46. letta_client/folders/agents/client.py +176 -0
  47. letta_client/folders/agents/raw_client.py +182 -0
  48. letta_client/folders/agents/types/__init__.py +7 -0
  49. letta_client/folders/agents/types/agents_list_request_order.py +5 -0
  50. letta_client/folders/client.py +96 -86
  51. letta_client/folders/files/__init__.py +3 -0
  52. letta_client/folders/files/client.py +49 -10
  53. letta_client/folders/files/raw_client.py +41 -10
  54. letta_client/folders/files/types/__init__.py +7 -0
  55. letta_client/folders/files/types/files_list_request_order.py +5 -0
  56. letta_client/folders/passages/__init__.py +3 -0
  57. letta_client/folders/passages/client.py +43 -14
  58. letta_client/folders/passages/raw_client.py +35 -14
  59. letta_client/folders/passages/types/__init__.py +7 -0
  60. letta_client/folders/passages/types/passages_list_request_order.py +5 -0
  61. letta_client/folders/raw_client.py +83 -104
  62. letta_client/folders/types/__init__.py +7 -0
  63. letta_client/folders/types/folders_list_request_order.py +5 -0
  64. letta_client/groups/__init__.py +4 -2
  65. letta_client/groups/client.py +27 -6
  66. letta_client/groups/messages/__init__.py +2 -2
  67. letta_client/groups/messages/client.py +39 -18
  68. letta_client/groups/messages/raw_client.py +35 -14
  69. letta_client/groups/messages/types/__init__.py +2 -1
  70. letta_client/groups/messages/types/messages_list_request_order.py +5 -0
  71. letta_client/groups/raw_client.py +27 -6
  72. letta_client/groups/types/__init__.py +2 -1
  73. letta_client/groups/types/groups_list_request_order.py +5 -0
  74. letta_client/identities/__init__.py +12 -2
  75. letta_client/identities/agents/__init__.py +7 -0
  76. letta_client/identities/agents/client.py +177 -0
  77. letta_client/identities/agents/raw_client.py +183 -0
  78. letta_client/identities/agents/types/__init__.py +7 -0
  79. letta_client/identities/agents/types/agents_list_request_order.py +5 -0
  80. letta_client/identities/blocks/__init__.py +7 -0
  81. letta_client/identities/blocks/client.py +177 -0
  82. letta_client/identities/blocks/raw_client.py +183 -0
  83. letta_client/identities/blocks/types/__init__.py +7 -0
  84. letta_client/identities/blocks/types/blocks_list_request_order.py +5 -0
  85. letta_client/identities/client.py +37 -0
  86. letta_client/identities/raw_client.py +27 -0
  87. letta_client/identities/types/__init__.py +7 -0
  88. letta_client/identities/types/identities_list_request_order.py +5 -0
  89. letta_client/jobs/client.py +10 -2
  90. letta_client/jobs/raw_client.py +10 -2
  91. letta_client/models/__init__.py +3 -0
  92. letta_client/models/client.py +3 -0
  93. letta_client/{embedding_models → models/embeddings}/client.py +14 -14
  94. letta_client/{embedding_models → models/embeddings}/raw_client.py +10 -10
  95. letta_client/providers/__init__.py +3 -0
  96. letta_client/providers/client.py +151 -82
  97. letta_client/providers/raw_client.py +165 -72
  98. letta_client/providers/types/__init__.py +7 -0
  99. letta_client/providers/types/providers_list_request_order.py +5 -0
  100. letta_client/runs/__init__.py +2 -1
  101. letta_client/runs/client.py +21 -0
  102. letta_client/runs/messages/__init__.py +3 -0
  103. letta_client/runs/messages/client.py +15 -49
  104. letta_client/runs/messages/raw_client.py +13 -49
  105. letta_client/runs/messages/types/__init__.py +7 -0
  106. letta_client/runs/messages/types/messages_list_request_order.py +5 -0
  107. letta_client/runs/raw_client.py +21 -0
  108. letta_client/steps/__init__.py +13 -3
  109. letta_client/steps/client.py +32 -83
  110. letta_client/steps/feedback/client.py +21 -6
  111. letta_client/steps/feedback/raw_client.py +29 -6
  112. letta_client/steps/messages/__init__.py +7 -0
  113. letta_client/steps/messages/client.py +177 -0
  114. letta_client/steps/messages/raw_client.py +183 -0
  115. letta_client/steps/messages/types/__init__.py +8 -0
  116. letta_client/steps/messages/types/messages_list_request_order.py +5 -0
  117. letta_client/steps/messages/types/messages_list_response_item.py +25 -0
  118. letta_client/steps/metrics/client.py +110 -0
  119. letta_client/steps/metrics/raw_client.py +122 -0
  120. letta_client/steps/raw_client.py +17 -107
  121. letta_client/steps/trace/__init__.py +4 -0
  122. letta_client/steps/trace/client.py +110 -0
  123. letta_client/steps/trace/raw_client.py +122 -0
  124. letta_client/steps/types/__init__.py +2 -1
  125. letta_client/steps/types/steps_list_request_order.py +5 -0
  126. letta_client/tags/__init__.py +3 -0
  127. letta_client/tags/client.py +57 -4
  128. letta_client/tags/raw_client.py +49 -2
  129. letta_client/tags/types/__init__.py +7 -0
  130. letta_client/tags/types/tags_list_request_order.py +5 -0
  131. letta_client/telemetry/client.py +8 -0
  132. letta_client/telemetry/raw_client.py +8 -0
  133. letta_client/templates/__init__.py +64 -0
  134. letta_client/templates/agents/__init__.py +58 -0
  135. letta_client/templates/agents/types/__init__.py +66 -0
  136. letta_client/templates/agents/types/agents_create_response.py +6 -0
  137. letta_client/templates/agents/types/agents_create_response_group.py +52 -0
  138. letta_client/templates/agents/types/agents_create_response_group_base_template_id.py +12 -0
  139. letta_client/templates/agents/types/agents_create_response_group_base_template_id_item.py +5 -0
  140. letta_client/templates/agents/types/agents_create_response_group_deployment_id.py +12 -0
  141. letta_client/templates/agents/types/agents_create_response_group_deployment_id_item.py +5 -0
  142. letta_client/templates/agents/types/agents_create_response_group_hidden.py +12 -0
  143. letta_client/templates/agents/types/agents_create_response_group_hidden_item.py +5 -0
  144. letta_client/templates/agents/types/agents_create_response_group_last_processed_message_id.py +14 -0
  145. letta_client/templates/agents/types/agents_create_response_group_last_processed_message_id_item.py +5 -0
  146. letta_client/templates/agents/types/agents_create_response_group_manager_agent_id.py +12 -0
  147. letta_client/templates/agents/types/agents_create_response_group_manager_agent_id_item.py +5 -0
  148. letta_client/templates/agents/types/agents_create_response_group_manager_type.py +7 -0
  149. letta_client/templates/agents/types/agents_create_response_group_max_message_buffer_length.py +14 -0
  150. letta_client/templates/agents/types/agents_create_response_group_max_message_buffer_length_item.py +5 -0
  151. letta_client/templates/agents/types/agents_create_response_group_max_turns.py +12 -0
  152. letta_client/templates/agents/types/agents_create_response_group_max_turns_item.py +5 -0
  153. letta_client/templates/agents/types/agents_create_response_group_min_message_buffer_length.py +14 -0
  154. letta_client/templates/agents/types/agents_create_response_group_min_message_buffer_length_item.py +5 -0
  155. letta_client/templates/agents/types/agents_create_response_group_project_id.py +12 -0
  156. letta_client/templates/agents/types/agents_create_response_group_project_id_item.py +5 -0
  157. letta_client/templates/agents/types/agents_create_response_group_shared_block_ids.py +5 -0
  158. letta_client/templates/agents/types/agents_create_response_group_sleeptime_agent_frequency.py +14 -0
  159. letta_client/templates/agents/types/agents_create_response_group_sleeptime_agent_frequency_item.py +5 -0
  160. letta_client/templates/agents/types/agents_create_response_group_template_id.py +12 -0
  161. letta_client/templates/agents/types/agents_create_response_group_template_id_item.py +5 -0
  162. letta_client/templates/agents/types/agents_create_response_group_termination_token.py +12 -0
  163. letta_client/templates/agents/types/agents_create_response_group_termination_token_item.py +5 -0
  164. letta_client/templates/agents/types/agents_create_response_group_turns_counter.py +12 -0
  165. letta_client/templates/agents/types/agents_create_response_group_turns_counter_item.py +5 -0
  166. letta_client/templates/client.py +260 -0
  167. letta_client/templates/raw_client.py +395 -0
  168. letta_client/templates/types/__init__.py +8 -0
  169. letta_client/templates/types/templates_get_template_snapshot_response.py +4 -0
  170. letta_client/templates/types/templates_get_template_snapshot_response_blocks_item.py +1 -0
  171. letta_client/templates/types/templates_get_template_snapshot_response_relationships_item.py +23 -0
  172. letta_client/templates/types/templates_migrate_deployment_response.py +21 -0
  173. letta_client/templates/types/templates_set_current_template_from_snapshot_response.py +21 -0
  174. letta_client/tools/__init__.py +2 -0
  175. letta_client/tools/client.py +47 -20
  176. letta_client/tools/raw_client.py +43 -26
  177. letta_client/tools/types/__init__.py +2 -0
  178. letta_client/tools/types/tools_list_request_order.py +5 -0
  179. letta_client/types/__init__.py +10 -2
  180. letta_client/types/agent_state.py +5 -0
  181. letta_client/types/archive.py +77 -0
  182. letta_client/types/batch_job.py +6 -0
  183. letta_client/types/{body_export_agent_serialized.py → body_export_agent.py} +1 -1
  184. letta_client/types/child_tool_rule.py +1 -1
  185. letta_client/types/conditional_tool_rule.py +1 -1
  186. letta_client/types/continue_tool_rule.py +1 -1
  187. letta_client/types/deployment_entity.py +2 -0
  188. letta_client/types/init_tool_rule.py +1 -1
  189. letta_client/types/internal_server_error_body.py +20 -0
  190. letta_client/types/internal_template_agent_create.py +5 -0
  191. letta_client/types/job.py +6 -0
  192. letta_client/types/letta_schemas_agent_file_agent_schema.py +5 -0
  193. letta_client/types/max_count_per_step_tool_rule.py +1 -1
  194. letta_client/types/memory.py +7 -1
  195. letta_client/types/memory_agent_type.py +7 -0
  196. letta_client/types/parent_tool_rule.py +1 -1
  197. letta_client/types/required_before_exit_tool_rule.py +1 -1
  198. letta_client/types/requires_approval_tool_rule.py +1 -1
  199. letta_client/types/run.py +6 -0
  200. letta_client/types/source.py +6 -0
  201. letta_client/types/step.py +1 -1
  202. letta_client/types/stop_reason_type.py +1 -0
  203. letta_client/types/terminal_tool_rule.py +1 -1
  204. letta_client/types/vector_db_provider.py +5 -0
  205. letta_client/voice/client.py +2 -8
  206. letta_client/voice/raw_client.py +0 -8
  207. {letta_client-0.1.319.dist-info → letta_client-0.1.320.dist-info}/METADATA +9 -9
  208. {letta_client-0.1.319.dist-info → letta_client-0.1.320.dist-info}/RECORD +211 -114
  209. /letta_client/{embedding_models → models/embeddings}/__init__.py +0 -0
  210. /letta_client/{messages → steps/metrics}/__init__.py +0 -0
  211. {letta_client-0.1.319.dist-info → letta_client-0.1.320.dist-info}/WHEEL +0 -0
@@ -12,6 +12,7 @@ from ..core.serialization import convert_and_respect_annotation_metadata
12
12
  from ..core.unchecked_base_model import construct_type
13
13
  from ..errors.bad_request_error import BadRequestError
14
14
  from ..errors.conflict_error import ConflictError
15
+ from ..errors.internal_server_error import InternalServerError
15
16
  from ..errors.not_found_error import NotFoundError
16
17
  from ..types.conflict_error_body import ConflictErrorBody
17
18
  from .types.templates_create_template_request import TemplatesCreateTemplateRequest
@@ -22,8 +23,10 @@ from .types.templates_get_template_snapshot_response import TemplatesGetTemplate
22
23
  from .types.templates_list_request_sort_by import TemplatesListRequestSortBy
23
24
  from .types.templates_list_response import TemplatesListResponse
24
25
  from .types.templates_list_template_versions_response import TemplatesListTemplateVersionsResponse
26
+ from .types.templates_migrate_deployment_response import TemplatesMigrateDeploymentResponse
25
27
  from .types.templates_rename_template_response import TemplatesRenameTemplateResponse
26
28
  from .types.templates_save_template_version_response import TemplatesSaveTemplateVersionResponse
29
+ from .types.templates_set_current_template_from_snapshot_response import TemplatesSetCurrentTemplateFromSnapshotResponse
27
30
  from .types.templates_update_template_description_response import TemplatesUpdateTemplateDescriptionResponse
28
31
 
29
32
  # this is used as the default value for optional parameters
@@ -299,6 +302,93 @@ class RawTemplatesClient:
299
302
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
300
303
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
301
304
 
305
+ def setcurrenttemplatefromsnapshot(
306
+ self,
307
+ project: str,
308
+ template_version: str,
309
+ *,
310
+ request: typing.Optional[typing.Any] = None,
311
+ request_options: typing.Optional[RequestOptions] = None,
312
+ ) -> HttpResponse[TemplatesSetCurrentTemplateFromSnapshotResponse]:
313
+ """
314
+ Updates the current working version of a template from a snapshot
315
+
316
+ Parameters
317
+ ----------
318
+ project : str
319
+ The project slug
320
+
321
+ template_version : str
322
+ The template name with :current version (e.g., my-template:current)
323
+
324
+ request : typing.Optional[typing.Any]
325
+
326
+ request_options : typing.Optional[RequestOptions]
327
+ Request-specific configuration.
328
+
329
+ Returns
330
+ -------
331
+ HttpResponse[TemplatesSetCurrentTemplateFromSnapshotResponse]
332
+ 200
333
+ """
334
+ _response = self._client_wrapper.httpx_client.request(
335
+ f"v1/templates/{jsonable_encoder(project)}/{jsonable_encoder(template_version)}/snapshot",
336
+ method="PUT",
337
+ json=request,
338
+ headers={
339
+ "content-type": "application/json",
340
+ },
341
+ request_options=request_options,
342
+ omit=OMIT,
343
+ )
344
+ try:
345
+ if 200 <= _response.status_code < 300:
346
+ _data = typing.cast(
347
+ TemplatesSetCurrentTemplateFromSnapshotResponse,
348
+ construct_type(
349
+ type_=TemplatesSetCurrentTemplateFromSnapshotResponse, # type: ignore
350
+ object_=_response.json(),
351
+ ),
352
+ )
353
+ return HttpResponse(response=_response, data=_data)
354
+ if _response.status_code == 400:
355
+ raise BadRequestError(
356
+ headers=dict(_response.headers),
357
+ body=typing.cast(
358
+ typing.Optional[typing.Any],
359
+ construct_type(
360
+ type_=typing.Optional[typing.Any], # type: ignore
361
+ object_=_response.json(),
362
+ ),
363
+ ),
364
+ )
365
+ if _response.status_code == 404:
366
+ raise NotFoundError(
367
+ headers=dict(_response.headers),
368
+ body=typing.cast(
369
+ typing.Optional[typing.Any],
370
+ construct_type(
371
+ type_=typing.Optional[typing.Any], # type: ignore
372
+ object_=_response.json(),
373
+ ),
374
+ ),
375
+ )
376
+ if _response.status_code == 500:
377
+ raise InternalServerError(
378
+ headers=dict(_response.headers),
379
+ body=typing.cast(
380
+ typing.Optional[typing.Any],
381
+ construct_type(
382
+ type_=typing.Optional[typing.Any], # type: ignore
383
+ object_=_response.json(),
384
+ ),
385
+ ),
386
+ )
387
+ _response_json = _response.json()
388
+ except JSONDecodeError:
389
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
390
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
391
+
302
392
  def forktemplate(
303
393
  self,
304
394
  project: str,
@@ -666,6 +756,115 @@ class RawTemplatesClient:
666
756
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
667
757
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
668
758
 
759
+ def migratedeployment(
760
+ self,
761
+ project: str,
762
+ template_name: str,
763
+ deployment_id: str,
764
+ *,
765
+ version: str,
766
+ preserve_tool_variables: typing.Optional[bool] = OMIT,
767
+ preserve_core_memories: typing.Optional[bool] = OMIT,
768
+ memory_variables: typing.Optional[typing.Dict[str, str]] = OMIT,
769
+ request_options: typing.Optional[RequestOptions] = None,
770
+ ) -> HttpResponse[TemplatesMigrateDeploymentResponse]:
771
+ """
772
+ Migrates a deployment to a specific template version
773
+
774
+ Parameters
775
+ ----------
776
+ project : str
777
+ The project slug
778
+
779
+ template_name : str
780
+ The template name (without version)
781
+
782
+ deployment_id : str
783
+ The deployment ID to migrate
784
+
785
+ version : str
786
+ The target template version to migrate to
787
+
788
+ preserve_tool_variables : typing.Optional[bool]
789
+ Whether to preserve existing tool variables during migration
790
+
791
+ preserve_core_memories : typing.Optional[bool]
792
+ Whether to preserve existing core memories during migration
793
+
794
+ memory_variables : typing.Optional[typing.Dict[str, str]]
795
+ Additional memory variables to apply during migration
796
+
797
+ request_options : typing.Optional[RequestOptions]
798
+ Request-specific configuration.
799
+
800
+ Returns
801
+ -------
802
+ HttpResponse[TemplatesMigrateDeploymentResponse]
803
+ 200
804
+ """
805
+ _response = self._client_wrapper.httpx_client.request(
806
+ f"v1/templates/{jsonable_encoder(project)}/{jsonable_encoder(template_name)}/deployments/{jsonable_encoder(deployment_id)}/migrate",
807
+ method="POST",
808
+ json={
809
+ "version": version,
810
+ "preserve_tool_variables": preserve_tool_variables,
811
+ "preserve_core_memories": preserve_core_memories,
812
+ "memory_variables": memory_variables,
813
+ },
814
+ headers={
815
+ "content-type": "application/json",
816
+ },
817
+ request_options=request_options,
818
+ omit=OMIT,
819
+ )
820
+ try:
821
+ if 200 <= _response.status_code < 300:
822
+ _data = typing.cast(
823
+ TemplatesMigrateDeploymentResponse,
824
+ construct_type(
825
+ type_=TemplatesMigrateDeploymentResponse, # type: ignore
826
+ object_=_response.json(),
827
+ ),
828
+ )
829
+ return HttpResponse(response=_response, data=_data)
830
+ if _response.status_code == 400:
831
+ raise BadRequestError(
832
+ headers=dict(_response.headers),
833
+ body=typing.cast(
834
+ typing.Optional[typing.Any],
835
+ construct_type(
836
+ type_=typing.Optional[typing.Any], # type: ignore
837
+ object_=_response.json(),
838
+ ),
839
+ ),
840
+ )
841
+ if _response.status_code == 404:
842
+ raise NotFoundError(
843
+ headers=dict(_response.headers),
844
+ body=typing.cast(
845
+ typing.Optional[typing.Any],
846
+ construct_type(
847
+ type_=typing.Optional[typing.Any], # type: ignore
848
+ object_=_response.json(),
849
+ ),
850
+ ),
851
+ )
852
+ if _response.status_code == 500:
853
+ raise InternalServerError(
854
+ headers=dict(_response.headers),
855
+ body=typing.cast(
856
+ typing.Optional[typing.Any],
857
+ construct_type(
858
+ type_=typing.Optional[typing.Any], # type: ignore
859
+ object_=_response.json(),
860
+ ),
861
+ ),
862
+ )
863
+ _response_json = _response.json()
864
+ except JSONDecodeError:
865
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
866
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
867
+
669
868
 
670
869
  class AsyncRawTemplatesClient:
671
870
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -936,6 +1135,93 @@ class AsyncRawTemplatesClient:
936
1135
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
937
1136
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
938
1137
 
1138
+ async def setcurrenttemplatefromsnapshot(
1139
+ self,
1140
+ project: str,
1141
+ template_version: str,
1142
+ *,
1143
+ request: typing.Optional[typing.Any] = None,
1144
+ request_options: typing.Optional[RequestOptions] = None,
1145
+ ) -> AsyncHttpResponse[TemplatesSetCurrentTemplateFromSnapshotResponse]:
1146
+ """
1147
+ Updates the current working version of a template from a snapshot
1148
+
1149
+ Parameters
1150
+ ----------
1151
+ project : str
1152
+ The project slug
1153
+
1154
+ template_version : str
1155
+ The template name with :current version (e.g., my-template:current)
1156
+
1157
+ request : typing.Optional[typing.Any]
1158
+
1159
+ request_options : typing.Optional[RequestOptions]
1160
+ Request-specific configuration.
1161
+
1162
+ Returns
1163
+ -------
1164
+ AsyncHttpResponse[TemplatesSetCurrentTemplateFromSnapshotResponse]
1165
+ 200
1166
+ """
1167
+ _response = await self._client_wrapper.httpx_client.request(
1168
+ f"v1/templates/{jsonable_encoder(project)}/{jsonable_encoder(template_version)}/snapshot",
1169
+ method="PUT",
1170
+ json=request,
1171
+ headers={
1172
+ "content-type": "application/json",
1173
+ },
1174
+ request_options=request_options,
1175
+ omit=OMIT,
1176
+ )
1177
+ try:
1178
+ if 200 <= _response.status_code < 300:
1179
+ _data = typing.cast(
1180
+ TemplatesSetCurrentTemplateFromSnapshotResponse,
1181
+ construct_type(
1182
+ type_=TemplatesSetCurrentTemplateFromSnapshotResponse, # type: ignore
1183
+ object_=_response.json(),
1184
+ ),
1185
+ )
1186
+ return AsyncHttpResponse(response=_response, data=_data)
1187
+ if _response.status_code == 400:
1188
+ raise BadRequestError(
1189
+ headers=dict(_response.headers),
1190
+ body=typing.cast(
1191
+ typing.Optional[typing.Any],
1192
+ construct_type(
1193
+ type_=typing.Optional[typing.Any], # type: ignore
1194
+ object_=_response.json(),
1195
+ ),
1196
+ ),
1197
+ )
1198
+ if _response.status_code == 404:
1199
+ raise NotFoundError(
1200
+ headers=dict(_response.headers),
1201
+ body=typing.cast(
1202
+ typing.Optional[typing.Any],
1203
+ construct_type(
1204
+ type_=typing.Optional[typing.Any], # type: ignore
1205
+ object_=_response.json(),
1206
+ ),
1207
+ ),
1208
+ )
1209
+ if _response.status_code == 500:
1210
+ raise InternalServerError(
1211
+ headers=dict(_response.headers),
1212
+ body=typing.cast(
1213
+ typing.Optional[typing.Any],
1214
+ construct_type(
1215
+ type_=typing.Optional[typing.Any], # type: ignore
1216
+ object_=_response.json(),
1217
+ ),
1218
+ ),
1219
+ )
1220
+ _response_json = _response.json()
1221
+ except JSONDecodeError:
1222
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1223
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1224
+
939
1225
  async def forktemplate(
940
1226
  self,
941
1227
  project: str,
@@ -1302,3 +1588,112 @@ class AsyncRawTemplatesClient:
1302
1588
  except JSONDecodeError:
1303
1589
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1304
1590
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1591
+
1592
+ async def migratedeployment(
1593
+ self,
1594
+ project: str,
1595
+ template_name: str,
1596
+ deployment_id: str,
1597
+ *,
1598
+ version: str,
1599
+ preserve_tool_variables: typing.Optional[bool] = OMIT,
1600
+ preserve_core_memories: typing.Optional[bool] = OMIT,
1601
+ memory_variables: typing.Optional[typing.Dict[str, str]] = OMIT,
1602
+ request_options: typing.Optional[RequestOptions] = None,
1603
+ ) -> AsyncHttpResponse[TemplatesMigrateDeploymentResponse]:
1604
+ """
1605
+ Migrates a deployment to a specific template version
1606
+
1607
+ Parameters
1608
+ ----------
1609
+ project : str
1610
+ The project slug
1611
+
1612
+ template_name : str
1613
+ The template name (without version)
1614
+
1615
+ deployment_id : str
1616
+ The deployment ID to migrate
1617
+
1618
+ version : str
1619
+ The target template version to migrate to
1620
+
1621
+ preserve_tool_variables : typing.Optional[bool]
1622
+ Whether to preserve existing tool variables during migration
1623
+
1624
+ preserve_core_memories : typing.Optional[bool]
1625
+ Whether to preserve existing core memories during migration
1626
+
1627
+ memory_variables : typing.Optional[typing.Dict[str, str]]
1628
+ Additional memory variables to apply during migration
1629
+
1630
+ request_options : typing.Optional[RequestOptions]
1631
+ Request-specific configuration.
1632
+
1633
+ Returns
1634
+ -------
1635
+ AsyncHttpResponse[TemplatesMigrateDeploymentResponse]
1636
+ 200
1637
+ """
1638
+ _response = await self._client_wrapper.httpx_client.request(
1639
+ f"v1/templates/{jsonable_encoder(project)}/{jsonable_encoder(template_name)}/deployments/{jsonable_encoder(deployment_id)}/migrate",
1640
+ method="POST",
1641
+ json={
1642
+ "version": version,
1643
+ "preserve_tool_variables": preserve_tool_variables,
1644
+ "preserve_core_memories": preserve_core_memories,
1645
+ "memory_variables": memory_variables,
1646
+ },
1647
+ headers={
1648
+ "content-type": "application/json",
1649
+ },
1650
+ request_options=request_options,
1651
+ omit=OMIT,
1652
+ )
1653
+ try:
1654
+ if 200 <= _response.status_code < 300:
1655
+ _data = typing.cast(
1656
+ TemplatesMigrateDeploymentResponse,
1657
+ construct_type(
1658
+ type_=TemplatesMigrateDeploymentResponse, # type: ignore
1659
+ object_=_response.json(),
1660
+ ),
1661
+ )
1662
+ return AsyncHttpResponse(response=_response, data=_data)
1663
+ if _response.status_code == 400:
1664
+ raise BadRequestError(
1665
+ headers=dict(_response.headers),
1666
+ body=typing.cast(
1667
+ typing.Optional[typing.Any],
1668
+ construct_type(
1669
+ type_=typing.Optional[typing.Any], # type: ignore
1670
+ object_=_response.json(),
1671
+ ),
1672
+ ),
1673
+ )
1674
+ if _response.status_code == 404:
1675
+ raise NotFoundError(
1676
+ headers=dict(_response.headers),
1677
+ body=typing.cast(
1678
+ typing.Optional[typing.Any],
1679
+ construct_type(
1680
+ type_=typing.Optional[typing.Any], # type: ignore
1681
+ object_=_response.json(),
1682
+ ),
1683
+ ),
1684
+ )
1685
+ if _response.status_code == 500:
1686
+ raise InternalServerError(
1687
+ headers=dict(_response.headers),
1688
+ body=typing.cast(
1689
+ typing.Optional[typing.Any],
1690
+ construct_type(
1691
+ type_=typing.Optional[typing.Any], # type: ignore
1692
+ object_=_response.json(),
1693
+ ),
1694
+ ),
1695
+ )
1696
+ _response_json = _response.json()
1697
+ except JSONDecodeError:
1698
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1699
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -66,14 +66,19 @@ from .templates_get_template_snapshot_response_agents_item_tool_variables_data_i
66
66
  )
67
67
  from .templates_get_template_snapshot_response_blocks_item import TemplatesGetTemplateSnapshotResponseBlocksItem
68
68
  from .templates_get_template_snapshot_response_configuration import TemplatesGetTemplateSnapshotResponseConfiguration
69
+ from .templates_get_template_snapshot_response_relationships_item import (
70
+ TemplatesGetTemplateSnapshotResponseRelationshipsItem,
71
+ )
69
72
  from .templates_get_template_snapshot_response_type import TemplatesGetTemplateSnapshotResponseType
70
73
  from .templates_list_request_sort_by import TemplatesListRequestSortBy
71
74
  from .templates_list_response import TemplatesListResponse
72
75
  from .templates_list_response_templates_item import TemplatesListResponseTemplatesItem
73
76
  from .templates_list_template_versions_response import TemplatesListTemplateVersionsResponse
74
77
  from .templates_list_template_versions_response_versions_item import TemplatesListTemplateVersionsResponseVersionsItem
78
+ from .templates_migrate_deployment_response import TemplatesMigrateDeploymentResponse
75
79
  from .templates_rename_template_response import TemplatesRenameTemplateResponse
76
80
  from .templates_save_template_version_response import TemplatesSaveTemplateVersionResponse
81
+ from .templates_set_current_template_from_snapshot_response import TemplatesSetCurrentTemplateFromSnapshotResponse
77
82
  from .templates_update_template_description_response import TemplatesUpdateTemplateDescriptionResponse
78
83
 
79
84
  __all__ = [
@@ -105,13 +110,16 @@ __all__ = [
105
110
  "TemplatesGetTemplateSnapshotResponseAgentsItemToolVariablesDataItem",
106
111
  "TemplatesGetTemplateSnapshotResponseBlocksItem",
107
112
  "TemplatesGetTemplateSnapshotResponseConfiguration",
113
+ "TemplatesGetTemplateSnapshotResponseRelationshipsItem",
108
114
  "TemplatesGetTemplateSnapshotResponseType",
109
115
  "TemplatesListRequestSortBy",
110
116
  "TemplatesListResponse",
111
117
  "TemplatesListResponseTemplatesItem",
112
118
  "TemplatesListTemplateVersionsResponse",
113
119
  "TemplatesListTemplateVersionsResponseVersionsItem",
120
+ "TemplatesMigrateDeploymentResponse",
114
121
  "TemplatesRenameTemplateResponse",
115
122
  "TemplatesSaveTemplateVersionResponse",
123
+ "TemplatesSetCurrentTemplateFromSnapshotResponse",
116
124
  "TemplatesUpdateTemplateDescriptionResponse",
117
125
  ]
@@ -8,12 +8,16 @@ from ...core.unchecked_base_model import UncheckedBaseModel
8
8
  from .templates_get_template_snapshot_response_agents_item import TemplatesGetTemplateSnapshotResponseAgentsItem
9
9
  from .templates_get_template_snapshot_response_blocks_item import TemplatesGetTemplateSnapshotResponseBlocksItem
10
10
  from .templates_get_template_snapshot_response_configuration import TemplatesGetTemplateSnapshotResponseConfiguration
11
+ from .templates_get_template_snapshot_response_relationships_item import (
12
+ TemplatesGetTemplateSnapshotResponseRelationshipsItem,
13
+ )
11
14
  from .templates_get_template_snapshot_response_type import TemplatesGetTemplateSnapshotResponseType
12
15
 
13
16
 
14
17
  class TemplatesGetTemplateSnapshotResponse(UncheckedBaseModel):
15
18
  agents: typing.List[TemplatesGetTemplateSnapshotResponseAgentsItem]
16
19
  blocks: typing.List[TemplatesGetTemplateSnapshotResponseBlocksItem]
20
+ relationships: typing.List[TemplatesGetTemplateSnapshotResponseRelationshipsItem]
17
21
  configuration: TemplatesGetTemplateSnapshotResponseConfiguration
18
22
  type: TemplatesGetTemplateSnapshotResponseType
19
23
  version: str
@@ -10,6 +10,7 @@ from ...core.unchecked_base_model import UncheckedBaseModel
10
10
 
11
11
 
12
12
  class TemplatesGetTemplateSnapshotResponseBlocksItem(UncheckedBaseModel):
13
+ entity_id: typing_extensions.Annotated[str, FieldMetadata(alias="entityId")]
13
14
  label: str
14
15
  value: str
15
16
  limit: float
@@ -0,0 +1,23 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ import typing_extensions
7
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
8
+ from ...core.serialization import FieldMetadata
9
+ from ...core.unchecked_base_model import UncheckedBaseModel
10
+
11
+
12
+ class TemplatesGetTemplateSnapshotResponseRelationshipsItem(UncheckedBaseModel):
13
+ agent_entity_id: typing_extensions.Annotated[str, FieldMetadata(alias="agentEntityId")]
14
+ block_entity_id: typing_extensions.Annotated[str, FieldMetadata(alias="blockEntityId")]
15
+
16
+ if IS_PYDANTIC_V2:
17
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
18
+ else:
19
+
20
+ class Config:
21
+ frozen = True
22
+ smart_union = True
23
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ 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 TemplatesMigrateDeploymentResponse(UncheckedBaseModel):
11
+ success: bool
12
+ message: typing.Optional[str] = None
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
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 TemplatesSetCurrentTemplateFromSnapshotResponse(UncheckedBaseModel):
11
+ success: bool
12
+ message: typing.Optional[str] = None
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -11,6 +11,7 @@ from .types import (
11
11
  ListMcpServersResponseValue,
12
12
  StreamingResponse,
13
13
  TestMcpServerRequest,
14
+ ToolsListRequestOrder,
14
15
  UpdateMcpServerRequest,
15
16
  UpdateMcpServerResponse,
16
17
  )
@@ -24,6 +25,7 @@ __all__ = [
24
25
  "ListMcpServersResponseValue",
25
26
  "StreamingResponse",
26
27
  "TestMcpServerRequest",
28
+ "ToolsListRequestOrder",
27
29
  "UpdateMcpServerRequest",
28
30
  "UpdateMcpServerResponse",
29
31
  ]