Sha256: 200a7b0e5d0425d3c33ebe4094e30f4b4190ea94961c2afe14cd136047d255a8

Contents?: true

Size: 805 Bytes

Versions: 1

Compression:

Stored size: 805 Bytes

Contents

module Bristow
  class Agency
    attr_reader :agents

    def initialize(agents: [])
      @agents = agents
    end

    def chat(messages, &block)
      # Convert string message to proper format
      messages = [{ role: "user", content: messages }] if messages.is_a?(String)
      
      # Convert array of strings to proper format
      messages = messages.map { |msg| msg.is_a?(String) ? { role: "user", content: msg } : msg } if messages.is_a?(Array)

      raise NotImplementedError, "Agency#chat must be implemented by a subclass"
    end

    def find_agent(name)
      agents.find { |agent| agent.name == name }
    end

    protected

    def call_agent(agent, messages, &block)
      response = agent.chat(messages, &block)
      response.last # Return just the last message
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bristow-0.1.0 lib/bristow/agency.rb