Module: Legion::LLM::Hooks

Extended by:
Legion::Logging::Helper
Defined in:
lib/legion/llm/hooks.rb,
lib/legion/llm/hooks/metering.rb,
lib/legion/llm/hooks/rag_guard.rb,
lib/legion/llm/hooks/reflection.rb,
lib/legion/llm/hooks/reciprocity.rb,
lib/legion/llm/hooks/budget_guard.rb,
lib/legion/llm/hooks/cost_tracking.rb,
lib/legion/llm/hooks/response_guard.rb

Defined Under Namespace

Modules: BudgetGuard, CostTracking, Metering, RagGuard, Reciprocity, Reflection, ResponseGuard

Class Method Summary collapse

Class Method Details

.after_chat(&block) ⇒ Object



23
24
25
# File 'lib/legion/llm/hooks.rb', line 23

def after_chat(&block)
  @after_chat << block
end

.before_chat(&block) ⇒ Object



19
20
21
# File 'lib/legion/llm/hooks.rb', line 19

def before_chat(&block)
  @before_chat << block
end

.install_defaultsObject



49
50
51
52
# File 'lib/legion/llm/hooks.rb', line 49

def install_defaults
  Legion::LLM::Metering.install_hook
  BudgetGuard.install if BudgetGuard.enforcing?
end

.reset!Object



54
55
56
57
# File 'lib/legion/llm/hooks.rb', line 54

def reset!
  @before_chat = []
  @after_chat = []
end

.run_after(response:, messages:, model:) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/legion/llm/hooks.rb', line 38

def run_after(response:, messages:, model:, **)
  @after_chat.each do |hook|
    result = hook.call(response: response, messages: messages, model: model, **)
    return result if result.is_a?(Hash) && result[:action] == :block
  end
  nil
rescue StandardError => e
  handle_exception(e, level: :warn)
  nil
end

.run_before(messages:, model:) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/legion/llm/hooks.rb', line 27

def run_before(messages:, model:, **)
  @before_chat.each do |hook|
    result = hook.call(messages: messages, model: model, **)
    return result if result.is_a?(Hash) && result[:action] == :block
  end
  nil
rescue StandardError => e
  handle_exception(e, level: :warn)
  nil
end