letta-client 0.1.319__py3-none-any.whl → 0.1.321__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 +39 -8
  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 +39 -8
  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 +16 -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 +16 -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 +16 -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.321.dist-info}/METADATA +9 -9
  208. {letta_client-0.1.319.dist-info → letta_client-0.1.321.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.321.dist-info}/WHEEL +0 -0
@@ -0,0 +1,122 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ...core.api_error import ApiError
7
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ...core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ...core.jsonable_encoder import jsonable_encoder
10
+ from ...core.request_options import RequestOptions
11
+ from ...core.unchecked_base_model import construct_type
12
+ from ...errors.unprocessable_entity_error import UnprocessableEntityError
13
+ from ...types.http_validation_error import HttpValidationError
14
+ from ...types.step_metrics import StepMetrics
15
+
16
+
17
+ class RawMetricsClient:
18
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
19
+ self._client_wrapper = client_wrapper
20
+
21
+ def retrieve(
22
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
23
+ ) -> HttpResponse[StepMetrics]:
24
+ """
25
+ Get step metrics by step ID.
26
+
27
+ Parameters
28
+ ----------
29
+ step_id : str
30
+
31
+ request_options : typing.Optional[RequestOptions]
32
+ Request-specific configuration.
33
+
34
+ Returns
35
+ -------
36
+ HttpResponse[StepMetrics]
37
+ Successful Response
38
+ """
39
+ _response = self._client_wrapper.httpx_client.request(
40
+ f"v1/steps/{jsonable_encoder(step_id)}/metrics",
41
+ method="GET",
42
+ request_options=request_options,
43
+ )
44
+ try:
45
+ if 200 <= _response.status_code < 300:
46
+ _data = typing.cast(
47
+ StepMetrics,
48
+ construct_type(
49
+ type_=StepMetrics, # type: ignore
50
+ object_=_response.json(),
51
+ ),
52
+ )
53
+ return HttpResponse(response=_response, data=_data)
54
+ if _response.status_code == 422:
55
+ raise UnprocessableEntityError(
56
+ headers=dict(_response.headers),
57
+ body=typing.cast(
58
+ HttpValidationError,
59
+ construct_type(
60
+ type_=HttpValidationError, # type: ignore
61
+ object_=_response.json(),
62
+ ),
63
+ ),
64
+ )
65
+ _response_json = _response.json()
66
+ except JSONDecodeError:
67
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
68
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
69
+
70
+
71
+ class AsyncRawMetricsClient:
72
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
73
+ self._client_wrapper = client_wrapper
74
+
75
+ async def retrieve(
76
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
77
+ ) -> AsyncHttpResponse[StepMetrics]:
78
+ """
79
+ Get step metrics by step ID.
80
+
81
+ Parameters
82
+ ----------
83
+ step_id : str
84
+
85
+ request_options : typing.Optional[RequestOptions]
86
+ Request-specific configuration.
87
+
88
+ Returns
89
+ -------
90
+ AsyncHttpResponse[StepMetrics]
91
+ Successful Response
92
+ """
93
+ _response = await self._client_wrapper.httpx_client.request(
94
+ f"v1/steps/{jsonable_encoder(step_id)}/metrics",
95
+ method="GET",
96
+ request_options=request_options,
97
+ )
98
+ try:
99
+ if 200 <= _response.status_code < 300:
100
+ _data = typing.cast(
101
+ StepMetrics,
102
+ construct_type(
103
+ type_=StepMetrics, # type: ignore
104
+ object_=_response.json(),
105
+ ),
106
+ )
107
+ return AsyncHttpResponse(response=_response, data=_data)
108
+ if _response.status_code == 422:
109
+ raise UnprocessableEntityError(
110
+ headers=dict(_response.headers),
111
+ body=typing.cast(
112
+ HttpValidationError,
113
+ construct_type(
114
+ type_=HttpValidationError, # type: ignore
115
+ object_=_response.json(),
116
+ ),
117
+ ),
118
+ )
119
+ _response_json = _response.json()
120
+ except JSONDecodeError:
121
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
122
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -12,8 +12,8 @@ from ..core.unchecked_base_model import construct_type
12
12
  from ..errors.unprocessable_entity_error import UnprocessableEntityError
13
13
  from ..types.http_validation_error import HttpValidationError
14
14
  from ..types.step import Step
15
- from ..types.step_metrics import StepMetrics
16
15
  from .types.steps_list_request_feedback import StepsListRequestFeedback
16
+ from .types.steps_list_request_order import StepsListRequestOrder
17
17
 
18
18
 
19
19
  class RawStepsClient:
@@ -26,7 +26,8 @@ class RawStepsClient:
26
26
  before: typing.Optional[str] = None,
27
27
  after: typing.Optional[str] = None,
28
28
  limit: typing.Optional[int] = None,
29
- order: typing.Optional[str] = None,
29
+ order: typing.Optional[StepsListRequestOrder] = None,
30
+ order_by: typing.Optional[typing.Literal["created_at"]] = None,
30
31
  start_date: typing.Optional[str] = None,
31
32
  end_date: typing.Optional[str] = None,
32
33
  model: typing.Optional[str] = None,
@@ -40,7 +41,6 @@ class RawStepsClient:
40
41
  ) -> HttpResponse[typing.List[Step]]:
41
42
  """
42
43
  List steps with optional pagination and date filters.
43
- Dates should be provided in ISO 8601 format (e.g. 2025-01-29T15:01:19-08:00)
44
44
 
45
45
  Parameters
46
46
  ----------
@@ -53,8 +53,11 @@ class RawStepsClient:
53
53
  limit : typing.Optional[int]
54
54
  Maximum number of steps to return
55
55
 
56
- order : typing.Optional[str]
57
- Sort order (asc or desc)
56
+ order : typing.Optional[StepsListRequestOrder]
57
+ Sort order for steps by creation time. 'asc' for oldest first, 'desc' for newest first
58
+
59
+ order_by : typing.Optional[typing.Literal["created_at"]]
60
+ Field to sort by
58
61
 
59
62
  start_date : typing.Optional[str]
60
63
  Return steps after this ISO datetime (e.g. "2025-01-29T15:01:19-08:00")
@@ -99,6 +102,7 @@ class RawStepsClient:
99
102
  "after": after,
100
103
  "limit": limit,
101
104
  "order": order,
105
+ "order_by": order_by,
102
106
  "start_date": start_date,
103
107
  "end_date": end_date,
104
108
  "model": model,
@@ -184,55 +188,6 @@ class RawStepsClient:
184
188
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
185
189
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
186
190
 
187
- def retrieve_step_metrics(
188
- self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
189
- ) -> HttpResponse[StepMetrics]:
190
- """
191
- Get step metrics by step ID.
192
-
193
- Parameters
194
- ----------
195
- step_id : str
196
-
197
- request_options : typing.Optional[RequestOptions]
198
- Request-specific configuration.
199
-
200
- Returns
201
- -------
202
- HttpResponse[StepMetrics]
203
- Successful Response
204
- """
205
- _response = self._client_wrapper.httpx_client.request(
206
- f"v1/steps/{jsonable_encoder(step_id)}/metrics",
207
- method="GET",
208
- request_options=request_options,
209
- )
210
- try:
211
- if 200 <= _response.status_code < 300:
212
- _data = typing.cast(
213
- StepMetrics,
214
- construct_type(
215
- type_=StepMetrics, # type: ignore
216
- object_=_response.json(),
217
- ),
218
- )
219
- return HttpResponse(response=_response, data=_data)
220
- if _response.status_code == 422:
221
- raise UnprocessableEntityError(
222
- headers=dict(_response.headers),
223
- body=typing.cast(
224
- HttpValidationError,
225
- construct_type(
226
- type_=HttpValidationError, # type: ignore
227
- object_=_response.json(),
228
- ),
229
- ),
230
- )
231
- _response_json = _response.json()
232
- except JSONDecodeError:
233
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
234
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
235
-
236
191
 
237
192
  class AsyncRawStepsClient:
238
193
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -244,7 +199,8 @@ class AsyncRawStepsClient:
244
199
  before: typing.Optional[str] = None,
245
200
  after: typing.Optional[str] = None,
246
201
  limit: typing.Optional[int] = None,
247
- order: typing.Optional[str] = None,
202
+ order: typing.Optional[StepsListRequestOrder] = None,
203
+ order_by: typing.Optional[typing.Literal["created_at"]] = None,
248
204
  start_date: typing.Optional[str] = None,
249
205
  end_date: typing.Optional[str] = None,
250
206
  model: typing.Optional[str] = None,
@@ -258,7 +214,6 @@ class AsyncRawStepsClient:
258
214
  ) -> AsyncHttpResponse[typing.List[Step]]:
259
215
  """
260
216
  List steps with optional pagination and date filters.
261
- Dates should be provided in ISO 8601 format (e.g. 2025-01-29T15:01:19-08:00)
262
217
 
263
218
  Parameters
264
219
  ----------
@@ -271,8 +226,11 @@ class AsyncRawStepsClient:
271
226
  limit : typing.Optional[int]
272
227
  Maximum number of steps to return
273
228
 
274
- order : typing.Optional[str]
275
- Sort order (asc or desc)
229
+ order : typing.Optional[StepsListRequestOrder]
230
+ Sort order for steps by creation time. 'asc' for oldest first, 'desc' for newest first
231
+
232
+ order_by : typing.Optional[typing.Literal["created_at"]]
233
+ Field to sort by
276
234
 
277
235
  start_date : typing.Optional[str]
278
236
  Return steps after this ISO datetime (e.g. "2025-01-29T15:01:19-08:00")
@@ -317,6 +275,7 @@ class AsyncRawStepsClient:
317
275
  "after": after,
318
276
  "limit": limit,
319
277
  "order": order,
278
+ "order_by": order_by,
320
279
  "start_date": start_date,
321
280
  "end_date": end_date,
322
281
  "model": model,
@@ -403,52 +362,3 @@ class AsyncRawStepsClient:
403
362
  except JSONDecodeError:
404
363
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
405
364
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
406
-
407
- async def retrieve_step_metrics(
408
- self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
409
- ) -> AsyncHttpResponse[StepMetrics]:
410
- """
411
- Get step metrics by step ID.
412
-
413
- Parameters
414
- ----------
415
- step_id : str
416
-
417
- request_options : typing.Optional[RequestOptions]
418
- Request-specific configuration.
419
-
420
- Returns
421
- -------
422
- AsyncHttpResponse[StepMetrics]
423
- Successful Response
424
- """
425
- _response = await self._client_wrapper.httpx_client.request(
426
- f"v1/steps/{jsonable_encoder(step_id)}/metrics",
427
- method="GET",
428
- request_options=request_options,
429
- )
430
- try:
431
- if 200 <= _response.status_code < 300:
432
- _data = typing.cast(
433
- StepMetrics,
434
- construct_type(
435
- type_=StepMetrics, # type: ignore
436
- object_=_response.json(),
437
- ),
438
- )
439
- return AsyncHttpResponse(response=_response, data=_data)
440
- if _response.status_code == 422:
441
- raise UnprocessableEntityError(
442
- headers=dict(_response.headers),
443
- body=typing.cast(
444
- HttpValidationError,
445
- construct_type(
446
- type_=HttpValidationError, # type: ignore
447
- object_=_response.json(),
448
- ),
449
- ),
450
- )
451
- _response_json = _response.json()
452
- except JSONDecodeError:
453
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
454
- raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,4 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
@@ -0,0 +1,110 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
+ from ...core.request_options import RequestOptions
7
+ from ...types.provider_trace import ProviderTrace
8
+ from .raw_client import AsyncRawTraceClient, RawTraceClient
9
+
10
+
11
+ class TraceClient:
12
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
13
+ self._raw_client = RawTraceClient(client_wrapper=client_wrapper)
14
+
15
+ @property
16
+ def with_raw_response(self) -> RawTraceClient:
17
+ """
18
+ Retrieves a raw implementation of this client that returns raw responses.
19
+
20
+ Returns
21
+ -------
22
+ RawTraceClient
23
+ """
24
+ return self._raw_client
25
+
26
+ def retrieve(
27
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
28
+ ) -> typing.Optional[ProviderTrace]:
29
+ """
30
+ Parameters
31
+ ----------
32
+ step_id : str
33
+
34
+ request_options : typing.Optional[RequestOptions]
35
+ Request-specific configuration.
36
+
37
+ Returns
38
+ -------
39
+ typing.Optional[ProviderTrace]
40
+ Successful Response
41
+
42
+ Examples
43
+ --------
44
+ from letta_client import Letta
45
+
46
+ client = Letta(
47
+ project="YOUR_PROJECT",
48
+ token="YOUR_TOKEN",
49
+ )
50
+ client.steps.trace.retrieve(
51
+ step_id="step_id",
52
+ )
53
+ """
54
+ _response = self._raw_client.retrieve(step_id, request_options=request_options)
55
+ return _response.data
56
+
57
+
58
+ class AsyncTraceClient:
59
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
60
+ self._raw_client = AsyncRawTraceClient(client_wrapper=client_wrapper)
61
+
62
+ @property
63
+ def with_raw_response(self) -> AsyncRawTraceClient:
64
+ """
65
+ Retrieves a raw implementation of this client that returns raw responses.
66
+
67
+ Returns
68
+ -------
69
+ AsyncRawTraceClient
70
+ """
71
+ return self._raw_client
72
+
73
+ async def retrieve(
74
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
75
+ ) -> typing.Optional[ProviderTrace]:
76
+ """
77
+ Parameters
78
+ ----------
79
+ step_id : str
80
+
81
+ request_options : typing.Optional[RequestOptions]
82
+ Request-specific configuration.
83
+
84
+ Returns
85
+ -------
86
+ typing.Optional[ProviderTrace]
87
+ Successful Response
88
+
89
+ Examples
90
+ --------
91
+ import asyncio
92
+
93
+ from letta_client import AsyncLetta
94
+
95
+ client = AsyncLetta(
96
+ project="YOUR_PROJECT",
97
+ token="YOUR_TOKEN",
98
+ )
99
+
100
+
101
+ async def main() -> None:
102
+ await client.steps.trace.retrieve(
103
+ step_id="step_id",
104
+ )
105
+
106
+
107
+ asyncio.run(main())
108
+ """
109
+ _response = await self._raw_client.retrieve(step_id, request_options=request_options)
110
+ return _response.data
@@ -0,0 +1,122 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ...core.api_error import ApiError
7
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ...core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ...core.jsonable_encoder import jsonable_encoder
10
+ from ...core.request_options import RequestOptions
11
+ from ...core.unchecked_base_model import construct_type
12
+ from ...errors.unprocessable_entity_error import UnprocessableEntityError
13
+ from ...types.http_validation_error import HttpValidationError
14
+ from ...types.provider_trace import ProviderTrace
15
+
16
+
17
+ class RawTraceClient:
18
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
19
+ self._client_wrapper = client_wrapper
20
+
21
+ def retrieve(
22
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
23
+ ) -> HttpResponse[typing.Optional[ProviderTrace]]:
24
+ """
25
+ Parameters
26
+ ----------
27
+ step_id : str
28
+
29
+ request_options : typing.Optional[RequestOptions]
30
+ Request-specific configuration.
31
+
32
+ Returns
33
+ -------
34
+ HttpResponse[typing.Optional[ProviderTrace]]
35
+ Successful Response
36
+ """
37
+ _response = self._client_wrapper.httpx_client.request(
38
+ f"v1/steps/{jsonable_encoder(step_id)}/trace",
39
+ method="GET",
40
+ request_options=request_options,
41
+ )
42
+ try:
43
+ if _response is None or not _response.text.strip():
44
+ return HttpResponse(response=_response, data=None)
45
+ if 200 <= _response.status_code < 300:
46
+ _data = typing.cast(
47
+ typing.Optional[ProviderTrace],
48
+ construct_type(
49
+ type_=typing.Optional[ProviderTrace], # type: ignore
50
+ object_=_response.json(),
51
+ ),
52
+ )
53
+ return HttpResponse(response=_response, data=_data)
54
+ if _response.status_code == 422:
55
+ raise UnprocessableEntityError(
56
+ headers=dict(_response.headers),
57
+ body=typing.cast(
58
+ HttpValidationError,
59
+ construct_type(
60
+ type_=HttpValidationError, # type: ignore
61
+ object_=_response.json(),
62
+ ),
63
+ ),
64
+ )
65
+ _response_json = _response.json()
66
+ except JSONDecodeError:
67
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
68
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
69
+
70
+
71
+ class AsyncRawTraceClient:
72
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
73
+ self._client_wrapper = client_wrapper
74
+
75
+ async def retrieve(
76
+ self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None
77
+ ) -> AsyncHttpResponse[typing.Optional[ProviderTrace]]:
78
+ """
79
+ Parameters
80
+ ----------
81
+ step_id : str
82
+
83
+ request_options : typing.Optional[RequestOptions]
84
+ Request-specific configuration.
85
+
86
+ Returns
87
+ -------
88
+ AsyncHttpResponse[typing.Optional[ProviderTrace]]
89
+ Successful Response
90
+ """
91
+ _response = await self._client_wrapper.httpx_client.request(
92
+ f"v1/steps/{jsonable_encoder(step_id)}/trace",
93
+ method="GET",
94
+ request_options=request_options,
95
+ )
96
+ try:
97
+ if _response is None or not _response.text.strip():
98
+ return AsyncHttpResponse(response=_response, data=None)
99
+ if 200 <= _response.status_code < 300:
100
+ _data = typing.cast(
101
+ typing.Optional[ProviderTrace],
102
+ construct_type(
103
+ type_=typing.Optional[ProviderTrace], # type: ignore
104
+ object_=_response.json(),
105
+ ),
106
+ )
107
+ return AsyncHttpResponse(response=_response, data=_data)
108
+ if _response.status_code == 422:
109
+ raise UnprocessableEntityError(
110
+ headers=dict(_response.headers),
111
+ body=typing.cast(
112
+ HttpValidationError,
113
+ construct_type(
114
+ type_=HttpValidationError, # type: ignore
115
+ object_=_response.json(),
116
+ ),
117
+ ),
118
+ )
119
+ _response_json = _response.json()
120
+ except JSONDecodeError:
121
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
122
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -3,5 +3,6 @@
3
3
  # isort: skip_file
4
4
 
5
5
  from .steps_list_request_feedback import StepsListRequestFeedback
6
+ from .steps_list_request_order import StepsListRequestOrder
6
7
 
7
- __all__ = ["StepsListRequestFeedback"]
8
+ __all__ = ["StepsListRequestFeedback", "StepsListRequestOrder"]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ StepsListRequestOrder = typing.Union[typing.Literal["asc", "desc"], typing.Any]
@@ -2,3 +2,6 @@
2
2
 
3
3
  # isort: skip_file
4
4
 
5
+ from .types import TagsListRequestOrder
6
+
7
+ __all__ = ["TagsListRequestOrder"]