mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-03-06 17:30:20 +00:00
This allows admins to configure services with multiple backends using DNS SRV records. This PR also adds support for shared secret auth via headers for TEI and vLLM endpoints, so they are inline with the other ones.
69 lines
2.0 KiB
Ruby
69 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
module Summarization
|
|
module Strategies
|
|
class TruncateContent < ::Summarization::Base
|
|
def initialize(completion_model)
|
|
@completion_model = completion_model
|
|
end
|
|
|
|
attr_reader :completion_model
|
|
|
|
delegate :correctly_configured?,
|
|
:display_name,
|
|
:configuration_hint,
|
|
:model,
|
|
to: :completion_model
|
|
|
|
def summarize(content, _user, &on_partial_blk)
|
|
opts = content.except(:contents)
|
|
|
|
{
|
|
summary: summarize_with_truncation(content[:contents], opts, &on_partial_blk),
|
|
chunks: [],
|
|
}
|
|
end
|
|
|
|
private
|
|
|
|
def format_content_item(item)
|
|
"(#{item[:id]} #{item[:poster]} said: #{item[:text]} "
|
|
end
|
|
|
|
def summarize_with_truncation(contents, opts)
|
|
text_to_summarize = contents.map { |c| format_content_item(c) }.join
|
|
truncated_content =
|
|
::DiscourseAi::Tokenizer::BertTokenizer.truncate(
|
|
text_to_summarize,
|
|
completion_model.available_tokens,
|
|
)
|
|
|
|
completion(truncated_content)
|
|
end
|
|
|
|
def completion(prompt)
|
|
::DiscourseAi::Inference::DiscourseClassifier.perform!(
|
|
"#{endpoint}/api/v1/classify",
|
|
completion_model.model,
|
|
prompt,
|
|
SiteSetting.ai_summarization_discourse_service_api_key,
|
|
).dig(:summary_text)
|
|
end
|
|
|
|
def endpoint
|
|
if SiteSetting.ai_summarization_discourse_service_api_endpoint_srv.present?
|
|
service =
|
|
DiscourseAi::Utils::DnsSrv.lookup(
|
|
SiteSetting.ai_summarization_discourse_service_api_endpoint_srv,
|
|
)
|
|
"https://#{service.target}:#{service.port}"
|
|
else
|
|
SiteSetting.ai_summarization_discourse_service_api_endpoint
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|