llm_cost_tracker 0.4.1 → 0.5.1

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/README.md +132 -405
  4. data/lib/llm_cost_tracker/configuration/instrumentation.rb +37 -0
  5. data/lib/llm_cost_tracker/configuration.rb +10 -5
  6. data/lib/llm_cost_tracker/doctor.rb +166 -0
  7. data/lib/llm_cost_tracker/generators/llm_cost_tracker/install_generator.rb +33 -0
  8. data/lib/llm_cost_tracker/generators/llm_cost_tracker/prices_generator.rb +12 -6
  9. data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/initializer.rb.erb +53 -21
  10. data/lib/llm_cost_tracker/integrations/anthropic.rb +75 -0
  11. data/lib/llm_cost_tracker/integrations/base.rb +72 -0
  12. data/lib/llm_cost_tracker/integrations/object_reader.rb +56 -0
  13. data/lib/llm_cost_tracker/integrations/openai.rb +95 -0
  14. data/lib/llm_cost_tracker/integrations/registry.rb +41 -0
  15. data/lib/llm_cost_tracker/middleware/faraday.rb +6 -5
  16. data/lib/llm_cost_tracker/parsed_usage.rb +8 -1
  17. data/lib/llm_cost_tracker/parsers/base.rb +1 -1
  18. data/lib/llm_cost_tracker/parsers/openai_usage.rb +1 -1
  19. data/lib/llm_cost_tracker/price_freshness.rb +38 -0
  20. data/lib/llm_cost_tracker/price_registry.rb +14 -0
  21. data/lib/llm_cost_tracker/price_sync/fetcher.rb +5 -2
  22. data/lib/llm_cost_tracker/price_sync/registry_diff.rb +51 -0
  23. data/lib/llm_cost_tracker/price_sync/registry_writer.rb +5 -1
  24. data/lib/llm_cost_tracker/price_sync.rb +111 -109
  25. data/lib/llm_cost_tracker/prices.json +391 -42
  26. data/lib/llm_cost_tracker/pricing.rb +35 -16
  27. data/lib/llm_cost_tracker/request_url.rb +20 -0
  28. data/lib/llm_cost_tracker/storage/dispatcher.rb +68 -0
  29. data/lib/llm_cost_tracker/stream_collector.rb +3 -3
  30. data/lib/llm_cost_tracker/tag_context.rb +52 -0
  31. data/lib/llm_cost_tracker/tracker.rb +7 -60
  32. data/lib/llm_cost_tracker/version.rb +1 -1
  33. data/lib/llm_cost_tracker.rb +14 -4
  34. data/lib/tasks/llm_cost_tracker.rake +33 -69
  35. metadata +28 -12
  36. data/lib/llm_cost_tracker/generators/llm_cost_tracker/templates/llm_cost_tracker_prices.yml.erb +0 -51
  37. data/lib/llm_cost_tracker/price_sync/merger.rb +0 -72
  38. data/lib/llm_cost_tracker/price_sync/model_catalog.rb +0 -77
  39. data/lib/llm_cost_tracker/price_sync/raw_price.rb +0 -33
  40. data/lib/llm_cost_tracker/price_sync/refresh_plan_builder.rb +0 -162
  41. data/lib/llm_cost_tracker/price_sync/source.rb +0 -29
  42. data/lib/llm_cost_tracker/price_sync/source_result.rb +0 -7
  43. data/lib/llm_cost_tracker/price_sync/sources/litellm.rb +0 -90
  44. data/lib/llm_cost_tracker/price_sync/sources/open_router.rb +0 -93
  45. data/lib/llm_cost_tracker/price_sync/validator.rb +0 -66
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2cdd5f30c6fbd8c0168549b0853e9d8bc54586e60921733ce11a89a1d86078c
4
- data.tar.gz: c91384579df6acdeb04d24b62f8bf916040f98156fd2bc882c94afc534f7dba5
3
+ metadata.gz: bc48791f2f21576da80d4a05ed149290dd309ab9d6f9af3774df56cc389224a4
4
+ data.tar.gz: bb9de40f1669907210da3321cb4cc85999be8d748afa39a16f9fae7bceea9378
5
5
  SHA512:
6
- metadata.gz: 88d61d6714101ee9e8162814f5527bde487eced83663d86a1f938b77bcee1e4fcb4db2c4dde763720a828368a779a8677da57ecf10b2fadec78a959e6fdce6a7
7
- data.tar.gz: d2d2bb097058507c06c1ea330a0c7d5a63d2e92b824fd8e4e7640a052dff100038eadb2e097edb4500457c382368080414c5261a2cc0a4f69436ae2234fd420d
6
+ metadata.gz: 5a8a68b4f567fbfce3158df20a1e34b6bb6a5ea4a4162b28206bbfe099c1b36288e89f8db29dcc60617da44d7d07acdf6b38d3747f4ffb683dedfc059d1f4089
7
+ data.tar.gz: 5f8493e21e71e9ce43ad7ac33386f1dc39a03ac0b48cc0bad71232a21b2e2ebfc3bddd5be6b2109dbdadecbad47f79fad0c40519394fbdfad74a9a5ec5aa158c
data/CHANGELOG.md CHANGED
@@ -4,6 +4,36 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versioning: [S
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.5.1] - 2026-04-27
8
+
9
+ ### Changed
10
+
11
+ - Renamed `llm_cost_tracker:prices:sync` to `llm_cost_tracker:prices:refresh` and `LlmCostTracker::PriceSync.sync` to `.refresh`.
12
+ - Price refresh now reads the maintained LLM Cost Tracker snapshot, supports `URL` overrides, and writes to `OUTPUT`, `config.prices_file`, or `config/llm_cost_tracker_prices.yml`.
13
+ - Price refresh validates snapshot schema and minimum gem version before replacing the local registry.
14
+ - Built-in price keys are provider-qualified while older unqualified local price keys continue to load.
15
+ - Built-in prices now include OpenAI cached-input rates, OpenAI batch rates, Anthropic/Gemini batch rates, additional OpenAI models, and refreshed provider rates.
16
+ - Price refresh writes registry files atomically.
17
+
18
+ ## [0.5.0] - 2026-04-25
19
+
20
+ ### Added
21
+
22
+ - Optional SDK integrations: `config.instrument :openai`, `:anthropic`, or `:all` patches the official `openai` and `anthropic` gems' resource methods to record usage automatically. Provider SDKs are not added as hard dependencies.
23
+ - `LlmCostTracker.with_tags` plus `TagContext` for thread- and fiber-isolated request-scoped tags that flow through middleware, SDK integrations, and `track` / `track_stream`.
24
+ - `LlmCostTracker::Doctor` and the `llm_cost_tracker:doctor` rake task for diagnosing storage, schema, optional columns, period totals, integrations, prices, and recent calls.
25
+ - `LlmCostTracker::PriceFreshness` helper plus a price-freshness doctor check that warns when bundled or local prices are stale.
26
+ - Technical documentation under `docs/technical/` covering architecture, data flow, extension points, module map, and operational notes.
27
+
28
+ ### Changed
29
+
30
+ - Pricing fuzzy matching now only accepts dated snapshot suffixes instead of guessing new model families.
31
+ - Built-in prices include GPT-5.5 and GPT-5.4 variants and drop retired Claude and Gemini entries.
32
+ - Missing model identifiers now normalize to `unknown` instead of leaking nil into tracked events.
33
+ - `llm_cost_tracker:prices` now generates a full local price snapshot instead of an empty override file.
34
+ - Price sync workflow surfaces clearer error context for fetcher failures and skips refresh-plan entries with malformed pricing.
35
+ - README, cookbook, and technical docs clarify that `config.instrument` patches official SDKs only; `ruby-openai` (alexrudall) routes through the Faraday middleware via its constructor block, and `ruby_llm` is not auto-captured today because the gem does not expose a Faraday middleware hook.
36
+
7
37
  ## [0.4.1] - 2026-04-24
8
38
 
9
39
  ### Changed