Class: RailsAi::Agents::MessageBus

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_ai/agents/message_bus.rb

Instance Method Summary collapse

Constructor Details

#initializeMessageBus

Returns a new instance of MessageBus.



6
7
8
9
10
# File 'lib/rails_ai/agents/message_bus.rb', line 6

def initialize
  @subscribers = {}
  @message_history = []
  @max_history = 10000
end

Instance Method Details

#broadcast(from_agent, message, exclude: []) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rails_ai/agents/message_bus.rb', line 47

def broadcast(from_agent, message, exclude: [])
  delivered_count = 0
  
  @subscribers.each do |agent_name, agent|
    next if exclude.include?(agent_name) || agent_name == from_agent

    if send_message(from_agent, agent_name, message)
      delivered_count += 1
    end
  end

  defined?(Rails) && Rails.logger && Rails.logger.info("Broadcast message from #{from_agent} to #{delivered_count} agents")
  delivered_count
end

#clear_history!Object



72
73
74
75
# File 'lib/rails_ai/agents/message_bus.rb', line 72

def clear_history!
  @message_history.clear
  defined?(Rails) && Rails.logger && Rails.logger.info("Message history cleared")
end

#get_message_history(limit: 1000) ⇒ Object



68
69
70
# File 'lib/rails_ai/agents/message_bus.rb', line 68

def get_message_history(limit: 1000)
  @message_history.last(limit)
end

#get_messages_for_agent(agent_name, from_agent: nil, limit: 100) ⇒ Object



62
63
64
65
66
# File 'lib/rails_ai/agents/message_bus.rb', line 62

def get_messages_for_agent(agent_name, from_agent: nil, limit: 100)
  messages = @message_history.select { |m| m[:to] == agent_name }
  messages = messages.select { |m| m[:from] == from_agent } if from_agent
  messages.last(limit)
end

#send_message(from_agent, to_agent, message) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rails_ai/agents/message_bus.rb', line 22

def send_message(from_agent, to_agent, message)
  return false unless @subscribers[to_agent]

  message_obj = {
    id: SecureRandom.uuid,
    from: from_agent,
    to: to_agent,
    content: message,
    timestamp: Time.now,
    delivered: false
  }

  begin
    @subscribers[to_agent].receive_message(message_obj)
    message_obj[:delivered] = true
    @message_history << message_obj
    trim_history
    defined?(Rails) && Rails.logger && Rails.logger.info("Message sent from #{from_agent} to #{to_agent}")
    true
  rescue => e
    defined?(Rails) && Rails.logger && Rails.logger.error("Failed to deliver message: #{e.message}")
    false
  end
end

#statsObject



77
78
79
80
81
82
83
84
# File 'lib/rails_ai/agents/message_bus.rb', line 77

def stats
  {
    total_subscribers: @subscribers.length,
    total_messages: @message_history.length,
    delivered_messages: @message_history.count { |m| m[:delivered] },
    failed_messages: @message_history.count { |m| !m[:delivered] }
  }
end

#subscribe(agent_name, agent) ⇒ Object



12
13
14
15
# File 'lib/rails_ai/agents/message_bus.rb', line 12

def subscribe(agent_name, agent)
  @subscribers[agent_name] = agent
  defined?(Rails) && Rails.logger && Rails.logger.info("Agent #{agent_name} subscribed to message bus")
end

#unsubscribe(agent_name) ⇒ Object



17
18
19
20
# File 'lib/rails_ai/agents/message_bus.rb', line 17

def unsubscribe(agent_name)
  @subscribers.delete(agent_name)
  defined?(Rails) && Rails.logger && Rails.logger.info("Agent #{agent_name} unsubscribed from message bus")
end