74 lines
1.5 KiB
Ruby
74 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
module Summarization
|
|
module Models
|
|
class Base
|
|
def initialize(model, max_tokens:)
|
|
@model = model
|
|
@max_tokens = max_tokens
|
|
end
|
|
|
|
def correctly_configured?
|
|
raise NotImplemented
|
|
end
|
|
|
|
def display_name
|
|
raise NotImplemented
|
|
end
|
|
|
|
def configuration_hint
|
|
raise NotImplemented
|
|
end
|
|
|
|
def summarize_in_chunks(chunks, opts)
|
|
chunks.map do |chunk|
|
|
chunk[:summary] = summarize_chunk(chunk[:summary], opts)
|
|
chunk
|
|
end
|
|
end
|
|
|
|
def concatenate_summaries(_summaries)
|
|
raise NotImplemented
|
|
end
|
|
|
|
def summarize_with_truncation(_contents, _opts)
|
|
raise NotImplemented
|
|
end
|
|
|
|
def summarize_single(chunk_text, opts)
|
|
raise NotImplemented
|
|
end
|
|
|
|
def format_content_item(item)
|
|
"(#{item[:id]} #{item[:poster]} said: #{item[:text]} "
|
|
end
|
|
|
|
def available_tokens
|
|
max_tokens - reserved_tokens
|
|
end
|
|
|
|
attr_reader :model, :max_tokens
|
|
|
|
protected
|
|
|
|
def reserved_tokens
|
|
# Reserve tokens for the response and the base prompt
|
|
# ~500 words
|
|
700
|
|
end
|
|
|
|
def summarize_chunk(_chunk_text, _opts)
|
|
raise NotImplemented
|
|
end
|
|
|
|
def tokenizer
|
|
raise NotImplemented
|
|
end
|
|
|
|
delegate :can_expand_tokens?, to: :tokenizer
|
|
end
|
|
end
|
|
end
|
|
end
|