Module: Tracebook::Adapters::ActiveAgent

Extended by:
ActiveAgent
Included in:
ActiveAgent
Defined in:
lib/tracebook/adapters/active_agent.rb

Instance Method Summary collapse

Instance Method Details

#disable!Object



17
18
19
# File 'lib/tracebook/adapters/active_agent.rb', line 17

def disable!
  subscribers.clear
end

#discover_busObject (private)



73
74
75
76
77
# File 'lib/tracebook/adapters/active_agent.rb', line 73

def discover_bus
  ActiveAgent::Bus if defined?(ActiveAgent::Bus)
rescue NameError
  nil
end

#enable!(bus: nil) ⇒ Object



10
11
12
13
14
15
# File 'lib/tracebook/adapters/active_agent.rb', line 10

def enable!(bus: nil)
  bus ||= discover_bus
  return unless bus.respond_to?(:subscribe)

  subscribers << bus.subscribe { |event| handle_event(event) }
end

#fallback(provider, payload, meta) ⇒ Object (private)



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/tracebook/adapters/active_agent.rb', line 55

def fallback(provider, payload, meta)
  NormalizedInteraction.new(
    provider: provider,
    model: payload.dig(:request, :model),
    project: meta[:project],
    request_payload: payload[:request],
    response_payload: payload[:response],
    status: meta[:status] || :success,
    tags: Array(meta[:tags]),
    session_id: meta[:session_id],
    parent_id: meta[:parent_id]
  )
end

#handle_event(event) ⇒ Object (private)



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/tracebook/adapters/active_agent.rb', line 23

def handle_event(event)
  payload = event.with_indifferent_access
  provider = payload[:provider]&.to_s.presence || "active_agent"
  mapper = mapper_for(provider)
  meta_hash = payload[:meta] || {}
  meta = meta_hash.merge(
    session_id: payload[:session_id],
    parent_id: payload[:parent_id]
  )

  normalized = if mapper
                  mapper.normalize(raw_request: payload[:request], raw_response: payload[:response], meta: meta)
  else
                  fallback(provider, payload, meta)
  end

  TraceBook.record!(**normalized.to_h)
end

#mapper_for(provider) ⇒ Object (private)



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/tracebook/adapters/active_agent.rb', line 42

def mapper_for(provider)
  case provider
  when "openai"
    Tracebook::Mappers::OpenAI.new
  when "anthropic"
    Tracebook::Mappers::Anthropic.new
  when "ollama"
    Tracebook::Mappers::Ollama.new
  else
    nil
  end
end

#subscribersObject (private)



69
70
71
# File 'lib/tracebook/adapters/active_agent.rb', line 69

def subscribers
  @subscribers ||= []
end