Class: Rubino::Context::SummaryBuilder
- Inherits:
-
Object
- Object
- Rubino::Context::SummaryBuilder
- Defined in:
- lib/rubino/context/summary_builder.rb
Overview
Builds structured summaries from compressible message segments. Uses the LLM to generate a comprehensive summary following the template.
Constant Summary collapse
- SUMMARY_TEMPLATE =
<<~TEMPLATE ## Goal Current user objective. ## Constraints & Preferences Technical constraints, preferences, conventions. ## Progress ### Done Completed items. ### In Progress Work in progress. ### Blocked Open blockers or errors. ## Key Decisions Technical decisions made and their rationale. ## Relevant Files Files read, modified, or created. ## Tool Results Important tool execution results. ## Current State Current session state. ## Next Steps Planned next actions. ## Critical Context Information that must not be lost. TEMPLATE
Instance Method Summary collapse
-
#build(messages:, previous_summary: nil) ⇒ Object
Builds a summary from messages, optionally incorporating a previous summary.
-
#build_and_save! ⇒ Object
Builds and saves the summary to the database.
-
#initialize(session_id:, config: nil) ⇒ SummaryBuilder
constructor
A new instance of SummaryBuilder.
Constructor Details
#initialize(session_id:, config: nil) ⇒ SummaryBuilder
Returns a new instance of SummaryBuilder.
45 46 47 48 |
# File 'lib/rubino/context/summary_builder.rb', line 45 def initialize(session_id:, config: nil) @session_id = session_id @config = config || Rubino.configuration end |
Instance Method Details
#build(messages:, previous_summary: nil) ⇒ Object
Builds a summary from messages, optionally incorporating a previous summary
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/rubino/context/summary_builder.rb', line 51 def build(messages:, previous_summary: nil) content = () prompt = build_summary_prompt(content, previous_summary) @config.compression_max_summary_tokens # Use the auxiliary compression model if configured model = compression_model adapter = LLM::RubyLLMAdapter.new(model_id: model) response = adapter.chat(messages: [ { role: "system", content: summary_system_prompt }, { role: "user", content: prompt } ]) response&.content || fallback_summary(, previous_summary) rescue StandardError # If LLM fails, produce a basic extractive summary fallback_summary(, previous_summary) end |
#build_and_save! ⇒ Object
Builds and saves the summary to the database
73 74 75 76 77 78 79 80 |
# File 'lib/rubino/context/summary_builder.rb', line 73 def build_and_save! = Session::Store.new = .for_session(@session_id) return if .size < 10 summary = build(messages: , previous_summary: load_previous_summary) save!(summary) end |