Class: Legion::Extensions::Absorbers::Base

Inherits:
Object
  • Object
show all
Extended by:
Definitions
Includes:
Helpers::Lex
Defined in:
lib/legion/extensions/absorbers/base.rb

Direct Known Subclasses

Matchers::Url

Defined Under Namespace

Classes: TokenRevocationError, TokenUnavailableError

Constant Summary

Constants included from Definitions

Definitions::DEFAULTS

Constants included from Helpers::Base

Helpers::Base::NAMESPACE_BOUNDARIES

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Definitions

definition, definition_for, definitions

Methods included from Helpers::Lex

#default_settings, included, #runner_desc

Methods included from Helpers::Base

#actor_class, #actor_const, #actor_name, #amqp_prefix, #calling_class, #calling_class_array, #from_json, #full_path, #lex_class, #lex_const, #lex_name, #lex_slug, #log_tag, #normalize, #runner_class, #runner_const, #runner_name, #segments, #settings_path, #table_prefix, #to_dotted_hash

Methods included from Helpers::Task

#generate_task_id, #generate_task_log, #task_update

Methods included from Helpers::Logger

#handle_runner_exception

Methods included from Helpers::Secret

reset_identity!, resolve_identity!, #secret

Methods included from Helpers::Core

#find_setting

Instance Attribute Details

#job_idObject

Returns the value of attribute job_id.



19
20
21
# File 'lib/legion/extensions/absorbers/base.rb', line 19

def job_id
  @job_id
end

#runnersObject

Returns the value of attribute runners.



19
20
21
# File 'lib/legion/extensions/absorbers/base.rb', line 19

def runners
  @runners
end

Class Method Details

.description(text = nil) ⇒ Object



31
32
33
# File 'lib/legion/extensions/absorbers/base.rb', line 31

def description(text = nil)
  text ? @description = text : @description
end

.pattern(type, value, priority: 100) ⇒ Object



22
23
24
25
# File 'lib/legion/extensions/absorbers/base.rb', line 22

def pattern(type, value, priority: 100)
  @patterns ||= []
  @patterns << { type: type, value: value, priority: priority }
end

.patternsObject



27
28
29
# File 'lib/legion/extensions/absorbers/base.rb', line 27

def patterns
  @patterns || []
end

Instance Method Details

#absorb(url: nil, content: nil, metadata: {}, context: {}) ⇒ Object Also known as: handle

Raises:

  • (NotImplementedError)


36
37
38
# File 'lib/legion/extensions/absorbers/base.rb', line 36

def absorb(url: nil, content: nil, metadata: {}, context: {})
  raise NotImplementedError, "#{self.class.name} must implement #absorb"
end

#absorb_raw(content:, tags: [], scope: :global) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/legion/extensions/absorbers/base.rb', line 56

def absorb_raw(content:, tags: [], scope: :global, **)
  if apollo_available?
    Legion::Apollo.ingest(content: content, tags: Array(tags), scope: scope, **)
  else
    Legion::Logging.warn('absorb_raw: Apollo not available') if defined?(Legion::Logging)
    { success: false, error: :apollo_not_available }
  end
end

#absorb_to_knowledge(content:, tags: [], scope: :global, **opts) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/legion/extensions/absorbers/base.rb', line 43

def absorb_to_knowledge(content:, tags: [], scope: :global, **opts)
  return fallback_absorb(:chunker, content, tags, scope, opts) unless chunker_available?
  return fallback_absorb(:apollo, content, tags, scope, opts) unless apollo_available?

  sections = [{ heading:      opts.delete(:heading) || 'absorbed',
                content:      content,
                section_path: opts.delete(:section_path) || 'absorbed',
                source_file:  opts.delete(:source_file) || 'absorber' }]
  chunks     = Legion::Extensions::Knowledge::Helpers::Chunker.chunk(sections: sections)
  embeddings = fetch_embeddings(chunks)
  ingest_chunks(chunks, embeddings, tags, scope, opts)
end

#report_progress(message:, percent: nil) ⇒ Object



71
72
73
74
75
76
# File 'lib/legion/extensions/absorbers/base.rb', line 71

def report_progress(message:, percent: nil)
  return unless job_id
  return unless defined?(Legion::Logging)

  Legion::Logging.info("absorb[#{job_id}] #{"#{percent}% " if percent}#{message}")
end

#translate(source, type: :auto) ⇒ Object



65
66
67
68
69
# File 'lib/legion/extensions/absorbers/base.rb', line 65

def translate(source, type: :auto)
  raise 'legion-data is required for translate — add it to your Gemfile' unless defined?(Legion::Data::Extract)

  Legion::Data::Extract.extract(source, type: type)
end

#with_token(provider:) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/legion/extensions/absorbers/base.rb', line 78

def with_token(provider:)
  raise TokenUnavailableError, "#{provider} token not available" unless token_manager_for(provider).token_valid?
  raise TokenRevocationError, "#{provider} token has been revoked" if token_manager_for(provider).revoked?

  token = token_manager_for(provider).ensure_valid_token
  raise TokenUnavailableError, "#{provider} token refresh failed" unless token

  yield token
rescue Legion::Auth::TokenManager::TokenExpiredError => e
  raise TokenUnavailableError, e.message
end