Module: TokenHawk
- Defined in:
- lib/token_hawk.rb,
lib/token_hawk/cli.rb,
lib/token_hawk/call.rb,
lib/token_hawk/cost.rb,
lib/token_hawk/engine.rb,
lib/token_hawk/pricing.rb,
lib/token_hawk/version.rb,
lib/token_hawk/call_record.rb,
lib/token_hawk/domain_query.rb,
lib/token_hawk/recent_query.rb,
lib/token_hawk/adapters/base.rb,
lib/token_hawk/cli/formatter.rb,
lib/token_hawk/configuration.rb,
lib/token_hawk/storage/memory.rb,
lib/token_hawk/dashboard_query.rb,
lib/token_hawk/response_adapter.rb,
lib/token_hawk/cli/commands/costs.rb,
lib/token_hawk/cli/commands/recent.rb,
lib/token_hawk/storage/active_record.rb,
lib/token_hawk/cli/commands/efficiency.rb,
app/controllers/token_hawk/recent_controller.rb,
app/controllers/token_hawk/domains_controller.rb,
app/controllers/token_hawk/pricing_controller.rb,
app/controllers/token_hawk/dashboard_controller.rb,
app/controllers/token_hawk/application_controller.rb,
lib/generators/token_hawk/install/install_generator.rb,
sig/token_hawk.rbs
Defined Under Namespace
Modules: Adapters, Cost, Generators, Pricing, Storage
Classes: ApplicationController, CLI, Call, CallRecord, Configuration, DashboardController, DashboardQuery, DomainQuery, DomainsController, Engine, Error, PricingController, RecentController, RecentQuery, ResponseAdapter
Constant Summary
collapse
- VERSION =
"0.1.1"
Class Method Summary
collapse
Class Method Details
.clear_subscribers ⇒ Object
40
41
42
|
# File 'lib/token_hawk.rb', line 40
def self.clear_subscribers
@subscribers.clear
end
|
.configuration ⇒ Object
24
25
26
|
# File 'lib/token_hawk.rb', line 24
def self.configuration
@configuration
end
|
28
29
30
|
# File 'lib/token_hawk.rb', line 28
def self.configure
yield @configuration
end
|
.record(domain:, model:, input_tokens:, output_tokens:, latency_ms:, tags: {}) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/token_hawk.rb', line 58
def self.record(domain:, model:, input_tokens:, output_tokens:, latency_ms:, tags: {})
call = Call.new(
domain: domain.to_sym,
tags: tags,
vendor: Pricing.vendor_for_model(model.to_s),
model: model.to_s,
input_tokens: input_tokens.to_i,
output_tokens: output_tokens.to_i,
total_cost_cents: Cost.calculate(model: model.to_s, input_tokens: input_tokens.to_i, output_tokens: output_tokens.to_i),
latency_ms: latency_ms.to_i,
created_at: Time.now
)
storage_backend.record(call)
@subscribers[:call_recorded].each do |subscriber|
subscriber.call(call)
rescue => e
configuration.failure_logger.call("[TokenHawk] Subscriber error: #{e.message}") if configuration.log_failures
end
rescue => e
configuration.failure_logger.call("[TokenHawk] Failed to record telemetry: #{e.message}") if configuration.log_failures
end
|
.reset_configuration! ⇒ Object
32
33
34
|
# File 'lib/token_hawk.rb', line 32
def self.reset_configuration!
@configuration = Configuration.new
end
|
.subscribe(event, &block) ⇒ Object
36
37
38
|
# File 'lib/token_hawk.rb', line 36
def self.subscribe(event, &block)
@subscribers[event] << block
end
|
.track(domain:, tags: {}) ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/token_hawk.rb', line 44
def self.track(domain:, tags: {})
start_time = Time.now
response = yield
elapsed_ms = ((Time.now - start_time) * 1000).round
begin
record_call(domain: domain, tags: tags, response: response, elapsed_ms: elapsed_ms)
rescue => e
configuration.failure_logger.call("[TokenHawk] Failed to record telemetry: #{e.message}") if configuration.log_failures
end
response
end
|