llm_cost_tracker 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +136 -0
- data/README.md +14 -6
- data/app/assets/llm_cost_tracker/application.css +65 -5
- data/app/controllers/llm_cost_tracker/application_controller.rb +25 -33
- data/app/controllers/llm_cost_tracker/assets_controller.rb +1 -1
- data/app/controllers/llm_cost_tracker/calls_controller.rb +21 -11
- data/app/controllers/llm_cost_tracker/data_quality_controller.rb +4 -0
- data/app/controllers/llm_cost_tracker/reconciliation_controller.rb +106 -0
- data/app/controllers/llm_cost_tracker/tags_controller.rb +15 -1
- data/app/helpers/llm_cost_tracker/application_helper.rb +11 -1
- data/app/helpers/llm_cost_tracker/inline_style_helper.rb +28 -0
- data/app/helpers/llm_cost_tracker/reconciliation_helper.rb +13 -0
- data/app/helpers/llm_cost_tracker/token_usage_helper.rb +5 -1
- data/app/models/llm_cost_tracker/call.rb +0 -3
- data/app/models/llm_cost_tracker/call_line_item.rb +1 -5
- data/app/models/llm_cost_tracker/call_rollup.rb +0 -3
- data/app/models/llm_cost_tracker/call_tag.rb +0 -4
- data/app/models/llm_cost_tracker/ingestion/inbox_entry.rb +0 -4
- data/app/models/llm_cost_tracker/ingestion/lease.rb +0 -3
- data/app/models/llm_cost_tracker/provider_invoice.rb +7 -3
- data/app/models/llm_cost_tracker/provider_invoice_import.rb +29 -0
- data/app/services/llm_cost_tracker/dashboard/data_quality.rb +33 -4
- data/app/services/llm_cost_tracker/dashboard/filter.rb +6 -4
- data/app/services/llm_cost_tracker/dashboard/setup_state.rb +110 -0
- data/app/views/layouts/llm_cost_tracker/application.html.erb +6 -1
- data/app/views/llm_cost_tracker/calls/show.html.erb +26 -41
- data/app/views/llm_cost_tracker/dashboard/index.html.erb +9 -9
- data/app/views/llm_cost_tracker/data_quality/index.html.erb +92 -53
- data/app/views/llm_cost_tracker/reconciliation/index.html.erb +183 -0
- data/app/views/llm_cost_tracker/shared/_bar.html.erb +1 -1
- data/app/views/llm_cost_tracker/shared/_filters.html.erb +3 -0
- data/app/views/llm_cost_tracker/shared/_metric_stack.html.erb +1 -1
- data/app/views/llm_cost_tracker/tags/show.html.erb +60 -0
- data/config/routes.rb +3 -2
- data/lib/llm_cost_tracker/billing/components.rb +45 -3
- data/lib/llm_cost_tracker/billing/components.yml +71 -0
- data/lib/llm_cost_tracker/billing/cost_status.rb +21 -25
- data/lib/llm_cost_tracker/billing/line_item.rb +16 -50
- data/lib/llm_cost_tracker/budget.rb +31 -7
- data/lib/llm_cost_tracker/capture/stream_collector.rb +113 -34
- data/lib/llm_cost_tracker/capture/stream_tracker.rb +40 -5
- data/lib/llm_cost_tracker/configuration.rb +72 -17
- data/lib/llm_cost_tracker/doctor/capture_verifier.rb +1 -1
- data/lib/llm_cost_tracker/doctor/cost_drift_check.rb +2 -0
- data/lib/llm_cost_tracker/doctor/ingestion_check.rb +30 -4
- data/lib/llm_cost_tracker/doctor/invoice_reconciliation_check.rb +164 -0
- data/lib/llm_cost_tracker/doctor/legacy_audit_check.rb +0 -2
- data/lib/llm_cost_tracker/doctor/legacy_billing_status_check.rb +0 -2
- data/lib/llm_cost_tracker/doctor/schema_check.rb +5 -2
- data/lib/llm_cost_tracker/doctor.rb +72 -14
- data/lib/llm_cost_tracker/engine.rb +8 -0
- data/lib/llm_cost_tracker/errors.rb +3 -2
- data/lib/llm_cost_tracker/event.rb +48 -1
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/async_ingestion_generator.rb +43 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/call_rollups_generator.rb +43 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/install_generator.rb +17 -26
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/reconciliation_generator.rb +34 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/create_llm_cost_tracker_async_ingestion.rb.erb +29 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/create_llm_cost_tracker_call_rollups.rb.erb +15 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/create_llm_cost_tracker_calls.rb.erb +5 -58
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/create_llm_cost_tracker_reconciliation.rb.erb +60 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/initializer.rb.erb +35 -25
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_call_rollups_provider.rb.erb +35 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_call_tags_key_value_index.rb.erb +32 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_image_tokens.rb.erb +18 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_provider_invoice_imports_provider.rb.erb +32 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_provider_invoices_metadata_index.rb.erb +25 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_call_rollups_provider_generator.rb +29 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_call_tags_key_value_index_generator.rb +30 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_image_tokens_generator.rb +29 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_provider_invoice_imports_provider_generator.rb +31 -0
- data/lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_provider_invoices_metadata_index_generator.rb +31 -0
- data/lib/llm_cost_tracker/ingestion/batch.rb +5 -2
- data/lib/llm_cost_tracker/ingestion/inbox.rb +3 -25
- data/lib/llm_cost_tracker/ingestion/pool.rb +44 -0
- data/lib/llm_cost_tracker/ingestion/worker.rb +28 -34
- data/lib/llm_cost_tracker/ingestion.rb +48 -11
- data/lib/llm_cost_tracker/integrations/anthropic.rb +31 -26
- data/lib/llm_cost_tracker/integrations/base.rb +35 -15
- data/lib/llm_cost_tracker/integrations/openai.rb +345 -84
- data/lib/llm_cost_tracker/integrations/ruby_llm.rb +111 -14
- data/lib/llm_cost_tracker/integrations.rb +33 -14
- data/lib/llm_cost_tracker/ledger/period/totals.rb +25 -7
- data/lib/llm_cost_tracker/ledger/rollups.rb +22 -17
- data/lib/llm_cost_tracker/ledger/schema/call_line_items.rb +41 -1
- data/lib/llm_cost_tracker/ledger/schema/call_rollups.rb +16 -6
- data/lib/llm_cost_tracker/ledger/schema/call_tags.rb +28 -2
- data/lib/llm_cost_tracker/ledger/schema/calls.rb +2 -4
- data/lib/llm_cost_tracker/ledger/schema/ingestion_inbox_entries.rb +57 -0
- data/lib/llm_cost_tracker/ledger/schema/ingestion_leases.rb +52 -0
- data/lib/llm_cost_tracker/ledger/schema/provider_invoice_imports.rb +56 -0
- data/lib/llm_cost_tracker/ledger/schema/provider_invoices.rb +28 -13
- data/lib/llm_cost_tracker/ledger/store.rb +34 -31
- data/lib/llm_cost_tracker/ledger/tags/encoding.rb +37 -0
- data/lib/llm_cost_tracker/ledger/tags/query.rb +2 -2
- data/lib/llm_cost_tracker/ledger.rb +2 -1
- data/lib/llm_cost_tracker/logging.rb +0 -4
- data/lib/llm_cost_tracker/masking.rb +39 -0
- data/lib/llm_cost_tracker/middleware/faraday.rb +120 -33
- data/lib/llm_cost_tracker/parsers/anthropic.rb +36 -28
- data/lib/llm_cost_tracker/parsers/azure.rb +46 -0
- data/lib/llm_cost_tracker/parsers/base.rb +53 -43
- data/lib/llm_cost_tracker/parsers/gemini.rb +24 -22
- data/lib/llm_cost_tracker/parsers/openai.rb +20 -38
- data/lib/llm_cost_tracker/parsers/openai_compatible.rb +26 -39
- data/lib/llm_cost_tracker/parsers/openai_service_charges.rb +81 -13
- data/lib/llm_cost_tracker/parsers/openai_usage.rb +126 -59
- data/lib/llm_cost_tracker/parsers.rb +31 -4
- data/lib/llm_cost_tracker/prices.json +572 -493
- data/lib/llm_cost_tracker/pricing/backfill.rb +140 -0
- data/lib/llm_cost_tracker/pricing/effective_prices.rb +7 -40
- data/lib/llm_cost_tracker/pricing/estimator.rb +33 -0
- data/lib/llm_cost_tracker/pricing/explainer.rb +4 -1
- data/lib/llm_cost_tracker/pricing/lookup.rb +73 -5
- data/lib/llm_cost_tracker/pricing/mode.rb +76 -0
- data/lib/llm_cost_tracker/pricing/registry.rb +3 -8
- data/lib/llm_cost_tracker/pricing/service_charges.rb +14 -12
- data/lib/llm_cost_tracker/pricing/{sync_change_printer.rb → sync/change_printer.rb} +3 -3
- data/lib/llm_cost_tracker/pricing/sync/registry_writer.rb +62 -1
- data/lib/llm_cost_tracker/pricing/sync.rb +4 -10
- data/lib/llm_cost_tracker/pricing/unknown.rb +5 -2
- data/lib/llm_cost_tracker/pricing.rb +117 -44
- data/lib/llm_cost_tracker/providers/anthropic/tier_classification.rb +22 -0
- data/lib/llm_cost_tracker/providers/azure/hosts.rb +17 -0
- data/lib/llm_cost_tracker/providers/gemini/model_families.rb +17 -0
- data/lib/llm_cost_tracker/providers/openai/hosts.rb +35 -0
- data/lib/llm_cost_tracker/providers/openai/model_families.rb +51 -0
- data/lib/llm_cost_tracker/railtie.rb +8 -0
- data/lib/llm_cost_tracker/reconcile_tasks.rb +134 -0
- data/lib/llm_cost_tracker/reconciliation/diff.rb +409 -0
- data/lib/llm_cost_tracker/reconciliation/diff_result.rb +44 -0
- data/lib/llm_cost_tracker/reconciliation/import_result.rb +19 -0
- data/lib/llm_cost_tracker/reconciliation/importer.rb +254 -0
- data/lib/llm_cost_tracker/reconciliation/sources/anthropic_usage.rb +172 -0
- data/lib/llm_cost_tracker/reconciliation/sources/fingerprint.rb +20 -0
- data/lib/llm_cost_tracker/reconciliation/sources/openai_usage.rb +142 -0
- data/lib/llm_cost_tracker/reconciliation.rb +118 -0
- data/lib/llm_cost_tracker/report/data.rb +4 -1
- data/lib/llm_cost_tracker/report.rb +0 -4
- data/lib/llm_cost_tracker/retention.rb +31 -6
- data/lib/llm_cost_tracker/tags/context.rb +3 -4
- data/lib/llm_cost_tracker/tags/sanitizer.rb +73 -21
- data/lib/llm_cost_tracker/token_usage.rb +14 -2
- data/lib/llm_cost_tracker/tracker.rb +41 -55
- data/lib/llm_cost_tracker/version.rb +1 -1
- data/lib/llm_cost_tracker.rb +19 -14
- data/lib/tasks/llm_cost_tracker.rake +41 -4
- metadata +49 -3
- data/lib/llm_cost_tracker/usage_capture.rb +0 -58
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: llm_cost_tracker
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sergii Khomenko
|
|
@@ -239,13 +239,16 @@ files:
|
|
|
239
239
|
- app/controllers/llm_cost_tracker/dashboard_controller.rb
|
|
240
240
|
- app/controllers/llm_cost_tracker/data_quality_controller.rb
|
|
241
241
|
- app/controllers/llm_cost_tracker/models_controller.rb
|
|
242
|
+
- app/controllers/llm_cost_tracker/reconciliation_controller.rb
|
|
242
243
|
- app/controllers/llm_cost_tracker/tags_controller.rb
|
|
243
244
|
- app/helpers/llm_cost_tracker/application_helper.rb
|
|
244
245
|
- app/helpers/llm_cost_tracker/chart_helper.rb
|
|
245
246
|
- app/helpers/llm_cost_tracker/dashboard_filter_helper.rb
|
|
246
247
|
- app/helpers/llm_cost_tracker/dashboard_filter_options_helper.rb
|
|
247
248
|
- app/helpers/llm_cost_tracker/dashboard_query_helper.rb
|
|
249
|
+
- app/helpers/llm_cost_tracker/inline_style_helper.rb
|
|
248
250
|
- app/helpers/llm_cost_tracker/pagination_helper.rb
|
|
251
|
+
- app/helpers/llm_cost_tracker/reconciliation_helper.rb
|
|
249
252
|
- app/helpers/llm_cost_tracker/token_usage_helper.rb
|
|
250
253
|
- app/models/llm_cost_tracker/call.rb
|
|
251
254
|
- app/models/llm_cost_tracker/call_line_item.rb
|
|
@@ -254,6 +257,7 @@ files:
|
|
|
254
257
|
- app/models/llm_cost_tracker/ingestion/inbox_entry.rb
|
|
255
258
|
- app/models/llm_cost_tracker/ingestion/lease.rb
|
|
256
259
|
- app/models/llm_cost_tracker/provider_invoice.rb
|
|
260
|
+
- app/models/llm_cost_tracker/provider_invoice_import.rb
|
|
257
261
|
- app/services/llm_cost_tracker/dashboard/data_quality.rb
|
|
258
262
|
- app/services/llm_cost_tracker/dashboard/date_range.rb
|
|
259
263
|
- app/services/llm_cost_tracker/dashboard/filter.rb
|
|
@@ -261,6 +265,7 @@ files:
|
|
|
261
265
|
- app/services/llm_cost_tracker/dashboard/pagination.rb
|
|
262
266
|
- app/services/llm_cost_tracker/dashboard/params.rb
|
|
263
267
|
- app/services/llm_cost_tracker/dashboard/provider_breakdown.rb
|
|
268
|
+
- app/services/llm_cost_tracker/dashboard/setup_state.rb
|
|
264
269
|
- app/services/llm_cost_tracker/dashboard/spend_anomaly.rb
|
|
265
270
|
- app/services/llm_cost_tracker/dashboard/tag_breakdown.rb
|
|
266
271
|
- app/services/llm_cost_tracker/dashboard/tag_key_explorer.rb
|
|
@@ -275,6 +280,7 @@ files:
|
|
|
275
280
|
- app/views/llm_cost_tracker/errors/invalid_filter.html.erb
|
|
276
281
|
- app/views/llm_cost_tracker/errors/not_found.html.erb
|
|
277
282
|
- app/views/llm_cost_tracker/models/index.html.erb
|
|
283
|
+
- app/views/llm_cost_tracker/reconciliation/index.html.erb
|
|
278
284
|
- app/views/llm_cost_tracker/shared/_active_filters.html.erb
|
|
279
285
|
- app/views/llm_cost_tracker/shared/_bar.html.erb
|
|
280
286
|
- app/views/llm_cost_tracker/shared/_filters.html.erb
|
|
@@ -302,6 +308,7 @@ files:
|
|
|
302
308
|
- lib/llm_cost_tracker/doctor/check.rb
|
|
303
309
|
- lib/llm_cost_tracker/doctor/cost_drift_check.rb
|
|
304
310
|
- lib/llm_cost_tracker/doctor/ingestion_check.rb
|
|
311
|
+
- lib/llm_cost_tracker/doctor/invoice_reconciliation_check.rb
|
|
305
312
|
- lib/llm_cost_tracker/doctor/legacy_audit_check.rb
|
|
306
313
|
- lib/llm_cost_tracker/doctor/legacy_billing_status_check.rb
|
|
307
314
|
- lib/llm_cost_tracker/doctor/price_check.rb
|
|
@@ -311,14 +318,31 @@ files:
|
|
|
311
318
|
- lib/llm_cost_tracker/engine.rb
|
|
312
319
|
- lib/llm_cost_tracker/errors.rb
|
|
313
320
|
- lib/llm_cost_tracker/event.rb
|
|
321
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/async_ingestion_generator.rb
|
|
322
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/call_rollups_generator.rb
|
|
314
323
|
- lib/llm_cost_tracker/generators/llm_cost_tracker/install_generator.rb
|
|
315
324
|
- lib/llm_cost_tracker/generators/llm_cost_tracker/prices_generator.rb
|
|
325
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/reconciliation_generator.rb
|
|
326
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/create_llm_cost_tracker_async_ingestion.rb.erb
|
|
327
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/create_llm_cost_tracker_call_rollups.rb.erb
|
|
316
328
|
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/create_llm_cost_tracker_calls.rb.erb
|
|
329
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/create_llm_cost_tracker_reconciliation.rb.erb
|
|
317
330
|
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/initializer.rb.erb
|
|
331
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_call_rollups_provider.rb.erb
|
|
332
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_call_tags_key_value_index.rb.erb
|
|
333
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_image_tokens.rb.erb
|
|
334
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_provider_invoice_imports_provider.rb.erb
|
|
335
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/templates/upgrade_provider_invoices_metadata_index.rb.erb
|
|
336
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_call_rollups_provider_generator.rb
|
|
337
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_call_tags_key_value_index_generator.rb
|
|
338
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_image_tokens_generator.rb
|
|
339
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_provider_invoice_imports_provider_generator.rb
|
|
340
|
+
- lib/llm_cost_tracker/generators/llm_cost_tracker/upgrade_provider_invoices_metadata_index_generator.rb
|
|
318
341
|
- lib/llm_cost_tracker/ingestion.rb
|
|
319
342
|
- lib/llm_cost_tracker/ingestion/batch.rb
|
|
320
343
|
- lib/llm_cost_tracker/ingestion/inbox.rb
|
|
321
344
|
- lib/llm_cost_tracker/ingestion/lease_claim.rb
|
|
345
|
+
- lib/llm_cost_tracker/ingestion/pool.rb
|
|
322
346
|
- lib/llm_cost_tracker/ingestion/worker.rb
|
|
323
347
|
- lib/llm_cost_tracker/integrations.rb
|
|
324
348
|
- lib/llm_cost_tracker/integrations/anthropic.rb
|
|
@@ -335,14 +359,20 @@ files:
|
|
|
335
359
|
- lib/llm_cost_tracker/ledger/schema/call_rollups.rb
|
|
336
360
|
- lib/llm_cost_tracker/ledger/schema/call_tags.rb
|
|
337
361
|
- lib/llm_cost_tracker/ledger/schema/calls.rb
|
|
362
|
+
- lib/llm_cost_tracker/ledger/schema/ingestion_inbox_entries.rb
|
|
363
|
+
- lib/llm_cost_tracker/ledger/schema/ingestion_leases.rb
|
|
364
|
+
- lib/llm_cost_tracker/ledger/schema/provider_invoice_imports.rb
|
|
338
365
|
- lib/llm_cost_tracker/ledger/schema/provider_invoices.rb
|
|
339
366
|
- lib/llm_cost_tracker/ledger/store.rb
|
|
367
|
+
- lib/llm_cost_tracker/ledger/tags/encoding.rb
|
|
340
368
|
- lib/llm_cost_tracker/ledger/tags/query.rb
|
|
341
369
|
- lib/llm_cost_tracker/ledger/tags/sql.rb
|
|
342
370
|
- lib/llm_cost_tracker/logging.rb
|
|
371
|
+
- lib/llm_cost_tracker/masking.rb
|
|
343
372
|
- lib/llm_cost_tracker/middleware/faraday.rb
|
|
344
373
|
- lib/llm_cost_tracker/parsers.rb
|
|
345
374
|
- lib/llm_cost_tracker/parsers/anthropic.rb
|
|
375
|
+
- lib/llm_cost_tracker/parsers/azure.rb
|
|
346
376
|
- lib/llm_cost_tracker/parsers/base.rb
|
|
347
377
|
- lib/llm_cost_tracker/parsers/gemini.rb
|
|
348
378
|
- lib/llm_cost_tracker/parsers/openai.rb
|
|
@@ -352,18 +382,35 @@ files:
|
|
|
352
382
|
- lib/llm_cost_tracker/parsers/sse.rb
|
|
353
383
|
- lib/llm_cost_tracker/prices.json
|
|
354
384
|
- lib/llm_cost_tracker/pricing.rb
|
|
385
|
+
- lib/llm_cost_tracker/pricing/backfill.rb
|
|
355
386
|
- lib/llm_cost_tracker/pricing/effective_prices.rb
|
|
387
|
+
- lib/llm_cost_tracker/pricing/estimator.rb
|
|
356
388
|
- lib/llm_cost_tracker/pricing/explainer.rb
|
|
357
389
|
- lib/llm_cost_tracker/pricing/lookup.rb
|
|
390
|
+
- lib/llm_cost_tracker/pricing/mode.rb
|
|
358
391
|
- lib/llm_cost_tracker/pricing/registry.rb
|
|
359
392
|
- lib/llm_cost_tracker/pricing/service_charges.rb
|
|
360
393
|
- lib/llm_cost_tracker/pricing/sync.rb
|
|
394
|
+
- lib/llm_cost_tracker/pricing/sync/change_printer.rb
|
|
361
395
|
- lib/llm_cost_tracker/pricing/sync/fetcher.rb
|
|
362
396
|
- lib/llm_cost_tracker/pricing/sync/registry_diff.rb
|
|
363
397
|
- lib/llm_cost_tracker/pricing/sync/registry_writer.rb
|
|
364
|
-
- lib/llm_cost_tracker/pricing/sync_change_printer.rb
|
|
365
398
|
- lib/llm_cost_tracker/pricing/unknown.rb
|
|
399
|
+
- lib/llm_cost_tracker/providers/anthropic/tier_classification.rb
|
|
400
|
+
- lib/llm_cost_tracker/providers/azure/hosts.rb
|
|
401
|
+
- lib/llm_cost_tracker/providers/gemini/model_families.rb
|
|
402
|
+
- lib/llm_cost_tracker/providers/openai/hosts.rb
|
|
403
|
+
- lib/llm_cost_tracker/providers/openai/model_families.rb
|
|
366
404
|
- lib/llm_cost_tracker/railtie.rb
|
|
405
|
+
- lib/llm_cost_tracker/reconcile_tasks.rb
|
|
406
|
+
- lib/llm_cost_tracker/reconciliation.rb
|
|
407
|
+
- lib/llm_cost_tracker/reconciliation/diff.rb
|
|
408
|
+
- lib/llm_cost_tracker/reconciliation/diff_result.rb
|
|
409
|
+
- lib/llm_cost_tracker/reconciliation/import_result.rb
|
|
410
|
+
- lib/llm_cost_tracker/reconciliation/importer.rb
|
|
411
|
+
- lib/llm_cost_tracker/reconciliation/sources/anthropic_usage.rb
|
|
412
|
+
- lib/llm_cost_tracker/reconciliation/sources/fingerprint.rb
|
|
413
|
+
- lib/llm_cost_tracker/reconciliation/sources/openai_usage.rb
|
|
367
414
|
- lib/llm_cost_tracker/report.rb
|
|
368
415
|
- lib/llm_cost_tracker/report/data.rb
|
|
369
416
|
- lib/llm_cost_tracker/report/formatter.rb
|
|
@@ -374,7 +421,6 @@ files:
|
|
|
374
421
|
- lib/llm_cost_tracker/timing.rb
|
|
375
422
|
- lib/llm_cost_tracker/token_usage.rb
|
|
376
423
|
- lib/llm_cost_tracker/tracker.rb
|
|
377
|
-
- lib/llm_cost_tracker/usage_capture.rb
|
|
378
424
|
- lib/llm_cost_tracker/version.rb
|
|
379
425
|
- lib/tasks/llm_cost_tracker.rake
|
|
380
426
|
homepage: https://github.com/sergey-homenko/llm_cost_tracker
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "active_support/core_ext/object/blank"
|
|
4
|
-
|
|
5
|
-
require_relative "pricing"
|
|
6
|
-
require_relative "billing/line_item"
|
|
7
|
-
|
|
8
|
-
module LlmCostTracker
|
|
9
|
-
UsageCapture = Data.define(
|
|
10
|
-
:provider,
|
|
11
|
-
:model,
|
|
12
|
-
:token_usage,
|
|
13
|
-
:stream,
|
|
14
|
-
:usage_source,
|
|
15
|
-
:provider_response_id,
|
|
16
|
-
:provider_project_id,
|
|
17
|
-
:provider_api_key_id,
|
|
18
|
-
:provider_workspace_id,
|
|
19
|
-
:batch,
|
|
20
|
-
:pricing_mode,
|
|
21
|
-
:line_items
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
class UsageCapture
|
|
25
|
-
UNKNOWN_MODEL = "unknown"
|
|
26
|
-
|
|
27
|
-
def self.batch_from_pricing_mode?(pricing_mode)
|
|
28
|
-
pricing_mode.to_s.split("_").include?("batch")
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def self.build(**attributes)
|
|
32
|
-
pricing_mode = Pricing.normalize_mode(attributes[:pricing_mode])
|
|
33
|
-
batch = attributes[:batch]
|
|
34
|
-
batch = batch_from_pricing_mode?(pricing_mode) if batch.nil?
|
|
35
|
-
|
|
36
|
-
token_usage = attributes.fetch(:token_usage)
|
|
37
|
-
service_line_items = Array(attributes[:service_line_items]).map do |item|
|
|
38
|
-
item.is_a?(Billing::LineItem) ? item : Billing::LineItem.build(item)
|
|
39
|
-
end
|
|
40
|
-
line_items = attributes[:line_items] || (Billing::LineItem.from_token_usage(token_usage) + service_line_items)
|
|
41
|
-
|
|
42
|
-
new(
|
|
43
|
-
provider: attributes.fetch(:provider).to_s,
|
|
44
|
-
model: attributes.fetch(:model).to_s.strip.presence || UNKNOWN_MODEL,
|
|
45
|
-
token_usage: token_usage,
|
|
46
|
-
stream: attributes[:stream] || false,
|
|
47
|
-
usage_source: attributes[:usage_source],
|
|
48
|
-
provider_response_id: attributes[:provider_response_id].to_s.strip.presence,
|
|
49
|
-
provider_project_id: attributes[:provider_project_id].to_s.strip.presence,
|
|
50
|
-
provider_api_key_id: attributes[:provider_api_key_id].to_s.strip.presence,
|
|
51
|
-
provider_workspace_id: attributes[:provider_workspace_id].to_s.strip.presence,
|
|
52
|
-
batch: batch,
|
|
53
|
-
pricing_mode: pricing_mode,
|
|
54
|
-
line_items: line_items
|
|
55
|
-
)
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|