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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +35 -0
- data/LICENSE +8 -0
- data/README.md +42 -1
- data/lib/anthropic/client.rb +32 -0
- data/lib/anthropic/helpers/aws/client.rb +12 -2
- data/lib/anthropic/helpers/aws_auth.rb +8 -1
- data/lib/anthropic/helpers/bedrock/client.rb +19 -2
- data/lib/anthropic/helpers/bedrock/mantle_client.rb +19 -2
- data/lib/anthropic/helpers/google_cloud/client.rb +12 -2
- data/lib/anthropic/helpers/streaming/message_stream.rb +20 -43
- data/lib/anthropic/helpers/tools/runner.rb +104 -11
- data/lib/anthropic/helpers/tracing/attributes.rb +34 -0
- data/lib/anthropic/helpers/tracing/config.rb +16 -0
- data/lib/anthropic/helpers/tracing/content.rb +346 -0
- data/lib/anthropic/helpers/tracing/recorders.rb +131 -0
- data/lib/anthropic/helpers/tracing/response.rb +29 -0
- data/lib/anthropic/helpers/tracing/streamed_message.rb +189 -0
- data/lib/anthropic/helpers/tracing/tool_spans.rb +138 -0
- data/lib/anthropic/helpers/tracing.rb +13 -0
- data/lib/anthropic/helpers/vertex/client.rb +19 -2
- data/lib/anthropic/internal/tracing.rb +1118 -0
- data/lib/anthropic/internal/transport/base_client.rb +174 -10
- data/lib/anthropic/internal/transport/pooled_net_requester.rb +6 -0
- data/lib/anthropic/models/anthropic_beta.rb +3 -0
- data/lib/anthropic/models/beta/agent_create_params.rb +17 -6
- data/lib/anthropic/models/beta/agent_update_params.rb +17 -6
- data/lib/anthropic/models/beta/beta_dream_input.rb +2 -2
- data/lib/anthropic/models/beta/beta_fallbacks_param.rb +6 -2
- data/lib/anthropic/models/beta/beta_managed_agents_agent.rb +15 -6
- data/lib/anthropic/models/beta/beta_managed_agents_agent_tool_config_params.rb +8 -8
- data/lib/anthropic/models/beta/beta_managed_agents_agent_toolset_default_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_agent_toolset_default_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_agent_with_overrides_params.rb +6 -6
- data/lib/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rb +29 -0
- data/lib/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rb +34 -0
- data/lib/anthropic/models/beta/beta_managed_agents_bash_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_bash_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_deployment_initial_event.rb +3 -3
- data/lib/anthropic/models/beta/beta_managed_agents_deployment_initial_event_params.rb +3 -3
- data/lib/anthropic/models/beta/beta_managed_agents_deployment_paused_reason.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_deployment_paused_reason_error.rb +38 -14
- data/lib/anthropic/models/beta/beta_managed_agents_deployment_run.rb +16 -16
- data/lib/anthropic/models/beta/beta_managed_agents_deployment_user_define_outcome_event.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_deployment_user_message_event.rb +4 -4
- data/lib/anthropic/models/beta/beta_managed_agents_edit_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_edit_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_execution_identity.rb +57 -0
- data/lib/anthropic/models/beta/beta_managed_agents_execution_identity_params.rb +62 -0
- data/lib/anthropic/models/beta/beta_managed_agents_github_repository_resource_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_github_repository_resource_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_glob_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_glob_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_grep_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_grep_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_mcp_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_mcp_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_mcp_toolset_default_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_mcp_toolset_default_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_model.rb +0 -2
- data/lib/anthropic/models/beta/beta_managed_agents_model_config.rb +5 -5
- data/lib/anthropic/models/beta/beta_managed_agents_multiagent.rb +1 -1
- data/lib/anthropic/models/beta/beta_managed_agents_multiagent_coordinator.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_multiagent_params.rb +1 -1
- data/lib/anthropic/models/beta/beta_managed_agents_read_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_read_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rb +21 -0
- data/lib/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rb +23 -0
- data/lib/anthropic/models/beta/beta_managed_agents_session_agent.rb +16 -6
- data/lib/anthropic/models/beta/beta_managed_agents_session_agent_update.rb +3 -3
- data/lib/anthropic/models/beta/beta_managed_agents_session_multiagent.rb +1 -1
- data/lib/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rb +8 -2
- data/lib/anthropic/models/beta/beta_managed_agents_session_resource_config.rb +3 -3
- data/lib/anthropic/models/beta/beta_managed_agents_session_thread_agent.rb +19 -6
- data/lib/anthropic/models/beta/beta_managed_agents_skill_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_start_event_preview.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_trigger_context.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_user_tool_result_event.rb +4 -4
- data/lib/anthropic/models/beta/beta_managed_agents_web_fetch_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_web_fetch_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_web_search_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_web_search_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_write_tool_config.rb +2 -2
- data/lib/anthropic/models/beta/beta_managed_agents_write_tool_config_params.rb +2 -2
- data/lib/anthropic/models/beta/beta_message_delta_usage.rb +0 -1
- data/lib/anthropic/models/beta/beta_output_behavior.rb +2 -2
- data/lib/anthropic/models/beta/beta_thinking_config_adaptive.rb +6 -4
- data/lib/anthropic/models/beta/beta_thinking_config_enabled.rb +6 -4
- data/lib/anthropic/models/beta/beta_thinking_config_param.rb +8 -7
- data/lib/anthropic/models/beta/beta_usage.rb +0 -1
- data/lib/anthropic/models/beta/deployment_create_params.rb +3 -3
- data/lib/anthropic/models/beta/deployment_update_params.rb +3 -3
- data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_actor.rb +3 -3
- data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_error.rb +6 -3
- data/lib/anthropic/models/beta/memory_stores/beta_managed_agents_memory_list_item.rb +2 -2
- data/lib/anthropic/models/beta/message_count_tokens_params.rb +15 -10
- data/lib/anthropic/models/beta/message_create_params.rb +21 -12
- data/lib/anthropic/models/beta/messages/batch_create_params.rb +21 -12
- data/lib/anthropic/models/beta/organization/beta_analytics_cost_bucketed_result.rb +3 -3
- data/lib/anthropic/models/beta/organization/beta_analytics_cost_users_item.rb +3 -3
- data/lib/anthropic/models/beta/organization/beta_analytics_usage_bucketed_result.rb +3 -3
- data/lib/anthropic/models/beta/organization/beta_analytics_usage_users_item.rb +3 -3
- data/lib/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rb +30 -0
- data/lib/anthropic/models/beta/organization/beta_spend_limit.rb +2 -2
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination.rb +118 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rb +29 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rb +69 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rb +73 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rb +21 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rb +29 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rb +23 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rb +25 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state.rb +71 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rb +36 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rb +24 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rb +21 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rb +23 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rb +61 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rb +37 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rb +35 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rb +61 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rb +21 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_traces.rb +61 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rb +71 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rb +69 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rb +23 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rb +23 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rb +22 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rb +49 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rb +21 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rb +49 -0
- data/lib/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rb +70 -0
- data/lib/anthropic/models/beta/organization/invite_create_params.rb +4 -2
- data/lib/anthropic/models/beta/organization/spend_limit_list_params.rb +2 -5
- data/lib/anthropic/models/beta/organization/telemetry_destination_create_params.rb +93 -0
- data/lib/anthropic/models/beta/organization/telemetry_destination_delete_params.rb +34 -0
- data/lib/anthropic/models/beta/organization/telemetry_destination_list_params.rb +62 -0
- data/lib/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rb +34 -0
- data/lib/anthropic/models/beta/organization/telemetry_destination_test_params.rb +34 -0
- data/lib/anthropic/models/beta/organization/telemetry_destination_update_params.rb +120 -0
- data/lib/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rb +40 -0
- data/lib/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rb +52 -0
- data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rb +44 -0
- data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rb +57 -0
- data/lib/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rb +44 -0
- data/lib/anthropic/models/beta/organization/user_update_params.rb +4 -2
- data/lib/anthropic/models/beta/session_create_params.rb +5 -5
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_custom_tool_use_event.rb +3 -1
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_mcp_tool_result_event.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_message_event.rb +2 -2
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_thread_message_received_event.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_thread_message_sent_event.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_agent_tool_result_event.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_billing_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_credential_host_unreachable_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_document_block.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_event_params.rb +14 -8
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_github_repository_resource.rb +2 -2
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_image_block.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rb +14 -6
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_mcp_authentication_failed_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_mcp_connection_failed_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_overloaded_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_rate_limited_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_model_request_failed_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_authentication_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_checkout_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_clone_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_forbidden_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_repository_not_found_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_send_session_events.rb +8 -8
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_error_event.rb +14 -8
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_event.rb +64 -37
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_resource.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_status_idle_event.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rb +8 -2
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_session_thread_status_idle_event.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_stream_session_events.rb +66 -39
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_stream_session_thread_events.rb +66 -39
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_unknown_error.rb +3 -3
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event.rb +7 -7
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event_params.rb +7 -7
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_define_outcome_event.rb +2 -2
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_define_outcome_event_params.rb +2 -2
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_message_event.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_message_event_params.rb +4 -4
- data/lib/anthropic/models/beta/sessions/beta_managed_agents_user_tool_result_event_params.rb +4 -4
- data/lib/anthropic/models/beta/sessions/resource_retrieve_response.rb +3 -3
- data/lib/anthropic/models/beta/sessions/resource_update_response.rb +3 -3
- data/lib/anthropic/models/beta/vaults/beta_managed_agents_credential.rb +6 -3
- data/lib/anthropic/models/beta/vaults/beta_managed_agents_credential_networking_params.rb +7 -2
- data/lib/anthropic/models/beta/vaults/beta_managed_agents_environment_variable_auth_response.rb +7 -2
- data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_params.rb +3 -3
- data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_response.rb +12 -3
- data/lib/anthropic/models/beta/vaults/beta_managed_agents_mcp_oauth_refresh_update_params.rb +8 -2
- data/lib/anthropic/models/beta/vaults/credential_create_params.rb +6 -3
- data/lib/anthropic/models/beta/vaults/credential_update_params.rb +6 -3
- data/lib/anthropic/models/message_count_tokens_params.rb +15 -10
- data/lib/anthropic/models/message_create_params.rb +15 -10
- data/lib/anthropic/models/messages/batch_create_params.rb +15 -10
- data/lib/anthropic/models/model.rb +0 -2
- data/lib/anthropic/models/organization/invite_create_params.rb +4 -2
- data/lib/anthropic/models/organization/user_update_params.rb +4 -2
- data/lib/anthropic/models/thinking_config_adaptive.rb +6 -4
- data/lib/anthropic/models/thinking_config_enabled.rb +6 -4
- data/lib/anthropic/models/thinking_config_param.rb +8 -7
- data/lib/anthropic/request_options.rb +7 -0
- data/lib/anthropic/resources/beta/agents/versions.rb +4 -0
- data/lib/anthropic/resources/beta/agents.rb +22 -2
- data/lib/anthropic/resources/beta/deployment_runs.rb +16 -0
- data/lib/anthropic/resources/beta/deployments.rb +24 -0
- data/lib/anthropic/resources/beta/dreams.rb +15 -0
- data/lib/anthropic/resources/beta/environments/work.rb +42 -0
- data/lib/anthropic/resources/beta/environments.rb +18 -0
- data/lib/anthropic/resources/beta/files.rb +15 -0
- data/lib/anthropic/resources/beta/memory_stores/memories.rb +31 -0
- data/lib/anthropic/resources/beta/memory_stores/memory_versions.rb +28 -0
- data/lib/anthropic/resources/beta/memory_stores.rb +18 -0
- data/lib/anthropic/resources/beta/messages/batches.rb +19 -1
- data/lib/anthropic/resources/beta/messages.rb +12 -4
- data/lib/anthropic/resources/beta/models.rb +6 -0
- data/lib/anthropic/resources/beta/organization/analytics/apps/chat/projects.rb +3 -0
- data/lib/anthropic/resources/beta/organization/analytics/artifacts.rb +3 -0
- data/lib/anthropic/resources/beta/organization/analytics/connectors.rb +4 -0
- data/lib/anthropic/resources/beta/organization/analytics/cost_report.rb +20 -0
- data/lib/anthropic/resources/beta/organization/analytics/plugins.rb +4 -0
- data/lib/anthropic/resources/beta/organization/analytics/skills.rb +4 -0
- data/lib/anthropic/resources/beta/organization/analytics/summaries.rb +3 -0
- data/lib/anthropic/resources/beta/organization/analytics/usage_report.rb +20 -0
- data/lib/anthropic/resources/beta/organization/analytics/user_cost_report.rb +23 -0
- data/lib/anthropic/resources/beta/organization/analytics/user_usage_report.rb +23 -0
- data/lib/anthropic/resources/beta/organization/analytics/users.rb +4 -0
- data/lib/anthropic/resources/beta/organization/api_keys.rb +9 -0
- data/lib/anthropic/resources/beta/organization/compliance_settings.rb +4 -0
- data/lib/anthropic/resources/beta/organization/external_keys.rb +18 -0
- data/lib/anthropic/resources/beta/organization/federation/issuers.rb +15 -0
- data/lib/anthropic/resources/beta/organization/federation/rules/workspaces.rb +14 -0
- data/lib/anthropic/resources/beta/organization/federation/rules.rb +15 -0
- data/lib/anthropic/resources/beta/organization/invites.rb +12 -0
- data/lib/anthropic/resources/beta/organization/plugin_marketplaces.rb +14 -0
- data/lib/anthropic/resources/beta/organization/plugins/installation_settings.rb +16 -0
- data/lib/anthropic/resources/beta/organization/plugins/shares.rb +4 -0
- data/lib/anthropic/resources/beta/organization/plugins/versions.rb +22 -0
- data/lib/anthropic/resources/beta/organization/plugins.rb +27 -0
- data/lib/anthropic/resources/beta/organization/rate_limits.rb +3 -0
- data/lib/anthropic/resources/beta/organization/rbac_groups/members.rb +14 -0
- data/lib/anthropic/resources/beta/organization/rbac_groups.rb +15 -0
- data/lib/anthropic/resources/beta/organization/rbac_roles/permissions.rb +4 -0
- data/lib/anthropic/resources/beta/organization/rbac_roles.rb +6 -0
- data/lib/anthropic/resources/beta/organization/service_accounts/workspaces.rb +14 -0
- data/lib/anthropic/resources/beta/organization/service_accounts.rb +15 -0
- data/lib/anthropic/resources/beta/organization/spend_limits/effective.rb +5 -2
- data/lib/anthropic/resources/beta/organization/spend_limits/increase_requests.rb +12 -0
- data/lib/anthropic/resources/beta/organization/spend_limits.rb +17 -7
- data/lib/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rb +173 -0
- data/lib/anthropic/resources/beta/organization/telemetry_destinations.rb +274 -0
- data/lib/anthropic/resources/beta/organization/users.rb +12 -0
- data/lib/anthropic/resources/beta/organization/workspaces/members.rb +26 -0
- data/lib/anthropic/resources/beta/organization/workspaces/rate_limits.rb +4 -0
- data/lib/anthropic/resources/beta/organization/workspaces/service_accounts.rb +26 -0
- data/lib/anthropic/resources/beta/organization/workspaces.rb +15 -0
- data/lib/anthropic/resources/beta/organization.rb +7 -0
- data/lib/anthropic/resources/beta/sessions/events.rb +21 -1
- data/lib/anthropic/resources/beta/sessions/resources.rb +26 -0
- data/lib/anthropic/resources/beta/sessions/threads/events.rb +15 -1
- data/lib/anthropic/resources/beta/sessions/threads.rb +16 -0
- data/lib/anthropic/resources/beta/sessions.rb +32 -0
- data/lib/anthropic/resources/beta/skills/versions.rb +17 -0
- data/lib/anthropic/resources/beta/skills.rb +12 -0
- data/lib/anthropic/resources/beta/tunnels/certificates.rb +20 -0
- data/lib/anthropic/resources/beta/tunnels.rb +18 -0
- data/lib/anthropic/resources/beta/user_profiles.rb +15 -0
- data/lib/anthropic/resources/beta/vaults/credentials.rb +38 -0
- data/lib/anthropic/resources/beta/vaults.rb +18 -0
- data/lib/anthropic/resources/completions.rb +5 -1
- data/lib/anthropic/resources/files.rb +15 -0
- data/lib/anthropic/resources/messages/batches.rb +19 -1
- data/lib/anthropic/resources/messages.rb +12 -4
- data/lib/anthropic/resources/models.rb +6 -0
- data/lib/anthropic/resources/organization/api_keys.rb +9 -0
- data/lib/anthropic/resources/organization/compliance_settings.rb +4 -0
- data/lib/anthropic/resources/organization/external_keys.rb +18 -0
- data/lib/anthropic/resources/organization/federation/issuers.rb +15 -0
- data/lib/anthropic/resources/organization/federation/rules/workspaces.rb +14 -0
- data/lib/anthropic/resources/organization/federation/rules.rb +15 -0
- data/lib/anthropic/resources/organization/invites.rb +12 -0
- data/lib/anthropic/resources/organization/rate_limits.rb +3 -0
- data/lib/anthropic/resources/organization/service_accounts/workspaces.rb +14 -0
- data/lib/anthropic/resources/organization/service_accounts.rb +15 -0
- data/lib/anthropic/resources/organization/users.rb +12 -0
- data/lib/anthropic/resources/organization/workspaces/members.rb +26 -0
- data/lib/anthropic/resources/organization/workspaces/rate_limits.rb +4 -0
- data/lib/anthropic/resources/organization/workspaces/service_accounts.rb +26 -0
- data/lib/anthropic/resources/organization/workspaces.rb +15 -0
- data/lib/anthropic/resources/organization.rb +2 -0
- data/lib/anthropic/resources/skills/versions.rb +14 -0
- data/lib/anthropic/resources/skills.rb +12 -0
- data/lib/anthropic/version.rb +1 -1
- data/lib/anthropic.rb +58 -0
- data/rbi/anthropic/client.rbi +28 -0
- data/rbi/anthropic/helpers/aws/client.rbi +6 -2
- data/rbi/anthropic/helpers/bedrock/client.rbi +6 -2
- data/rbi/anthropic/helpers/bedrock/mantle_client.rbi +6 -2
- data/rbi/anthropic/helpers/google_cloud/client.rbi +6 -2
- data/rbi/anthropic/helpers/streaming/message_stream.rbi +4 -1
- data/rbi/anthropic/helpers/vertex/client.rbi +6 -2
- data/rbi/anthropic/internal/tracing.rbi +847 -0
- data/rbi/anthropic/internal/transport/base_client.rbi +93 -5
- data/rbi/anthropic/internal/type/base_stream.rbi +2 -0
- data/rbi/anthropic/models/anthropic_beta.rbi +5 -0
- data/rbi/anthropic/models/beta/agent_create_params.rbi +34 -3
- data/rbi/anthropic/models/beta/agent_update_params.rbi +34 -3
- data/rbi/anthropic/models/beta/beta_fallback_param.rbi +3 -2
- data/rbi/anthropic/models/beta/beta_fallbacks_param.rbi +6 -2
- data/rbi/anthropic/models/beta/beta_managed_agents_agent.rbi +17 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_agent_with_overrides_params.rbi +3 -3
- data/rbi/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rbi +40 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rbi +42 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_execution_identity.rbi +85 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_execution_identity_params.rbi +87 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_model.rbi +0 -2
- data/rbi/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rbi +32 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rbi +33 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_session_agent.rbi +19 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rbi +9 -0
- data/rbi/anthropic/models/beta/beta_managed_agents_session_thread_agent.rbi +19 -0
- data/rbi/anthropic/models/beta/beta_message_delta_usage.rbi +0 -2
- data/rbi/anthropic/models/beta/beta_thinking_config_adaptive.rbi +9 -6
- data/rbi/anthropic/models/beta/beta_thinking_config_enabled.rbi +9 -6
- data/rbi/anthropic/models/beta/beta_thinking_config_param.rbi +11 -9
- data/rbi/anthropic/models/beta/beta_usage.rbi +0 -2
- data/rbi/anthropic/models/beta/message_count_tokens_params.rbi +28 -18
- data/rbi/anthropic/models/beta/message_create_params.rbi +40 -22
- data/rbi/anthropic/models/beta/messages/batch_create_params.rbi +40 -22
- data/rbi/anthropic/models/beta/organization/beta_analytics_cost_bucketed_result.rbi +6 -6
- data/rbi/anthropic/models/beta/organization/beta_analytics_cost_users_item.rbi +6 -6
- data/rbi/anthropic/models/beta/organization/beta_analytics_usage_bucketed_result.rbi +6 -6
- data/rbi/anthropic/models/beta/organization/beta_analytics_usage_users_item.rbi +6 -6
- data/rbi/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rbi +39 -0
- data/rbi/anthropic/models/beta/organization/beta_spend_limit.rbi +4 -4
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination.rbi +191 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rbi +53 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rbi +106 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rbi +95 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rbi +31 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rbi +39 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rbi +33 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rbi +35 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state.rbi +99 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rbi +66 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rbi +34 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rbi +31 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rbi +33 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rbi +81 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rbi +47 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rbi +62 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rbi +88 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rbi +31 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_traces.rbi +97 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rbi +120 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rbi +93 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rbi +33 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rbi +33 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rbi +32 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rbi +80 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rbi +31 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rbi +80 -0
- data/rbi/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rbi +107 -0
- data/rbi/anthropic/models/beta/organization/invite_create_params.rbi +6 -3
- data/rbi/anthropic/models/beta/organization/spend_limit_list_params.rbi +2 -8
- data/rbi/anthropic/models/beta/organization/telemetry_destination_create_params.rbi +186 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destination_delete_params.rbi +73 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destination_list_params.rbi +114 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rbi +73 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destination_test_params.rbi +73 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destination_update_params.rbi +264 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rbi +61 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rbi +73 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rbi +84 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rbi +100 -0
- data/rbi/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rbi +84 -0
- data/rbi/anthropic/models/beta/organization/user_update_params.rbi +6 -3
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_agent_custom_tool_use_event.rbi +3 -1
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_event_params.rbi +2 -2
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rbi +17 -0
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_send_session_events.rbi +2 -2
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_session_event.rbi +2 -2
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rbi +9 -0
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_stream_session_events.rbi +2 -2
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_stream_session_thread_events.rbi +2 -2
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event.rbi +4 -4
- data/rbi/anthropic/models/beta/sessions/beta_managed_agents_user_custom_tool_result_event_params.rbi +4 -4
- data/rbi/anthropic/models/message_count_tokens_params.rbi +28 -18
- data/rbi/anthropic/models/message_create_params.rbi +28 -18
- data/rbi/anthropic/models/messages/batch_create_params.rbi +28 -18
- data/rbi/anthropic/models/model.rbi +0 -2
- data/rbi/anthropic/models/organization/invite_create_params.rbi +6 -3
- data/rbi/anthropic/models/organization/user_update_params.rbi +6 -3
- data/rbi/anthropic/models/thinking_config_adaptive.rbi +9 -6
- data/rbi/anthropic/models/thinking_config_enabled.rbi +9 -6
- data/rbi/anthropic/models/thinking_config_param.rbi +11 -9
- data/rbi/anthropic/request_options.rbi +5 -0
- data/rbi/anthropic/resources/beta/agents.rbi +22 -2
- data/rbi/anthropic/resources/beta/messages/batches.rbi +2 -1
- data/rbi/anthropic/resources/beta/messages.rbi +56 -32
- data/rbi/anthropic/resources/beta/organization/invites.rbi +2 -1
- data/rbi/anthropic/resources/beta/organization/spend_limits/effective.rbi +2 -2
- data/rbi/anthropic/resources/beta/organization/spend_limits.rbi +5 -10
- data/rbi/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rbi +124 -0
- data/rbi/anthropic/resources/beta/organization/telemetry_destinations.rbi +300 -0
- data/rbi/anthropic/resources/beta/organization/users.rbi +2 -1
- data/rbi/anthropic/resources/beta/organization.rbi +7 -0
- data/rbi/anthropic/resources/beta/sessions/events.rbi +2 -1
- data/rbi/anthropic/resources/beta/sessions/threads/events.rbi +2 -1
- data/rbi/anthropic/resources/completions.rbi +6 -1
- data/rbi/anthropic/resources/messages/batches.rbi +2 -1
- data/rbi/anthropic/resources/messages.rbi +44 -28
- data/rbi/anthropic/resources/organization/invites.rbi +2 -1
- data/rbi/anthropic/resources/organization/users.rbi +2 -1
- data/sig/anthropic/client.rbs +1 -0
- data/sig/anthropic/helpers/bedrock/client.rbs +2 -1
- data/sig/anthropic/helpers/google_cloud/client.rbs +2 -1
- data/sig/anthropic/helpers/streaming/message_stream.rbs +2 -2
- data/sig/anthropic/helpers/vertex/client.rbs +2 -1
- data/sig/anthropic/internal/tracing.rbs +477 -0
- data/sig/anthropic/internal/transport/base_client.rbs +37 -2
- data/sig/anthropic/internal/type/base_stream.rbs +1 -1
- data/sig/anthropic/models/anthropic_beta.rbs +2 -0
- data/sig/anthropic/models/beta/agent_create_params.rbs +5 -0
- data/sig/anthropic/models/beta/agent_update_params.rbs +5 -0
- data/sig/anthropic/models/beta/beta_managed_agents_agent.rbs +5 -0
- data/sig/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity.rbs +20 -0
- data/sig/anthropic/models/beta/beta_managed_agents_aws_role_execution_identity_params.rbs +20 -0
- data/sig/anthropic/models/beta/beta_managed_agents_execution_identity.rbs +42 -0
- data/sig/anthropic/models/beta/beta_managed_agents_execution_identity_params.rbs +42 -0
- data/sig/anthropic/models/beta/beta_managed_agents_model.rbs +0 -2
- data/sig/anthropic/models/beta/beta_managed_agents_service_account_execution_identity.rbs +18 -0
- data/sig/anthropic/models/beta/beta_managed_agents_service_account_execution_identity_params.rbs +18 -0
- data/sig/anthropic/models/beta/beta_managed_agents_session_agent.rbs +5 -0
- data/sig/anthropic/models/beta/beta_managed_agents_session_multiagent_coordinator.rbs +2 -0
- data/sig/anthropic/models/beta/beta_managed_agents_session_thread_agent.rbs +5 -0
- data/sig/anthropic/models/beta/organization/beta_deleted_telemetry_destination.rbs +23 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination.rbs +74 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_content_mode.rbs +23 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_delivery_health.rbs +30 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason.rbs +51 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_caller.rbs +18 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_invalid_address.rbs +18 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_redirect.rbs +18 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_disabled_reason_sustained_failure.rbs +18 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state.rbs +42 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled.rbs +29 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_disabled_params.rbs +18 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled.rbs +17 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_enabled_params.rbs +18 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_state_params.rbs +40 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_failure.rbs +20 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_response.rbs +29 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_result.rbs +42 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_test_success.rbs +17 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_traces.rbs +39 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_traces_params.rbs +41 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces.rbs +45 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all.rbs +17 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_all_params.rbs +17 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude.rbs +17 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_exclude_params.rbs +25 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include.rbs +17 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_include_params.rbs +25 -0
- data/sig/anthropic/models/beta/organization/beta_telemetry_destination_workspaces_params.rbs +48 -0
- data/sig/anthropic/models/beta/organization/telemetry_destination_create_params.rbs +65 -0
- data/sig/anthropic/models/beta/organization/telemetry_destination_delete_params.rbs +39 -0
- data/sig/anthropic/models/beta/organization/telemetry_destination_list_params.rbs +55 -0
- data/sig/anthropic/models/beta/organization/telemetry_destination_retrieve_params.rbs +39 -0
- data/sig/anthropic/models/beta/organization/telemetry_destination_test_params.rbs +39 -0
- data/sig/anthropic/models/beta/organization/telemetry_destination_update_params.rbs +79 -0
- data/sig/anthropic/models/beta/organization/telemetry_destinations/beta_deleted_telemetry_destination_workspace.rbs +36 -0
- data/sig/anthropic/models/beta/organization/telemetry_destinations/beta_telemetry_destination_workspace.rbs +41 -0
- data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_add_params.rbs +46 -0
- data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_list_params.rbs +55 -0
- data/sig/anthropic/models/beta/organization/telemetry_destinations/workspace_remove_params.rbs +46 -0
- data/sig/anthropic/models/beta/sessions/beta_managed_agents_inline_agent.rbs +5 -0
- data/sig/anthropic/models/beta/sessions/beta_managed_agents_session_thread.rbs +3 -0
- data/sig/anthropic/models/model.rbs +0 -2
- data/sig/anthropic/request_options.rbs +3 -0
- data/sig/anthropic/resources/beta/agents.rbs +2 -0
- data/sig/anthropic/resources/beta/messages/batches.rbs +1 -1
- data/sig/anthropic/resources/beta/messages.rbs +1 -1
- data/sig/anthropic/resources/beta/organization/telemetry_destinations/workspaces.rbs +35 -0
- data/sig/anthropic/resources/beta/organization/telemetry_destinations.rbs +61 -0
- data/sig/anthropic/resources/beta/organization.rbs +2 -0
- data/sig/anthropic/resources/beta/sessions/events.rbs +1 -1
- data/sig/anthropic/resources/beta/sessions/threads/events.rbs +1 -1
- data/sig/anthropic/resources/completions.rbs +1 -1
- data/sig/anthropic/resources/messages/batches.rbs +1 -1
- data/sig/anthropic/resources/messages.rbs +1 -1
- 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
|