tracebook 0.1.1 → 1.0.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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +56 -24
  3. data/README.md +197 -713
  4. data/app/assets/javascripts/tracebook/application.js +92 -35
  5. data/app/assets/stylesheets/tracebook/application.css +1882 -55
  6. data/app/controllers/tracebook/application_controller.rb +25 -0
  7. data/app/controllers/tracebook/chats_controller.rb +229 -0
  8. data/app/controllers/tracebook/comments_controller.rb +25 -0
  9. data/app/helpers/tracebook/chats_helper.rb +29 -0
  10. data/app/models/tracebook/chat_review.rb +19 -0
  11. data/app/models/tracebook/comment.rb +14 -0
  12. data/app/models/tracebook/message_cost.rb +12 -0
  13. data/app/models/tracebook/pricing_rule.rb +6 -8
  14. data/app/views/tracebook/chats/index.html.erb +77 -0
  15. data/app/views/tracebook/chats/show.html.erb +94 -0
  16. data/config/routes.rb +6 -6
  17. data/db/migrate/20260325000100_create_tracebook_message_costs.rb +19 -0
  18. data/db/migrate/20260325000200_create_tracebook_chat_reviews.rb +19 -0
  19. data/db/migrate/{20241112000300_create_tracebook_pricing_rules.rb → 20260325000300_create_tracebook_pricing_rules.rb} +3 -3
  20. data/db/migrate/20260325000500_create_tracebook_comments.rb +15 -0
  21. data/lib/generators/tracebook/install/install_generator.rb +6 -9
  22. data/lib/generators/tracebook/install/templates/initializer.rb.tt +11 -5
  23. data/lib/tasks/tracebook_tasks.rake +14 -4
  24. data/lib/tracebook/adapters/ruby_llm.rb +19 -81
  25. data/lib/tracebook/adapters.rb +5 -4
  26. data/lib/tracebook/config.rb +83 -104
  27. data/lib/tracebook/engine.rb +8 -0
  28. data/lib/tracebook/errors.rb +0 -2
  29. data/lib/tracebook/pricing/calculator.rb +11 -6
  30. data/lib/tracebook/pricing.rb +0 -2
  31. data/lib/tracebook/redaction/pattern.rb +124 -0
  32. data/lib/tracebook/redaction/pipeline.rb +32 -0
  33. data/lib/tracebook/seeds/pricing_rules.rb +62 -0
  34. data/lib/tracebook/version.rb +1 -1
  35. data/lib/tracebook.rb +46 -152
  36. metadata +23 -51
  37. data/app/controllers/tracebook/exports_controller.rb +0 -25
  38. data/app/controllers/tracebook/interactions_controller.rb +0 -71
  39. data/app/helpers/tracebook/interactions_helper.rb +0 -35
  40. data/app/jobs/tracebook/daily_rollups_job.rb +0 -100
  41. data/app/jobs/tracebook/export_job.rb +0 -162
  42. data/app/jobs/tracebook/persist_interaction_job.rb +0 -160
  43. data/app/mailers/tracebook/application_mailer.rb +0 -6
  44. data/app/models/tracebook/interaction.rb +0 -103
  45. data/app/models/tracebook/redaction_rule.rb +0 -81
  46. data/app/models/tracebook/rollup_daily.rb +0 -73
  47. data/app/views/tracebook/interactions/index.html.erb +0 -108
  48. data/app/views/tracebook/interactions/show.html.erb +0 -44
  49. data/db/migrate/20241112000100_create_tracebook_interactions.rb +0 -55
  50. data/db/migrate/20241112000200_create_tracebook_rollups_dailies.rb +0 -24
  51. data/db/migrate/20241112000400_create_tracebook_redaction_rules.rb +0 -19
  52. data/lib/tracebook/adapters/active_agent.rb +0 -82
  53. data/lib/tracebook/mappers/anthropic.rb +0 -59
  54. data/lib/tracebook/mappers/base.rb +0 -38
  55. data/lib/tracebook/mappers/ollama.rb +0 -49
  56. data/lib/tracebook/mappers/openai.rb +0 -75
  57. data/lib/tracebook/mappers.rb +0 -283
  58. data/lib/tracebook/normalized_interaction.rb +0 -86
  59. data/lib/tracebook/redaction_pipeline.rb +0 -88
  60. data/lib/tracebook/redactors/base.rb +0 -29
  61. data/lib/tracebook/redactors/card_pan.rb +0 -15
  62. data/lib/tracebook/redactors/email.rb +0 -15
  63. data/lib/tracebook/redactors/phone.rb +0 -15
  64. data/lib/tracebook/redactors.rb +0 -8
  65. data/lib/tracebook/result.rb +0 -53
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae82d99eb8f5d552c59dbcb77d1a99c587ecd729a6597fea01c20411e3b866d8
4
- data.tar.gz: ed9a874f85ec046d24469de3d48886ef0dee878959e964af41dd3843a9c7bd0f
3
+ metadata.gz: 26c80f152569e487d7d02d85e63c0e12ba43e6a9e83fb3a8d1053fa96a5919ec
4
+ data.tar.gz: 2871e120ee5bf773bf198b7521ce3e18bee2d946d642a952aba5cd7369493f80
5
5
  SHA512:
6
- metadata.gz: f49482e0e49ccf7d7b5dd095eaf2a2ce2899f8eb3bbbb5d6d5c4e7b1c89bfc2cdd88015a361873e8c00fa28e18cf04c29456c5942ceefd25c26799614dd1b5c3
7
- data.tar.gz: 3c613e6abc82a4bd30235fbaa4d4abef6606b61ae0d913bc27ea38f514185837e41efa729ad1a73d0af367eb178fc27ce043bcd94d73c164d538ab57631c78d2
6
+ metadata.gz: 7cb266f025d120576e6bc2684141e3b5aaf2ea70559c016ed72cd201809d159b202a2cc93c718d9e5a4d38c8aed0e5ffc7661713068be37ef5b5cb1bf0bac493
7
+ data.tar.gz: 70921a52fc73b3bdfda1574abbd474df5adf24694bdb1b44b6936d4f5d6a4e00191c7e195cea6205cb25133a7d1cf06df5252fddd5aa0cc5933d33aa8e7c1bdb
data/CHANGELOG.md CHANGED
@@ -5,6 +5,55 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.0.1] - 2026-03-26
9
+
10
+ ### Fixed
11
+
12
+ - **Engine migrations**: Restored guard to skip appending engine migration paths when running inside the dummy app, fixing "Duplicate migration" error on fresh database setup.
13
+
14
+ ## [1.0.0] - 2026-03-26
15
+
16
+ ### Breaking Changes
17
+
18
+ Tracebook is now a layer on top of **RubyLLM** instead of a standalone interaction recorder. It reads from the host app's Chat and Message models (provided by RubyLLM's `acts_as_chat` / `acts_as_message`) and adds cost tracking and review workflow.
19
+
20
+ **Removed tables:**
21
+ - `tracebook_interactions` — RubyLLM's Message model stores conversation data
22
+ - `tracebook_rollups_dailies` — aggregates computed live from messages
23
+
24
+ **New tables:**
25
+ - `tracebook_message_costs` — cost and latency per message (polymorphic join to host Message)
26
+ - `tracebook_chat_reviews` — review state per chat (polymorphic join to host Chat)
27
+
28
+ **Updated tables:**
29
+ - `tracebook_comments` — FK changed from `interaction_id` to `chat_review_id`
30
+
31
+ **Removed code:**
32
+ - `Interaction`, `LlmSession`, `RollupDaily` models
33
+ - `PersistInteractionJob`, `DailyRollupsJob`, `ExportJob`
34
+ - `TraceBook.record!` API — replaced by `Tracebook.calculate_cost!(message, provider:, model:)`
35
+ - `NormalizedInteraction`, `Mappers`, `RedactionPipeline`, `Result`
36
+ - `Adapters::RubyLLM`, `Adapters::ActiveAgent` notification subscribers
37
+ - `ActorsController`, `InteractionsController`, `ExportsController`
38
+ - `/tracebook/actors/*` and `/tracebook/interactions/*` routes
39
+
40
+ **New code:**
41
+ - `MessageCost` model — stores cost per message
42
+ - `ChatReview` model — stores review state per chat
43
+ - `ChatsController` — dashboard at `/tracebook/chats`
44
+ - `Tracebook.calculate_cost!` — calculates and stores cost for a message
45
+ - `config.chat_class` / `config.message_class` — configure host app model names
46
+
47
+ **Migration guide:**
48
+ 1. Run `bin/rails tracebook:install:migrations && bin/rails db:migrate`
49
+ 2. Replace `Tracebook.record!` calls with `Tracebook.calculate_cost!`
50
+ 3. Update `config/initializers/tracebook.rb` to set `chat_class` and `message_class`
51
+ 4. Mount the engine: `mount Tracebook::Engine => "/tracebook"`
52
+
53
+ ### Fixed
54
+
55
+ - **Pricing Calculator**: `matching_rule` now correctly prefers the most specific glob pattern and most recent `effective_from` date.
56
+
8
57
  ## [0.1.1] - 2025-12-16
9
58
 
10
59
  ### Added
@@ -26,32 +75,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
26
75
  ### Added
27
76
 
28
77
  - **Core Engine**: Rails 8.1+ mountable engine with isolated namespace
29
- - **Provider Support**: Mappers for OpenAI, Anthropic, and Ollama APIs
30
- - **Adapters**: Integration adapters for ActiveAgent and RubyLLM libraries
31
78
  - **Recording API**: `TraceBook.record!` for capturing LLM interactions
32
- - **Configuration**: Flexible `TraceBook.config` with authorization hooks
33
- - **Models**:
34
- - `Interaction` - Core model for storing LLM call data
35
- - `PricingRule` - Cost calculation rules per model
36
- - `RedactionRule` - Custom PII pattern definitions
37
- - `RollupDaily` - Aggregated daily metrics
38
- - **PII Redaction**: Pre-persist redaction pipeline with built-in redactors:
39
- - Email addresses
40
- - Phone numbers
41
- - Credit card PANs
79
+ - **Models**: Interaction, PricingRule, RollupDaily
42
80
  - **Cost Tracking**: Pricing calculator with configurable rules per provider/model
43
- - **Background Jobs**:
44
- - `PersistInteractionJob` - Async ingestion pipeline
45
- - `DailyRollupsJob` - Nightly metric aggregation
46
- - `ExportJob` - Async data export
47
- - **Web UI**: Turbo + Stimulus dashboard with:
48
- - Interaction list with filtering (provider, model, date range, review state)
49
- - Detail view with formatted request/response payloads
50
- - Review workflow (pending → approved/flagged/rejected)
51
- - KPI display (token counts, costs, latency)
52
- - **Export**: CSV and NDJSON export capabilities
53
- - **Normalized Schema**: Consistent data structure across all providers
54
- - **Test Suite**: Full MiniTest coverage for models, controllers, jobs, and lib
81
+ - **Background Jobs**: PersistInteractionJob, DailyRollupsJob, ExportJob
82
+ - **Web UI**: Dashboard with filtering, review workflow, KPI display
83
+ - **Adapters**: Integration adapters for RubyLLM and ActiveAgent
84
+ - **PII Redaction**: Pre-persist redaction pipeline
55
85
 
86
+ [1.0.1]: https://github.com/dpaluy/tracebook/compare/v1.0.0...v1.0.1
87
+ [1.0.0]: https://github.com/dpaluy/tracebook/compare/v0.1.1...v1.0.0
56
88
  [0.1.1]: https://github.com/dpaluy/tracebook/compare/v0.1.0...v0.1.1
57
89
  [0.1.0]: https://github.com/dpaluy/tracebook/releases/tag/v0.1.0