Class: Assistant::BrainJunkClassifier
- Inherits:
-
Object
- Object
- Assistant::BrainJunkClassifier
- Defined in:
- app/services/assistant/brain_junk_classifier.rb
Overview
Classifies pending auto-learned brain entries as durable rules vs ephemeral
task-state junk (sell-sheet "X Completed" tracking notes, one-off status, etc.).
One bounded LLM call; used by BrainMaintenance to auto-reject the junk. Conservative
by design — when unsure it keeps an entry (a human still reviews everything kept).
Constant Summary collapse
- PREFERRED_MODELS =
[ AiModelConstants.id(:anthropic_sonnet), AiModelConstants.id(:anthropic_haiku) ].freeze
- MAX_ENTRIES =
150
Class Method Summary collapse
-
.call(entries) ⇒ Array<Hash>
[{ id:, reason: }] for entries judged ephemeral junk.
Instance Method Summary collapse
- #call ⇒ Array<Hash>
-
#initialize(entries) ⇒ BrainJunkClassifier
constructor
A new instance of BrainJunkClassifier.
Constructor Details
#initialize(entries) ⇒ BrainJunkClassifier
Returns a new instance of BrainJunkClassifier.
26 27 28 |
# File 'app/services/assistant/brain_junk_classifier.rb', line 26 def initialize(entries) @entries = Array(entries).first(MAX_ENTRIES) end |
Class Method Details
.call(entries) ⇒ Array<Hash>
Returns [{ id:, reason: }] for entries judged ephemeral junk.
22 23 24 |
# File 'app/services/assistant/brain_junk_classifier.rb', line 22 def self.call(entries) new(entries).call end |
Instance Method Details
#call ⇒ Array<Hash>
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'app/services/assistant/brain_junk_classifier.rb', line 31 def call return [] if @entries.empty? model = select_model return [] unless model raw = RubyLLM.chat(model: model).with_temperature(0).ask(build_prompt).content.to_s parse(raw) rescue RubyLLM::Error => e Rails.logger.warn("[BrainJunkClassifier] LLM error: #{e.}") [] rescue StandardError => e Rails.logger.warn("[BrainJunkClassifier] Failed: #{e.}") [] end |