anthropic 1.78.0 → 1.80.0

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.
Files changed (687) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -0
  3. data/LICENSE +8 -0
  4. data/README.md +42 -1
  5. data/lib/anthropic/client.rb +32 -0
  6. data/lib/anthropic/helpers/aws/client.rb +12 -2
  7. data/lib/anthropic/helpers/aws_auth.rb +8 -1
  8. data/lib/anthropic/helpers/bedrock/client.rb +19 -2
  9. data/lib/anthropic/helpers/bedrock/mantle_client.rb +19 -2
  10. data/lib/anthropic/helpers/google_cloud/client.rb +12 -2
  11. data/lib/anthropic/helpers/refusal_fallback.rb +52 -21
  12. data/lib/anthropic/helpers/streaming/message_stream.rb +20 -43
  13. data/lib/anthropic/helpers/tools/runner.rb +104 -11
  14. data/lib/anthropic/helpers/tracing/attributes.rb +34 -0
  15. data/lib/anthropic/helpers/tracing/config.rb +16 -0
  16. data/lib/anthropic/helpers/tracing/content.rb +346 -0
  17. data/lib/anthropic/helpers/tracing/recorders.rb +131 -0
  18. data/lib/anthropic/helpers/tracing/response.rb +29 -0
  19. data/lib/anthropic/helpers/tracing/streamed_message.rb +189 -0
  20. data/lib/anthropic/helpers/tracing/tool_spans.rb +138 -0
  21. data/lib/anthropic/helpers/tracing.rb +13 -0
  22. data/lib/anthropic/helpers/vertex/client.rb +19 -2
  23. data/lib/anthropic/internal/tracing.rb +1118 -0
  24. data/lib/anthropic/internal/transport/base_client.rb +174 -10
  25. data/lib/anthropic/internal/transport/pooled_net_requester.rb +6 -0
  26. data/lib/anthropic/models/anthropic_beta.rb +3 -0
  27. data/lib/anthropic/models/beta/agent_archive_params.rb +3 -2
  28. data/lib/anthropic/models/beta/agent_create_params.rb +20 -8
  29. data/lib/anthropic/models/beta/agent_list_params.rb +3 -2
  30. data/lib/anthropic/models/beta/agent_retrieve_params.rb +3 -2
  31. data/lib/anthropic/models/beta/agent_update_params.rb +20 -8
  32. data/lib/anthropic/models/beta/agents/version_list_params.rb +3 -2
  33. data/lib/anthropic/models/beta/beta_dream_input.rb +2 -2
  34. data/lib/anthropic/models/beta/beta_fallbacks_param.rb +6 -2
  35. data/lib/anthropic/models/beta/beta_managed_agents_agent.rb +15 -6
  36. data/lib/anthropic/models/beta/beta_managed_agents_agent_tool_config_params.rb +8 -8
  37. data/lib/anthropic/models/beta/beta_managed_agents_agent_toolset_default_config.rb +2 -2
  38. data/lib/anthropic/models/beta/beta_managed_agents_agent_toolset_default_config_params.rb +2 -2
  39. data/lib/anthropic/models/beta/beta_managed_agents_agent_with_overrides_params.rb +6 -6
  40. data/lib/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rb +29 -0
  41. data/lib/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rb +34 -0
  42. data/lib/anthropic/models/beta/beta_managed_agents_bash_tool_config.rb +2 -2
  43. data/lib/anthropic/models/beta/beta_managed_agents_bash_tool_config_params.rb +2 -2
  44. data/lib/anthropic/models/beta/beta_managed_agents_deployment_initial_event.rb +3 -3
  45. data/lib/anthropic/models/beta/beta_managed_agents_deployment_initial_event_params.rb +3 -3
  46. data/lib/anthropic/models/beta/beta_managed_agents_deployment_paused_reason.rb +2 -2
  47. data/lib/anthropic/models/beta/beta_managed_agents_deployment_paused_reason_error.rb +38 -14
  48. data/lib/anthropic/models/beta/beta_managed_agents_deployment_run.rb +16 -16
  49. data/lib/anthropic/models/beta/beta_managed_agents_deployment_user_define_outcome_event.rb +2 -2
  50. data/lib/anthropic/models/beta/beta_managed_agents_deployment_user_message_event.rb +4 -4
  51. data/lib/anthropic/models/beta/beta_managed_agents_edit_tool_config.rb +2 -2
  52. data/lib/anthropic/models/beta/beta_managed_agents_edit_tool_config_params.rb +2 -2
  53. data/lib/anthropic/models/beta/beta_managed_agents_execution_identity.rb +57 -0
  54. data/lib/anthropic/models/beta/beta_managed_agents_execution_identity_params.rb +62 -0
  55. data/lib/anthropic/models/beta/beta_managed_agents_github_repository_resource_config.rb +2 -2
  56. data/lib/anthropic/models/beta/beta_managed_agents_github_repository_resource_params.rb +2 -2
  57. data/lib/anthropic/models/beta/beta_managed_agents_glob_tool_config.rb +2 -2
  58. data/lib/anthropic/models/beta/beta_managed_agents_glob_tool_config_params.rb +2 -2
  59. data/lib/anthropic/models/beta/beta_managed_agents_grep_tool_config.rb +2 -2
  60. data/lib/anthropic/models/beta/beta_managed_agents_grep_tool_config_params.rb +2 -2
  61. data/lib/anthropic/models/beta/beta_managed_agents_mcp_tool_config.rb +2 -2
  62. data/lib/anthropic/models/beta/beta_managed_agents_mcp_tool_config_params.rb +2 -2
  63. data/lib/anthropic/models/beta/beta_managed_agents_mcp_toolset_default_config.rb +2 -2
  64. data/lib/anthropic/models/beta/beta_managed_agents_mcp_toolset_default_config_params.rb +2 -2
  65. data/lib/anthropic/models/beta/beta_managed_agents_model.rb +0 -2
  66. data/lib/anthropic/models/beta/beta_managed_agents_model_config.rb +5 -5
  67. data/lib/anthropic/models/beta/beta_managed_agents_multiagent.rb +1 -1
  68. data/lib/anthropic/models/beta/beta_managed_agents_multiagent_coordinator.rb +2 -2
  69. data/lib/anthropic/models/beta/beta_managed_agents_multiagent_params.rb +1 -1
  70. data/lib/anthropic/models/beta/beta_managed_agents_read_tool_config.rb +2 -2
  71. data/lib/anthropic/models/beta/beta_managed_agents_read_tool_config_params.rb +2 -2
  72. data/lib/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rb +21 -0
  73. data/lib/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rb +23 -0
  74. data/lib/anthropic/models/beta/beta_managed_agents_session_agent.rb +16 -6
  75. data/lib/anthropic/models/beta/beta_managed_agents_session_agent_update.rb +3 -3
  76. data/lib/anthropic/models/beta/beta_managed_agents_session_multiagent.rb +1 -1
  77. data/lib/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rb +8 -2
  78. data/lib/anthropic/models/beta/beta_managed_agents_session_resource_config.rb +3 -3
  79. data/lib/anthropic/models/beta/beta_managed_agents_session_thread_agent.rb +19 -6
  80. data/lib/anthropic/models/beta/beta_managed_agents_skill_params.rb +2 -2
  81. data/lib/anthropic/models/beta/beta_managed_agents_start_event_preview.rb +2 -2
  82. data/lib/anthropic/models/beta/beta_managed_agents_trigger_context.rb +2 -2
  83. data/lib/anthropic/models/beta/beta_managed_agents_user_tool_result_event.rb +4 -4
  84. data/lib/anthropic/models/beta/beta_managed_agents_web_fetch_tool_config.rb +2 -2
  85. data/lib/anthropic/models/beta/beta_managed_agents_web_fetch_tool_config_params.rb +2 -2
  86. data/lib/anthropic/models/beta/beta_managed_agents_web_search_tool_config.rb +2 -2
  87. data/lib/anthropic/models/beta/beta_managed_agents_web_search_tool_config_params.rb +2 -2
  88. data/lib/anthropic/models/beta/beta_managed_agents_write_tool_config.rb +2 -2
  89. data/lib/anthropic/models/beta/beta_managed_agents_write_tool_config_params.rb +2 -2
  90. data/lib/anthropic/models/beta/beta_message_delta_usage.rb +0 -1
  91. data/lib/anthropic/models/beta/beta_output_behavior.rb +2 -2
  92. data/lib/anthropic/models/beta/beta_thinking_config_adaptive.rb +6 -4
  93. data/lib/anthropic/models/beta/beta_thinking_config_enabled.rb +6 -4
  94. data/lib/anthropic/models/beta/beta_thinking_config_param.rb +8 -7
  95. data/lib/anthropic/models/beta/beta_thinking_types.rb +17 -2
  96. data/lib/anthropic/models/beta/beta_usage.rb +0 -1
  97. data/lib/anthropic/models/beta/deployment_archive_params.rb +3 -2
  98. data/lib/anthropic/models/beta/deployment_create_params.rb +6 -5
  99. data/lib/anthropic/models/beta/deployment_list_params.rb +3 -2
  100. data/lib/anthropic/models/beta/deployment_pause_params.rb +3 -2
  101. data/lib/anthropic/models/beta/deployment_retrieve_params.rb +3 -2
  102. data/lib/anthropic/models/beta/deployment_run_list_params.rb +3 -2
  103. data/lib/anthropic/models/beta/deployment_run_params.rb +3 -2
  104. data/lib/anthropic/models/beta/deployment_run_retrieve_params.rb +3 -2
  105. data/lib/anthropic/models/beta/deployment_unpause_params.rb +3 -2
  106. data/lib/anthropic/models/beta/deployment_update_params.rb +6 -5
  107. data/lib/anthropic/models/beta/dream_archive_params.rb +3 -2
  108. data/lib/anthropic/models/beta/dream_cancel_params.rb +3 -2
  109. data/lib/anthropic/models/beta/dream_create_params.rb +3 -2
  110. data/lib/anthropic/models/beta/dream_list_params.rb +3 -2
  111. data/lib/anthropic/models/beta/dream_retrieve_params.rb +3 -2
  112. data/lib/anthropic/models/beta/memory_store_archive_params.rb +3 -2
  113. data/lib/anthropic/models/beta/memory_store_create_params.rb +3 -2
  114. data/lib/anthropic/models/beta/memory_store_delete_params.rb +3 -2
  115. data/lib/anthropic/models/beta/memory_store_list_params.rb +3 -2
  116. data/lib/anthropic/models/beta/memory_store_retrieve_params.rb +3 -2
  117. data/lib/anthropic/models/beta/memory_store_update_params.rb +3 -2
  118. data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_actor.rb +3 -3
  119. data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_error.rb +6 -3
  120. data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_memory_list_item.rb +2 -2
  121. data/lib/anthropic/models/beta/memory_stores/memory_create_params.rb +3 -2
  122. data/lib/anthropic/models/beta/memory_stores/memory_delete_params.rb +3 -2
  123. data/lib/anthropic/models/beta/memory_stores/memory_list_params.rb +3 -2
  124. data/lib/anthropic/models/beta/memory_stores/memory_retrieve_params.rb +3 -2
  125. data/lib/anthropic/models/beta/memory_stores/memory_update_params.rb +3 -2
  126. data/lib/anthropic/models/beta/memory_stores/memory_version_list_params.rb +3 -2
  127. data/lib/anthropic/models/beta/memory_stores/memory_version_redact_params.rb +3 -2
  128. data/lib/anthropic/models/beta/memory_stores/memory_version_retrieve_params.rb +3 -2
  129. data/lib/anthropic/models/beta/message_count_tokens_params.rb +25 -10
  130. data/lib/anthropic/models/beta/message_create_params.rb +31 -12
  131. data/lib/anthropic/models/beta/messages/batch_create_params.rb +31 -12
  132. data/lib/anthropic/models/beta/organization/beta_analytics_cost_bucketed_result.rb +3 -3
  133. data/lib/anthropic/models/beta/organization/beta_analytics_cost_users_item.rb +3 -3
  134. data/lib/anthropic/models/beta/organization/beta_analytics_usage_bucketed_result.rb +3 -3
  135. data/lib/anthropic/models/beta/organization/beta_analytics_usage_users_item.rb +3 -3
  136. data/lib/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rb +30 -0
  137. data/lib/anthropic/models/beta/organization/beta_spend_limit.rb +16 -6
  138. data/lib/anthropic/models/beta/organization/beta_spend_limit_usage_tier_scope.rb +25 -0
  139. data/lib/anthropic/models/beta/organization/beta_spend_summary.rb +28 -8
  140. data/lib/anthropic/models/beta/organization/beta_telemetry_destination.rb +118 -0
  141. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rb +29 -0
  142. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rb +69 -0
  143. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rb +73 -0
  144. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rb +21 -0
  145. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rb +29 -0
  146. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rb +23 -0
  147. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rb +25 -0
  148. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state.rb +71 -0
  149. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rb +36 -0
  150. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rb +24 -0
  151. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rb +21 -0
  152. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rb +23 -0
  153. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rb +61 -0
  154. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rb +37 -0
  155. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rb +35 -0
  156. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rb +61 -0
  157. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rb +21 -0
  158. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_traces.rb +61 -0
  159. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rb +71 -0
  160. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rb +69 -0
  161. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rb +23 -0
  162. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rb +23 -0
  163. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rb +22 -0
  164. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rb +49 -0
  165. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rb +21 -0
  166. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rb +49 -0
  167. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rb +70 -0
  168. data/lib/anthropic/models/beta/organization/invite_create_params.rb +4 -2
  169. data/lib/anthropic/models/beta/organization/spend_limit_list_params.rb +2 -5
  170. data/lib/anthropic/models/beta/organization/telemetry_destination_create_params.rb +94 -0
  171. data/lib/anthropic/models/beta/organization/telemetry_destination_delete_params.rb +39 -0
  172. data/lib/anthropic/models/beta/organization/telemetry_destination_list_params.rb +63 -0
  173. data/lib/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rb +39 -0
  174. data/lib/anthropic/models/beta/organization/telemetry_destination_test_params.rb +39 -0
  175. data/lib/anthropic/models/beta/organization/telemetry_destination_update_params.rb +121 -0
  176. data/lib/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rb +40 -0
  177. data/lib/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rb +52 -0
  178. data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rb +49 -0
  179. data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rb +58 -0
  180. data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rb +49 -0
  181. data/lib/anthropic/models/beta/organization/user_update_params.rb +4 -2
  182. data/lib/anthropic/models/beta/session_archive_params.rb +3 -2
  183. data/lib/anthropic/models/beta/session_create_params.rb +8 -7
  184. data/lib/anthropic/models/beta/session_delete_params.rb +3 -2
  185. data/lib/anthropic/models/beta/session_list_params.rb +3 -2
  186. data/lib/anthropic/models/beta/session_retrieve_params.rb +3 -2
  187. data/lib/anthropic/models/beta/session_update_params.rb +3 -2
  188. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_custom_tool_use_event.rb +3 -1
  189. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_mcp_tool_result_event.rb +4 -4
  190. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_message_event.rb +2 -2
  191. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_thread_message_received_event.rb +4 -4
  192. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_thread_message_sent_event.rb +4 -4
  193. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_tool_result_event.rb +4 -4
  194. data/lib/anthropic/models/beta/sessions/beta_managed_agents_billing_error.rb +3 -3
  195. data/lib/anthropic/models/beta/sessions/beta_managed_agents_credential_host_unreachable_error.rb +3 -3
  196. data/lib/anthropic/models/beta/sessions/beta_managed_agents_document_block.rb +4 -4
  197. data/lib/anthropic/models/beta/sessions/beta_managed_agents_event_params.rb +14 -8
  198. data/lib/anthropic/models/beta/sessions/beta_managed_agents_github_repository_resource.rb +2 -2
  199. data/lib/anthropic/models/beta/sessions/beta_managed_agents_image_block.rb +3 -3
  200. data/lib/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rb +14 -6
  201. data/lib/anthropic/models/beta/sessions/beta_managed_agents_mcp_authentication_failed_error.rb +3 -3
  202. data/lib/anthropic/models/beta/sessions/beta_managed_agents_mcp_connection_failed_error.rb +3 -3
  203. data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_overloaded_error.rb +3 -3
  204. data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_rate_limited_error.rb +3 -3
  205. data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_request_failed_error.rb +3 -3
  206. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_authentication_error.rb +3 -3
  207. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_checkout_error.rb +3 -3
  208. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_clone_error.rb +3 -3
  209. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_forbidden_error.rb +3 -3
  210. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_not_found_error.rb +3 -3
  211. data/lib/anthropic/models/beta/sessions/beta_managed_agents_send_session_events.rb +8 -8
  212. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_error_event.rb +14 -8
  213. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_event.rb +64 -37
  214. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_resource.rb +3 -3
  215. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_status_idle_event.rb +4 -4
  216. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rb +8 -2
  217. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_thread_status_idle_event.rb +4 -4
  218. data/lib/anthropic/models/beta/sessions/beta_managed_agents_stream_session_events.rb +66 -39
  219. data/lib/anthropic/models/beta/sessions/beta_managed_agents_stream_session_thread_events.rb +66 -39
  220. data/lib/anthropic/models/beta/sessions/beta_managed_agents_unknown_error.rb +3 -3
  221. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event.rb +7 -7
  222. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event_params.rb +7 -7
  223. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_define_outcome_event.rb +2 -2
  224. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_define_outcome_event_params.rb +2 -2
  225. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_message_event.rb +4 -4
  226. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_message_event_params.rb +4 -4
  227. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_tool_result_event_params.rb +4 -4
  228. data/lib/anthropic/models/beta/sessions/event_list_params.rb +3 -2
  229. data/lib/anthropic/models/beta/sessions/event_send_params.rb +3 -2
  230. data/lib/anthropic/models/beta/sessions/event_stream_params.rb +3 -2
  231. data/lib/anthropic/models/beta/sessions/resource_add_params.rb +3 -2
  232. data/lib/anthropic/models/beta/sessions/resource_delete_params.rb +3 -2
  233. data/lib/anthropic/models/beta/sessions/resource_list_params.rb +3 -2
  234. data/lib/anthropic/models/beta/sessions/resource_retrieve_params.rb +3 -2
  235. data/lib/anthropic/models/beta/sessions/resource_retrieve_response.rb +3 -3
  236. data/lib/anthropic/models/beta/sessions/resource_update_params.rb +3 -2
  237. data/lib/anthropic/models/beta/sessions/resource_update_response.rb +3 -3
  238. data/lib/anthropic/models/beta/sessions/thread_archive_params.rb +3 -2
  239. data/lib/anthropic/models/beta/sessions/thread_list_params.rb +3 -2
  240. data/lib/anthropic/models/beta/sessions/thread_retrieve_params.rb +3 -2
  241. data/lib/anthropic/models/beta/sessions/threads/event_list_params.rb +3 -2
  242. data/lib/anthropic/models/beta/sessions/threads/event_stream_params.rb +3 -2
  243. data/lib/anthropic/models/beta/tunnel_archive_params.rb +3 -2
  244. data/lib/anthropic/models/beta/tunnel_create_params.rb +3 -2
  245. data/lib/anthropic/models/beta/tunnel_list_params.rb +3 -2
  246. data/lib/anthropic/models/beta/tunnel_retrieve_params.rb +3 -2
  247. data/lib/anthropic/models/beta/tunnel_reveal_token_params.rb +3 -2
  248. data/lib/anthropic/models/beta/tunnel_rotate_token_params.rb +3 -2
  249. data/lib/anthropic/models/beta/tunnels/certificate_archive_params.rb +3 -2
  250. data/lib/anthropic/models/beta/tunnels/certificate_create_params.rb +3 -2
  251. data/lib/anthropic/models/beta/tunnels/certificate_list_params.rb +3 -2
  252. data/lib/anthropic/models/beta/tunnels/certificate_retrieve_params.rb +3 -2
  253. data/lib/anthropic/models/beta/user_profile_create_enrollment_url_params.rb +3 -2
  254. data/lib/anthropic/models/beta/user_profile_create_params.rb +3 -2
  255. data/lib/anthropic/models/beta/user_profile_list_params.rb +3 -2
  256. data/lib/anthropic/models/beta/user_profile_retrieve_params.rb +3 -2
  257. data/lib/anthropic/models/beta/user_profile_update_params.rb +3 -2
  258. data/lib/anthropic/models/beta/vault_archive_params.rb +3 -2
  259. data/lib/anthropic/models/beta/vault_create_params.rb +3 -2
  260. data/lib/anthropic/models/beta/vault_delete_params.rb +3 -2
  261. data/lib/anthropic/models/beta/vault_list_params.rb +3 -2
  262. data/lib/anthropic/models/beta/vault_retrieve_params.rb +3 -2
  263. data/lib/anthropic/models/beta/vault_update_params.rb +3 -2
  264. data/lib/anthropic/models/beta/vaults/beta_managed_agents_credential.rb +6 -3
  265. data/lib/anthropic/models/beta/vaults/beta_managed_agents_credential_networking_params.rb +7 -2
  266. data/lib/anthropic/models/beta/vaults/beta_managed_agents_environment_variable_auth_response.rb +7 -2
  267. data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_params.rb +3 -3
  268. data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_response.rb +12 -3
  269. data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_update_params.rb +8 -2
  270. data/lib/anthropic/models/beta/vaults/credential_archive_params.rb +3 -2
  271. data/lib/anthropic/models/beta/vaults/credential_create_params.rb +9 -5
  272. data/lib/anthropic/models/beta/vaults/credential_delete_params.rb +3 -2
  273. data/lib/anthropic/models/beta/vaults/credential_list_params.rb +3 -2
  274. data/lib/anthropic/models/beta/vaults/credential_mcp_oauth_validate_params.rb +3 -2
  275. data/lib/anthropic/models/beta/vaults/credential_retrieve_params.rb +3 -2
  276. data/lib/anthropic/models/beta/vaults/credential_update_params.rb +9 -5
  277. data/lib/anthropic/models/message_count_tokens_params.rb +47 -11
  278. data/lib/anthropic/models/message_create_params.rb +47 -11
  279. data/lib/anthropic/models/messages/batch_create_params.rb +53 -11
  280. data/lib/anthropic/models/model.rb +0 -2
  281. data/lib/anthropic/models/organization/invite_create_params.rb +4 -2
  282. data/lib/anthropic/models/organization/user_update_params.rb +4 -2
  283. data/lib/anthropic/models/thinking_config_adaptive.rb +6 -4
  284. data/lib/anthropic/models/thinking_config_enabled.rb +6 -4
  285. data/lib/anthropic/models/thinking_config_param.rb +8 -7
  286. data/lib/anthropic/models/thinking_types.rb +17 -2
  287. data/lib/anthropic/models/usage.rb +22 -1
  288. data/lib/anthropic/request_options.rb +7 -0
  289. data/lib/anthropic/resources/beta/agents/versions.rb +5 -1
  290. data/lib/anthropic/resources/beta/agents.rb +27 -7
  291. data/lib/anthropic/resources/beta/deployment_runs.rb +18 -2
  292. data/lib/anthropic/resources/beta/deployments.rb +32 -8
  293. data/lib/anthropic/resources/beta/dreams.rb +20 -5
  294. data/lib/anthropic/resources/beta/environments/work.rb +42 -0
  295. data/lib/anthropic/resources/beta/environments.rb +18 -0
  296. data/lib/anthropic/resources/beta/files.rb +15 -0
  297. data/lib/anthropic/resources/beta/memory_stores/memories.rb +36 -5
  298. data/lib/anthropic/resources/beta/memory_stores/memory_versions.rb +31 -3
  299. data/lib/anthropic/resources/beta/memory_stores.rb +24 -6
  300. data/lib/anthropic/resources/beta/messages/batches.rb +19 -1
  301. data/lib/anthropic/resources/beta/messages.rb +12 -4
  302. data/lib/anthropic/resources/beta/models.rb +6 -0
  303. data/lib/anthropic/resources/beta/organization/analytics/apps/chat/projects.rb +3 -0
  304. data/lib/anthropic/resources/beta/organization/analytics/artifacts.rb +3 -0
  305. data/lib/anthropic/resources/beta/organization/analytics/connectors.rb +4 -0
  306. data/lib/anthropic/resources/beta/organization/analytics/cost_report.rb +20 -0
  307. data/lib/anthropic/resources/beta/organization/analytics/plugins.rb +4 -0
  308. data/lib/anthropic/resources/beta/organization/analytics/skills.rb +4 -0
  309. data/lib/anthropic/resources/beta/organization/analytics/summaries.rb +3 -0
  310. data/lib/anthropic/resources/beta/organization/analytics/usage_report.rb +20 -0
  311. data/lib/anthropic/resources/beta/organization/analytics/user_cost_report.rb +23 -0
  312. data/lib/anthropic/resources/beta/organization/analytics/user_usage_report.rb +23 -0
  313. data/lib/anthropic/resources/beta/organization/analytics/users.rb +4 -0
  314. data/lib/anthropic/resources/beta/organization/api_keys.rb +9 -0
  315. data/lib/anthropic/resources/beta/organization/compliance_settings.rb +4 -0
  316. data/lib/anthropic/resources/beta/organization/external_keys.rb +18 -0
  317. data/lib/anthropic/resources/beta/organization/federation/issuers.rb +15 -0
  318. data/lib/anthropic/resources/beta/organization/federation/rules/workspaces.rb +14 -0
  319. data/lib/anthropic/resources/beta/organization/federation/rules.rb +15 -0
  320. data/lib/anthropic/resources/beta/organization/invites.rb +12 -0
  321. data/lib/anthropic/resources/beta/organization/plugin_marketplaces.rb +14 -0
  322. data/lib/anthropic/resources/beta/organization/plugins/installation_settings.rb +16 -0
  323. data/lib/anthropic/resources/beta/organization/plugins/shares.rb +4 -0
  324. data/lib/anthropic/resources/beta/organization/plugins/versions.rb +22 -0
  325. data/lib/anthropic/resources/beta/organization/plugins.rb +27 -0
  326. data/lib/anthropic/resources/beta/organization/rate_limits.rb +3 -0
  327. data/lib/anthropic/resources/beta/organization/rbac_groups/members.rb +14 -0
  328. data/lib/anthropic/resources/beta/organization/rbac_groups.rb +15 -0
  329. data/lib/anthropic/resources/beta/organization/rbac_roles/permissions.rb +4 -0
  330. data/lib/anthropic/resources/beta/organization/rbac_roles.rb +6 -0
  331. data/lib/anthropic/resources/beta/organization/service_accounts/workspaces.rb +14 -0
  332. data/lib/anthropic/resources/beta/organization/service_accounts.rb +15 -0
  333. data/lib/anthropic/resources/beta/organization/spend_limits/effective.rb +5 -2
  334. data/lib/anthropic/resources/beta/organization/spend_limits/increase_requests.rb +12 -0
  335. data/lib/anthropic/resources/beta/organization/spend_limits.rb +20 -9
  336. data/lib/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rb +181 -0
  337. data/lib/anthropic/resources/beta/organization/telemetry_destinations.rb +286 -0
  338. data/lib/anthropic/resources/beta/organization/users.rb +12 -0
  339. data/lib/anthropic/resources/beta/organization/workspaces/members.rb +26 -0
  340. data/lib/anthropic/resources/beta/organization/workspaces/rate_limits.rb +4 -0
  341. data/lib/anthropic/resources/beta/organization/workspaces/service_accounts.rb +26 -0
  342. data/lib/anthropic/resources/beta/organization/workspaces.rb +15 -0
  343. data/lib/anthropic/resources/beta/organization.rb +7 -0
  344. data/lib/anthropic/resources/beta/sessions/events.rb +24 -4
  345. data/lib/anthropic/resources/beta/sessions/resources.rb +31 -5
  346. data/lib/anthropic/resources/beta/sessions/threads/events.rb +17 -3
  347. data/lib/anthropic/resources/beta/sessions/threads.rb +19 -3
  348. data/lib/anthropic/resources/beta/sessions.rb +38 -6
  349. data/lib/anthropic/resources/beta/skills/versions.rb +17 -0
  350. data/lib/anthropic/resources/beta/skills.rb +12 -0
  351. data/lib/anthropic/resources/beta/tunnels/certificates.rb +24 -4
  352. data/lib/anthropic/resources/beta/tunnels.rb +24 -6
  353. data/lib/anthropic/resources/beta/user_profiles.rb +20 -5
  354. data/lib/anthropic/resources/beta/vaults/credentials.rb +45 -7
  355. data/lib/anthropic/resources/beta/vaults.rb +24 -6
  356. data/lib/anthropic/resources/completions.rb +5 -1
  357. data/lib/anthropic/resources/files.rb +15 -0
  358. data/lib/anthropic/resources/messages/batches.rb +19 -1
  359. data/lib/anthropic/resources/messages.rb +24 -8
  360. data/lib/anthropic/resources/models.rb +6 -0
  361. data/lib/anthropic/resources/organization/api_keys.rb +9 -0
  362. data/lib/anthropic/resources/organization/compliance_settings.rb +4 -0
  363. data/lib/anthropic/resources/organization/external_keys.rb +18 -0
  364. data/lib/anthropic/resources/organization/federation/issuers.rb +15 -0
  365. data/lib/anthropic/resources/organization/federation/rules/workspaces.rb +14 -0
  366. data/lib/anthropic/resources/organization/federation/rules.rb +15 -0
  367. data/lib/anthropic/resources/organization/invites.rb +12 -0
  368. data/lib/anthropic/resources/organization/rate_limits.rb +3 -0
  369. data/lib/anthropic/resources/organization/service_accounts/workspaces.rb +14 -0
  370. data/lib/anthropic/resources/organization/service_accounts.rb +15 -0
  371. data/lib/anthropic/resources/organization/users.rb +12 -0
  372. data/lib/anthropic/resources/organization/workspaces/members.rb +26 -0
  373. data/lib/anthropic/resources/organization/workspaces/rate_limits.rb +4 -0
  374. data/lib/anthropic/resources/organization/workspaces/service_accounts.rb +26 -0
  375. data/lib/anthropic/resources/organization/workspaces.rb +15 -0
  376. data/lib/anthropic/resources/organization.rb +2 -0
  377. data/lib/anthropic/resources/skills/versions.rb +14 -0
  378. data/lib/anthropic/resources/skills.rb +12 -0
  379. data/lib/anthropic/version.rb +1 -1
  380. data/lib/anthropic.rb +59 -0
  381. data/rbi/anthropic/client.rbi +28 -0
  382. data/rbi/anthropic/helpers/aws/client.rbi +6 -2
  383. data/rbi/anthropic/helpers/bedrock/client.rbi +6 -2
  384. data/rbi/anthropic/helpers/bedrock/mantle_client.rbi +6 -2
  385. data/rbi/anthropic/helpers/google_cloud/client.rbi +6 -2
  386. data/rbi/anthropic/helpers/streaming/message_stream.rbi +4 -1
  387. data/rbi/anthropic/helpers/vertex/client.rbi +6 -2
  388. data/rbi/anthropic/internal/tracing.rbi +847 -0
  389. data/rbi/anthropic/internal/transport/base_client.rbi +93 -5
  390. data/rbi/anthropic/internal/type/base_stream.rbi +2 -0
  391. data/rbi/anthropic/models/anthropic_beta.rbi +5 -0
  392. data/rbi/anthropic/models/beta/agent_archive_params.rbi +4 -2
  393. data/rbi/anthropic/models/beta/agent_create_params.rbi +38 -5
  394. data/rbi/anthropic/models/beta/agent_list_params.rbi +4 -2
  395. data/rbi/anthropic/models/beta/agent_retrieve_params.rbi +4 -2
  396. data/rbi/anthropic/models/beta/agent_update_params.rbi +38 -5
  397. data/rbi/anthropic/models/beta/agents/version_list_params.rbi +4 -2
  398. data/rbi/anthropic/models/beta/beta_fallback_param.rbi +3 -2
  399. data/rbi/anthropic/models/beta/beta_fallbacks_param.rbi +6 -2
  400. data/rbi/anthropic/models/beta/beta_managed_agents_agent.rbi +17 -0
  401. data/rbi/anthropic/models/beta/beta_managed_agents_agent_with_overrides_params.rbi +3 -3
  402. data/rbi/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rbi +40 -0
  403. data/rbi/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rbi +42 -0
  404. data/rbi/anthropic/models/beta/beta_managed_agents_execution_identity.rbi +85 -0
  405. data/rbi/anthropic/models/beta/beta_managed_agents_execution_identity_params.rbi +87 -0
  406. data/rbi/anthropic/models/beta/beta_managed_agents_model.rbi +0 -2
  407. data/rbi/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rbi +32 -0
  408. data/rbi/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rbi +33 -0
  409. data/rbi/anthropic/models/beta/beta_managed_agents_session_agent.rbi +19 -0
  410. data/rbi/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rbi +9 -0
  411. data/rbi/anthropic/models/beta/beta_managed_agents_session_thread_agent.rbi +19 -0
  412. data/rbi/anthropic/models/beta/beta_message_delta_usage.rbi +0 -2
  413. data/rbi/anthropic/models/beta/beta_thinking_config_adaptive.rbi +9 -6
  414. data/rbi/anthropic/models/beta/beta_thinking_config_enabled.rbi +9 -6
  415. data/rbi/anthropic/models/beta/beta_thinking_config_param.rbi +11 -9
  416. data/rbi/anthropic/models/beta/beta_thinking_types.rbi +31 -2
  417. data/rbi/anthropic/models/beta/beta_usage.rbi +0 -2
  418. data/rbi/anthropic/models/beta/deployment_archive_params.rbi +4 -2
  419. data/rbi/anthropic/models/beta/deployment_create_params.rbi +4 -2
  420. data/rbi/anthropic/models/beta/deployment_list_params.rbi +4 -2
  421. data/rbi/anthropic/models/beta/deployment_pause_params.rbi +4 -2
  422. data/rbi/anthropic/models/beta/deployment_retrieve_params.rbi +4 -2
  423. data/rbi/anthropic/models/beta/deployment_run_list_params.rbi +4 -2
  424. data/rbi/anthropic/models/beta/deployment_run_params.rbi +4 -2
  425. data/rbi/anthropic/models/beta/deployment_run_retrieve_params.rbi +4 -2
  426. data/rbi/anthropic/models/beta/deployment_unpause_params.rbi +4 -2
  427. data/rbi/anthropic/models/beta/deployment_update_params.rbi +4 -2
  428. data/rbi/anthropic/models/beta/dream_archive_params.rbi +4 -2
  429. data/rbi/anthropic/models/beta/dream_cancel_params.rbi +4 -2
  430. data/rbi/anthropic/models/beta/dream_create_params.rbi +4 -2
  431. data/rbi/anthropic/models/beta/dream_list_params.rbi +4 -2
  432. data/rbi/anthropic/models/beta/dream_retrieve_params.rbi +4 -2
  433. data/rbi/anthropic/models/beta/memory_store_archive_params.rbi +4 -2
  434. data/rbi/anthropic/models/beta/memory_store_create_params.rbi +4 -2
  435. data/rbi/anthropic/models/beta/memory_store_delete_params.rbi +4 -2
  436. data/rbi/anthropic/models/beta/memory_store_list_params.rbi +4 -2
  437. data/rbi/anthropic/models/beta/memory_store_retrieve_params.rbi +4 -2
  438. data/rbi/anthropic/models/beta/memory_store_update_params.rbi +4 -2
  439. data/rbi/anthropic/models/beta/memory_stores/memory_create_params.rbi +4 -2
  440. data/rbi/anthropic/models/beta/memory_stores/memory_delete_params.rbi +4 -2
  441. data/rbi/anthropic/models/beta/memory_stores/memory_list_params.rbi +4 -2
  442. data/rbi/anthropic/models/beta/memory_stores/memory_retrieve_params.rbi +4 -2
  443. data/rbi/anthropic/models/beta/memory_stores/memory_update_params.rbi +4 -2
  444. data/rbi/anthropic/models/beta/memory_stores/memory_version_list_params.rbi +4 -2
  445. data/rbi/anthropic/models/beta/memory_stores/memory_version_redact_params.rbi +4 -2
  446. data/rbi/anthropic/models/beta/memory_stores/memory_version_retrieve_params.rbi +4 -2
  447. data/rbi/anthropic/models/beta/message_count_tokens_params.rbi +43 -18
  448. data/rbi/anthropic/models/beta/message_create_params.rbi +55 -22
  449. data/rbi/anthropic/models/beta/messages/batch_create_params.rbi +55 -22
  450. data/rbi/anthropic/models/beta/organization/beta_analytics_cost_bucketed_result.rbi +6 -6
  451. data/rbi/anthropic/models/beta/organization/beta_analytics_cost_users_item.rbi +6 -6
  452. data/rbi/anthropic/models/beta/organization/beta_analytics_usage_bucketed_result.rbi +6 -6
  453. data/rbi/anthropic/models/beta/organization/beta_analytics_usage_users_item.rbi +6 -6
  454. data/rbi/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rbi +39 -0
  455. data/rbi/anthropic/models/beta/organization/beta_spend_limit.rbi +13 -6
  456. data/rbi/anthropic/models/beta/organization/beta_spend_limit_usage_tier_scope.rbi +38 -0
  457. data/rbi/anthropic/models/beta/organization/beta_spend_summary.rbi +18 -4
  458. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination.rbi +191 -0
  459. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rbi +53 -0
  460. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rbi +106 -0
  461. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rbi +95 -0
  462. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rbi +31 -0
  463. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rbi +39 -0
  464. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rbi +33 -0
  465. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rbi +35 -0
  466. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state.rbi +99 -0
  467. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rbi +66 -0
  468. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rbi +34 -0
  469. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rbi +31 -0
  470. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rbi +33 -0
  471. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rbi +81 -0
  472. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rbi +47 -0
  473. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rbi +62 -0
  474. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rbi +88 -0
  475. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rbi +31 -0
  476. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_traces.rbi +97 -0
  477. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rbi +120 -0
  478. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rbi +93 -0
  479. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rbi +33 -0
  480. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rbi +33 -0
  481. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rbi +32 -0
  482. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rbi +80 -0
  483. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rbi +31 -0
  484. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rbi +80 -0
  485. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rbi +107 -0
  486. data/rbi/anthropic/models/beta/organization/invite_create_params.rbi +6 -3
  487. data/rbi/anthropic/models/beta/organization/spend_limit_list_params.rbi +2 -8
  488. data/rbi/anthropic/models/beta/organization/telemetry_destination_create_params.rbi +188 -0
  489. data/rbi/anthropic/models/beta/organization/telemetry_destination_delete_params.rbi +75 -0
  490. data/rbi/anthropic/models/beta/organization/telemetry_destination_list_params.rbi +116 -0
  491. data/rbi/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rbi +75 -0
  492. data/rbi/anthropic/models/beta/organization/telemetry_destination_test_params.rbi +75 -0
  493. data/rbi/anthropic/models/beta/organization/telemetry_destination_update_params.rbi +266 -0
  494. data/rbi/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rbi +61 -0
  495. data/rbi/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rbi +73 -0
  496. data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rbi +86 -0
  497. data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rbi +102 -0
  498. data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rbi +86 -0
  499. data/rbi/anthropic/models/beta/organization/user_update_params.rbi +6 -3
  500. data/rbi/anthropic/models/beta/session_archive_params.rbi +4 -2
  501. data/rbi/anthropic/models/beta/session_create_params.rbi +4 -2
  502. data/rbi/anthropic/models/beta/session_delete_params.rbi +4 -2
  503. data/rbi/anthropic/models/beta/session_list_params.rbi +4 -2
  504. data/rbi/anthropic/models/beta/session_retrieve_params.rbi +4 -2
  505. data/rbi/anthropic/models/beta/session_update_params.rbi +4 -2
  506. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_agent_custom_tool_use_event.rbi +3 -1
  507. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_event_params.rbi +2 -2
  508. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rbi +17 -0
  509. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_send_session_events.rbi +2 -2
  510. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_session_event.rbi +2 -2
  511. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rbi +9 -0
  512. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_stream_session_events.rbi +2 -2
  513. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_stream_session_thread_events.rbi +2 -2
  514. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event.rbi +4 -4
  515. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event_params.rbi +4 -4
  516. data/rbi/anthropic/models/beta/sessions/event_list_params.rbi +4 -2
  517. data/rbi/anthropic/models/beta/sessions/event_send_params.rbi +4 -2
  518. data/rbi/anthropic/models/beta/sessions/event_stream_params.rbi +4 -2
  519. data/rbi/anthropic/models/beta/sessions/resource_add_params.rbi +4 -2
  520. data/rbi/anthropic/models/beta/sessions/resource_delete_params.rbi +4 -2
  521. data/rbi/anthropic/models/beta/sessions/resource_list_params.rbi +4 -2
  522. data/rbi/anthropic/models/beta/sessions/resource_retrieve_params.rbi +4 -2
  523. data/rbi/anthropic/models/beta/sessions/resource_update_params.rbi +4 -2
  524. data/rbi/anthropic/models/beta/sessions/thread_archive_params.rbi +4 -2
  525. data/rbi/anthropic/models/beta/sessions/thread_list_params.rbi +4 -2
  526. data/rbi/anthropic/models/beta/sessions/thread_retrieve_params.rbi +4 -2
  527. data/rbi/anthropic/models/beta/sessions/threads/event_list_params.rbi +4 -2
  528. data/rbi/anthropic/models/beta/sessions/threads/event_stream_params.rbi +4 -2
  529. data/rbi/anthropic/models/beta/tunnel_archive_params.rbi +4 -2
  530. data/rbi/anthropic/models/beta/tunnel_create_params.rbi +4 -2
  531. data/rbi/anthropic/models/beta/tunnel_list_params.rbi +4 -2
  532. data/rbi/anthropic/models/beta/tunnel_retrieve_params.rbi +4 -2
  533. data/rbi/anthropic/models/beta/tunnel_reveal_token_params.rbi +4 -2
  534. data/rbi/anthropic/models/beta/tunnel_rotate_token_params.rbi +4 -2
  535. data/rbi/anthropic/models/beta/tunnels/certificate_archive_params.rbi +4 -2
  536. data/rbi/anthropic/models/beta/tunnels/certificate_create_params.rbi +4 -2
  537. data/rbi/anthropic/models/beta/tunnels/certificate_list_params.rbi +4 -2
  538. data/rbi/anthropic/models/beta/tunnels/certificate_retrieve_params.rbi +4 -2
  539. data/rbi/anthropic/models/beta/user_profile_create_enrollment_url_params.rbi +4 -2
  540. data/rbi/anthropic/models/beta/user_profile_create_params.rbi +4 -2
  541. data/rbi/anthropic/models/beta/user_profile_list_params.rbi +4 -2
  542. data/rbi/anthropic/models/beta/user_profile_retrieve_params.rbi +4 -2
  543. data/rbi/anthropic/models/beta/user_profile_update_params.rbi +4 -2
  544. data/rbi/anthropic/models/beta/vault_archive_params.rbi +4 -2
  545. data/rbi/anthropic/models/beta/vault_create_params.rbi +4 -2
  546. data/rbi/anthropic/models/beta/vault_delete_params.rbi +4 -2
  547. data/rbi/anthropic/models/beta/vault_list_params.rbi +4 -2
  548. data/rbi/anthropic/models/beta/vault_retrieve_params.rbi +4 -2
  549. data/rbi/anthropic/models/beta/vault_update_params.rbi +4 -2
  550. data/rbi/anthropic/models/beta/vaults/credential_archive_params.rbi +4 -2
  551. data/rbi/anthropic/models/beta/vaults/credential_create_params.rbi +4 -2
  552. data/rbi/anthropic/models/beta/vaults/credential_delete_params.rbi +4 -2
  553. data/rbi/anthropic/models/beta/vaults/credential_list_params.rbi +4 -2
  554. data/rbi/anthropic/models/beta/vaults/credential_mcp_oauth_validate_params.rbi +4 -2
  555. data/rbi/anthropic/models/beta/vaults/credential_retrieve_params.rbi +4 -2
  556. data/rbi/anthropic/models/beta/vaults/credential_update_params.rbi +4 -2
  557. data/rbi/anthropic/models/message_count_tokens_params.rbi +85 -18
  558. data/rbi/anthropic/models/message_create_params.rbi +77 -18
  559. data/rbi/anthropic/models/messages/batch_create_params.rbi +101 -18
  560. data/rbi/anthropic/models/model.rbi +0 -2
  561. data/rbi/anthropic/models/organization/invite_create_params.rbi +6 -3
  562. data/rbi/anthropic/models/organization/user_update_params.rbi +6 -3
  563. data/rbi/anthropic/models/thinking_config_adaptive.rbi +9 -6
  564. data/rbi/anthropic/models/thinking_config_enabled.rbi +9 -6
  565. data/rbi/anthropic/models/thinking_config_param.rbi +11 -9
  566. data/rbi/anthropic/models/thinking_types.rbi +27 -2
  567. data/rbi/anthropic/models/usage.rbi +29 -3
  568. data/rbi/anthropic/request_options.rbi +5 -0
  569. data/rbi/anthropic/resources/beta/agents/versions.rbi +2 -1
  570. data/rbi/anthropic/resources/beta/agents.rbi +32 -7
  571. data/rbi/anthropic/resources/beta/deployment_runs.rbi +4 -2
  572. data/rbi/anthropic/resources/beta/deployments.rbi +16 -8
  573. data/rbi/anthropic/resources/beta/dreams.rbi +10 -5
  574. data/rbi/anthropic/resources/beta/memory_stores/memories.rbi +10 -5
  575. data/rbi/anthropic/resources/beta/memory_stores/memory_versions.rbi +6 -3
  576. data/rbi/anthropic/resources/beta/memory_stores.rbi +12 -6
  577. data/rbi/anthropic/resources/beta/messages/batches.rbi +2 -1
  578. data/rbi/anthropic/resources/beta/messages.rbi +71 -32
  579. data/rbi/anthropic/resources/beta/organization/invites.rbi +2 -1
  580. data/rbi/anthropic/resources/beta/organization/spend_limits/effective.rbi +2 -2
  581. data/rbi/anthropic/resources/beta/organization/spend_limits.rbi +8 -12
  582. data/rbi/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rbi +127 -0
  583. data/rbi/anthropic/resources/beta/organization/telemetry_destinations.rbi +306 -0
  584. data/rbi/anthropic/resources/beta/organization/users.rbi +2 -1
  585. data/rbi/anthropic/resources/beta/organization.rbi +7 -0
  586. data/rbi/anthropic/resources/beta/sessions/events.rbi +8 -4
  587. data/rbi/anthropic/resources/beta/sessions/resources.rbi +10 -5
  588. data/rbi/anthropic/resources/beta/sessions/threads/events.rbi +6 -3
  589. data/rbi/anthropic/resources/beta/sessions/threads.rbi +6 -3
  590. data/rbi/anthropic/resources/beta/sessions.rbi +12 -6
  591. data/rbi/anthropic/resources/beta/tunnels/certificates.rbi +8 -4
  592. data/rbi/anthropic/resources/beta/tunnels.rbi +12 -6
  593. data/rbi/anthropic/resources/beta/user_profiles.rbi +13 -5
  594. data/rbi/anthropic/resources/beta/vaults/credentials.rbi +14 -7
  595. data/rbi/anthropic/resources/beta/vaults.rbi +12 -6
  596. data/rbi/anthropic/resources/completions.rbi +6 -1
  597. data/rbi/anthropic/resources/messages/batches.rbi +2 -1
  598. data/rbi/anthropic/resources/messages.rbi +76 -28
  599. data/rbi/anthropic/resources/organization/invites.rbi +2 -1
  600. data/rbi/anthropic/resources/organization/users.rbi +2 -1
  601. data/sig/anthropic/client.rbs +1 -0
  602. data/sig/anthropic/helpers/bedrock/client.rbs +2 -1
  603. data/sig/anthropic/helpers/google_cloud/client.rbs +2 -1
  604. data/sig/anthropic/helpers/streaming/message_stream.rbs +2 -2
  605. data/sig/anthropic/helpers/vertex/client.rbs +2 -1
  606. data/sig/anthropic/internal/tracing.rbs +477 -0
  607. data/sig/anthropic/internal/transport/base_client.rbs +37 -2
  608. data/sig/anthropic/internal/type/base_stream.rbs +1 -1
  609. data/sig/anthropic/models/anthropic_beta.rbs +2 -0
  610. data/sig/anthropic/models/beta/agent_create_params.rbs +5 -0
  611. data/sig/anthropic/models/beta/agent_update_params.rbs +5 -0
  612. data/sig/anthropic/models/beta/beta_managed_agents_agent.rbs +5 -0
  613. data/sig/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rbs +20 -0
  614. data/sig/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rbs +20 -0
  615. data/sig/anthropic/models/beta/beta_managed_agents_execution_identity.rbs +42 -0
  616. data/sig/anthropic/models/beta/beta_managed_agents_execution_identity_params.rbs +42 -0
  617. data/sig/anthropic/models/beta/beta_managed_agents_model.rbs +0 -2
  618. data/sig/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rbs +18 -0
  619. data/sig/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rbs +18 -0
  620. data/sig/anthropic/models/beta/beta_managed_agents_session_agent.rbs +5 -0
  621. data/sig/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rbs +2 -0
  622. data/sig/anthropic/models/beta/beta_managed_agents_session_thread_agent.rbs +5 -0
  623. data/sig/anthropic/models/beta/beta_thinking_types.rbs +5 -0
  624. data/sig/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rbs +23 -0
  625. data/sig/anthropic/models/beta/organization/beta_spend_limit.rbs +6 -0
  626. data/sig/anthropic/models/beta/organization/beta_spend_limit_usage_tier_scope.rbs +17 -0
  627. data/sig/anthropic/models/beta/organization/beta_spend_summary.rbs +12 -0
  628. data/sig/anthropic/models/beta/organization/beta_telemetry_destination.rbs +74 -0
  629. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rbs +23 -0
  630. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rbs +30 -0
  631. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rbs +51 -0
  632. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rbs +18 -0
  633. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rbs +18 -0
  634. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rbs +18 -0
  635. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rbs +18 -0
  636. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state.rbs +42 -0
  637. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rbs +29 -0
  638. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rbs +18 -0
  639. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rbs +17 -0
  640. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rbs +18 -0
  641. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rbs +40 -0
  642. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rbs +20 -0
  643. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rbs +29 -0
  644. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rbs +42 -0
  645. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rbs +17 -0
  646. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_traces.rbs +39 -0
  647. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rbs +41 -0
  648. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rbs +45 -0
  649. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rbs +17 -0
  650. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rbs +17 -0
  651. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rbs +17 -0
  652. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rbs +25 -0
  653. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rbs +17 -0
  654. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rbs +25 -0
  655. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rbs +48 -0
  656. data/sig/anthropic/models/beta/organization/telemetry_destination_create_params.rbs +65 -0
  657. data/sig/anthropic/models/beta/organization/telemetry_destination_delete_params.rbs +39 -0
  658. data/sig/anthropic/models/beta/organization/telemetry_destination_list_params.rbs +55 -0
  659. data/sig/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rbs +39 -0
  660. data/sig/anthropic/models/beta/organization/telemetry_destination_test_params.rbs +39 -0
  661. data/sig/anthropic/models/beta/organization/telemetry_destination_update_params.rbs +79 -0
  662. data/sig/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rbs +36 -0
  663. data/sig/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rbs +41 -0
  664. data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rbs +46 -0
  665. data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rbs +55 -0
  666. data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rbs +46 -0
  667. data/sig/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rbs +5 -0
  668. data/sig/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rbs +3 -0
  669. data/sig/anthropic/models/message_count_tokens_params.rbs +16 -0
  670. data/sig/anthropic/models/message_create_params.rbs +16 -0
  671. data/sig/anthropic/models/messages/batch_create_params.rbs +16 -0
  672. data/sig/anthropic/models/model.rbs +0 -2
  673. data/sig/anthropic/models/thinking_types.rbs +5 -0
  674. data/sig/anthropic/models/usage.rbs +19 -3
  675. data/sig/anthropic/request_options.rbs +3 -0
  676. data/sig/anthropic/resources/beta/agents.rbs +2 -0
  677. data/sig/anthropic/resources/beta/messages/batches.rbs +1 -1
  678. data/sig/anthropic/resources/beta/messages.rbs +1 -1
  679. data/sig/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rbs +35 -0
  680. data/sig/anthropic/resources/beta/organization/telemetry_destinations.rbs +61 -0
  681. data/sig/anthropic/resources/beta/organization.rbs +2 -0
  682. data/sig/anthropic/resources/beta/sessions/events.rbs +1 -1
  683. data/sig/anthropic/resources/beta/sessions/threads/events.rbs +1 -1
  684. data/sig/anthropic/resources/completions.rbs +1 -1
  685. data/sig/anthropic/resources/messages/batches.rbs +1 -1
  686. data/sig/anthropic/resources/messages.rbs +5 -1
  687. metadata +181 -2
@@ -122,8 +122,9 @@ module Anthropic
122
122
  # @return [Anthropic::Models::BetaMessage, nil]
123
123
  def next_message
124
124
  message = nil
125
- fold do
126
- message = @client.beta.messages.create(with_helper_header(_1, StainlessHelperHeader::BETA_TOOL_RUNNER))
125
+ fold do |params|
126
+ message =
127
+ @client.beta.messages.create(with_helper_header(params, StainlessHelperHeader::BETA_TOOL_RUNNER))
127
128
  [true, message]
128
129
  end
129
130
  message
@@ -132,7 +133,16 @@ module Anthropic
132
133
  # @return [Array<Anthropic::Models::BetaMessage>]
133
134
  def run_until_finished
134
135
  messages = []
135
- each_streaming { messages << _1.accumulated_message }
136
+ # Not `each_streaming`: an error from this block is the runner's, not the application's.
137
+ fold do |params|
138
+ stream =
139
+ @client.beta.messages.stream(with_helper_header(params, StainlessHelperHeader::BETA_TOOL_RUNNER))
140
+ message = stream.accumulated_message
141
+ messages << message
142
+ [false, message]
143
+ ensure
144
+ stream&.close
145
+ end
136
146
  messages
137
147
  end
138
148
 
@@ -142,9 +152,10 @@ module Anthropic
142
152
  raise ArgumentError.new("A block must be given to ##{__method__}")
143
153
  end
144
154
 
145
- fold do
146
- message = @client.beta.messages.create(with_helper_header(_1, StainlessHelperHeader::BETA_TOOL_RUNNER))
147
- blk.call(message)
155
+ fold do |params|
156
+ message =
157
+ @client.beta.messages.create(with_helper_header(params, StainlessHelperHeader::BETA_TOOL_RUNNER))
158
+ in_app { blk.call(message) }
148
159
  [false, message]
149
160
  end
150
161
  end
@@ -155,9 +166,10 @@ module Anthropic
155
166
  raise ArgumentError.new("A block must be given to ##{__method__}")
156
167
  end
157
168
 
158
- fold do
159
- stream = @client.beta.messages.stream(with_helper_header(_1, StainlessHelperHeader::BETA_TOOL_RUNNER))
160
- blk.call(stream)
169
+ fold do |params|
170
+ stream =
171
+ @client.beta.messages.stream(with_helper_header(params, StainlessHelperHeader::BETA_TOOL_RUNNER))
172
+ in_app { blk.call(stream) }
161
173
  [false, stream.accumulated_message]
162
174
  ensure
163
175
  stream&.close
@@ -166,11 +178,74 @@ module Anthropic
166
178
 
167
179
  # @api private
168
180
  #
181
+ # Runs the runner's own code with the tool runner span current.
182
+ private def in_tool_runner(&blk)
183
+ otel_context = @tool_runner_otel_context
184
+ otel_context ? OpenTelemetry::Context.with_current(otel_context, &blk) : yield
185
+ end
186
+
187
+ # @api private
188
+ #
189
+ # @param raw [Object]
190
+ #
191
+ # @return [Array<Object>, String]
192
+ private def tool_result_content(raw) = raw.is_a?(Array) ? raw : raw.to_s
193
+
194
+ # @api private
195
+ #
196
+ # Runs the application's block in the context it started the loop from, where the tool runner
197
+ # span is not current. An error it raises is the application stopping the runner, except an API
198
+ # error: that is the stream the runner yielded failing as the application reads it.
199
+ private def in_app(&blk)
200
+ otel_context = @app_otel_context
201
+ otel_context ? OpenTelemetry::Context.with_current(otel_context, &blk) : yield
202
+ rescue Anthropic::Errors::APIError
203
+ raise
204
+ rescue StandardError
205
+ @stopped_by_app = true
206
+ raise
207
+ end
208
+
209
+ # @api private
210
+ #
211
+ # Runs one loop in its `anthropic.messages.tool_runner` span, which has no status when the
212
+ # application stops the loop.
213
+ #
169
214
  # @yieldparam [Array(Boolean, Anthropic::Models::Beta::MessageCreateParams)]
170
215
  private def fold(&blk)
171
216
  @compaction_phase = nil if @compaction_phase == :handling
172
217
  return nil if finished? && @pending_compaction.nil?
173
218
 
219
+ # A loop the application starts from inside another one has its own span.
220
+ outer = [@tool_runner_otel_context, @app_otel_context, @stopped_by_app]
221
+ @stopped_by_app = false
222
+ tool_runner_span = Anthropic::Helpers::Tracing.start_tool_runner_span(@client, params)
223
+ if tool_runner_span
224
+ @tool_runner_otel_context = OpenTelemetry::Trace.context_with_span(tool_runner_span)
225
+ # The application can start each loop from another context, so it is read on every entry.
226
+ @app_otel_context = OpenTelemetry::Context.current
227
+ else
228
+ @tool_runner_otel_context = @app_otel_context = nil
229
+ end
230
+ begin
231
+ value = in_tool_runner { run_loop(&blk) }
232
+ returned = true
233
+ value
234
+ rescue StandardError => e
235
+ error = e unless @stopped_by_app
236
+ raise
237
+ ensure
238
+ if tool_runner_span
239
+ Anthropic::Helpers::Tracing.end_tool_runner_span(tool_runner_span, returned: returned, error: error)
240
+ end
241
+ @tool_runner_otel_context, @app_otel_context, @stopped_by_app = outer
242
+ end
243
+ end
244
+
245
+ # @api private
246
+ #
247
+ # @yieldparam [Array(Boolean, Anthropic::Models::Beta::MessageCreateParams)]
248
+ private def run_loop(&blk)
174
249
  brk = false
175
250
  # rubocop:disable Metrics/BlockLength
176
251
  # rubocop:disable Style/CaseEquality
@@ -213,27 +288,42 @@ module Anthropic
213
288
  mapped =
214
289
  tool_uses.map do |tool_use|
215
290
  resp = {type: :tool_result, tool_use_id: tool_use.id}
291
+ # The result of a toolset member's call has to name the toolset as the call does.
292
+ resp[:toolset_name] = tool_use[:toolset_name] if tool_use[:toolset_name].is_a?(String)
216
293
  if available.include?(tool_use.name) &&
217
294
  (tool = @tool_overrides.fetch(tool_use.name) do
218
295
  tools.find do
219
296
  _1.class.model === tool_use.parsed && Anthropic::Helpers::Messages.tool_api_name(_1) == tool_use.name
220
297
  end
221
298
  end)
299
+ tool_use_span = Anthropic::Helpers::Tracing.start_tool_use_span(
300
+ @client,
301
+ tool,
302
+ tool_use,
303
+ params[:request_options]
304
+ )
222
305
  begin
223
306
  # `parsed` was read against `params[:tools]`, which an added tool is not in.
224
307
  input = tool_use.parsed
225
308
  input = Anthropic::Internal::Type::Converter.coerce(tool, tool_use.input) if @tool_overrides.key?(tool_use.name)
226
- raw = tool.call(input)
309
+ run = proc { tool.call(input) }
310
+ raw = tool_use_span ? OpenTelemetry::Trace.with_span(tool_use_span, &run) : run.call
227
311
  is_error = false
228
312
  rescue StandardError => e
229
313
  is_error = true
230
314
  raw = e.message
315
+ ensure
316
+ if tool_use_span
317
+ # `is_error` is unset when the run was interrupted, and then so is the span's status.
318
+ result = {content: tool_result_content(raw), is_error:} unless is_error.nil?
319
+ Anthropic::Helpers::Tracing.end_tool_use_span(@client, tool_use_span, tool_use.input, result)
320
+ end
231
321
  end
232
322
  else
233
323
  is_error = true
234
324
  raw = "Error: parsed '#{tool_use.name}' not found"
235
325
  end
236
- content = raw.is_a?(Array) ? raw : raw.to_s
326
+ content = tool_result_content(raw)
237
327
  {**resp, content:, is_error:}
238
328
  end
239
329
 
@@ -585,6 +675,9 @@ module Anthropic
585
675
  @tool_overrides = {}
586
676
  @pending_compaction = nil
587
677
  @compaction_phase = nil
678
+ @tool_runner_otel_context = nil
679
+ @app_otel_context = nil
680
+ @stopped_by_app = false
588
681
  end
589
682
 
590
683
  private def with_helper_header(params, helper)
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Anthropic
4
+ module Helpers
5
+ module Tracing
6
+ GEN_AI_CONVERSATION_ID = "gen_ai.conversation.id"
7
+ GEN_AI_INPUT_MESSAGES = "gen_ai.input.messages"
8
+ GEN_AI_OUTPUT_MESSAGES = "gen_ai.output.messages"
9
+ GEN_AI_OUTPUT_TYPE = "gen_ai.output.type"
10
+ GEN_AI_REQUEST_STOP_SEQUENCES = "gen_ai.request.stop_sequences"
11
+ GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK = "gen_ai.response.time_to_first_chunk"
12
+ GEN_AI_SYSTEM_INSTRUCTIONS = "gen_ai.system_instructions"
13
+ GEN_AI_TOOL_CALL_ARGUMENTS = "gen_ai.tool.call.arguments"
14
+ GEN_AI_TOOL_CALL_ID = "gen_ai.tool.call.id"
15
+ GEN_AI_TOOL_DESCRIPTION = "gen_ai.tool.description"
16
+ GEN_AI_TOOL_NAME = "gen_ai.tool.name"
17
+ GEN_AI_TOOL_TYPE = "gen_ai.tool.type"
18
+ GEN_AI_USAGE_INPUT_TOKENS = "gen_ai.usage.input_tokens"
19
+ GEN_AI_OPERATION_NAME_VALUE_EXECUTE_TOOL = "execute_tool"
20
+ GEN_AI_OPERATION_NAME_VALUE_INVOKE_AGENT = "invoke_agent"
21
+ GEN_AI_TOOL_TYPE_VALUE_FUNCTION = "function"
22
+ GEN_AI_OUTPUT_TYPE_VALUE_JSON = "json"
23
+
24
+ ANTHROPIC_CONTENT_TRUNCATED = "anthropic.content.truncated"
25
+ ANTHROPIC_MESSAGE_BATCH_REQUEST_COUNT = "anthropic.message.batch.request_count"
26
+ ANTHROPIC_SESSION_THREAD_ID = "anthropic.session.thread.id"
27
+ ANTHROPIC_TOOLSET_NAME = "anthropic.toolset.name"
28
+ ANTHROPIC_TOOL_RESULT_CONTENT = "anthropic.tool_result.content"
29
+ ANTHROPIC_USAGE_COMPACTION_INPUT_TOKENS = "anthropic.usage.compaction.input_tokens"
30
+ ANTHROPIC_USAGE_COMPACTION_OUTPUT_TOKENS = "anthropic.usage.compaction.output_tokens"
31
+ GEN_AI_AGENT_ID = "gen_ai.agent.id"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Anthropic
4
+ module Helpers
5
+ module Tracing
6
+ class << self
7
+ # @param options [Anthropic::RequestOptions, Hash{Symbol=>Object}, nil] request options
8
+ #
9
+ # @return [String, nil]
10
+ def conversation_id(options)
11
+ Anthropic::Internal::Tracing.request_option(options.to_h[:open_telemetry])[:conversation_id]&.to_s
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,346 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Anthropic
4
+ module Helpers
5
+ module Tracing
6
+ # The most bytes the `content` attributes of one span hold, unless the client's
7
+ # `max_content_bytes` sets another bound.
8
+ CONTENT_LIMIT = Anthropic::Internal::Tracing::DEFAULT_MAX_CONTENT_BYTES
9
+
10
+ class << self
11
+ # @param span [OpenTelemetry::Trace::Span]
12
+ # @param body [Hash{Symbol=>Object}]
13
+ # @param output [Array<Object>, nil] the response's content, once complete
14
+ # @param limit [Integer] the most bytes the `content` attributes hold
15
+ def set_message_content_attributes(span, body, output, limit: CONTENT_LIMIT)
16
+ body = symbolize_keys(body.slice(:messages, :system, :stop_sequences))
17
+ output = [{role: "assistant", parts: parts(output)}] unless output.nil?
18
+ stop_sequences = body[:stop_sequences]
19
+ set_content_attributes(
20
+ span,
21
+ messages(body[:messages]),
22
+ {
23
+ GEN_AI_SYSTEM_INSTRUCTIONS => (parts(body[:system]) unless body[:system].nil?),
24
+ GEN_AI_OUTPUT_MESSAGES => output
25
+ },
26
+ stop_sequences: (text_array(stop_sequences) if stop_sequences.is_a?(Array)),
27
+ limit: limit
28
+ )
29
+ end
30
+
31
+ # `nil` when `string` is not text in its encoding: an exporter fails on a string that is not
32
+ # valid UTF-8, which would lose every span it exports with it.
33
+ #
34
+ # @param string [String]
35
+ #
36
+ # @return [String, nil]
37
+ def utf8_text(string)
38
+ text =
39
+ if string.encoding == Encoding::BINARY
40
+ string.dup.force_encoding(Encoding::UTF_8)
41
+ else
42
+ string.encode(Encoding::UTF_8)
43
+ end
44
+ text if text.valid_encoding?
45
+ rescue EncodingError
46
+ nil
47
+ end
48
+
49
+ # `nil` when any item is not text ({utf8_text}).
50
+ #
51
+ # @param array [Array<Object>]
52
+ #
53
+ # @return [Array<String>, nil]
54
+ def text_array(array)
55
+ texts = array.map { utf8_text(_1.to_s) }
56
+ texts unless texts.any?(&:nil?)
57
+ end
58
+
59
+ # @param content [String, Array<Object>, nil]
60
+ #
61
+ # @return [Array<Hash{Symbol=>Object}>]
62
+ def parts(content)
63
+ case content
64
+ in String
65
+ [{type: "text", content: content}]
66
+ in Array
67
+ content.map { part(_1) }
68
+ else
69
+ []
70
+ end
71
+ end
72
+
73
+ # The content blocks of a `tool_result` block. A `text` or `search_result` block keeps its
74
+ # fields ({result_value}), and any other block only its type.
75
+ #
76
+ # @param content [String, Array<Object>, nil]
77
+ #
78
+ # @return [Array<Object>]
79
+ def tool_result_content(content) = tool_result_blocks(symbolize_keys(content))
80
+
81
+ # A deep copy of `value` whose Hashes have Symbol keys, and whose models are such Hashes.
82
+ #
83
+ # @param value [Object]
84
+ #
85
+ # @return [Object]
86
+ def symbolize_keys(value)
87
+ case value
88
+ in Hash
89
+ value.to_h { |key, item| [key.is_a?(String) ? key.to_sym : key, symbolize_keys(item)] }
90
+ in Array
91
+ value.map { symbolize_keys(_1) }
92
+ in Anthropic::Internal::Type::BaseModel
93
+ symbolize_keys(value.to_h)
94
+ else
95
+ value
96
+ end
97
+ end
98
+
99
+ # The `content` of a result block other than `tool_result`, such as `web_search_tool_result`.
100
+ #
101
+ # @param content [String, Array<Object>, Hash{Symbol=>Object}, Anthropic::Internal::Type::BaseModel, nil]
102
+ #
103
+ # @return [Array<Object>, Hash{Symbol=>Object}]
104
+ def result_block_content(content)
105
+ case content
106
+ in nil
107
+ []
108
+ in String
109
+ [{type: "text", text: content}]
110
+ in Array
111
+ content.map do
112
+ type = block_type(_1)
113
+ %w[text search_result web_search_result].include?(type) ? result_value(_1) : {type: type}
114
+ end
115
+ else
116
+ result_value(content)
117
+ end
118
+ end
119
+
120
+ # `value` without its `encrypted_*` fields, which are opaque, and without image and document
121
+ # data, which is large and binary.
122
+ #
123
+ # @param value [Object]
124
+ #
125
+ # @return [Object]
126
+ def result_value(value)
127
+ case value
128
+ in Hash | Anthropic::Internal::Type::BaseModel
129
+ type = block_type(value)
130
+ return {type: type} if %w[image document].include?(type)
131
+
132
+ fields = value.to_h.reject { |name, _| name.to_s.start_with?("encrypted_") }
133
+ view = type == "text_editor_code_execution_view_result"
134
+ fields = fields.except(:content) if view && %w[image pdf].include?(fields[:file_type].to_s)
135
+ fields.transform_values { result_value(_1) }
136
+ in Array
137
+ value.map { result_value(_1) }
138
+ else
139
+ value
140
+ end
141
+ end
142
+
143
+ # @param block [Hash{Symbol=>Object}, Anthropic::Internal::Type::BaseModel]
144
+ #
145
+ # @return [String]
146
+ def block_type(block)
147
+ case block[:type]
148
+ in String | Symbol => type
149
+ type.to_s
150
+ else
151
+ "unknown"
152
+ end
153
+ end
154
+
155
+ # @param block [Hash{Symbol=>Object}, Anthropic::Internal::Type::BaseModel]
156
+ #
157
+ # @return [Hash{Symbol=>Object}]
158
+ def part(block)
159
+ case block_type(block)
160
+ in "text"
161
+ {type: "text", content: block[:text].to_s}
162
+ in "thinking"
163
+ {type: "reasoning", content: block[:thinking].to_s}
164
+ in "tool_use" | "server_tool_use" => type
165
+ call = {type: "tool_call", id: block[:id], name: block[:name], arguments: block[:input]}
166
+ # Only the `tool_use` of a toolset member has the name, and a `nil` one is left out.
167
+ toolset_name = block[:toolset_name] if type == "tool_use"
168
+ toolset_name.is_a?(String) ? {**call, anthropic_toolset_name: toolset_name} : call
169
+ in "mcp_tool_use"
170
+ {
171
+ type: "tool_call",
172
+ id: block[:id],
173
+ name: block[:name],
174
+ arguments: block[:input],
175
+ anthropic_mcp_server_name: block[:server_name]
176
+ }
177
+ in "tool_result"
178
+ {
179
+ type: "tool_call_response",
180
+ id: block[:tool_use_id],
181
+ response: tool_result_blocks(block[:content])
182
+ }
183
+ in /_tool_result\z/
184
+ {
185
+ type: "tool_call_response",
186
+ id: block[:tool_use_id],
187
+ response: result_block_content(block[:content])
188
+ }
189
+ in type
190
+ {type: "anthropic_#{type}"}
191
+ end
192
+ end
193
+
194
+ # @param messages [Array<Object>, nil]
195
+ #
196
+ # @return [Array<Hash{Symbol=>Object}>]
197
+ def messages(messages)
198
+ Array(messages).map { {role: _1[:role].to_s, parts: parts(_1[:content])} }
199
+ end
200
+
201
+ # Sets each value as one JSON string, and `stop_sequences` as it is. When they total more than
202
+ # `limit`, content is removed, and the span gets `anthropic.content.truncated`.
203
+ # First, `stop_sequences`, or the `gen_ai.tool.call.arguments` of a tool's span, is left out
204
+ # whole when it is over `limit` by itself.
205
+ # Then message parts are removed whole ({truncate_parts}): those of
206
+ # `gen_ai.system_instructions`, then of each input message, oldest first, then of each output
207
+ # message. On a tool's span, `anthropic.tool_result.content` loses content blocks instead, the
208
+ # last one first.
209
+ # Emptied lists stay, so what is left can still be over a small `limit`.
210
+ #
211
+ # @param span [OpenTelemetry::Trace::Span]
212
+ # @param input [Array<Hash{Symbol=>Object}>, nil] the value of `gen_ai.input.messages`
213
+ # @param others [Hash{String=>Object, nil}] the other attributes, by name
214
+ # @param stop_sequences [Array<String>, nil] the value of `gen_ai.request.stop_sequences`
215
+ # @param limit [Integer] the most bytes the values hold
216
+ def set_content_attributes(span, input, others, stop_sequences: nil, limit: CONTENT_LIMIT)
217
+ values = {**others, GEN_AI_INPUT_MESSAGES => input}.compact
218
+ jsons = values.transform_values { JSON.generate(_1) }
219
+ stop_sequences = nil if stop_sequences&.empty?
220
+ stop_bytes = stop_sequences.to_a.sum(&:bytesize)
221
+ reduced = false
222
+ if stop_bytes > limit
223
+ stop_sequences = nil
224
+ stop_bytes = 0
225
+ reduced = true
226
+ end
227
+ if jsons[GEN_AI_TOOL_CALL_ARGUMENTS].to_s.bytesize > limit
228
+ jsons.delete(GEN_AI_TOOL_CALL_ARGUMENTS)
229
+ reduced = true
230
+ end
231
+ excess = jsons.sum { _2.bytesize } + stop_bytes - limit
232
+ blocks = others[ANTHROPIC_TOOL_RESULT_CONTENT]
233
+ if excess.positive? && blocks&.any?
234
+ jsons[ANTHROPIC_TOOL_RESULT_CONTENT] = JSON.generate(blocks.first(kept_items(blocks, excess)))
235
+ reduced = true
236
+ elsif excess.positive?
237
+ fitted = values.slice(GEN_AI_SYSTEM_INSTRUCTIONS).transform_values(&:dup)
238
+ [GEN_AI_INPUT_MESSAGES, GEN_AI_OUTPUT_MESSAGES].each do |name|
239
+ fitted[name] = values[name].map { {**_1, parts: _1[:parts].dup} } if values.key?(name)
240
+ end
241
+ lists = fitted.flat_map do |name, value|
242
+ name == GEN_AI_SYSTEM_INSTRUCTIONS ? [value] : value.map { _1[:parts] }
243
+ end
244
+ if truncate_parts(lists, excess)
245
+ fitted.each { jsons[_1] = JSON.generate(_2) }
246
+ reduced = true
247
+ end
248
+ end
249
+ jsons.each { span.set_attribute(_1, _2) }
250
+ span.set_attribute(GEN_AI_REQUEST_STOP_SEQUENCES, stop_sequences) unless stop_sequences.nil?
251
+ # Absent, never `false`, on a span that keeps all of its content.
252
+ span.set_attribute(ANTHROPIC_CONTENT_TRUNCATED, true) if reduced
253
+ end
254
+
255
+ # Removes parts from `lists`, in place, from the first on, until `excess` fewer bytes of JSON
256
+ # remain. The last part left, when it is a `text` part, loses the end of its `content` instead.
257
+ #
258
+ # @param lists [Array<Array<Hash{Symbol=>Object}>>] every list of parts of a span, in the
259
+ # order in which they lose parts
260
+ # @param excess [Integer] how far the span's `content` attributes are over the limit
261
+ #
262
+ # @return [Boolean] whether a part was removed or cut
263
+ def truncate_parts(lists, excess)
264
+ left = lists.sum(&:length)
265
+ reduced = false
266
+ lists.each do |parts|
267
+ while excess.positive? && parts.any?
268
+ part = parts.first
269
+ if left == 1 && part[:type] == "text"
270
+ text = text_within(part[:content], excess)
271
+ parts[0] = {**part, content: text}
272
+ return reduced || text != part[:content]
273
+ end
274
+
275
+ parts.shift
276
+ left -= 1
277
+ reduced = true
278
+ # A part that is not the last of its list goes with the comma after it.
279
+ excess -= JSON.generate(part).bytesize + (parts.empty? ? 0 : 1)
280
+ end
281
+ end
282
+ reduced
283
+ end
284
+
285
+ private
286
+
287
+ # How many of `items` stay once items are removed from the end until `excess` fewer bytes of
288
+ # JSON remain.
289
+ #
290
+ # @param items [Array<Object>]
291
+ # @param excess [Integer]
292
+ #
293
+ # @return [Integer]
294
+ def kept_items(items, excess)
295
+ keep = items.length
296
+ while keep.positive? && excess.positive?
297
+ keep -= 1
298
+ # An item that is not the first goes with the comma before it.
299
+ excess -= JSON.generate(items[keep]).bytesize + (keep.zero? ? 0 : 1)
300
+ end
301
+ keep
302
+ end
303
+
304
+ # @param content [String, Array<Object>, nil] with Symbol keys
305
+ #
306
+ # @return [Array<Object>]
307
+ def tool_result_blocks(content)
308
+ return [] if content.nil?
309
+ return [{type: "text", text: content}] if content.is_a?(String)
310
+
311
+ content.map do
312
+ type = block_type(_1)
313
+ %w[text search_result].include?(type) ? result_value(_1) : {type: type}
314
+ end
315
+ end
316
+
317
+ # The longest start of `text` whose JSON is at least `excess` bytes shorter. The cut is made
318
+ # in the JSON, where the bytes are counted, and ends between two characters.
319
+ #
320
+ # @param text [String]
321
+ # @param excess [Integer]
322
+ #
323
+ # @return [String]
324
+ def text_within(text, excess)
325
+ json = JSON.generate(text)
326
+ length = json.bytesize - 2 - excess
327
+ return "" unless length.positive?
328
+
329
+ # A byte of the form 10xxxxxx is inside a character.
330
+ length -= 1 while json.getbyte(length + 1) & 0xC0 == 0x80
331
+ kept = json.byteslice(1, length)
332
+ slash = kept.byterindex("\\")
333
+ if slash && slash > kept.bytesize - 6
334
+ first = slash
335
+ first -= 1 while first.positive? && kept.getbyte(first - 1) == "\\".ord
336
+ # The last of an odd number of backslashes starts an escape: `\u` and four digits, or
337
+ # one character.
338
+ escape = kept.getbyte(slash + 1) == "u".ord ? 6 : 2
339
+ kept = kept.byteslice(0, slash) if (slash - first).even? && slash + escape > kept.bytesize
340
+ end
341
+ JSON.parse(%("#{kept}"))
342
+ end
343
+ end
344
+ end
345
+ end
346
+ end