Class: Tracebook::Interaction

Inherits:
ApplicationRecord show all
Defined in:
app/models/tracebook/interaction.rb

Overview

ActiveRecord model for LLM interactions.

Stores all data related to an LLM API call including request/response payloads, usage metrics, cost, review state, and relationships.

Payload Fields

  • request_payload - Full request sent to provider (JSON)
  • response_payload - Full response from provider (JSON)
  • review_comment - Reviewer's comments

Note: Encryption is optional. See README for instructions on enabling ActiveRecord::Encryption for these fields.

Enums

  • status: :success, :error, :canceled
  • review_state: :pending, :approved, :flagged, :rejected

Associations

  • parent - Parent interaction for hierarchical chains
  • user - Polymorphic association to user who triggered the call
  • request_payload_blob - ActiveStorage blob for large requests
  • response_payload_blob - ActiveStorage blob for large responses

Examples:

Finding interactions

Interaction.by_provider("openai")
  .by_model("gpt-4o")
  .by_review_state(:pending)
  .between_dates(30.days.ago, Date.current)

Filtering with parameters

Interaction.filtered(
  provider: "anthropic",
  model: "claude-3-5-sonnet",
  review_state: "flagged",
  from: "2025-01-01",
  to: "2025-01-31"
)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#parentTracebook::Interaction?

Returns Parent interaction for hierarchical chains.

Returns:



46
# File 'app/models/tracebook/interaction.rb', line 46

belongs_to :parent, class_name: "Tracebook::Interaction", optional: true

#request_payload_blobActiveStorage::Blob?

Returns Blob for large request payloads.

Returns:

  • (ActiveStorage::Blob, nil)

    Blob for large request payloads



54
# File 'app/models/tracebook/interaction.rb', line 54

belongs_to :request_payload_blob, class_name: "ActiveStorage::Blob", optional: true

#response_payload_blobActiveStorage::Blob?

Returns Blob for large response payloads.

Returns:

  • (ActiveStorage::Blob, nil)

    Blob for large response payloads



58
# File 'app/models/tracebook/interaction.rb', line 58

belongs_to :response_payload_blob, class_name: "ActiveStorage::Blob", optional: true

#review_stateSymbol

Returns Review state (:pending, :approved, :flagged, :rejected).

Returns:

  • (Symbol)

    Review state (:pending, :approved, :flagged, :rejected)



66
# File 'app/models/tracebook/interaction.rb', line 66

enum :review_state, { pending: 0, approved: 1, flagged: 2, rejected: 3 }, prefix: true

#statusSymbol

Returns Request status (:success, :error, :canceled).

Returns:

  • (Symbol)

    Request status (:success, :error, :canceled)



62
# File 'app/models/tracebook/interaction.rb', line 62

enum :status, { success: 0, error: 1, canceled: 2 }, prefix: true

#userActiveRecord::Base?

Returns Polymorphic user who triggered this interaction.

Returns:

  • (ActiveRecord::Base, nil)

    Polymorphic user who triggered this interaction



50
# File 'app/models/tracebook/interaction.rb', line 50

belongs_to :user, polymorphic: true, optional: true

Class Method Details

.filtered(params) ⇒ Object



91
92
93
94
95
96
97
98
99
# File 'app/models/tracebook/interaction.rb', line 91

def self.filtered(params)
  by_provider(params[:provider])
    .by_model(params[:model])
    .by_project(params[:project])
    .by_status(params[:status])
    .by_review_state(params[:review_state])
    .tagged_with(params[:tag])
    .between_dates(params[:from], params[:to])
end