letta-client 0.1.16__py3-none-any.whl → 0.1.19__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.
- letta_client/__init__.py +34 -120
- letta_client/agents/__init__.py +18 -54
- letta_client/agents/archival_memory/client.py +25 -343
- letta_client/agents/client.py +1640 -347
- letta_client/agents/context/client.py +6 -4
- letta_client/agents/core_memory/client.py +95 -624
- letta_client/agents/memory_variables/__init__.py +2 -2
- letta_client/agents/memory_variables/client.py +15 -15
- letta_client/agents/memory_variables/types/__init__.py +2 -2
- letta_client/agents/memory_variables/types/{memory_variables_get_response.py → memory_variables_list_response.py} +1 -1
- letta_client/agents/messages/__init__.py +2 -22
- letta_client/agents/messages/client.py +32 -38
- letta_client/agents/messages/types/__init__.py +2 -21
- letta_client/agents/messages/types/letta_streaming_response.py +16 -139
- letta_client/agents/messages/types/messages_list_response.py +2 -2
- letta_client/agents/sources/client.py +266 -5
- letta_client/agents/tools/client.py +25 -27
- letta_client/agents/types/__init__.py +15 -25
- letta_client/agents/types/agents_search_request_search_item.py +10 -78
- letta_client/agents/types/{agents_search_request_search_item_order_by.py → agents_search_request_search_item_direction.py} +7 -6
- letta_client/agents/types/agents_search_request_search_item_direction_direction.py +5 -0
- letta_client/agents/types/agents_search_request_search_item_direction_value.py +5 -0
- letta_client/agents/types/{agents_search_request_search_item_name.py → agents_search_request_search_item_one.py} +5 -4
- letta_client/agents/types/agents_search_request_search_item_one_operator.py +5 -0
- letta_client/agents/types/{agents_search_request_search_item_tags.py → agents_search_request_search_item_two.py} +2 -1
- letta_client/agents/types/{agents_search_request_search_item_version.py → agents_search_request_search_item_zero.py} +3 -2
- letta_client/blocks/client.py +12 -260
- letta_client/client.py +3 -3
- letta_client/core/client_wrapper.py +1 -1
- letta_client/jobs/client.py +4 -4
- letta_client/providers/client.py +74 -74
- letta_client/runs/client.py +14 -12
- letta_client/sources/client.py +12 -288
- letta_client/tools/client.py +63 -189
- letta_client/types/__init__.py +21 -103
- letta_client/types/agent_state.py +3 -7
- letta_client/types/{assistant_message_output.py → assistant_message.py} +3 -2
- letta_client/types/block.py +2 -6
- letta_client/types/block_update.py +1 -5
- letta_client/types/{archival_memory_summary.py → chat_completion_message_tool_call.py} +7 -7
- letta_client/types/context_window_overview.py +4 -6
- letta_client/types/create_block.py +1 -5
- letta_client/types/embedding_config_embedding_endpoint_type.py +1 -0
- letta_client/types/{function_call_output.py → function.py} +1 -1
- letta_client/types/{function_schema.py → function_definition.py} +2 -1
- letta_client/types/{create_assistant_file_request.py → function_tool.py} +6 -7
- letta_client/types/job.py +1 -5
- letta_client/types/letta_message_union.py +9 -121
- letta_client/types/letta_usage_statistics.py +1 -0
- letta_client/types/llm_config_model_endpoint_type.py +1 -0
- letta_client/types/{letta_schemas_message_message.py → message.py} +9 -6
- letta_client/types/passage.py +1 -5
- letta_client/types/reasoning_message.py +2 -1
- letta_client/types/run.py +1 -5
- letta_client/types/source.py +2 -6
- letta_client/types/{system_message_output.py → system_message.py} +3 -2
- letta_client/types/{letta_schemas_tool_tool.py → tool.py} +1 -1
- letta_client/types/{letta_schemas_letta_message_tool_call.py → tool_call.py} +1 -1
- letta_client/types/tool_call_message.py +2 -1
- letta_client/types/tool_call_message_tool_call.py +2 -2
- letta_client/types/tool_return_message.py +2 -1
- letta_client/types/tool_type.py +2 -1
- letta_client/types/{user_message_output.py → user_message.py} +3 -2
- {letta_client-0.1.16.dist-info → letta_client-0.1.19.dist-info}/METADATA +2 -2
- {letta_client-0.1.16.dist-info → letta_client-0.1.19.dist-info}/RECORD +66 -101
- letta_client/agents/recall_memory/__init__.py +0 -2
- letta_client/agents/recall_memory/client.py +0 -147
- letta_client/agents/types/agents_search_request_search_item_name_operator.py +0 -5
- letta_client/agents/types/agents_search_request_search_item_order_by_direction.py +0 -5
- letta_client/agents/types/agents_search_request_search_item_order_by_value.py +0 -5
- letta_client/types/assistant_file.py +0 -33
- letta_client/types/assistant_message_input.py +0 -23
- letta_client/types/chat_completion_request.py +0 -49
- letta_client/types/chat_completion_request_function_call.py +0 -6
- letta_client/types/chat_completion_request_messages_item.py +0 -11
- letta_client/types/chat_completion_request_stop.py +0 -5
- letta_client/types/chat_completion_request_tool_choice.py +0 -8
- letta_client/types/chat_completion_response.py +0 -32
- letta_client/types/choice.py +0 -25
- letta_client/types/create_assistant_request.py +0 -57
- letta_client/types/delete_assistant_file_response.py +0 -28
- letta_client/types/delete_assistant_response.py +0 -28
- letta_client/types/function_call_input.py +0 -19
- letta_client/types/letta_schemas_openai_chat_completion_request_tool.py +0 -21
- letta_client/types/letta_schemas_openai_chat_completion_request_tool_call.py +0 -24
- letta_client/types/letta_schemas_openai_chat_completion_request_tool_call_function.py +0 -20
- letta_client/types/letta_schemas_openai_chat_completion_response_message.py +0 -24
- letta_client/types/letta_schemas_openai_chat_completion_response_tool_call.py +0 -22
- letta_client/types/letta_schemas_openai_chat_completions_tool_call_function.py +0 -27
- letta_client/types/letta_schemas_openai_chat_completions_tool_call_input.py +0 -29
- letta_client/types/letta_schemas_openai_chat_completions_tool_call_output.py +0 -29
- letta_client/types/log_prob_token.py +0 -21
- letta_client/types/message_content_log_prob.py +0 -23
- letta_client/types/open_ai_assistant.py +0 -67
- letta_client/types/recall_memory_summary.py +0 -22
- letta_client/types/response_format.py +0 -19
- letta_client/types/system_message_input.py +0 -21
- letta_client/types/tool_call_function_output.py +0 -27
- letta_client/types/tool_function_choice.py +0 -21
- letta_client/types/tool_input.py +0 -21
- letta_client/types/tool_message.py +0 -21
- letta_client/types/user_message_input.py +0 -22
- letta_client/types/user_message_input_content.py +0 -5
- {letta_client-0.1.16.dist-info → letta_client-0.1.19.dist-info}/WHEEL +0 -0
letta_client/providers/client.py
CHANGED
|
@@ -156,26 +156,23 @@ class ProvidersClient:
|
|
|
156
156
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
157
157
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
158
158
|
|
|
159
|
-
def
|
|
160
|
-
self, *,
|
|
161
|
-
) ->
|
|
159
|
+
def delete_provider(
|
|
160
|
+
self, *, provider_id: str, request_options: typing.Optional[RequestOptions] = None
|
|
161
|
+
) -> typing.Optional[typing.Any]:
|
|
162
162
|
"""
|
|
163
|
-
|
|
163
|
+
Delete an existing custom provider
|
|
164
164
|
|
|
165
165
|
Parameters
|
|
166
166
|
----------
|
|
167
|
-
|
|
168
|
-
The
|
|
169
|
-
|
|
170
|
-
api_key : str
|
|
171
|
-
API key used for requests to the provider.
|
|
167
|
+
provider_id : str
|
|
168
|
+
The provider_id key to be deleted.
|
|
172
169
|
|
|
173
170
|
request_options : typing.Optional[RequestOptions]
|
|
174
171
|
Request-specific configuration.
|
|
175
172
|
|
|
176
173
|
Returns
|
|
177
174
|
-------
|
|
178
|
-
|
|
175
|
+
typing.Optional[typing.Any]
|
|
179
176
|
Successful Response
|
|
180
177
|
|
|
181
178
|
Examples
|
|
@@ -185,30 +182,24 @@ class ProvidersClient:
|
|
|
185
182
|
client = Letta(
|
|
186
183
|
token="YOUR_TOKEN",
|
|
187
184
|
)
|
|
188
|
-
client.providers.
|
|
189
|
-
|
|
190
|
-
api_key="api_key",
|
|
185
|
+
client.providers.delete_provider(
|
|
186
|
+
provider_id="provider_id",
|
|
191
187
|
)
|
|
192
188
|
"""
|
|
193
189
|
_response = self._client_wrapper.httpx_client.request(
|
|
194
190
|
"v1/providers/",
|
|
195
|
-
method="
|
|
196
|
-
|
|
197
|
-
"
|
|
198
|
-
"api_key": api_key,
|
|
199
|
-
},
|
|
200
|
-
headers={
|
|
201
|
-
"content-type": "application/json",
|
|
191
|
+
method="DELETE",
|
|
192
|
+
params={
|
|
193
|
+
"provider_id": provider_id,
|
|
202
194
|
},
|
|
203
195
|
request_options=request_options,
|
|
204
|
-
omit=OMIT,
|
|
205
196
|
)
|
|
206
197
|
try:
|
|
207
198
|
if 200 <= _response.status_code < 300:
|
|
208
199
|
return typing.cast(
|
|
209
|
-
|
|
200
|
+
typing.Optional[typing.Any],
|
|
210
201
|
construct_type(
|
|
211
|
-
type_=
|
|
202
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
212
203
|
object_=_response.json(),
|
|
213
204
|
),
|
|
214
205
|
)
|
|
@@ -227,23 +218,26 @@ class ProvidersClient:
|
|
|
227
218
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
228
219
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
229
220
|
|
|
230
|
-
def
|
|
231
|
-
self, *,
|
|
232
|
-
) ->
|
|
221
|
+
def modify_provider(
|
|
222
|
+
self, *, id: str, api_key: str, request_options: typing.Optional[RequestOptions] = None
|
|
223
|
+
) -> Provider:
|
|
233
224
|
"""
|
|
234
|
-
|
|
225
|
+
Update an existing custom provider
|
|
235
226
|
|
|
236
227
|
Parameters
|
|
237
228
|
----------
|
|
238
|
-
|
|
239
|
-
The
|
|
229
|
+
id : str
|
|
230
|
+
The id of the provider to update.
|
|
231
|
+
|
|
232
|
+
api_key : str
|
|
233
|
+
API key used for requests to the provider.
|
|
240
234
|
|
|
241
235
|
request_options : typing.Optional[RequestOptions]
|
|
242
236
|
Request-specific configuration.
|
|
243
237
|
|
|
244
238
|
Returns
|
|
245
239
|
-------
|
|
246
|
-
|
|
240
|
+
Provider
|
|
247
241
|
Successful Response
|
|
248
242
|
|
|
249
243
|
Examples
|
|
@@ -253,24 +247,30 @@ class ProvidersClient:
|
|
|
253
247
|
client = Letta(
|
|
254
248
|
token="YOUR_TOKEN",
|
|
255
249
|
)
|
|
256
|
-
client.providers.
|
|
257
|
-
|
|
250
|
+
client.providers.modify_provider(
|
|
251
|
+
id="id",
|
|
252
|
+
api_key="api_key",
|
|
258
253
|
)
|
|
259
254
|
"""
|
|
260
255
|
_response = self._client_wrapper.httpx_client.request(
|
|
261
256
|
"v1/providers/",
|
|
262
|
-
method="
|
|
263
|
-
|
|
264
|
-
"
|
|
257
|
+
method="PATCH",
|
|
258
|
+
json={
|
|
259
|
+
"id": id,
|
|
260
|
+
"api_key": api_key,
|
|
261
|
+
},
|
|
262
|
+
headers={
|
|
263
|
+
"content-type": "application/json",
|
|
265
264
|
},
|
|
266
265
|
request_options=request_options,
|
|
266
|
+
omit=OMIT,
|
|
267
267
|
)
|
|
268
268
|
try:
|
|
269
269
|
if 200 <= _response.status_code < 300:
|
|
270
270
|
return typing.cast(
|
|
271
|
-
|
|
271
|
+
Provider,
|
|
272
272
|
construct_type(
|
|
273
|
-
type_=
|
|
273
|
+
type_=Provider, # type: ignore
|
|
274
274
|
object_=_response.json(),
|
|
275
275
|
),
|
|
276
276
|
)
|
|
@@ -447,26 +447,23 @@ class AsyncProvidersClient:
|
|
|
447
447
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
448
448
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
449
449
|
|
|
450
|
-
async def
|
|
451
|
-
self, *,
|
|
452
|
-
) ->
|
|
450
|
+
async def delete_provider(
|
|
451
|
+
self, *, provider_id: str, request_options: typing.Optional[RequestOptions] = None
|
|
452
|
+
) -> typing.Optional[typing.Any]:
|
|
453
453
|
"""
|
|
454
|
-
|
|
454
|
+
Delete an existing custom provider
|
|
455
455
|
|
|
456
456
|
Parameters
|
|
457
457
|
----------
|
|
458
|
-
|
|
459
|
-
The
|
|
460
|
-
|
|
461
|
-
api_key : str
|
|
462
|
-
API key used for requests to the provider.
|
|
458
|
+
provider_id : str
|
|
459
|
+
The provider_id key to be deleted.
|
|
463
460
|
|
|
464
461
|
request_options : typing.Optional[RequestOptions]
|
|
465
462
|
Request-specific configuration.
|
|
466
463
|
|
|
467
464
|
Returns
|
|
468
465
|
-------
|
|
469
|
-
|
|
466
|
+
typing.Optional[typing.Any]
|
|
470
467
|
Successful Response
|
|
471
468
|
|
|
472
469
|
Examples
|
|
@@ -481,9 +478,8 @@ class AsyncProvidersClient:
|
|
|
481
478
|
|
|
482
479
|
|
|
483
480
|
async def main() -> None:
|
|
484
|
-
await client.providers.
|
|
485
|
-
|
|
486
|
-
api_key="api_key",
|
|
481
|
+
await client.providers.delete_provider(
|
|
482
|
+
provider_id="provider_id",
|
|
487
483
|
)
|
|
488
484
|
|
|
489
485
|
|
|
@@ -491,23 +487,18 @@ class AsyncProvidersClient:
|
|
|
491
487
|
"""
|
|
492
488
|
_response = await self._client_wrapper.httpx_client.request(
|
|
493
489
|
"v1/providers/",
|
|
494
|
-
method="
|
|
495
|
-
|
|
496
|
-
"
|
|
497
|
-
"api_key": api_key,
|
|
498
|
-
},
|
|
499
|
-
headers={
|
|
500
|
-
"content-type": "application/json",
|
|
490
|
+
method="DELETE",
|
|
491
|
+
params={
|
|
492
|
+
"provider_id": provider_id,
|
|
501
493
|
},
|
|
502
494
|
request_options=request_options,
|
|
503
|
-
omit=OMIT,
|
|
504
495
|
)
|
|
505
496
|
try:
|
|
506
497
|
if 200 <= _response.status_code < 300:
|
|
507
498
|
return typing.cast(
|
|
508
|
-
|
|
499
|
+
typing.Optional[typing.Any],
|
|
509
500
|
construct_type(
|
|
510
|
-
type_=
|
|
501
|
+
type_=typing.Optional[typing.Any], # type: ignore
|
|
511
502
|
object_=_response.json(),
|
|
512
503
|
),
|
|
513
504
|
)
|
|
@@ -526,23 +517,26 @@ class AsyncProvidersClient:
|
|
|
526
517
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
527
518
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
528
519
|
|
|
529
|
-
async def
|
|
530
|
-
self, *,
|
|
531
|
-
) ->
|
|
520
|
+
async def modify_provider(
|
|
521
|
+
self, *, id: str, api_key: str, request_options: typing.Optional[RequestOptions] = None
|
|
522
|
+
) -> Provider:
|
|
532
523
|
"""
|
|
533
|
-
|
|
524
|
+
Update an existing custom provider
|
|
534
525
|
|
|
535
526
|
Parameters
|
|
536
527
|
----------
|
|
537
|
-
|
|
538
|
-
The
|
|
528
|
+
id : str
|
|
529
|
+
The id of the provider to update.
|
|
530
|
+
|
|
531
|
+
api_key : str
|
|
532
|
+
API key used for requests to the provider.
|
|
539
533
|
|
|
540
534
|
request_options : typing.Optional[RequestOptions]
|
|
541
535
|
Request-specific configuration.
|
|
542
536
|
|
|
543
537
|
Returns
|
|
544
538
|
-------
|
|
545
|
-
|
|
539
|
+
Provider
|
|
546
540
|
Successful Response
|
|
547
541
|
|
|
548
542
|
Examples
|
|
@@ -557,8 +551,9 @@ class AsyncProvidersClient:
|
|
|
557
551
|
|
|
558
552
|
|
|
559
553
|
async def main() -> None:
|
|
560
|
-
await client.providers.
|
|
561
|
-
|
|
554
|
+
await client.providers.modify_provider(
|
|
555
|
+
id="id",
|
|
556
|
+
api_key="api_key",
|
|
562
557
|
)
|
|
563
558
|
|
|
564
559
|
|
|
@@ -566,18 +561,23 @@ class AsyncProvidersClient:
|
|
|
566
561
|
"""
|
|
567
562
|
_response = await self._client_wrapper.httpx_client.request(
|
|
568
563
|
"v1/providers/",
|
|
569
|
-
method="
|
|
570
|
-
|
|
571
|
-
"
|
|
564
|
+
method="PATCH",
|
|
565
|
+
json={
|
|
566
|
+
"id": id,
|
|
567
|
+
"api_key": api_key,
|
|
568
|
+
},
|
|
569
|
+
headers={
|
|
570
|
+
"content-type": "application/json",
|
|
572
571
|
},
|
|
573
572
|
request_options=request_options,
|
|
573
|
+
omit=OMIT,
|
|
574
574
|
)
|
|
575
575
|
try:
|
|
576
576
|
if 200 <= _response.status_code < 300:
|
|
577
577
|
return typing.cast(
|
|
578
|
-
|
|
578
|
+
Provider,
|
|
579
579
|
construct_type(
|
|
580
|
-
type_=
|
|
580
|
+
type_=Provider, # type: ignore
|
|
581
581
|
object_=_response.json(),
|
|
582
582
|
),
|
|
583
583
|
)
|
letta_client/runs/client.py
CHANGED
|
@@ -124,7 +124,7 @@ class RunsClient:
|
|
|
124
124
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
125
125
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
126
126
|
|
|
127
|
-
def
|
|
127
|
+
def retrieve_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Run:
|
|
128
128
|
"""
|
|
129
129
|
Get the status of a run.
|
|
130
130
|
|
|
@@ -147,7 +147,7 @@ class RunsClient:
|
|
|
147
147
|
client = Letta(
|
|
148
148
|
token="YOUR_TOKEN",
|
|
149
149
|
)
|
|
150
|
-
client.runs.
|
|
150
|
+
client.runs.retrieve_run(
|
|
151
151
|
run_id="run_id",
|
|
152
152
|
)
|
|
153
153
|
"""
|
|
@@ -236,7 +236,7 @@ class RunsClient:
|
|
|
236
236
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
237
237
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
238
238
|
|
|
239
|
-
def
|
|
239
|
+
def list_run_messages(
|
|
240
240
|
self,
|
|
241
241
|
run_id: str,
|
|
242
242
|
*,
|
|
@@ -292,7 +292,7 @@ class RunsClient:
|
|
|
292
292
|
client = Letta(
|
|
293
293
|
token="YOUR_TOKEN",
|
|
294
294
|
)
|
|
295
|
-
client.runs.
|
|
295
|
+
client.runs.list_run_messages(
|
|
296
296
|
run_id="run_id",
|
|
297
297
|
)
|
|
298
298
|
"""
|
|
@@ -331,7 +331,9 @@ class RunsClient:
|
|
|
331
331
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
332
332
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
333
333
|
|
|
334
|
-
def
|
|
334
|
+
def retrieve_run_usage(
|
|
335
|
+
self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
336
|
+
) -> UsageStatistics:
|
|
335
337
|
"""
|
|
336
338
|
Get usage statistics for a run.
|
|
337
339
|
|
|
@@ -354,7 +356,7 @@ class RunsClient:
|
|
|
354
356
|
client = Letta(
|
|
355
357
|
token="YOUR_TOKEN",
|
|
356
358
|
)
|
|
357
|
-
client.runs.
|
|
359
|
+
client.runs.retrieve_run_usage(
|
|
358
360
|
run_id="run_id",
|
|
359
361
|
)
|
|
360
362
|
"""
|
|
@@ -512,7 +514,7 @@ class AsyncRunsClient:
|
|
|
512
514
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
513
515
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
514
516
|
|
|
515
|
-
async def
|
|
517
|
+
async def retrieve_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Run:
|
|
516
518
|
"""
|
|
517
519
|
Get the status of a run.
|
|
518
520
|
|
|
@@ -540,7 +542,7 @@ class AsyncRunsClient:
|
|
|
540
542
|
|
|
541
543
|
|
|
542
544
|
async def main() -> None:
|
|
543
|
-
await client.runs.
|
|
545
|
+
await client.runs.retrieve_run(
|
|
544
546
|
run_id="run_id",
|
|
545
547
|
)
|
|
546
548
|
|
|
@@ -640,7 +642,7 @@ class AsyncRunsClient:
|
|
|
640
642
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
641
643
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
642
644
|
|
|
643
|
-
async def
|
|
645
|
+
async def list_run_messages(
|
|
644
646
|
self,
|
|
645
647
|
run_id: str,
|
|
646
648
|
*,
|
|
@@ -701,7 +703,7 @@ class AsyncRunsClient:
|
|
|
701
703
|
|
|
702
704
|
|
|
703
705
|
async def main() -> None:
|
|
704
|
-
await client.runs.
|
|
706
|
+
await client.runs.list_run_messages(
|
|
705
707
|
run_id="run_id",
|
|
706
708
|
)
|
|
707
709
|
|
|
@@ -743,7 +745,7 @@ class AsyncRunsClient:
|
|
|
743
745
|
raise ApiError(status_code=_response.status_code, body=_response.text)
|
|
744
746
|
raise ApiError(status_code=_response.status_code, body=_response_json)
|
|
745
747
|
|
|
746
|
-
async def
|
|
748
|
+
async def retrieve_run_usage(
|
|
747
749
|
self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
748
750
|
) -> UsageStatistics:
|
|
749
751
|
"""
|
|
@@ -773,7 +775,7 @@ class AsyncRunsClient:
|
|
|
773
775
|
|
|
774
776
|
|
|
775
777
|
async def main() -> None:
|
|
776
|
-
await client.runs.
|
|
778
|
+
await client.runs.retrieve_run_usage(
|
|
777
779
|
run_id="run_id",
|
|
778
780
|
)
|
|
779
781
|
|