Class: Ollama::Middleware::Metrics

Inherits:
Ollama::Middleware show all
Defined in:
lib/ollama/middleware/metrics.rb

Overview

Metrics middleware - collects request/response metrics

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Ollama::Middleware

#around

Constructor Details

#initialize(collector: nil, hooks: {}) ⇒ Metrics

Returns a new instance of Metrics.



11
12
13
14
15
# File 'lib/ollama/middleware/metrics.rb', line 11

def initialize(collector: nil, hooks: {})
  super()
  @collector = collector || default_collector
  @hooks = hooks
end

Instance Attribute Details

#collectorObject (readonly)

Returns the value of attribute collector.



9
10
11
# File 'lib/ollama/middleware/metrics.rb', line 9

def collector
  @collector
end

#hooksObject (readonly)

Returns the value of attribute hooks.



9
10
11
# File 'lib/ollama/middleware/metrics.rb', line 9

def hooks
  @hooks
end

Instance Method Details

#after_response(response, env) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/ollama/middleware/metrics.rb', line 23

def after_response(response, env)
  duration = env[:duration_ms]
  endpoint = env[:request]&.endpoint
  success = response.success?

  @collector.increment(:response_count, tags: { endpoint: endpoint, status: response.status.to_s })
  @collector.increment(success ? :success_count : :failure_count, tags: { endpoint: endpoint })
  @collector.timing(:duration_ms, duration, tags: { endpoint: endpoint })

  if env[:request].respond_to?(:prompt_eval_count)
    @collector.increment(:prompt_tokens, env[:request].prompt_eval_count || 0, tags: { endpoint: endpoint })
  end

  if env[:request].respond_to?(:eval_count)
    @collector.increment(:completion_tokens, env[:request].eval_count || 0, tags: { endpoint: endpoint })
  end

  @collector.increment(:stream_count, tags: { endpoint: endpoint }) if env[:request]&.streaming?

  @hooks[:after_response]&.call(response, env)
  response
end

#before_request(request, env) ⇒ Object



17
18
19
20
21
# File 'lib/ollama/middleware/metrics.rb', line 17

def before_request(request, env)
  @collector.increment(:request_count, tags: { endpoint: request.endpoint })
  @hooks[:before_request]&.call(request, env)
  request
end

#on_error(error, env) ⇒ Object



46
47
48
49
50
51
# File 'lib/ollama/middleware/metrics.rb', line 46

def on_error(error, env)
  endpoint = env[:request]&.endpoint
  @collector.increment(:error_count, tags: { endpoint: endpoint, error: error.class.name })
  @hooks[:on_error]&.call(error, env)
  nil
end