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
@@ -8,6 +8,9 @@ from ...types.feedback_type import FeedbackType
8
8
  from ...types.step import Step
9
9
  from .raw_client import AsyncRawFeedbackClient, RawFeedbackClient
10
10
 
11
+ # this is used as the default value for optional parameters
12
+ OMIT = typing.cast(typing.Any, ...)
13
+
11
14
 
12
15
  class FeedbackClient:
13
16
  def __init__(self, *, client_wrapper: SyncClientWrapper):
@@ -28,17 +31,22 @@ class FeedbackClient:
28
31
  self,
29
32
  step_id: str,
30
33
  *,
31
- feedback: typing.Optional[FeedbackType] = None,
34
+ feedback: typing.Optional[FeedbackType] = OMIT,
35
+ tags: typing.Optional[typing.Sequence[str]] = OMIT,
32
36
  request_options: typing.Optional[RequestOptions] = None,
33
37
  ) -> Step:
34
38
  """
35
- Add feedback to a step.
39
+ Modify feedback for a given step.
36
40
 
37
41
  Parameters
38
42
  ----------
39
43
  step_id : str
40
44
 
41
45
  feedback : typing.Optional[FeedbackType]
46
+ Whether this feedback is positive or negative
47
+
48
+ tags : typing.Optional[typing.Sequence[str]]
49
+ Feedback tags to add to the step
42
50
 
43
51
  request_options : typing.Optional[RequestOptions]
44
52
  Request-specific configuration.
@@ -60,7 +68,7 @@ class FeedbackClient:
60
68
  step_id="step_id",
61
69
  )
62
70
  """
63
- _response = self._raw_client.create(step_id, feedback=feedback, request_options=request_options)
71
+ _response = self._raw_client.create(step_id, feedback=feedback, tags=tags, request_options=request_options)
64
72
  return _response.data
65
73
 
66
74
 
@@ -83,17 +91,22 @@ class AsyncFeedbackClient:
83
91
  self,
84
92
  step_id: str,
85
93
  *,
86
- feedback: typing.Optional[FeedbackType] = None,
94
+ feedback: typing.Optional[FeedbackType] = OMIT,
95
+ tags: typing.Optional[typing.Sequence[str]] = OMIT,
87
96
  request_options: typing.Optional[RequestOptions] = None,
88
97
  ) -> Step:
89
98
  """
90
- Add feedback to a step.
99
+ Modify feedback for a given step.
91
100
 
92
101
  Parameters
93
102
  ----------
94
103
  step_id : str
95
104
 
96
105
  feedback : typing.Optional[FeedbackType]
106
+ Whether this feedback is positive or negative
107
+
108
+ tags : typing.Optional[typing.Sequence[str]]
109
+ Feedback tags to add to the step
97
110
 
98
111
  request_options : typing.Optional[RequestOptions]
99
112
  Request-specific configuration.
@@ -123,5 +136,7 @@ class AsyncFeedbackClient:
123
136
 
124
137
  asyncio.run(main())
125
138
  """
126
- _response = await self._raw_client.create(step_id, feedback=feedback, request_options=request_options)
139
+ _response = await self._raw_client.create(
140
+ step_id, feedback=feedback, tags=tags, request_options=request_options
141
+ )
127
142
  return _response.data
@@ -14,6 +14,9 @@ from ...types.feedback_type import FeedbackType
14
14
  from ...types.http_validation_error import HttpValidationError
15
15
  from ...types.step import Step
16
16
 
17
+ # this is used as the default value for optional parameters
18
+ OMIT = typing.cast(typing.Any, ...)
19
+
17
20
 
18
21
  class RawFeedbackClient:
19
22
  def __init__(self, *, client_wrapper: SyncClientWrapper):
@@ -23,17 +26,22 @@ class RawFeedbackClient:
23
26
  self,
24
27
  step_id: str,
25
28
  *,
26
- feedback: typing.Optional[FeedbackType] = None,
29
+ feedback: typing.Optional[FeedbackType] = OMIT,
30
+ tags: typing.Optional[typing.Sequence[str]] = OMIT,
27
31
  request_options: typing.Optional[RequestOptions] = None,
28
32
  ) -> HttpResponse[Step]:
29
33
  """
30
- Add feedback to a step.
34
+ Modify feedback for a given step.
31
35
 
32
36
  Parameters
33
37
  ----------
34
38
  step_id : str
35
39
 
36
40
  feedback : typing.Optional[FeedbackType]
41
+ Whether this feedback is positive or negative
42
+
43
+ tags : typing.Optional[typing.Sequence[str]]
44
+ Feedback tags to add to the step
37
45
 
38
46
  request_options : typing.Optional[RequestOptions]
39
47
  Request-specific configuration.
@@ -46,10 +54,15 @@ class RawFeedbackClient:
46
54
  _response = self._client_wrapper.httpx_client.request(
47
55
  f"v1/steps/{jsonable_encoder(step_id)}/feedback",
48
56
  method="PATCH",
49
- params={
57
+ json={
50
58
  "feedback": feedback,
59
+ "tags": tags,
60
+ },
61
+ headers={
62
+ "content-type": "application/json",
51
63
  },
52
64
  request_options=request_options,
65
+ omit=OMIT,
53
66
  )
54
67
  try:
55
68
  if 200 <= _response.status_code < 300:
@@ -86,17 +99,22 @@ class AsyncRawFeedbackClient:
86
99
  self,
87
100
  step_id: str,
88
101
  *,
89
- feedback: typing.Optional[FeedbackType] = None,
102
+ feedback: typing.Optional[FeedbackType] = OMIT,
103
+ tags: typing.Optional[typing.Sequence[str]] = OMIT,
90
104
  request_options: typing.Optional[RequestOptions] = None,
91
105
  ) -> AsyncHttpResponse[Step]:
92
106
  """
93
- Add feedback to a step.
107
+ Modify feedback for a given step.
94
108
 
95
109
  Parameters
96
110
  ----------
97
111
  step_id : str
98
112
 
99
113
  feedback : typing.Optional[FeedbackType]
114
+ Whether this feedback is positive or negative
115
+
116
+ tags : typing.Optional[typing.Sequence[str]]
117
+ Feedback tags to add to the step
100
118
 
101
119
  request_options : typing.Optional[RequestOptions]
102
120
  Request-specific configuration.
@@ -109,10 +127,15 @@ class AsyncRawFeedbackClient:
109
127
  _response = await self._client_wrapper.httpx_client.request(
110
128
  f"v1/steps/{jsonable_encoder(step_id)}/feedback",
111
129
  method="PATCH",
112
- params={
130
+ json={
113
131
  "feedback": feedback,
132
+ "tags": tags,
133
+ },
134
+ headers={
135
+ "content-type": "application/json",
114
136
  },
115
137
  request_options=request_options,
138
+ omit=OMIT,
116
139
  )
117
140
  try:
118
141
  if 200 <= _response.status_code < 300:
@@ -0,0 +1,7 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ from .types import MessagesListRequestOrder, MessagesListResponseItem
6
+
7
+ __all__ = ["MessagesListRequestOrder", "MessagesListResponseItem"]
@@ -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