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/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/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/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/unknown_pricing.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/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,
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/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/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,
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,
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/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, Dashboard, DashboardFilterHelper, DashboardFilterOptionsHelper, DashboardQueryHelper, EngineCompatibility, EventMetadata, Generators, Logging, Middleware, PaginationHelper, ParameterHash, Parsers, PeriodGrouping, PriceRegistry, PriceSync, Pricing, Retention, Storage, TagAccessors, TagKey, TagQuery, TagsColumn, ValueHelpers
Classes: ApplicationController, AssetsController, Budget, BudgetExceededError, CallsController, Configuration, Cost, DashboardController, DataQualityController, Engine, Error, Event, InvalidFilterError, LlmApiCall, ModelsController, Pagination, ParsedUsage, Railtie, Report, ReportData, ReportFormatter, StorageError, StreamCollector, TagsController, TopCall, Tracker, UnknownPricing, UnknownPricingError
Constant Summary
collapse
- CONFIGURATION_MUTEX =
Monitor.new
- VERSION =
"0.3.1"
Class Method Summary
collapse
-
.configuration ⇒ Object
-
.configure ⇒ Object
-
.enforce_budget! ⇒ Object
-
.reset_configuration! ⇒ Object
-
.track(provider:, model:, input_tokens:, output_tokens:, latency_ms: nil, stream: false, usage_source: :manual, enforce_budget: false, provider_response_id: nil, **metadata) ⇒ Object
-
.track_stream(provider:, model:, latency_ms: nil, enforce_budget: false, provider_response_id: nil, **metadata) ⇒ Object
Class Method Details
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/llm_cost_tracker.rb', line 48
def configure
config = CONFIGURATION_MUTEX.synchronize do
current = @configuration || Configuration.new
current = current.dup_for_configuration if current.finalized?
@configuration = current
yield(current)
current.normalize_openai_compatible_providers!
current.finalize!
current
end
warn_for_configuration!(config)
end
|
.enforce_budget! ⇒ Object
.reset_configuration! ⇒ Object
.track(provider:, model:, input_tokens:, output_tokens:, latency_ms: nil, stream: false, usage_source: :manual, enforce_budget: false, provider_response_id: nil, **metadata) ⇒ Object
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/llm_cost_tracker.rb', line 69
def track(provider:, model:, input_tokens:, output_tokens:, latency_ms: nil, stream: false, usage_source: :manual,
enforce_budget: false, provider_response_id: 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,
metadata: metadata
)
end
|
.track_stream(provider:, model:, latency_ms: nil, enforce_budget: false, provider_response_id: nil, **metadata) ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/llm_cost_tracker.rb', line 85
def track_stream(provider:, model:, latency_ms: nil, enforce_budget: false, provider_response_id: 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,
metadata: metadata
)
yield collector
collector.finish!
rescue StandardError
collector&.finish!(errored: true)
raise
end
|