letta-client 0.1.324__py3-none-any.whl → 1.0.0a2__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 (251) hide show
  1. letta_client/__init__.py +229 -59
  2. letta_client/agents/__init__.py +15 -17
  3. letta_client/agents/blocks/__init__.py +3 -0
  4. letta_client/agents/blocks/client.py +77 -4
  5. letta_client/agents/blocks/raw_client.py +63 -2
  6. letta_client/agents/blocks/types/__init__.py +7 -0
  7. letta_client/agents/blocks/types/blocks_list_request_order.py +5 -0
  8. letta_client/agents/client.py +46 -13
  9. letta_client/agents/files/__init__.py +3 -0
  10. letta_client/agents/files/client.py +71 -10
  11. letta_client/agents/files/raw_client.py +51 -10
  12. letta_client/agents/files/types/__init__.py +7 -0
  13. letta_client/{types/tool_return_status.py → agents/files/types/files_list_request_order.py} +1 -1
  14. letta_client/agents/folders/__init__.py +3 -0
  15. letta_client/agents/folders/client.py +77 -4
  16. letta_client/agents/folders/raw_client.py +63 -2
  17. letta_client/agents/folders/types/__init__.py +7 -0
  18. letta_client/agents/folders/types/folders_list_request_order.py +5 -0
  19. letta_client/agents/groups/__init__.py +3 -0
  20. letta_client/agents/groups/client.py +71 -2
  21. letta_client/agents/groups/raw_client.py +51 -0
  22. letta_client/agents/groups/types/__init__.py +7 -0
  23. letta_client/agents/groups/types/groups_list_request_order.py +5 -0
  24. letta_client/agents/messages/__init__.py +2 -0
  25. letta_client/agents/messages/client.py +57 -18
  26. letta_client/agents/messages/raw_client.py +37 -18
  27. letta_client/agents/messages/types/__init__.py +2 -0
  28. letta_client/agents/messages/types/messages_list_request_order.py +5 -0
  29. letta_client/agents/passages/client.py +29 -0
  30. letta_client/agents/raw_client.py +4 -4
  31. letta_client/agents/sources/__init__.py +3 -0
  32. letta_client/agents/sources/client.py +77 -4
  33. letta_client/agents/sources/raw_client.py +63 -2
  34. letta_client/agents/sources/types/__init__.py +7 -0
  35. letta_client/agents/sources/types/sources_list_request_order.py +5 -0
  36. letta_client/agents/tools/__init__.py +3 -0
  37. letta_client/agents/tools/client.py +77 -4
  38. letta_client/agents/tools/raw_client.py +63 -2
  39. letta_client/agents/tools/types/__init__.py +7 -0
  40. letta_client/agents/tools/types/tools_list_request_order.py +5 -0
  41. letta_client/archives/client.py +16 -2
  42. letta_client/base_client.py +3 -0
  43. letta_client/batches/client.py +12 -2
  44. letta_client/batches/messages/client.py +10 -0
  45. letta_client/blocks/agents/client.py +8 -0
  46. letta_client/blocks/client.py +32 -2
  47. letta_client/chat/__init__.py +7 -0
  48. letta_client/chat/client.py +255 -0
  49. letta_client/chat/raw_client.py +269 -0
  50. letta_client/chat/types/__init__.py +8 -0
  51. letta_client/chat/types/chat_completion_request_messages_item.py +19 -0
  52. letta_client/chat/types/chat_completion_request_stop.py +5 -0
  53. letta_client/client_side_access_tokens/client.py +10 -2
  54. letta_client/core/client_wrapper.py +2 -2
  55. letta_client/errors/__init__.py +2 -0
  56. letta_client/errors/gone_error.py +10 -0
  57. letta_client/folders/agents/client.py +8 -0
  58. letta_client/folders/client.py +20 -4
  59. letta_client/folders/files/client.py +14 -0
  60. letta_client/folders/passages/client.py +8 -0
  61. letta_client/groups/client.py +16 -2
  62. letta_client/groups/messages/client.py +14 -0
  63. letta_client/identities/agents/client.py +8 -0
  64. letta_client/identities/blocks/client.py +8 -0
  65. letta_client/identities/client.py +20 -2
  66. letta_client/jobs/__init__.py +3 -0
  67. letta_client/jobs/client.py +61 -12
  68. letta_client/jobs/raw_client.py +29 -8
  69. letta_client/jobs/types/__init__.py +7 -0
  70. letta_client/jobs/types/jobs_list_request_order.py +5 -0
  71. letta_client/models/client.py +8 -2
  72. letta_client/projects/client.py +10 -2
  73. letta_client/providers/client.py +90 -2
  74. letta_client/providers/raw_client.py +102 -0
  75. letta_client/runs/__init__.py +11 -2
  76. letta_client/runs/client.py +152 -20
  77. letta_client/runs/messages/client.py +30 -2
  78. letta_client/runs/messages/raw_client.py +10 -0
  79. letta_client/runs/raw_client.py +146 -16
  80. letta_client/runs/steps/__init__.py +3 -0
  81. letta_client/runs/steps/client.py +39 -30
  82. letta_client/runs/steps/raw_client.py +19 -28
  83. letta_client/runs/steps/types/__init__.py +7 -0
  84. letta_client/runs/steps/types/steps_list_request_order.py +5 -0
  85. letta_client/runs/types/__init__.py +2 -1
  86. letta_client/runs/types/runs_list_request_order.py +5 -0
  87. letta_client/sources/client.py +8 -2
  88. letta_client/sources/files/client.py +12 -0
  89. letta_client/sources/passages/client.py +6 -0
  90. letta_client/steps/client.py +26 -2
  91. letta_client/steps/messages/client.py +8 -0
  92. letta_client/tags/client.py +16 -2
  93. letta_client/templates/__init__.py +88 -36
  94. letta_client/templates/client.py +165 -4
  95. letta_client/templates/raw_client.py +205 -2
  96. letta_client/templates/types/__init__.py +176 -72
  97. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_llm_config.py +4 -0
  98. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_llm_config_display_name.py +14 -0
  99. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_llm_config_display_name_item.py +5 -0
  100. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_secrets_item.py +4 -0
  101. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_secrets_item_value_enc.py +14 -0
  102. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_secrets_item_value_enc_item.py +5 -0
  103. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_exec_environment_variables_item.py +6 -0
  104. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_exec_environment_variables_item_value_enc.py +16 -0
  105. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_exec_environment_variables_item_value_enc_item.py +7 -0
  106. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_item_one.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_args.py} +11 -7
  107. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_one_prompt_template.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_args_args.py} +4 -5
  108. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_args_args_item.py +7 -0
  109. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_zero_prompt_template.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_args_prompt_template.py} +4 -4
  110. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_one_prompt_template_item.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_args_prompt_template_item.py} +1 -1
  111. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_zero_type.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_args_type.py} +1 -1
  112. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_zero.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes.py} +13 -7
  113. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_child_arg_nodes.py +16 -0
  114. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_child_arg_nodes_item.py +12 -0
  115. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_child_arg_nodes_item_args.py +17 -0
  116. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_child_arg_nodes_item_args_item.py +7 -0
  117. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_one.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_child_arg_nodes_item_item.py} +8 -10
  118. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_child_arg_nodes_item_item_args.py +17 -0
  119. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_child_arg_nodes_item_item_args_item.py +7 -0
  120. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_item_zero_prompt_template.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_prompt_template.py} +4 -4
  121. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_item_one_prompt_template_item.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_prompt_template_item.py} +1 -1
  122. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_item_zero_type.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_child_arg_nodes_type.py} +1 -1
  123. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item.py +8 -8
  124. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_item_zero.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_item_args.py} +11 -8
  125. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_args_args.py +13 -0
  126. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_args_args_item.py +7 -0
  127. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_item_one_prompt_template.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_item_args_prompt_template.py} +4 -4
  128. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_item_zero_prompt_template_item.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_item_args_prompt_template_item.py} +1 -1
  129. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_item_one_type.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_item_args_type.py} +1 -1
  130. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes.py +37 -0
  131. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_child_arg_nodes.py +18 -0
  132. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_child_arg_nodes_item.py +12 -0
  133. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_child_arg_nodes_item_args.py +17 -0
  134. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_child_arg_nodes_item_args_item.py +7 -0
  135. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_child_arg_nodes_item_item.py +28 -0
  136. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_child_arg_nodes_item_item_args.py +17 -0
  137. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_child_arg_nodes_item_item_args_item.py +7 -0
  138. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_prompt_template.py +18 -0
  139. letta_client/templates/types/{templates_create_agents_from_template_response_agents_item_tool_rules_item_zero_prompt_template_item.py → templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_prompt_template_item.py} +1 -1
  140. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_item_child_arg_nodes_type.py +7 -0
  141. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tools_item_tool_type.py +1 -1
  142. letta_client/templates/types/templates_create_template_request_agent_file.py +5 -0
  143. letta_client/templates/types/templates_get_template_snapshot_response_agents_item_tool_rules_item.py +8 -8
  144. letta_client/templates/types/{templates_get_template_snapshot_response_agents_item_tool_rules_item_one.py → templates_get_template_snapshot_response_agents_item_tool_rules_item_args.py} +2 -1
  145. letta_client/templates/types/templates_get_template_snapshot_response_agents_item_tool_rules_item_child_arg_nodes.py +29 -0
  146. letta_client/templates/types/{templates_get_template_snapshot_response_agents_item_tool_rules_item_zero.py → templates_get_template_snapshot_response_agents_item_tool_rules_item_child_arg_nodes_child_arg_nodes_item.py} +3 -5
  147. letta_client/templates/types/templates_update_current_template_from_agent_file_response.py +21 -0
  148. letta_client/tools/client.py +30 -220
  149. letta_client/tools/raw_client.py +0 -292
  150. letta_client/types/__init__.py +134 -22
  151. letta_client/types/agent_environment_variable.py +5 -0
  152. letta_client/types/{action_parameters_model.py → annotation.py} +4 -10
  153. letta_client/types/{action_response_model.py → annotation_url_citation.py} +4 -9
  154. letta_client/types/approval_create.py +8 -2
  155. letta_client/types/approval_create_approvals_item.py +8 -0
  156. letta_client/types/approval_response_message.py +8 -2
  157. letta_client/types/approval_response_message_approvals_item.py +8 -0
  158. letta_client/types/approval_return.py +34 -0
  159. letta_client/{agents/templates/types/templates_migrate_response.py → types/audio.py} +4 -4
  160. letta_client/types/chat_completion.py +30 -0
  161. letta_client/types/chat_completion_assistant_message_param.py +30 -0
  162. letta_client/types/chat_completion_assistant_message_param_content.py +9 -0
  163. letta_client/types/chat_completion_assistant_message_param_content_item.py +10 -0
  164. letta_client/types/chat_completion_assistant_message_param_tool_calls_item.py +10 -0
  165. letta_client/types/chat_completion_audio.py +23 -0
  166. letta_client/types/chat_completion_content_part_image_param.py +22 -0
  167. letta_client/types/chat_completion_content_part_input_audio_param.py +22 -0
  168. letta_client/types/chat_completion_content_part_refusal_param.py +21 -0
  169. letta_client/types/chat_completion_content_part_text_param.py +21 -0
  170. letta_client/types/chat_completion_developer_message_param.py +23 -0
  171. letta_client/types/chat_completion_developer_message_param_content.py +7 -0
  172. letta_client/types/chat_completion_function_message_param.py +22 -0
  173. letta_client/types/chat_completion_message.py +30 -0
  174. letta_client/types/chat_completion_message_custom_tool_call.py +23 -0
  175. letta_client/types/chat_completion_message_custom_tool_call_param.py +23 -0
  176. letta_client/types/chat_completion_message_function_tool_call_input.py +25 -0
  177. letta_client/types/{chat_completion_message_function_tool_call.py → chat_completion_message_function_tool_call_output.py} +3 -3
  178. letta_client/types/chat_completion_message_function_tool_call_param.py +25 -0
  179. letta_client/types/chat_completion_message_tool_calls_item.py +10 -0
  180. letta_client/types/chat_completion_service_tier.py +5 -0
  181. letta_client/types/chat_completion_system_message_param.py +23 -0
  182. letta_client/types/chat_completion_system_message_param_content.py +7 -0
  183. letta_client/types/chat_completion_token_logprob.py +24 -0
  184. letta_client/types/chat_completion_tool_message_param.py +23 -0
  185. letta_client/types/chat_completion_tool_message_param_content.py +7 -0
  186. letta_client/types/chat_completion_user_message_param.py +23 -0
  187. letta_client/types/chat_completion_user_message_param_content.py +7 -0
  188. letta_client/types/chat_completion_user_message_param_content_item.py +15 -0
  189. letta_client/types/child_tool_rule.py +6 -0
  190. letta_client/types/choice.py +26 -0
  191. letta_client/types/choice_finish_reason.py +7 -0
  192. letta_client/types/choice_logprobs.py +22 -0
  193. letta_client/types/completion_tokens_details.py +23 -0
  194. letta_client/types/{auth_scheme_field.py → completion_usage.py} +8 -13
  195. letta_client/types/custom_input.py +21 -0
  196. letta_client/types/custom_output.py +21 -0
  197. letta_client/types/file.py +22 -0
  198. letta_client/types/file_file.py +22 -0
  199. letta_client/types/function_call_input.py +21 -0
  200. letta_client/types/function_call_output.py +21 -0
  201. letta_client/types/{function.py → function_output.py} +1 -1
  202. letta_client/types/image_url.py +22 -0
  203. letta_client/types/image_url_detail.py +5 -0
  204. letta_client/types/init_tool_rule.py +5 -0
  205. letta_client/types/input_audio.py +22 -0
  206. letta_client/types/input_audio_format.py +5 -0
  207. letta_client/types/internal_template_agent_create.py +2 -2
  208. letta_client/types/letta_schemas_agent_file_agent_schema.py +2 -2
  209. letta_client/types/letta_schemas_agent_file_message_schema.py +27 -4
  210. letta_client/types/letta_schemas_agent_file_message_schema_approvals_item.py +8 -0
  211. letta_client/types/letta_schemas_letta_message_tool_return.py +26 -0
  212. letta_client/types/letta_schemas_letta_message_tool_return_status.py +5 -0
  213. letta_client/types/{tool_return.py → letta_schemas_message_tool_return.py} +9 -3
  214. letta_client/types/letta_schemas_message_tool_return_status.py +5 -0
  215. letta_client/types/llm_config.py +5 -0
  216. letta_client/types/message.py +15 -4
  217. letta_client/types/message_approvals_item.py +8 -0
  218. letta_client/types/omitted_reasoning_content.py +4 -0
  219. letta_client/types/openai_types_chat_chat_completion_message_function_tool_call_function.py +21 -0
  220. letta_client/types/openai_types_chat_chat_completion_message_function_tool_call_param_function.py +21 -0
  221. letta_client/types/prompt_tokens_details.py +21 -0
  222. letta_client/types/provider.py +10 -0
  223. letta_client/types/run.py +28 -41
  224. letta_client/types/run_metrics.py +58 -0
  225. letta_client/types/run_status.py +5 -0
  226. letta_client/types/sandbox_environment_variable.py +5 -0
  227. letta_client/types/step.py +2 -2
  228. letta_client/types/step_metrics.py +2 -2
  229. letta_client/types/text_content.py +5 -0
  230. letta_client/types/tool_call_content.py +5 -0
  231. letta_client/types/tool_call_message.py +2 -0
  232. letta_client/types/tool_call_message_tool_calls.py +8 -0
  233. letta_client/types/tool_call_node.py +35 -0
  234. letta_client/types/tool_return_message.py +8 -5
  235. letta_client/types/tool_type.py +1 -1
  236. letta_client/types/top_logprob.py +22 -0
  237. letta_client/voice/client.py +14 -0
  238. letta_client/voice/raw_client.py +37 -0
  239. letta_client-1.0.0a2.dist-info/METADATA +422 -0
  240. {letta_client-0.1.324.dist-info → letta_client-1.0.0a2.dist-info}/RECORD +241 -141
  241. letta_client/agents/templates/__init__.py +0 -7
  242. letta_client/agents/templates/client.py +0 -307
  243. letta_client/agents/templates/raw_client.py +0 -275
  244. letta_client/agents/templates/types/__init__.py +0 -7
  245. letta_client/templates/types/templates_create_agents_from_template_response_agents_item_tool_rules_item_one_type.py +0 -5
  246. letta_client/types/action_model.py +0 -39
  247. letta_client/types/app_auth_scheme.py +0 -35
  248. letta_client/types/app_auth_scheme_auth_mode.py +0 -19
  249. letta_client/types/app_model.py +0 -45
  250. letta_client-0.1.324.dist-info/METADATA +0 -211
  251. {letta_client-0.1.324.dist-info → letta_client-1.0.0a2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,22 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+ from .file_file import FileFile
9
+
10
+
11
+ class File(UncheckedBaseModel):
12
+ file: FileFile
13
+ type: typing.Literal["file"] = "file"
14
+
15
+ if IS_PYDANTIC_V2:
16
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
17
+ else:
18
+
19
+ class Config:
20
+ frozen = True
21
+ smart_union = True
22
+ extra = pydantic.Extra.allow
@@ -0,0 +1,22 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+
9
+
10
+ class FileFile(UncheckedBaseModel):
11
+ file_data: typing.Optional[str] = None
12
+ file_id: typing.Optional[str] = None
13
+ filename: typing.Optional[str] = None
14
+
15
+ if IS_PYDANTIC_V2:
16
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
17
+ else:
18
+
19
+ class Config:
20
+ frozen = True
21
+ smart_union = True
22
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+
9
+
10
+ class FunctionCallInput(UncheckedBaseModel):
11
+ arguments: str
12
+ name: str
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+
9
+
10
+ class FunctionCallOutput(UncheckedBaseModel):
11
+ arguments: str
12
+ name: str
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -7,7 +7,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
7
  from ..core.unchecked_base_model import UncheckedBaseModel
8
8
 
9
9
 
10
- class Function(UncheckedBaseModel):
10
+ class FunctionOutput(UncheckedBaseModel):
11
11
  arguments: str
12
12
  name: str
13
13
 
@@ -0,0 +1,22 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+ from .image_url_detail import ImageUrlDetail
9
+
10
+
11
+ class ImageUrl(UncheckedBaseModel):
12
+ url: str
13
+ detail: typing.Optional[ImageUrlDetail] = None
14
+
15
+ if IS_PYDANTIC_V2:
16
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
17
+ else:
18
+
19
+ class Config:
20
+ frozen = True
21
+ smart_union = True
22
+ extra = pydantic.Extra.allow
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ ImageUrlDetail = typing.Union[typing.Literal["auto", "low", "high"], typing.Any]
@@ -23,6 +23,11 @@ class InitToolRule(UncheckedBaseModel):
23
23
  Optional template string (ignored). Rendering uses fast built-in formatting for performance.
24
24
  """
25
25
 
26
+ args: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None)
27
+ """
28
+ Optional prefilled arguments for this tool. When present, these values will override any LLM-provided arguments with the same keys during invocation. Keys must match the tool's parameter names and values must satisfy the tool's JSON schema. Supports partial prefill; non-overlapping parameters are left to the model.
29
+ """
30
+
26
31
  if IS_PYDANTIC_V2:
27
32
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
28
33
  else:
@@ -0,0 +1,22 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+ from .input_audio_format import InputAudioFormat
9
+
10
+
11
+ class InputAudio(UncheckedBaseModel):
12
+ data: str
13
+ format: InputAudioFormat
14
+
15
+ if IS_PYDANTIC_V2:
16
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
17
+ else:
18
+
19
+ class Config:
20
+ frozen = True
21
+ smart_union = True
22
+ extra = pydantic.Extra.allow
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ InputAudioFormat = typing.Union[typing.Literal["wav", "mp3"], typing.Any]
@@ -156,12 +156,12 @@ class InternalTemplateAgentCreate(UncheckedBaseModel):
156
156
 
157
157
  from_template: typing.Optional[str] = pydantic.Field(default=None)
158
158
  """
159
- The template id used to configure the agent
159
+ Deprecated: please use the 'create agents from a template' endpoint instead.
160
160
  """
161
161
 
162
162
  template: typing.Optional[bool] = pydantic.Field(default=None)
163
163
  """
164
- Whether the agent is a template
164
+ Deprecated: No longer used
165
165
  """
166
166
 
167
167
  project: typing.Optional[str] = pydantic.Field(default=None)
@@ -160,12 +160,12 @@ class LettaSchemasAgentFileAgentSchema(UncheckedBaseModel):
160
160
 
161
161
  from_template: typing.Optional[str] = pydantic.Field(default=None)
162
162
  """
163
- The template id used to configure the agent
163
+ Deprecated: please use the 'create agents from a template' endpoint instead.
164
164
  """
165
165
 
166
166
  template: typing.Optional[bool] = pydantic.Field(default=None)
167
167
  """
168
- Whether the agent is a template
168
+ Deprecated: No longer used
169
169
  """
170
170
 
171
171
  project: typing.Optional[str] = pydantic.Field(default=None)
@@ -6,10 +6,11 @@ import typing
6
6
  import pydantic
7
7
  from ..core.pydantic_utilities import IS_PYDANTIC_V2
8
8
  from ..core.unchecked_base_model import UncheckedBaseModel
9
- from .chat_completion_message_function_tool_call import ChatCompletionMessageFunctionToolCall
9
+ from .chat_completion_message_function_tool_call_input import ChatCompletionMessageFunctionToolCallInput
10
+ from .letta_schemas_agent_file_message_schema_approvals_item import LettaSchemasAgentFileMessageSchemaApprovalsItem
10
11
  from .letta_schemas_agent_file_message_schema_content import LettaSchemasAgentFileMessageSchemaContent
12
+ from .letta_schemas_message_tool_return import LettaSchemasMessageToolReturn
11
13
  from .message_role import MessageRole
12
- from .tool_return import ToolReturn
13
14
 
14
15
 
15
16
  class LettaSchemasAgentFileMessageSchema(UncheckedBaseModel):
@@ -72,7 +73,7 @@ class LettaSchemasAgentFileMessageSchema(UncheckedBaseModel):
72
73
  The unique identifier of the agent
73
74
  """
74
75
 
75
- tool_calls: typing.Optional[typing.List[ChatCompletionMessageFunctionToolCall]] = pydantic.Field(default=None)
76
+ tool_calls: typing.Optional[typing.List[ChatCompletionMessageFunctionToolCallInput]] = pydantic.Field(default=None)
76
77
  """
77
78
  The list of tool calls requested. Only applicable for role assistant.
78
79
  """
@@ -82,7 +83,7 @@ class LettaSchemasAgentFileMessageSchema(UncheckedBaseModel):
82
83
  The ID of the tool call. Only applicable for role tool.
83
84
  """
84
85
 
85
- tool_returns: typing.Optional[typing.List[ToolReturn]] = pydantic.Field(default=None)
86
+ tool_returns: typing.Optional[typing.List[LettaSchemasMessageToolReturn]] = pydantic.Field(default=None)
86
87
  """
87
88
  Tool execution return information for prior tool calls
88
89
  """
@@ -92,6 +93,28 @@ class LettaSchemasAgentFileMessageSchema(UncheckedBaseModel):
92
93
  The timestamp when the object was created.
93
94
  """
94
95
 
96
+ approve: typing.Optional[bool] = pydantic.Field(default=None)
97
+ """
98
+ Whether the tool has been approved
99
+ """
100
+
101
+ approval_request_id: typing.Optional[str] = pydantic.Field(default=None)
102
+ """
103
+ The message ID of the approval request
104
+ """
105
+
106
+ denial_reason: typing.Optional[str] = pydantic.Field(default=None)
107
+ """
108
+ An optional explanation for the provided approval status
109
+ """
110
+
111
+ approvals: typing.Optional[typing.List[LettaSchemasAgentFileMessageSchemaApprovalsItem]] = pydantic.Field(
112
+ default=None
113
+ )
114
+ """
115
+ Approval returns for the message
116
+ """
117
+
95
118
  if IS_PYDANTIC_V2:
96
119
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
97
120
  else:
@@ -0,0 +1,8 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from .approval_return import ApprovalReturn
6
+ from .letta_schemas_message_tool_return import LettaSchemasMessageToolReturn
7
+
8
+ LettaSchemasAgentFileMessageSchemaApprovalsItem = typing.Union[ApprovalReturn, LettaSchemasMessageToolReturn]
@@ -0,0 +1,26 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+ from .letta_schemas_letta_message_tool_return_status import LettaSchemasLettaMessageToolReturnStatus
9
+
10
+
11
+ class LettaSchemasLettaMessageToolReturn(UncheckedBaseModel):
12
+ type: typing.Literal["tool"] = "tool"
13
+ tool_return: str
14
+ status: LettaSchemasLettaMessageToolReturnStatus
15
+ tool_call_id: str
16
+ stdout: typing.Optional[typing.List[str]] = None
17
+ stderr: typing.Optional[typing.List[str]] = None
18
+
19
+ if IS_PYDANTIC_V2:
20
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
21
+ else:
22
+
23
+ class Config:
24
+ frozen = True
25
+ smart_union = True
26
+ extra = pydantic.Extra.allow
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ LettaSchemasLettaMessageToolReturnStatus = typing.Union[typing.Literal["success", "error"], typing.Any]
@@ -5,11 +5,12 @@ import typing
5
5
  import pydantic
6
6
  from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
7
  from ..core.unchecked_base_model import UncheckedBaseModel
8
- from .tool_return_status import ToolReturnStatus
8
+ from .letta_schemas_message_tool_return_status import LettaSchemasMessageToolReturnStatus
9
9
 
10
10
 
11
- class ToolReturn(UncheckedBaseModel):
12
- status: ToolReturnStatus = pydantic.Field()
11
+ class LettaSchemasMessageToolReturn(UncheckedBaseModel):
12
+ tool_call_id: typing.Optional[typing.Optional[typing.Any]] = None
13
+ status: LettaSchemasMessageToolReturnStatus = pydantic.Field()
13
14
  """
14
15
  The status of the tool call
15
16
  """
@@ -24,6 +25,11 @@ class ToolReturn(UncheckedBaseModel):
24
25
  Captured stderr from the tool invocation
25
26
  """
26
27
 
28
+ func_response: typing.Optional[str] = pydantic.Field(default=None)
29
+ """
30
+ The function response string
31
+ """
32
+
27
33
  if IS_PYDANTIC_V2:
28
34
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
29
35
  else:
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ LettaSchemasMessageToolReturnStatus = typing.Union[typing.Literal["success", "error"], typing.Any]
@@ -22,6 +22,11 @@ class LlmConfig(UncheckedBaseModel):
22
22
  LLM model name.
23
23
  """
24
24
 
25
+ display_name: typing.Optional[str] = pydantic.Field(default=None)
26
+ """
27
+ A human-friendly display name for the model.
28
+ """
29
+
25
30
  model_endpoint_type: LlmConfigModelEndpointType = pydantic.Field()
26
31
  """
27
32
  The endpoint type for the model.
@@ -6,10 +6,11 @@ import typing
6
6
  import pydantic
7
7
  from ..core.pydantic_utilities import IS_PYDANTIC_V2
8
8
  from ..core.unchecked_base_model import UncheckedBaseModel
9
- from .chat_completion_message_function_tool_call import ChatCompletionMessageFunctionToolCall
9
+ from .chat_completion_message_function_tool_call_output import ChatCompletionMessageFunctionToolCallOutput
10
+ from .letta_schemas_message_tool_return import LettaSchemasMessageToolReturn
11
+ from .message_approvals_item import MessageApprovalsItem
10
12
  from .message_content_item import MessageContentItem
11
13
  from .message_role import MessageRole
12
- from .tool_return import ToolReturn
13
14
 
14
15
 
15
16
  class Message(UncheckedBaseModel):
@@ -85,7 +86,7 @@ class Message(UncheckedBaseModel):
85
86
  For role user/assistant: the (optional) name of the participant. For role tool/function: the name of the function called.
86
87
  """
87
88
 
88
- tool_calls: typing.Optional[typing.List[ChatCompletionMessageFunctionToolCall]] = pydantic.Field(default=None)
89
+ tool_calls: typing.Optional[typing.List[ChatCompletionMessageFunctionToolCallOutput]] = pydantic.Field(default=None)
89
90
  """
90
91
  The list of tool calls requested. Only applicable for role assistant.
91
92
  """
@@ -100,12 +101,17 @@ class Message(UncheckedBaseModel):
100
101
  The id of the step that this message was created in.
101
102
  """
102
103
 
104
+ run_id: typing.Optional[str] = pydantic.Field(default=None)
105
+ """
106
+ The id of the run that this message was created in.
107
+ """
108
+
103
109
  otid: typing.Optional[str] = pydantic.Field(default=None)
104
110
  """
105
111
  The offline threading id associated with this message
106
112
  """
107
113
 
108
- tool_returns: typing.Optional[typing.List[ToolReturn]] = pydantic.Field(default=None)
114
+ tool_returns: typing.Optional[typing.List[LettaSchemasMessageToolReturn]] = pydantic.Field(default=None)
109
115
  """
110
116
  Tool execution return information for prior tool calls
111
117
  """
@@ -145,6 +151,11 @@ class Message(UncheckedBaseModel):
145
151
  The reason the tool call request was denied.
146
152
  """
147
153
 
154
+ approvals: typing.Optional[typing.List[MessageApprovalsItem]] = pydantic.Field(default=None)
155
+ """
156
+ The list of approvals for this message.
157
+ """
158
+
148
159
  if IS_PYDANTIC_V2:
149
160
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
150
161
  else:
@@ -0,0 +1,8 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from .approval_return import ApprovalReturn
6
+ from .letta_schemas_message_tool_return import LettaSchemasMessageToolReturn
7
+
8
+ MessageApprovalsItem = typing.Union[ApprovalReturn, LettaSchemasMessageToolReturn]
@@ -13,6 +13,10 @@ class OmittedReasoningContent(UncheckedBaseModel):
13
13
  """
14
14
 
15
15
  type: typing.Literal["omitted_reasoning"] = "omitted_reasoning"
16
+ signature: typing.Optional[str] = pydantic.Field(default=None)
17
+ """
18
+ A unique identifier for this reasoning step.
19
+ """
16
20
 
17
21
  if IS_PYDANTIC_V2:
18
22
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+
9
+
10
+ class OpenaiTypesChatChatCompletionMessageFunctionToolCallFunction(UncheckedBaseModel):
11
+ arguments: str
12
+ name: str
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+
9
+
10
+ class OpenaiTypesChatChatCompletionMessageFunctionToolCallParamFunction(UncheckedBaseModel):
11
+ arguments: str
12
+ name: str
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -0,0 +1,21 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
7
+ from ..core.unchecked_base_model import UncheckedBaseModel
8
+
9
+
10
+ class PromptTokensDetails(UncheckedBaseModel):
11
+ audio_tokens: typing.Optional[int] = None
12
+ cached_tokens: typing.Optional[int] = None
13
+
14
+ if IS_PYDANTIC_V2:
15
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
+ else:
17
+
18
+ class Config:
19
+ frozen = True
20
+ smart_union = True
21
+ extra = pydantic.Extra.allow
@@ -61,6 +61,16 @@ class Provider(UncheckedBaseModel):
61
61
  The last update timestamp of the provider.
62
62
  """
63
63
 
64
+ api_key_enc: typing.Optional[str] = pydantic.Field(default=None)
65
+ """
66
+ Encrypted API key as Secret object
67
+ """
68
+
69
+ access_key_enc: typing.Optional[str] = pydantic.Field(default=None)
70
+ """
71
+ Encrypted access key as Secret object
72
+ """
73
+
64
74
  if IS_PYDANTIC_V2:
65
75
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
66
76
  else:
letta_client/types/run.py CHANGED
@@ -6,79 +6,76 @@ import typing
6
6
  import pydantic
7
7
  from ..core.pydantic_utilities import IS_PYDANTIC_V2
8
8
  from ..core.unchecked_base_model import UncheckedBaseModel
9
- from .job_status import JobStatus
10
- from .job_type import JobType
11
9
  from .letta_request_config import LettaRequestConfig
10
+ from .run_status import RunStatus
12
11
  from .stop_reason_type import StopReasonType
13
12
 
14
13
 
15
14
  class Run(UncheckedBaseModel):
16
15
  """
17
- Representation of a run, which is a job with a 'run' prefix in its ID.
18
- Inherits all fields and behavior from Job except for the ID prefix.
16
+ Representation of a run - a conversation or processing session for an agent.
17
+ Runs track when agents process messages and maintain the relationship between agents, steps, and messages.
19
18
 
20
19
  Parameters:
21
20
  id (str): The unique identifier of the run (prefixed with 'run-').
22
- status (JobStatus): The status of the run.
23
- created_at (datetime): The unix timestamp of when the run was created.
24
- completed_at (datetime): The unix timestamp of when the run was completed.
25
- user_id (str): The unique identifier of the user associated with the run.
21
+ status (JobStatus): The current status of the run.
22
+ created_at (datetime): The timestamp when the run was created.
23
+ completed_at (datetime): The timestamp when the run was completed.
24
+ agent_id (str): The unique identifier of the agent associated with the run.
25
+ stop_reason (StopReasonType): The reason why the run was stopped.
26
+ background (bool): Whether the run was created in background mode.
27
+ metadata (dict): Additional metadata for the run.
28
+ request_config (LettaRequestConfig): The request configuration for the run.
26
29
  """
27
30
 
28
- created_by_id: typing.Optional[str] = pydantic.Field(default=None)
31
+ id: typing.Optional[str] = pydantic.Field(default=None)
29
32
  """
30
- The id of the user that made this object.
33
+ The human-friendly ID of the Run
31
34
  """
32
35
 
33
- last_updated_by_id: typing.Optional[str] = pydantic.Field(default=None)
36
+ status: typing.Optional[RunStatus] = pydantic.Field(default=None)
34
37
  """
35
- The id of the user that made this object.
38
+ The current status of the run.
36
39
  """
37
40
 
38
41
  created_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
39
42
  """
40
- The unix timestamp of when the job was created.
43
+ The timestamp when the run was created.
41
44
  """
42
45
 
43
- updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
44
- """
45
- The timestamp when the object was last updated.
46
- """
47
-
48
- status: typing.Optional[JobStatus] = pydantic.Field(default=None)
46
+ completed_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
49
47
  """
50
- The status of the job.
48
+ The timestamp when the run was completed.
51
49
  """
52
50
 
53
- completed_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
51
+ agent_id: str = pydantic.Field()
54
52
  """
55
- The unix timestamp of when the job was completed.
53
+ The unique identifier of the agent associated with the run.
56
54
  """
57
55
 
58
- stop_reason: typing.Optional[StopReasonType] = pydantic.Field(default=None)
56
+ background: typing.Optional[bool] = pydantic.Field(default=None)
59
57
  """
60
- The reason why the run was stopped.
58
+ Whether the run was created in background mode.
61
59
  """
62
60
 
63
61
  metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None)
64
62
  """
65
- The metadata of the job.
63
+ Additional metadata for the run.
66
64
  """
67
65
 
68
- job_type: typing.Optional[JobType] = None
69
- background: typing.Optional[bool] = pydantic.Field(default=None)
66
+ request_config: typing.Optional[LettaRequestConfig] = pydantic.Field(default=None)
70
67
  """
71
- Whether the job was created in background mode.
68
+ The request configuration for the run.
72
69
  """
73
70
 
74
- agent_id: typing.Optional[str] = pydantic.Field(default=None)
71
+ stop_reason: typing.Optional[StopReasonType] = pydantic.Field(default=None)
75
72
  """
76
- The agent associated with this job/run.
73
+ The reason why the run was stopped.
77
74
  """
78
75
 
79
76
  callback_url: typing.Optional[str] = pydantic.Field(default=None)
80
77
  """
81
- If set, POST to this URL when the job completes.
78
+ If set, POST to this URL when the run completes.
82
79
  """
83
80
 
84
81
  callback_sent_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
@@ -106,16 +103,6 @@ class Run(UncheckedBaseModel):
106
103
  Total run duration in nanoseconds
107
104
  """
108
105
 
109
- id: typing.Optional[str] = pydantic.Field(default=None)
110
- """
111
- The human-friendly ID of the Run
112
- """
113
-
114
- request_config: typing.Optional[LettaRequestConfig] = pydantic.Field(default=None)
115
- """
116
- The request configuration for the run.
117
- """
118
-
119
106
  if IS_PYDANTIC_V2:
120
107
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
121
108
  else: