Class: Crystil::Wrappers::Anthropic
- Inherits:
-
Object
- Object
- Crystil::Wrappers::Anthropic
- Defined in:
- lib/crystil/wrappers/anthropic.rb,
sig/crystil/wrappers/anthropic.rbs
Overview
Wrapper for Anthropic Ruby client
Instance Method Summary collapse
-
#initialize(config, collector, sentinel = nil) ⇒ Anthropic
constructor
A new instance of Anthropic.
- #register(client) ⇒ Object
- #validate_client!(client) ⇒ void
- #wrap_messages_method(client) ⇒ void
Constructor Details
#initialize(config, collector, sentinel = nil) ⇒ Anthropic
Returns a new instance of Anthropic.
9 10 11 12 13 |
# File 'lib/crystil/wrappers/anthropic.rb', line 9 def initialize(config, collector, sentinel = nil) @config = config @collector = collector @sentinel = sentinel end |
Instance Method Details
#register(client) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/crystil/wrappers/anthropic.rb', line 15 def register(client) validate_client!(client) # Prevent double registration return client if client.instance_variable_defined?(:@crystil_registered) # Store references in client instance client.instance_variable_set(:@crystil_config, @config) client.instance_variable_set(:@crystil_collector, @collector) client.instance_variable_set(:@crystil_sentinel, @sentinel) client.instance_variable_set(:@crystil_registered, true) # Wrap the messages method (client) client end |
#validate_client!(client) ⇒ void
This method returns an undefined value.
35 36 37 38 39 |
# File 'lib/crystil/wrappers/anthropic.rb', line 35 def validate_client!(client) return if client.respond_to?(:messages) raise RegistrationError, "Client does not appear to be a valid Anthropic client (missing messages method)" end |
#wrap_messages_method(client) ⇒ void
This method returns an undefined value.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/crystil/wrappers/anthropic.rb', line 41 def (client) # Get the messages resource = client. # Store references on the messages resource (needed for Base module) .instance_variable_set(:@crystil_config, client.instance_variable_get(:@crystil_config)) .instance_variable_set(:@crystil_collector, client.instance_variable_get(:@crystil_collector)) .instance_variable_set(:@crystil_sentinel, client.instance_variable_get(:@crystil_sentinel)) # Store the original create method original_create = .method(:create) # Wrap the create method .define_singleton_method(:create) do |*args, **kwargs, &block| # Include Base module methods extend Base unless singleton_class.include?(Base) start_time = Time.now version = defined?(::Anthropic::VERSION) ? ::Anthropic::VERSION : nil # Extract parameters for sentinel and analytics params = kwargs.any? ? kwargs : (args.first || {}) sentinel = instance_variable_get(:@crystil_sentinel) sentinel&.raise_if_irrelevant!( title: ANTHROPIC_CLIENT_TITLE, request: params, version: version ) # Call original method response = if kwargs.any? original_create.call(**kwargs, &block) else original_create.call(*args, &block) end # Submit analytics crystil_submit_analytics( method: :create, args: args, kwargs: params, response: response, start_time: start_time, end_time: Time.now, title: ANTHROPIC_CLIENT_TITLE, version: version ) response rescue CrystilRequestInterceptedError => e # We don't want to send intercepts to collector raise e rescue StandardError => e params = kwargs.any? ? kwargs : (args.first || {}) crystil_submit_error_analytics( method: :create, args: args, kwargs: params, error: e, start_time: start_time, end_time: Time.now, title: ANTHROPIC_CLIENT_TITLE, version: version ) raise e end end |