Class: RailsAi::Agents::MessageBus
- Inherits:
-
Object
- Object
- RailsAi::Agents::MessageBus
- Defined in:
- lib/rails_ai/agents/message_bus.rb
Instance Method Summary collapse
- #broadcast(from_agent, message, exclude: []) ⇒ Object
- #clear_history! ⇒ Object
- #get_message_history(limit: 1000) ⇒ Object
- #get_messages_for_agent(agent_name, from_agent: nil, limit: 100) ⇒ Object
-
#initialize ⇒ MessageBus
constructor
A new instance of MessageBus.
- #send_message(from_agent, to_agent, message) ⇒ Object
- #stats ⇒ Object
- #subscribe(agent_name, agent) ⇒ Object
- #unsubscribe(agent_name) ⇒ Object
Constructor Details
#initialize ⇒ MessageBus
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, , exclude: []) delivered_count = 0 @subscribers.each do |agent_name, agent| next if exclude.include?(agent_name) || agent_name == from_agent if (from_agent, agent_name, ) 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 (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 (agent_name, from_agent: nil, limit: 100) = @message_history.select { |m| m[:to] == agent_name } = .select { |m| m[:from] == from_agent } if from_agent .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 (from_agent, to_agent, ) return false unless @subscribers[to_agent] = { id: SecureRandom.uuid, from: from_agent, to: to_agent, content: , timestamp: Time.now, delivered: false } begin @subscribers[to_agent].() [:delivered] = true @message_history << 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.}") false end end |
#stats ⇒ Object
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 |