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
@@ -0,0 +1,177 @@
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 .raw_client import AsyncRawMessagesClient, RawMessagesClient
8
+ from .types.messages_list_request_order import MessagesListRequestOrder
9
+ from .types.messages_list_response_item import MessagesListResponseItem
10
+
11
+
12
+ class MessagesClient:
13
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
14
+ self._raw_client = RawMessagesClient(client_wrapper=client_wrapper)
15
+
16
+ @property
17
+ def with_raw_response(self) -> RawMessagesClient:
18
+ """
19
+ Retrieves a raw implementation of this client that returns raw responses.
20
+
21
+ Returns
22
+ -------
23
+ RawMessagesClient
24
+ """
25
+ return self._raw_client
26
+
27
+ def list(
28
+ self,
29
+ step_id: str,
30
+ *,
31
+ before: typing.Optional[str] = None,
32
+ after: typing.Optional[str] = None,
33
+ limit: typing.Optional[int] = None,
34
+ order: typing.Optional[MessagesListRequestOrder] = None,
35
+ order_by: typing.Optional[typing.Literal["created_at"]] = None,
36
+ request_options: typing.Optional[RequestOptions] = None,
37
+ ) -> typing.List[MessagesListResponseItem]:
38
+ """
39
+ List messages for a given step.
40
+
41
+ Parameters
42
+ ----------
43
+ step_id : str
44
+
45
+ before : typing.Optional[str]
46
+ Message ID cursor for pagination. Returns messages that come before this message ID in the specified sort order
47
+
48
+ after : typing.Optional[str]
49
+ Message ID cursor for pagination. Returns messages that come after this message ID in the specified sort order
50
+
51
+ limit : typing.Optional[int]
52
+ Maximum number of messages to return
53
+
54
+ order : typing.Optional[MessagesListRequestOrder]
55
+ Sort order for messages by creation time. 'asc' for oldest first, 'desc' for newest first
56
+
57
+ order_by : typing.Optional[typing.Literal["created_at"]]
58
+ Sort by field
59
+
60
+ request_options : typing.Optional[RequestOptions]
61
+ Request-specific configuration.
62
+
63
+ Returns
64
+ -------
65
+ typing.List[MessagesListResponseItem]
66
+ Successful Response
67
+
68
+ Examples
69
+ --------
70
+ from letta_client import Letta
71
+
72
+ client = Letta(
73
+ project="YOUR_PROJECT",
74
+ token="YOUR_TOKEN",
75
+ )
76
+ client.steps.messages.list(
77
+ step_id="step_id",
78
+ )
79
+ """
80
+ _response = self._raw_client.list(
81
+ step_id,
82
+ before=before,
83
+ after=after,
84
+ limit=limit,
85
+ order=order,
86
+ order_by=order_by,
87
+ request_options=request_options,
88
+ )
89
+ return _response.data
90
+
91
+
92
+ class AsyncMessagesClient:
93
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
94
+ self._raw_client = AsyncRawMessagesClient(client_wrapper=client_wrapper)
95
+
96
+ @property
97
+ def with_raw_response(self) -> AsyncRawMessagesClient:
98
+ """
99
+ Retrieves a raw implementation of this client that returns raw responses.
100
+
101
+ Returns
102
+ -------
103
+ AsyncRawMessagesClient
104
+ """
105
+ return self._raw_client
106
+
107
+ async def list(
108
+ self,
109
+ step_id: str,
110
+ *,
111
+ before: typing.Optional[str] = None,
112
+ after: typing.Optional[str] = None,
113
+ limit: typing.Optional[int] = None,
114
+ order: typing.Optional[MessagesListRequestOrder] = None,
115
+ order_by: typing.Optional[typing.Literal["created_at"]] = None,
116
+ request_options: typing.Optional[RequestOptions] = None,
117
+ ) -> typing.List[MessagesListResponseItem]:
118
+ """
119
+ List messages for a given step.
120
+
121
+ Parameters
122
+ ----------
123
+ step_id : str
124
+
125
+ before : typing.Optional[str]
126
+ Message ID cursor for pagination. Returns messages that come before this message ID in the specified sort order
127
+
128
+ after : typing.Optional[str]
129
+ Message ID cursor for pagination. Returns messages that come after this message ID in the specified sort order
130
+
131
+ limit : typing.Optional[int]
132
+ Maximum number of messages to return
133
+
134
+ order : typing.Optional[MessagesListRequestOrder]
135
+ Sort order for messages by creation time. 'asc' for oldest first, 'desc' for newest first
136
+
137
+ order_by : typing.Optional[typing.Literal["created_at"]]
138
+ Sort by field
139
+
140
+ request_options : typing.Optional[RequestOptions]
141
+ Request-specific configuration.
142
+
143
+ Returns
144
+ -------
145
+ typing.List[MessagesListResponseItem]
146
+ Successful Response
147
+
148
+ Examples
149
+ --------
150
+ import asyncio
151
+
152
+ from letta_client import AsyncLetta
153
+
154
+ client = AsyncLetta(
155
+ project="YOUR_PROJECT",
156
+ token="YOUR_TOKEN",
157
+ )
158
+
159
+
160
+ async def main() -> None:
161
+ await client.steps.messages.list(
162
+ step_id="step_id",
163
+ )
164
+
165
+
166
+ asyncio.run(main())
167
+ """
168
+ _response = await self._raw_client.list(
169
+ step_id,
170
+ before=before,
171
+ after=after,
172
+ limit=limit,
173
+ order=order,
174
+ order_by=order_by,
175
+ request_options=request_options,
176
+ )
177
+ return _response.data
@@ -0,0 +1,183 @@
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.messages_list_request_order import MessagesListRequestOrder
15
+ from .types.messages_list_response_item import MessagesListResponseItem
16
+
17
+
18
+ class RawMessagesClient:
19
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
20
+ self._client_wrapper = client_wrapper
21
+
22
+ def list(
23
+ self,
24
+ step_id: str,
25
+ *,
26
+ before: typing.Optional[str] = None,
27
+ after: typing.Optional[str] = None,
28
+ limit: typing.Optional[int] = None,
29
+ order: typing.Optional[MessagesListRequestOrder] = None,
30
+ order_by: typing.Optional[typing.Literal["created_at"]] = None,
31
+ request_options: typing.Optional[RequestOptions] = None,
32
+ ) -> HttpResponse[typing.List[MessagesListResponseItem]]:
33
+ """
34
+ List messages for a given step.
35
+
36
+ Parameters
37
+ ----------
38
+ step_id : str
39
+
40
+ before : typing.Optional[str]
41
+ Message ID cursor for pagination. Returns messages that come before this message ID in the specified sort order
42
+
43
+ after : typing.Optional[str]
44
+ Message ID cursor for pagination. Returns messages that come after this message ID in the specified sort order
45
+
46
+ limit : typing.Optional[int]
47
+ Maximum number of messages to return
48
+
49
+ order : typing.Optional[MessagesListRequestOrder]
50
+ Sort order for messages by creation time. 'asc' for oldest first, 'desc' for newest first
51
+
52
+ order_by : typing.Optional[typing.Literal["created_at"]]
53
+ Sort by field
54
+
55
+ request_options : typing.Optional[RequestOptions]
56
+ Request-specific configuration.
57
+
58
+ Returns
59
+ -------
60
+ HttpResponse[typing.List[MessagesListResponseItem]]
61
+ Successful Response
62
+ """
63
+ _response = self._client_wrapper.httpx_client.request(
64
+ f"v1/steps/{jsonable_encoder(step_id)}/messages",
65
+ method="GET",
66
+ params={
67
+ "before": before,
68
+ "after": after,
69
+ "limit": limit,
70
+ "order": order,
71
+ "order_by": order_by,
72
+ },
73
+ request_options=request_options,
74
+ )
75
+ try:
76
+ if 200 <= _response.status_code < 300:
77
+ _data = typing.cast(
78
+ typing.List[MessagesListResponseItem],
79
+ construct_type(
80
+ type_=typing.List[MessagesListResponseItem], # type: ignore
81
+ object_=_response.json(),
82
+ ),
83
+ )
84
+ return HttpResponse(response=_response, data=_data)
85
+ if _response.status_code == 422:
86
+ raise UnprocessableEntityError(
87
+ headers=dict(_response.headers),
88
+ body=typing.cast(
89
+ HttpValidationError,
90
+ construct_type(
91
+ type_=HttpValidationError, # type: ignore
92
+ object_=_response.json(),
93
+ ),
94
+ ),
95
+ )
96
+ _response_json = _response.json()
97
+ except JSONDecodeError:
98
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
99
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
100
+
101
+
102
+ class AsyncRawMessagesClient:
103
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
104
+ self._client_wrapper = client_wrapper
105
+
106
+ async def list(
107
+ self,
108
+ step_id: str,
109
+ *,
110
+ before: typing.Optional[str] = None,
111
+ after: typing.Optional[str] = None,
112
+ limit: typing.Optional[int] = None,
113
+ order: typing.Optional[MessagesListRequestOrder] = None,
114
+ order_by: typing.Optional[typing.Literal["created_at"]] = None,
115
+ request_options: typing.Optional[RequestOptions] = None,
116
+ ) -> AsyncHttpResponse[typing.List[MessagesListResponseItem]]:
117
+ """
118
+ List messages for a given step.
119
+
120
+ Parameters
121
+ ----------
122
+ step_id : str
123
+
124
+ before : typing.Optional[str]
125
+ Message ID cursor for pagination. Returns messages that come before this message ID in the specified sort order
126
+
127
+ after : typing.Optional[str]
128
+ Message ID cursor for pagination. Returns messages that come after this message ID in the specified sort order
129
+
130
+ limit : typing.Optional[int]
131
+ Maximum number of messages to return
132
+
133
+ order : typing.Optional[MessagesListRequestOrder]
134
+ Sort order for messages by creation time. 'asc' for oldest first, 'desc' for newest first
135
+
136
+ order_by : typing.Optional[typing.Literal["created_at"]]
137
+ Sort by field
138
+
139
+ request_options : typing.Optional[RequestOptions]
140
+ Request-specific configuration.
141
+
142
+ Returns
143
+ -------
144
+ AsyncHttpResponse[typing.List[MessagesListResponseItem]]
145
+ Successful Response
146
+ """
147
+ _response = await self._client_wrapper.httpx_client.request(
148
+ f"v1/steps/{jsonable_encoder(step_id)}/messages",
149
+ method="GET",
150
+ params={
151
+ "before": before,
152
+ "after": after,
153
+ "limit": limit,
154
+ "order": order,
155
+ "order_by": order_by,
156
+ },
157
+ request_options=request_options,
158
+ )
159
+ try:
160
+ if 200 <= _response.status_code < 300:
161
+ _data = typing.cast(
162
+ typing.List[MessagesListResponseItem],
163
+ construct_type(
164
+ type_=typing.List[MessagesListResponseItem], # type: ignore
165
+ object_=_response.json(),
166
+ ),
167
+ )
168
+ return AsyncHttpResponse(response=_response, data=_data)
169
+ if _response.status_code == 422:
170
+ raise UnprocessableEntityError(
171
+ headers=dict(_response.headers),
172
+ body=typing.cast(
173
+ HttpValidationError,
174
+ construct_type(
175
+ type_=HttpValidationError, # type: ignore
176
+ object_=_response.json(),
177
+ ),
178
+ ),
179
+ )
180
+ _response_json = _response.json()
181
+ except JSONDecodeError:
182
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
183
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,8 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ from .messages_list_request_order import MessagesListRequestOrder
6
+ from .messages_list_response_item import MessagesListResponseItem
7
+
8
+ __all__ = ["MessagesListRequestOrder", "MessagesListResponseItem"]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ MessagesListRequestOrder = typing.Union[typing.Literal["asc", "desc"], typing.Any]
@@ -0,0 +1,25 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ....types.approval_request_message import ApprovalRequestMessage
6
+ from ....types.approval_response_message import ApprovalResponseMessage
7
+ from ....types.assistant_message import AssistantMessage
8
+ from ....types.hidden_reasoning_message import HiddenReasoningMessage
9
+ from ....types.reasoning_message import ReasoningMessage
10
+ from ....types.system_message import SystemMessage
11
+ from ....types.tool_call_message import ToolCallMessage
12
+ from ....types.tool_return_message import ToolReturnMessage
13
+ from ....types.user_message import UserMessage
14
+
15
+ MessagesListResponseItem = typing.Union[
16
+ SystemMessage,
17
+ UserMessage,
18
+ ReasoningMessage,
19
+ HiddenReasoningMessage,
20
+ ToolCallMessage,
21
+ ToolReturnMessage,
22
+ AssistantMessage,
23
+ ApprovalRequestMessage,
24
+ ApprovalResponseMessage,
25
+ ]
@@ -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.step_metrics import StepMetrics
8
+ from .raw_client import AsyncRawMetricsClient, RawMetricsClient
9
+
10
+
11
+ class MetricsClient:
12
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
13
+ self._raw_client = RawMetricsClient(client_wrapper=client_wrapper)
14
+
15
+ @property
16
+ def with_raw_response(self) -> RawMetricsClient:
17
+ """
18
+ Retrieves a raw implementation of this client that returns raw responses.
19
+
20
+ Returns
21
+ -------
22
+ RawMetricsClient
23
+ """
24
+ return self._raw_client
25
+
26
+ def retrieve(self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> StepMetrics:
27
+ """
28
+ Get step metrics by step ID.
29
+
30
+ Parameters
31
+ ----------
32
+ step_id : str
33
+
34
+ request_options : typing.Optional[RequestOptions]
35
+ Request-specific configuration.
36
+
37
+ Returns
38
+ -------
39
+ StepMetrics
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.metrics.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 AsyncMetricsClient:
59
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
60
+ self._raw_client = AsyncRawMetricsClient(client_wrapper=client_wrapper)
61
+
62
+ @property
63
+ def with_raw_response(self) -> AsyncRawMetricsClient:
64
+ """
65
+ Retrieves a raw implementation of this client that returns raw responses.
66
+
67
+ Returns
68
+ -------
69
+ AsyncRawMetricsClient
70
+ """
71
+ return self._raw_client
72
+
73
+ async def retrieve(self, step_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> StepMetrics:
74
+ """
75
+ Get step metrics by step ID.
76
+
77
+ Parameters
78
+ ----------
79
+ step_id : str
80
+
81
+ request_options : typing.Optional[RequestOptions]
82
+ Request-specific configuration.
83
+
84
+ Returns
85
+ -------
86
+ StepMetrics
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.metrics.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.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)