Module: Legion::Context

Defined in:
lib/legion/context.rb

Defined Under Namespace

Classes: SessionContext

Class Method Summary collapse

Class Method Details

.current_sessionObject



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

def current_session
  Thread.current[:legion_session_context]
end

.current_task_contextObject



55
56
57
# File 'lib/legion/context.rb', line 55

def current_task_context
  Thread.current[:legion_context]
end

.end_sessionObject



49
50
51
52
53
# File 'lib/legion/context.rb', line 49

def end_session
  ctx = Thread.current[:legion_session_context]
  Legion::Logging.debug "[Context] session cleared: #{ctx&.session_id}" if defined?(Legion::Logging)
  Thread.current[:legion_session_context] = nil
end

.session_metadataObject



35
36
37
38
39
40
# File 'lib/legion/context.rb', line 35

def 
  ctx = current_session
  return {} unless ctx

  ctx.to_h
end

.start_session(user_id: nil) ⇒ Object



42
43
44
45
46
47
# File 'lib/legion/context.rb', line 42

def start_session(user_id: nil)
  ctx = SessionContext.new(user_id: user_id)
  Thread.current[:legion_session_context] = ctx
  Legion::Logging.debug "[Context] session started: #{ctx.session_id}" if defined?(Legion::Logging)
  ctx
end

.with_session(ctx) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/legion/context.rb', line 27

def with_session(ctx)
  previous = Thread.current[:legion_session_context]
  Thread.current[:legion_session_context] = ctx
  yield
ensure
  Thread.current[:legion_session_context] = previous
end

.with_task_context(message) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/legion/context.rb', line 59

def with_task_context(message)
  previous = Thread.current[:legion_context]
  Thread.current[:legion_context] = {
    task_id:         message[:task_id],
    conversation_id: message[:conversation_id],
    chain_id:        message[:chain_id],
    function:        message[:function],
    runner_class:    message[:runner_class]
  }.compact
  yield
ensure
  Thread.current[:legion_context] = previous
end