anthropic 1.78.0 → 1.79.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 (497) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +35 -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/streaming/message_stream.rb +20 -43
  12. data/lib/anthropic/helpers/tools/runner.rb +104 -11
  13. data/lib/anthropic/helpers/tracing/attributes.rb +34 -0
  14. data/lib/anthropic/helpers/tracing/config.rb +16 -0
  15. data/lib/anthropic/helpers/tracing/content.rb +346 -0
  16. data/lib/anthropic/helpers/tracing/recorders.rb +131 -0
  17. data/lib/anthropic/helpers/tracing/response.rb +29 -0
  18. data/lib/anthropic/helpers/tracing/streamed_message.rb +189 -0
  19. data/lib/anthropic/helpers/tracing/tool_spans.rb +138 -0
  20. data/lib/anthropic/helpers/tracing.rb +13 -0
  21. data/lib/anthropic/helpers/vertex/client.rb +19 -2
  22. data/lib/anthropic/internal/tracing.rb +1118 -0
  23. data/lib/anthropic/internal/transport/base_client.rb +174 -10
  24. data/lib/anthropic/internal/transport/pooled_net_requester.rb +6 -0
  25. data/lib/anthropic/models/anthropic_beta.rb +3 -0
  26. data/lib/anthropic/models/beta/agent_create_params.rb +17 -6
  27. data/lib/anthropic/models/beta/agent_update_params.rb +17 -6
  28. data/lib/anthropic/models/beta/beta_dream_input.rb +2 -2
  29. data/lib/anthropic/models/beta/beta_fallbacks_param.rb +6 -2
  30. data/lib/anthropic/models/beta/beta_managed_agents_agent.rb +15 -6
  31. data/lib/anthropic/models/beta/beta_managed_agents_agent_tool_config_params.rb +8 -8
  32. data/lib/anthropic/models/beta/beta_managed_agents_agent_toolset_default_config.rb +2 -2
  33. data/lib/anthropic/models/beta/beta_managed_agents_agent_toolset_default_config_params.rb +2 -2
  34. data/lib/anthropic/models/beta/beta_managed_agents_agent_with_overrides_params.rb +6 -6
  35. data/lib/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rb +29 -0
  36. data/lib/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rb +34 -0
  37. data/lib/anthropic/models/beta/beta_managed_agents_bash_tool_config.rb +2 -2
  38. data/lib/anthropic/models/beta/beta_managed_agents_bash_tool_config_params.rb +2 -2
  39. data/lib/anthropic/models/beta/beta_managed_agents_deployment_initial_event.rb +3 -3
  40. data/lib/anthropic/models/beta/beta_managed_agents_deployment_initial_event_params.rb +3 -3
  41. data/lib/anthropic/models/beta/beta_managed_agents_deployment_paused_reason.rb +2 -2
  42. data/lib/anthropic/models/beta/beta_managed_agents_deployment_paused_reason_error.rb +38 -14
  43. data/lib/anthropic/models/beta/beta_managed_agents_deployment_run.rb +16 -16
  44. data/lib/anthropic/models/beta/beta_managed_agents_deployment_user_define_outcome_event.rb +2 -2
  45. data/lib/anthropic/models/beta/beta_managed_agents_deployment_user_message_event.rb +4 -4
  46. data/lib/anthropic/models/beta/beta_managed_agents_edit_tool_config.rb +2 -2
  47. data/lib/anthropic/models/beta/beta_managed_agents_edit_tool_config_params.rb +2 -2
  48. data/lib/anthropic/models/beta/beta_managed_agents_execution_identity.rb +57 -0
  49. data/lib/anthropic/models/beta/beta_managed_agents_execution_identity_params.rb +62 -0
  50. data/lib/anthropic/models/beta/beta_managed_agents_github_repository_resource_config.rb +2 -2
  51. data/lib/anthropic/models/beta/beta_managed_agents_github_repository_resource_params.rb +2 -2
  52. data/lib/anthropic/models/beta/beta_managed_agents_glob_tool_config.rb +2 -2
  53. data/lib/anthropic/models/beta/beta_managed_agents_glob_tool_config_params.rb +2 -2
  54. data/lib/anthropic/models/beta/beta_managed_agents_grep_tool_config.rb +2 -2
  55. data/lib/anthropic/models/beta/beta_managed_agents_grep_tool_config_params.rb +2 -2
  56. data/lib/anthropic/models/beta/beta_managed_agents_mcp_tool_config.rb +2 -2
  57. data/lib/anthropic/models/beta/beta_managed_agents_mcp_tool_config_params.rb +2 -2
  58. data/lib/anthropic/models/beta/beta_managed_agents_mcp_toolset_default_config.rb +2 -2
  59. data/lib/anthropic/models/beta/beta_managed_agents_mcp_toolset_default_config_params.rb +2 -2
  60. data/lib/anthropic/models/beta/beta_managed_agents_model.rb +0 -2
  61. data/lib/anthropic/models/beta/beta_managed_agents_model_config.rb +5 -5
  62. data/lib/anthropic/models/beta/beta_managed_agents_multiagent.rb +1 -1
  63. data/lib/anthropic/models/beta/beta_managed_agents_multiagent_coordinator.rb +2 -2
  64. data/lib/anthropic/models/beta/beta_managed_agents_multiagent_params.rb +1 -1
  65. data/lib/anthropic/models/beta/beta_managed_agents_read_tool_config.rb +2 -2
  66. data/lib/anthropic/models/beta/beta_managed_agents_read_tool_config_params.rb +2 -2
  67. data/lib/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rb +21 -0
  68. data/lib/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rb +23 -0
  69. data/lib/anthropic/models/beta/beta_managed_agents_session_agent.rb +16 -6
  70. data/lib/anthropic/models/beta/beta_managed_agents_session_agent_update.rb +3 -3
  71. data/lib/anthropic/models/beta/beta_managed_agents_session_multiagent.rb +1 -1
  72. data/lib/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rb +8 -2
  73. data/lib/anthropic/models/beta/beta_managed_agents_session_resource_config.rb +3 -3
  74. data/lib/anthropic/models/beta/beta_managed_agents_session_thread_agent.rb +19 -6
  75. data/lib/anthropic/models/beta/beta_managed_agents_skill_params.rb +2 -2
  76. data/lib/anthropic/models/beta/beta_managed_agents_start_event_preview.rb +2 -2
  77. data/lib/anthropic/models/beta/beta_managed_agents_trigger_context.rb +2 -2
  78. data/lib/anthropic/models/beta/beta_managed_agents_user_tool_result_event.rb +4 -4
  79. data/lib/anthropic/models/beta/beta_managed_agents_web_fetch_tool_config.rb +2 -2
  80. data/lib/anthropic/models/beta/beta_managed_agents_web_fetch_tool_config_params.rb +2 -2
  81. data/lib/anthropic/models/beta/beta_managed_agents_web_search_tool_config.rb +2 -2
  82. data/lib/anthropic/models/beta/beta_managed_agents_web_search_tool_config_params.rb +2 -2
  83. data/lib/anthropic/models/beta/beta_managed_agents_write_tool_config.rb +2 -2
  84. data/lib/anthropic/models/beta/beta_managed_agents_write_tool_config_params.rb +2 -2
  85. data/lib/anthropic/models/beta/beta_message_delta_usage.rb +0 -1
  86. data/lib/anthropic/models/beta/beta_output_behavior.rb +2 -2
  87. data/lib/anthropic/models/beta/beta_thinking_config_adaptive.rb +6 -4
  88. data/lib/anthropic/models/beta/beta_thinking_config_enabled.rb +6 -4
  89. data/lib/anthropic/models/beta/beta_thinking_config_param.rb +8 -7
  90. data/lib/anthropic/models/beta/beta_usage.rb +0 -1
  91. data/lib/anthropic/models/beta/deployment_create_params.rb +3 -3
  92. data/lib/anthropic/models/beta/deployment_update_params.rb +3 -3
  93. data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_actor.rb +3 -3
  94. data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_error.rb +6 -3
  95. data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_memory_list_item.rb +2 -2
  96. data/lib/anthropic/models/beta/message_count_tokens_params.rb +15 -10
  97. data/lib/anthropic/models/beta/message_create_params.rb +21 -12
  98. data/lib/anthropic/models/beta/messages/batch_create_params.rb +21 -12
  99. data/lib/anthropic/models/beta/organization/beta_analytics_cost_bucketed_result.rb +3 -3
  100. data/lib/anthropic/models/beta/organization/beta_analytics_cost_users_item.rb +3 -3
  101. data/lib/anthropic/models/beta/organization/beta_analytics_usage_bucketed_result.rb +3 -3
  102. data/lib/anthropic/models/beta/organization/beta_analytics_usage_users_item.rb +3 -3
  103. data/lib/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rb +30 -0
  104. data/lib/anthropic/models/beta/organization/beta_spend_limit.rb +2 -2
  105. data/lib/anthropic/models/beta/organization/beta_telemetry_destination.rb +118 -0
  106. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rb +29 -0
  107. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rb +69 -0
  108. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rb +73 -0
  109. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rb +21 -0
  110. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rb +29 -0
  111. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rb +23 -0
  112. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rb +25 -0
  113. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state.rb +71 -0
  114. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rb +36 -0
  115. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rb +24 -0
  116. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rb +21 -0
  117. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rb +23 -0
  118. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rb +61 -0
  119. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rb +37 -0
  120. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rb +35 -0
  121. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rb +61 -0
  122. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rb +21 -0
  123. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_traces.rb +61 -0
  124. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rb +71 -0
  125. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rb +69 -0
  126. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rb +23 -0
  127. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rb +23 -0
  128. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rb +22 -0
  129. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rb +49 -0
  130. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rb +21 -0
  131. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rb +49 -0
  132. data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rb +70 -0
  133. data/lib/anthropic/models/beta/organization/invite_create_params.rb +4 -2
  134. data/lib/anthropic/models/beta/organization/spend_limit_list_params.rb +2 -5
  135. data/lib/anthropic/models/beta/organization/telemetry_destination_create_params.rb +93 -0
  136. data/lib/anthropic/models/beta/organization/telemetry_destination_delete_params.rb +34 -0
  137. data/lib/anthropic/models/beta/organization/telemetry_destination_list_params.rb +62 -0
  138. data/lib/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rb +34 -0
  139. data/lib/anthropic/models/beta/organization/telemetry_destination_test_params.rb +34 -0
  140. data/lib/anthropic/models/beta/organization/telemetry_destination_update_params.rb +120 -0
  141. data/lib/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rb +40 -0
  142. data/lib/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rb +52 -0
  143. data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rb +44 -0
  144. data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rb +57 -0
  145. data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rb +44 -0
  146. data/lib/anthropic/models/beta/organization/user_update_params.rb +4 -2
  147. data/lib/anthropic/models/beta/session_create_params.rb +5 -5
  148. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_custom_tool_use_event.rb +3 -1
  149. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_mcp_tool_result_event.rb +4 -4
  150. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_message_event.rb +2 -2
  151. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_thread_message_received_event.rb +4 -4
  152. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_thread_message_sent_event.rb +4 -4
  153. data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_tool_result_event.rb +4 -4
  154. data/lib/anthropic/models/beta/sessions/beta_managed_agents_billing_error.rb +3 -3
  155. data/lib/anthropic/models/beta/sessions/beta_managed_agents_credential_host_unreachable_error.rb +3 -3
  156. data/lib/anthropic/models/beta/sessions/beta_managed_agents_document_block.rb +4 -4
  157. data/lib/anthropic/models/beta/sessions/beta_managed_agents_event_params.rb +14 -8
  158. data/lib/anthropic/models/beta/sessions/beta_managed_agents_github_repository_resource.rb +2 -2
  159. data/lib/anthropic/models/beta/sessions/beta_managed_agents_image_block.rb +3 -3
  160. data/lib/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rb +14 -6
  161. data/lib/anthropic/models/beta/sessions/beta_managed_agents_mcp_authentication_failed_error.rb +3 -3
  162. data/lib/anthropic/models/beta/sessions/beta_managed_agents_mcp_connection_failed_error.rb +3 -3
  163. data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_overloaded_error.rb +3 -3
  164. data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_rate_limited_error.rb +3 -3
  165. data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_request_failed_error.rb +3 -3
  166. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_authentication_error.rb +3 -3
  167. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_checkout_error.rb +3 -3
  168. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_clone_error.rb +3 -3
  169. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_forbidden_error.rb +3 -3
  170. data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_not_found_error.rb +3 -3
  171. data/lib/anthropic/models/beta/sessions/beta_managed_agents_send_session_events.rb +8 -8
  172. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_error_event.rb +14 -8
  173. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_event.rb +64 -37
  174. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_resource.rb +3 -3
  175. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_status_idle_event.rb +4 -4
  176. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rb +8 -2
  177. data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_thread_status_idle_event.rb +4 -4
  178. data/lib/anthropic/models/beta/sessions/beta_managed_agents_stream_session_events.rb +66 -39
  179. data/lib/anthropic/models/beta/sessions/beta_managed_agents_stream_session_thread_events.rb +66 -39
  180. data/lib/anthropic/models/beta/sessions/beta_managed_agents_unknown_error.rb +3 -3
  181. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event.rb +7 -7
  182. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event_params.rb +7 -7
  183. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_define_outcome_event.rb +2 -2
  184. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_define_outcome_event_params.rb +2 -2
  185. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_message_event.rb +4 -4
  186. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_message_event_params.rb +4 -4
  187. data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_tool_result_event_params.rb +4 -4
  188. data/lib/anthropic/models/beta/sessions/resource_retrieve_response.rb +3 -3
  189. data/lib/anthropic/models/beta/sessions/resource_update_response.rb +3 -3
  190. data/lib/anthropic/models/beta/vaults/beta_managed_agents_credential.rb +6 -3
  191. data/lib/anthropic/models/beta/vaults/beta_managed_agents_credential_networking_params.rb +7 -2
  192. data/lib/anthropic/models/beta/vaults/beta_managed_agents_environment_variable_auth_response.rb +7 -2
  193. data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_params.rb +3 -3
  194. data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_response.rb +12 -3
  195. data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_update_params.rb +8 -2
  196. data/lib/anthropic/models/beta/vaults/credential_create_params.rb +6 -3
  197. data/lib/anthropic/models/beta/vaults/credential_update_params.rb +6 -3
  198. data/lib/anthropic/models/message_count_tokens_params.rb +15 -10
  199. data/lib/anthropic/models/message_create_params.rb +15 -10
  200. data/lib/anthropic/models/messages/batch_create_params.rb +15 -10
  201. data/lib/anthropic/models/model.rb +0 -2
  202. data/lib/anthropic/models/organization/invite_create_params.rb +4 -2
  203. data/lib/anthropic/models/organization/user_update_params.rb +4 -2
  204. data/lib/anthropic/models/thinking_config_adaptive.rb +6 -4
  205. data/lib/anthropic/models/thinking_config_enabled.rb +6 -4
  206. data/lib/anthropic/models/thinking_config_param.rb +8 -7
  207. data/lib/anthropic/request_options.rb +7 -0
  208. data/lib/anthropic/resources/beta/agents/versions.rb +4 -0
  209. data/lib/anthropic/resources/beta/agents.rb +22 -2
  210. data/lib/anthropic/resources/beta/deployment_runs.rb +16 -0
  211. data/lib/anthropic/resources/beta/deployments.rb +24 -0
  212. data/lib/anthropic/resources/beta/dreams.rb +15 -0
  213. data/lib/anthropic/resources/beta/environments/work.rb +42 -0
  214. data/lib/anthropic/resources/beta/environments.rb +18 -0
  215. data/lib/anthropic/resources/beta/files.rb +15 -0
  216. data/lib/anthropic/resources/beta/memory_stores/memories.rb +31 -0
  217. data/lib/anthropic/resources/beta/memory_stores/memory_versions.rb +28 -0
  218. data/lib/anthropic/resources/beta/memory_stores.rb +18 -0
  219. data/lib/anthropic/resources/beta/messages/batches.rb +19 -1
  220. data/lib/anthropic/resources/beta/messages.rb +12 -4
  221. data/lib/anthropic/resources/beta/models.rb +6 -0
  222. data/lib/anthropic/resources/beta/organization/analytics/apps/chat/projects.rb +3 -0
  223. data/lib/anthropic/resources/beta/organization/analytics/artifacts.rb +3 -0
  224. data/lib/anthropic/resources/beta/organization/analytics/connectors.rb +4 -0
  225. data/lib/anthropic/resources/beta/organization/analytics/cost_report.rb +20 -0
  226. data/lib/anthropic/resources/beta/organization/analytics/plugins.rb +4 -0
  227. data/lib/anthropic/resources/beta/organization/analytics/skills.rb +4 -0
  228. data/lib/anthropic/resources/beta/organization/analytics/summaries.rb +3 -0
  229. data/lib/anthropic/resources/beta/organization/analytics/usage_report.rb +20 -0
  230. data/lib/anthropic/resources/beta/organization/analytics/user_cost_report.rb +23 -0
  231. data/lib/anthropic/resources/beta/organization/analytics/user_usage_report.rb +23 -0
  232. data/lib/anthropic/resources/beta/organization/analytics/users.rb +4 -0
  233. data/lib/anthropic/resources/beta/organization/api_keys.rb +9 -0
  234. data/lib/anthropic/resources/beta/organization/compliance_settings.rb +4 -0
  235. data/lib/anthropic/resources/beta/organization/external_keys.rb +18 -0
  236. data/lib/anthropic/resources/beta/organization/federation/issuers.rb +15 -0
  237. data/lib/anthropic/resources/beta/organization/federation/rules/workspaces.rb +14 -0
  238. data/lib/anthropic/resources/beta/organization/federation/rules.rb +15 -0
  239. data/lib/anthropic/resources/beta/organization/invites.rb +12 -0
  240. data/lib/anthropic/resources/beta/organization/plugin_marketplaces.rb +14 -0
  241. data/lib/anthropic/resources/beta/organization/plugins/installation_settings.rb +16 -0
  242. data/lib/anthropic/resources/beta/organization/plugins/shares.rb +4 -0
  243. data/lib/anthropic/resources/beta/organization/plugins/versions.rb +22 -0
  244. data/lib/anthropic/resources/beta/organization/plugins.rb +27 -0
  245. data/lib/anthropic/resources/beta/organization/rate_limits.rb +3 -0
  246. data/lib/anthropic/resources/beta/organization/rbac_groups/members.rb +14 -0
  247. data/lib/anthropic/resources/beta/organization/rbac_groups.rb +15 -0
  248. data/lib/anthropic/resources/beta/organization/rbac_roles/permissions.rb +4 -0
  249. data/lib/anthropic/resources/beta/organization/rbac_roles.rb +6 -0
  250. data/lib/anthropic/resources/beta/organization/service_accounts/workspaces.rb +14 -0
  251. data/lib/anthropic/resources/beta/organization/service_accounts.rb +15 -0
  252. data/lib/anthropic/resources/beta/organization/spend_limits/effective.rb +5 -2
  253. data/lib/anthropic/resources/beta/organization/spend_limits/increase_requests.rb +12 -0
  254. data/lib/anthropic/resources/beta/organization/spend_limits.rb +17 -7
  255. data/lib/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rb +173 -0
  256. data/lib/anthropic/resources/beta/organization/telemetry_destinations.rb +274 -0
  257. data/lib/anthropic/resources/beta/organization/users.rb +12 -0
  258. data/lib/anthropic/resources/beta/organization/workspaces/members.rb +26 -0
  259. data/lib/anthropic/resources/beta/organization/workspaces/rate_limits.rb +4 -0
  260. data/lib/anthropic/resources/beta/organization/workspaces/service_accounts.rb +26 -0
  261. data/lib/anthropic/resources/beta/organization/workspaces.rb +15 -0
  262. data/lib/anthropic/resources/beta/organization.rb +7 -0
  263. data/lib/anthropic/resources/beta/sessions/events.rb +21 -1
  264. data/lib/anthropic/resources/beta/sessions/resources.rb +26 -0
  265. data/lib/anthropic/resources/beta/sessions/threads/events.rb +15 -1
  266. data/lib/anthropic/resources/beta/sessions/threads.rb +16 -0
  267. data/lib/anthropic/resources/beta/sessions.rb +32 -0
  268. data/lib/anthropic/resources/beta/skills/versions.rb +17 -0
  269. data/lib/anthropic/resources/beta/skills.rb +12 -0
  270. data/lib/anthropic/resources/beta/tunnels/certificates.rb +20 -0
  271. data/lib/anthropic/resources/beta/tunnels.rb +18 -0
  272. data/lib/anthropic/resources/beta/user_profiles.rb +15 -0
  273. data/lib/anthropic/resources/beta/vaults/credentials.rb +38 -0
  274. data/lib/anthropic/resources/beta/vaults.rb +18 -0
  275. data/lib/anthropic/resources/completions.rb +5 -1
  276. data/lib/anthropic/resources/files.rb +15 -0
  277. data/lib/anthropic/resources/messages/batches.rb +19 -1
  278. data/lib/anthropic/resources/messages.rb +12 -4
  279. data/lib/anthropic/resources/models.rb +6 -0
  280. data/lib/anthropic/resources/organization/api_keys.rb +9 -0
  281. data/lib/anthropic/resources/organization/compliance_settings.rb +4 -0
  282. data/lib/anthropic/resources/organization/external_keys.rb +18 -0
  283. data/lib/anthropic/resources/organization/federation/issuers.rb +15 -0
  284. data/lib/anthropic/resources/organization/federation/rules/workspaces.rb +14 -0
  285. data/lib/anthropic/resources/organization/federation/rules.rb +15 -0
  286. data/lib/anthropic/resources/organization/invites.rb +12 -0
  287. data/lib/anthropic/resources/organization/rate_limits.rb +3 -0
  288. data/lib/anthropic/resources/organization/service_accounts/workspaces.rb +14 -0
  289. data/lib/anthropic/resources/organization/service_accounts.rb +15 -0
  290. data/lib/anthropic/resources/organization/users.rb +12 -0
  291. data/lib/anthropic/resources/organization/workspaces/members.rb +26 -0
  292. data/lib/anthropic/resources/organization/workspaces/rate_limits.rb +4 -0
  293. data/lib/anthropic/resources/organization/workspaces/service_accounts.rb +26 -0
  294. data/lib/anthropic/resources/organization/workspaces.rb +15 -0
  295. data/lib/anthropic/resources/organization.rb +2 -0
  296. data/lib/anthropic/resources/skills/versions.rb +14 -0
  297. data/lib/anthropic/resources/skills.rb +12 -0
  298. data/lib/anthropic/version.rb +1 -1
  299. data/lib/anthropic.rb +58 -0
  300. data/rbi/anthropic/client.rbi +28 -0
  301. data/rbi/anthropic/helpers/aws/client.rbi +6 -2
  302. data/rbi/anthropic/helpers/bedrock/client.rbi +6 -2
  303. data/rbi/anthropic/helpers/bedrock/mantle_client.rbi +6 -2
  304. data/rbi/anthropic/helpers/google_cloud/client.rbi +6 -2
  305. data/rbi/anthropic/helpers/streaming/message_stream.rbi +4 -1
  306. data/rbi/anthropic/helpers/vertex/client.rbi +6 -2
  307. data/rbi/anthropic/internal/tracing.rbi +847 -0
  308. data/rbi/anthropic/internal/transport/base_client.rbi +93 -5
  309. data/rbi/anthropic/internal/type/base_stream.rbi +2 -0
  310. data/rbi/anthropic/models/anthropic_beta.rbi +5 -0
  311. data/rbi/anthropic/models/beta/agent_create_params.rbi +34 -3
  312. data/rbi/anthropic/models/beta/agent_update_params.rbi +34 -3
  313. data/rbi/anthropic/models/beta/beta_fallback_param.rbi +3 -2
  314. data/rbi/anthropic/models/beta/beta_fallbacks_param.rbi +6 -2
  315. data/rbi/anthropic/models/beta/beta_managed_agents_agent.rbi +17 -0
  316. data/rbi/anthropic/models/beta/beta_managed_agents_agent_with_overrides_params.rbi +3 -3
  317. data/rbi/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rbi +40 -0
  318. data/rbi/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rbi +42 -0
  319. data/rbi/anthropic/models/beta/beta_managed_agents_execution_identity.rbi +85 -0
  320. data/rbi/anthropic/models/beta/beta_managed_agents_execution_identity_params.rbi +87 -0
  321. data/rbi/anthropic/models/beta/beta_managed_agents_model.rbi +0 -2
  322. data/rbi/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rbi +32 -0
  323. data/rbi/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rbi +33 -0
  324. data/rbi/anthropic/models/beta/beta_managed_agents_session_agent.rbi +19 -0
  325. data/rbi/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rbi +9 -0
  326. data/rbi/anthropic/models/beta/beta_managed_agents_session_thread_agent.rbi +19 -0
  327. data/rbi/anthropic/models/beta/beta_message_delta_usage.rbi +0 -2
  328. data/rbi/anthropic/models/beta/beta_thinking_config_adaptive.rbi +9 -6
  329. data/rbi/anthropic/models/beta/beta_thinking_config_enabled.rbi +9 -6
  330. data/rbi/anthropic/models/beta/beta_thinking_config_param.rbi +11 -9
  331. data/rbi/anthropic/models/beta/beta_usage.rbi +0 -2
  332. data/rbi/anthropic/models/beta/message_count_tokens_params.rbi +28 -18
  333. data/rbi/anthropic/models/beta/message_create_params.rbi +40 -22
  334. data/rbi/anthropic/models/beta/messages/batch_create_params.rbi +40 -22
  335. data/rbi/anthropic/models/beta/organization/beta_analytics_cost_bucketed_result.rbi +6 -6
  336. data/rbi/anthropic/models/beta/organization/beta_analytics_cost_users_item.rbi +6 -6
  337. data/rbi/anthropic/models/beta/organization/beta_analytics_usage_bucketed_result.rbi +6 -6
  338. data/rbi/anthropic/models/beta/organization/beta_analytics_usage_users_item.rbi +6 -6
  339. data/rbi/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rbi +39 -0
  340. data/rbi/anthropic/models/beta/organization/beta_spend_limit.rbi +4 -4
  341. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination.rbi +191 -0
  342. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rbi +53 -0
  343. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rbi +106 -0
  344. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rbi +95 -0
  345. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rbi +31 -0
  346. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rbi +39 -0
  347. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rbi +33 -0
  348. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rbi +35 -0
  349. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state.rbi +99 -0
  350. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rbi +66 -0
  351. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rbi +34 -0
  352. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rbi +31 -0
  353. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rbi +33 -0
  354. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rbi +81 -0
  355. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rbi +47 -0
  356. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rbi +62 -0
  357. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rbi +88 -0
  358. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rbi +31 -0
  359. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_traces.rbi +97 -0
  360. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rbi +120 -0
  361. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rbi +93 -0
  362. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rbi +33 -0
  363. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rbi +33 -0
  364. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rbi +32 -0
  365. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rbi +80 -0
  366. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rbi +31 -0
  367. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rbi +80 -0
  368. data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rbi +107 -0
  369. data/rbi/anthropic/models/beta/organization/invite_create_params.rbi +6 -3
  370. data/rbi/anthropic/models/beta/organization/spend_limit_list_params.rbi +2 -8
  371. data/rbi/anthropic/models/beta/organization/telemetry_destination_create_params.rbi +186 -0
  372. data/rbi/anthropic/models/beta/organization/telemetry_destination_delete_params.rbi +73 -0
  373. data/rbi/anthropic/models/beta/organization/telemetry_destination_list_params.rbi +114 -0
  374. data/rbi/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rbi +73 -0
  375. data/rbi/anthropic/models/beta/organization/telemetry_destination_test_params.rbi +73 -0
  376. data/rbi/anthropic/models/beta/organization/telemetry_destination_update_params.rbi +264 -0
  377. data/rbi/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rbi +61 -0
  378. data/rbi/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rbi +73 -0
  379. data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rbi +84 -0
  380. data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rbi +100 -0
  381. data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rbi +84 -0
  382. data/rbi/anthropic/models/beta/organization/user_update_params.rbi +6 -3
  383. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_agent_custom_tool_use_event.rbi +3 -1
  384. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_event_params.rbi +2 -2
  385. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rbi +17 -0
  386. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_send_session_events.rbi +2 -2
  387. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_session_event.rbi +2 -2
  388. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rbi +9 -0
  389. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_stream_session_events.rbi +2 -2
  390. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_stream_session_thread_events.rbi +2 -2
  391. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event.rbi +4 -4
  392. data/rbi/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event_params.rbi +4 -4
  393. data/rbi/anthropic/models/message_count_tokens_params.rbi +28 -18
  394. data/rbi/anthropic/models/message_create_params.rbi +28 -18
  395. data/rbi/anthropic/models/messages/batch_create_params.rbi +28 -18
  396. data/rbi/anthropic/models/model.rbi +0 -2
  397. data/rbi/anthropic/models/organization/invite_create_params.rbi +6 -3
  398. data/rbi/anthropic/models/organization/user_update_params.rbi +6 -3
  399. data/rbi/anthropic/models/thinking_config_adaptive.rbi +9 -6
  400. data/rbi/anthropic/models/thinking_config_enabled.rbi +9 -6
  401. data/rbi/anthropic/models/thinking_config_param.rbi +11 -9
  402. data/rbi/anthropic/request_options.rbi +5 -0
  403. data/rbi/anthropic/resources/beta/agents.rbi +22 -2
  404. data/rbi/anthropic/resources/beta/messages/batches.rbi +2 -1
  405. data/rbi/anthropic/resources/beta/messages.rbi +56 -32
  406. data/rbi/anthropic/resources/beta/organization/invites.rbi +2 -1
  407. data/rbi/anthropic/resources/beta/organization/spend_limits/effective.rbi +2 -2
  408. data/rbi/anthropic/resources/beta/organization/spend_limits.rbi +5 -10
  409. data/rbi/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rbi +124 -0
  410. data/rbi/anthropic/resources/beta/organization/telemetry_destinations.rbi +300 -0
  411. data/rbi/anthropic/resources/beta/organization/users.rbi +2 -1
  412. data/rbi/anthropic/resources/beta/organization.rbi +7 -0
  413. data/rbi/anthropic/resources/beta/sessions/events.rbi +2 -1
  414. data/rbi/anthropic/resources/beta/sessions/threads/events.rbi +2 -1
  415. data/rbi/anthropic/resources/completions.rbi +6 -1
  416. data/rbi/anthropic/resources/messages/batches.rbi +2 -1
  417. data/rbi/anthropic/resources/messages.rbi +44 -28
  418. data/rbi/anthropic/resources/organization/invites.rbi +2 -1
  419. data/rbi/anthropic/resources/organization/users.rbi +2 -1
  420. data/sig/anthropic/client.rbs +1 -0
  421. data/sig/anthropic/helpers/bedrock/client.rbs +2 -1
  422. data/sig/anthropic/helpers/google_cloud/client.rbs +2 -1
  423. data/sig/anthropic/helpers/streaming/message_stream.rbs +2 -2
  424. data/sig/anthropic/helpers/vertex/client.rbs +2 -1
  425. data/sig/anthropic/internal/tracing.rbs +477 -0
  426. data/sig/anthropic/internal/transport/base_client.rbs +37 -2
  427. data/sig/anthropic/internal/type/base_stream.rbs +1 -1
  428. data/sig/anthropic/models/anthropic_beta.rbs +2 -0
  429. data/sig/anthropic/models/beta/agent_create_params.rbs +5 -0
  430. data/sig/anthropic/models/beta/agent_update_params.rbs +5 -0
  431. data/sig/anthropic/models/beta/beta_managed_agents_agent.rbs +5 -0
  432. data/sig/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rbs +20 -0
  433. data/sig/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rbs +20 -0
  434. data/sig/anthropic/models/beta/beta_managed_agents_execution_identity.rbs +42 -0
  435. data/sig/anthropic/models/beta/beta_managed_agents_execution_identity_params.rbs +42 -0
  436. data/sig/anthropic/models/beta/beta_managed_agents_model.rbs +0 -2
  437. data/sig/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rbs +18 -0
  438. data/sig/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rbs +18 -0
  439. data/sig/anthropic/models/beta/beta_managed_agents_session_agent.rbs +5 -0
  440. data/sig/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rbs +2 -0
  441. data/sig/anthropic/models/beta/beta_managed_agents_session_thread_agent.rbs +5 -0
  442. data/sig/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rbs +23 -0
  443. data/sig/anthropic/models/beta/organization/beta_telemetry_destination.rbs +74 -0
  444. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rbs +23 -0
  445. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rbs +30 -0
  446. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rbs +51 -0
  447. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rbs +18 -0
  448. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rbs +18 -0
  449. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rbs +18 -0
  450. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rbs +18 -0
  451. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state.rbs +42 -0
  452. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rbs +29 -0
  453. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rbs +18 -0
  454. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rbs +17 -0
  455. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rbs +18 -0
  456. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rbs +40 -0
  457. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rbs +20 -0
  458. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rbs +29 -0
  459. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rbs +42 -0
  460. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rbs +17 -0
  461. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_traces.rbs +39 -0
  462. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rbs +41 -0
  463. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rbs +45 -0
  464. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rbs +17 -0
  465. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rbs +17 -0
  466. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rbs +17 -0
  467. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rbs +25 -0
  468. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rbs +17 -0
  469. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rbs +25 -0
  470. data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rbs +48 -0
  471. data/sig/anthropic/models/beta/organization/telemetry_destination_create_params.rbs +65 -0
  472. data/sig/anthropic/models/beta/organization/telemetry_destination_delete_params.rbs +39 -0
  473. data/sig/anthropic/models/beta/organization/telemetry_destination_list_params.rbs +55 -0
  474. data/sig/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rbs +39 -0
  475. data/sig/anthropic/models/beta/organization/telemetry_destination_test_params.rbs +39 -0
  476. data/sig/anthropic/models/beta/organization/telemetry_destination_update_params.rbs +79 -0
  477. data/sig/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rbs +36 -0
  478. data/sig/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rbs +41 -0
  479. data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rbs +46 -0
  480. data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rbs +55 -0
  481. data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rbs +46 -0
  482. data/sig/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rbs +5 -0
  483. data/sig/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rbs +3 -0
  484. data/sig/anthropic/models/model.rbs +0 -2
  485. data/sig/anthropic/request_options.rbs +3 -0
  486. data/sig/anthropic/resources/beta/agents.rbs +2 -0
  487. data/sig/anthropic/resources/beta/messages/batches.rbs +1 -1
  488. data/sig/anthropic/resources/beta/messages.rbs +1 -1
  489. data/sig/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rbs +35 -0
  490. data/sig/anthropic/resources/beta/organization/telemetry_destinations.rbs +61 -0
  491. data/sig/anthropic/resources/beta/organization.rbs +2 -0
  492. data/sig/anthropic/resources/beta/sessions/events.rbs +1 -1
  493. data/sig/anthropic/resources/beta/sessions/threads/events.rbs +1 -1
  494. data/sig/anthropic/resources/completions.rbs +1 -1
  495. data/sig/anthropic/resources/messages/batches.rbs +1 -1
  496. data/sig/anthropic/resources/messages.rbs +1 -1
  497. metadata +178 -2
@@ -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
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Anthropic
4
+ module Helpers
5
+ module Tracing
6
+ class << self
7
+ # A tool runner's params are the application's own, so the format can still be a model, or a
8
+ # model class that the structured output helper sends as a `json_schema` format.
9
+ #
10
+ # @param params [Hash{Symbol=>Object}]
11
+ #
12
+ # @return [Boolean]
13
+ def json_output_format?(params)
14
+ case params[:output_format] || params[:output_config]&.[](:format)
15
+ in nil
16
+ false
17
+ in Anthropic::JSONOutputFormat | Anthropic::Beta::BetaJSONOutputFormat |
18
+ Anthropic::Helpers::InputSchema::JsonSchemaConverter |
19
+ {schema: Anthropic::Helpers::InputSchema::JsonSchemaConverter}
20
+ true
21
+ in format
22
+ symbolize_keys(format)[:type].to_s == "json_schema"
23
+ end
24
+ end
25
+ end
26
+
27
+ # What `Anthropic::Internal::Tracing.register_recorder` takes: `start_attributes` and `record`.
28
+ module Recorders
29
+ # A request to a Session thread without a conversation ID takes the thread's ID, so that the
30
+ # span groups with the API's spans for that thread.
31
+ module APICall
32
+ class << self
33
+ # @param _client [Anthropic::Client]
34
+ # @param req [Hash{Symbol=>Object}]
35
+ #
36
+ # @return [Hash{String=>Object}]
37
+ def start_attributes(_client, req)
38
+ thread_id = req[:span_attributes].to_h[ANTHROPIC_SESSION_THREAD_ID]
39
+ {GEN_AI_CONVERSATION_ID => Tracing.conversation_id(req[:options]) || thread_id}
40
+ end
41
+
42
+ # @param _span [OpenTelemetry::Trace::Span]
43
+ # @param _result [Hash{Symbol=>Object}]
44
+ def record(_span, _result) = nil
45
+ end
46
+ end
47
+
48
+ module MessagesCreate
49
+ class << self
50
+ # @param _client [Anthropic::Client]
51
+ # @param req [Hash{Symbol=>Object}]
52
+ #
53
+ # @return [Hash{String=>Object}]
54
+ def start_attributes(_client, req)
55
+ json = Tracing.json_output_format?(req[:body])
56
+ {GEN_AI_OUTPUT_TYPE => (GEN_AI_OUTPUT_TYPE_VALUE_JSON if json)}
57
+ end
58
+
59
+ # @param span [OpenTelemetry::Trace::Span]
60
+ # @param result [Hash{Symbol=>Object}]
61
+ def record(span, result)
62
+ data = result[:data]
63
+ params = result[:req][:body]
64
+ content = result[:client].open_telemetry_content?
65
+ limit = result[:client].open_telemetry_max_content_bytes
66
+ streamed = data.is_a?(Anthropic::Internal::Type::BaseStream)
67
+ message = data if data.is_a?(Anthropic::Internal::Type::BaseModel)
68
+ Tracing.set_computed_usage_attributes(span, message[:usage]) unless message.nil?
69
+ # A request whose content cannot be recorded still has its stream followed.
70
+ if content
71
+ Tracing.recording("the API call") do
72
+ Tracing.set_message_content_attributes(span, params, message&.[](:content), limit: limit)
73
+ end
74
+ end
75
+ return unless streamed
76
+
77
+ result[:iterator], result[:streamed_message] = Tracing.follow_streamed_message(
78
+ span,
79
+ result[:iterator],
80
+ params: params,
81
+ start_time: result[:start_time],
82
+ content: content,
83
+ content_limit: limit
84
+ )
85
+ end
86
+ end
87
+ end
88
+
89
+ module BatchesCreate
90
+ class << self
91
+ # @param _client [Anthropic::Client]
92
+ # @param req [Hash{Symbol=>Object}]
93
+ #
94
+ # @return [Hash{String=>Object}]
95
+ def start_attributes(_client, req)
96
+ {ANTHROPIC_MESSAGE_BATCH_REQUEST_COUNT => req[:body][:requests]&.length}
97
+ end
98
+
99
+ # @param _span [OpenTelemetry::Trace::Span]
100
+ # @param _result [Hash{Symbol=>Object}]
101
+ def record(_span, _result) = nil
102
+ end
103
+ end
104
+
105
+ module SessionsCreate
106
+ class << self
107
+ # @param _client [Anthropic::Client]
108
+ # @param req [Hash{Symbol=>Object}]
109
+ #
110
+ # @return [Hash{String=>Object}]
111
+ def start_attributes(_client, req)
112
+ agent = Tracing.symbolize_keys(req[:body][:agent])
113
+ {GEN_AI_AGENT_ID => agent.is_a?(Hash) ? agent[:id] : agent}
114
+ end
115
+
116
+ # @param _span [OpenTelemetry::Trace::Span]
117
+ # @param _result [Hash{Symbol=>Object}]
118
+ def record(_span, _result) = nil
119
+ end
120
+ end
121
+ end
122
+
123
+ Anthropic::Internal::Tracing.register_recorder(nil, Recorders::APICall)
124
+ {
125
+ Anthropic::Internal::Tracing::SpanName::MESSAGES_CREATE => Recorders::MessagesCreate,
126
+ Anthropic::Internal::Tracing::SpanName::MESSAGES_BATCHES_CREATE => Recorders::BatchesCreate,
127
+ Anthropic::Internal::Tracing::SpanName::SESSIONS_CREATE => Recorders::SessionsCreate
128
+ }.each { |span_name, recorder| Anthropic::Internal::Tracing.register_recorder(span_name, recorder) }
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Anthropic
4
+ module Helpers
5
+ module Tracing
6
+ class << self
7
+ # @param span [OpenTelemetry::Trace::Span]
8
+ # @param usage [Anthropic::Internal::Type::BaseModel, Hash{Symbol=>Object}, nil]
9
+ def set_computed_usage_attributes(span, usage)
10
+ return if usage.nil?
11
+
12
+ unless usage[:input_tokens].nil?
13
+ # The API's `input_tokens` leaves out the cached tokens, which the attribute counts.
14
+ cached = usage[:cache_creation_input_tokens].to_i + usage[:cache_read_input_tokens].to_i
15
+ span.set_attribute(GEN_AI_USAGE_INPUT_TOKENS, usage[:input_tokens] + cached)
16
+ end
17
+ compactions = usage[:iterations].to_a.select { _1[:type].to_sym == :compaction }
18
+ return if compactions.empty?
19
+
20
+ input_tokens = compactions.sum do
21
+ _1[:input_tokens] + _1[:cache_creation_input_tokens] + _1[:cache_read_input_tokens]
22
+ end
23
+ span.set_attribute(ANTHROPIC_USAGE_COMPACTION_INPUT_TOKENS, input_tokens)
24
+ span.set_attribute(ANTHROPIC_USAGE_COMPACTION_OUTPUT_TOKENS, compactions.sum { _1[:output_tokens] })
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end