Class: Crystil::Wrappers::Anthropic

Inherits:
Object
  • Object
show all
Defined in:
lib/crystil/wrappers/anthropic.rb,
sig/crystil/wrappers/anthropic.rbs

Overview

Wrapper for Anthropic Ruby client

Instance Method Summary collapse

Constructor Details

#initialize(config, collector, sentinel = nil) ⇒ Anthropic

Returns a new instance of Anthropic.

Parameters:



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

Parameters:

  • client (Object)

Returns:

  • (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
  wrap_messages_method(client)

  client
end

#validate_client!(client) ⇒ void

This method returns an undefined value.

Parameters:

  • client (Object)

Raises:



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.

Parameters:

  • client (Object)


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 wrap_messages_method(client)
  # Get the messages resource
  messages_resource = client.messages

  # Store references on the messages resource (needed for Base module)
  messages_resource.instance_variable_set(:@crystil_config, client.instance_variable_get(:@crystil_config))
  messages_resource.instance_variable_set(:@crystil_collector, client.instance_variable_get(:@crystil_collector))
  messages_resource.instance_variable_set(:@crystil_sentinel, client.instance_variable_get(:@crystil_sentinel))

  # Store the original create method
  original_create = messages_resource.method(:create)

  # Wrap the create method
  messages_resource.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