Module: LlmCostTracker
- Defined in:
- lib/llm_cost_tracker.rb,
lib/llm_cost_tracker/cost.rb,
lib/llm_cost_tracker/event.rb,
lib/llm_cost_tracker/assets.rb,
lib/llm_cost_tracker/budget.rb,
lib/llm_cost_tracker/doctor.rb,
lib/llm_cost_tracker/engine.rb,
lib/llm_cost_tracker/errors.rb,
lib/llm_cost_tracker/report.rb,
lib/llm_cost_tracker/logging.rb,
lib/llm_cost_tracker/pricing.rb,
lib/llm_cost_tracker/railtie.rb,
lib/llm_cost_tracker/tag_key.rb,
lib/llm_cost_tracker/tracker.rb,
lib/llm_cost_tracker/version.rb,
lib/llm_cost_tracker/retention.rb,
lib/llm_cost_tracker/tag_query.rb,
lib/llm_cost_tracker/price_sync.rb,
lib/llm_cost_tracker/parsers/sse.rb,
lib/llm_cost_tracker/report_data.rb,
lib/llm_cost_tracker/request_url.rb,
lib/llm_cost_tracker/tag_context.rb,
lib/llm_cost_tracker/tags_column.rb,
lib/llm_cost_tracker/llm_api_call.rb,
lib/llm_cost_tracker/parsed_usage.rb,
lib/llm_cost_tracker/parsers/base.rb,
lib/llm_cost_tracker/period_total.rb,
lib/llm_cost_tracker/configuration.rb,
lib/llm_cost_tracker/tag_accessors.rb,
lib/llm_cost_tracker/value_helpers.rb,
lib/llm_cost_tracker/event_metadata.rb,
lib/llm_cost_tracker/parameter_hash.rb,
lib/llm_cost_tracker/parsers/gemini.rb,
lib/llm_cost_tracker/parsers/openai.rb,
lib/llm_cost_tracker/price_registry.rb,
lib/llm_cost_tracker/period_grouping.rb,
lib/llm_cost_tracker/price_freshness.rb,
lib/llm_cost_tracker/unknown_pricing.rb,
lib/llm_cost_tracker/usage_breakdown.rb,
lib/llm_cost_tracker/parsers/registry.rb,
lib/llm_cost_tracker/report_formatter.rb,
lib/llm_cost_tracker/stream_collector.rb,
lib/llm_cost_tracker/integrations/base.rb,
lib/llm_cost_tracker/parsers/anthropic.rb,
lib/llm_cost_tracker/price_sync/merger.rb,
lib/llm_cost_tracker/price_sync/source.rb,
lib/llm_cost_tracker/middleware/faraday.rb,
lib/llm_cost_tracker/price_sync/fetcher.rb,
app/services/llm_cost_tracker/pagination.rb,
lib/llm_cost_tracker/integrations/openai.rb,
app/helpers/llm_cost_tracker/chart_helper.rb,
lib/llm_cost_tracker/engine_compatibility.rb,
lib/llm_cost_tracker/parsers/openai_usage.rb,
lib/llm_cost_tracker/price_sync/raw_price.rb,
lib/llm_cost_tracker/price_sync/validator.rb,
lib/llm_cost_tracker/integrations/registry.rb,
lib/llm_cost_tracker/integrations/anthropic.rb,
lib/llm_cost_tracker/price_sync/model_catalog.rb,
lib/llm_cost_tracker/price_sync/source_result.rb,
app/helpers/llm_cost_tracker/pagination_helper.rb,
app/services/llm_cost_tracker/dashboard/filter.rb,
lib/llm_cost_tracker/parsers/openai_compatible.rb,
app/helpers/llm_cost_tracker/application_helper.rb,
lib/llm_cost_tracker/integrations/object_reader.rb,
lib/llm_cost_tracker/price_sync/registry_loader.rb,
lib/llm_cost_tracker/price_sync/registry_writer.rb,
lib/llm_cost_tracker/price_sync/sources/litellm.rb,
app/controllers/llm_cost_tracker/tags_controller.rb,
lib/llm_cost_tracker/storage/active_record_store.rb,
app/controllers/llm_cost_tracker/calls_controller.rb,
app/controllers/llm_cost_tracker/assets_controller.rb,
app/controllers/llm_cost_tracker/models_controller.rb,
app/services/llm_cost_tracker/dashboard/top_models.rb,
lib/llm_cost_tracker/configuration/instrumentation.rb,
lib/llm_cost_tracker/storage/active_record_rollups.rb,
app/helpers/llm_cost_tracker/dashboard_query_helper.rb,
app/services/llm_cost_tracker/dashboard/time_series.rb,
lib/llm_cost_tracker/price_sync/sources/open_router.rb,
app/helpers/llm_cost_tracker/dashboard_filter_helper.rb,
app/services/llm_cost_tracker/dashboard/data_quality.rb,
lib/llm_cost_tracker/price_sync/refresh_plan_builder.rb,
app/controllers/llm_cost_tracker/dashboard_controller.rb,
app/services/llm_cost_tracker/dashboard/spend_anomaly.rb,
app/services/llm_cost_tracker/dashboard/tag_breakdown.rb,
app/services/llm_cost_tracker/dashboard/overview_stats.rb,
app/controllers/llm_cost_tracker/application_controller.rb,
app/controllers/llm_cost_tracker/data_quality_controller.rb,
app/services/llm_cost_tracker/dashboard/tag_key_explorer.rb,
app/services/llm_cost_tracker/dashboard/provider_breakdown.rb,
app/helpers/llm_cost_tracker/dashboard_filter_options_helper.rb,
app/services/llm_cost_tracker/dashboard/data_quality_aggregate.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/prices_generator.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/install_generator.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/add_streaming_generator.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/add_latency_ms_generator.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/add_period_totals_generator.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/add_usage_breakdown_generator.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_tags_to_jsonb_generator.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_cost_precision_generator.rb,
lib/llm_cost_tracker/generators/llm_cost_tracker/add_provider_response_id_generator.rb
Defined Under Namespace
Modules: ApplicationHelper, Assets, ChartHelper, ConfigurationInstrumentation, Dashboard, DashboardFilterHelper, DashboardFilterOptionsHelper, DashboardQueryHelper, EngineCompatibility, EventMetadata, Generators, Integrations, Logging, Middleware, PaginationHelper, ParameterHash, Parsers, PeriodGrouping, PriceFreshness, PriceRegistry, PriceSync, Pricing, RequestUrl, Retention, Storage, TagAccessors, TagContext, TagKey, TagQuery, TagsColumn, ValueHelpers
Classes: ApplicationController, AssetsController, Budget, BudgetExceededError, CallsController, Configuration, Cost, DashboardController, DataQualityController, Doctor, Engine, Error, Event, InvalidFilterError, LlmApiCall, ModelsController, Pagination, ParsedUsage, PeriodTotal, Railtie, Report, ReportData, ReportFormatter, StorageError, StreamCollector, TagsController, TopCall, Tracker, UnknownPricing, UnknownPricingError, UsageBreakdown
Constant Summary
collapse
- CONFIGURATION_MUTEX =
Monitor.new
- VERSION =
"0.5.0"
Class Method Summary
collapse
-
.configuration ⇒ Object
-
.configure ⇒ Object
-
.enforce_budget! ⇒ Object
-
.reset_configuration! ⇒ Object
-
.track(provider:, input_tokens:, output_tokens:, model: nil, latency_ms: nil, stream: false, usage_source: :manual, enforce_budget: false, provider_response_id: nil, pricing_mode: nil, **metadata) ⇒ Object
-
.track_stream(provider:, model: nil, latency_ms: nil, enforce_budget: false, provider_response_id: nil, pricing_mode: nil, **metadata) ⇒ Object
-
.with_tags(tags = nil, **kwargs) ⇒ Object
Class Method Details
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/llm_cost_tracker.rb', line 52
def configure
config = CONFIGURATION_MUTEX.synchronize do
current = @configuration || Configuration.new
current = current.dup_for_configuration if current.finalized?
@configuration = current
yield(current)
current.openai_compatible_providers = current.openai_compatible_providers.dup
current.finalize!
current
end
Integrations.install!
warn_for_configuration!(config)
end
|
.enforce_budget! ⇒ Object
.reset_configuration! ⇒ Object
.track(provider:, input_tokens:, output_tokens:, model: nil, latency_ms: nil, stream: false, usage_source: :manual, enforce_budget: false, provider_response_id: nil, pricing_mode: nil, **metadata) ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/llm_cost_tracker.rb', line 82
def track(provider:, input_tokens:, output_tokens:, model: nil, latency_ms: nil, stream: false,
usage_source: :manual, enforce_budget: false, provider_response_id: nil, pricing_mode: nil, **metadata)
enforce_budget! if enforce_budget
Tracker.record(
provider: provider.to_s,
model: model,
input_tokens: input_tokens,
output_tokens: output_tokens,
latency_ms: latency_ms,
stream: stream,
usage_source: usage_source,
provider_response_id: provider_response_id,
pricing_mode: pricing_mode,
metadata: metadata
)
end
|
.track_stream(provider:, model: nil, latency_ms: nil, enforce_budget: false, provider_response_id: nil, pricing_mode: nil, **metadata) ⇒ Object
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/llm_cost_tracker.rb', line 99
def track_stream(provider:, model: nil, latency_ms: nil, enforce_budget: false, provider_response_id: nil,
pricing_mode: nil, **metadata)
require_relative "llm_cost_tracker/stream_collector"
enforce_budget! if enforce_budget
collector = StreamCollector.new(
provider: provider.to_s,
model: model,
latency_ms: latency_ms,
provider_response_id: provider_response_id,
pricing_mode: pricing_mode,
metadata: metadata
)
yield collector
collector.finish!
rescue StandardError
collector&.finish!(errored: true)
raise
end
|
77
78
79
80
|
# File 'lib/llm_cost_tracker.rb', line 77
def with_tags(tags = nil, **kwargs, &)
merged = (tags || {}).to_h.merge(kwargs)
TagContext.with(merged, &)
end
|