Sha256: 701dedd1e4428ab6410251672aae5622ac5cdea510318b9ff128dfc4bf9d3a78

Contents?: true

Size: 1.49 KB

Versions: 8

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

require "active_support/core_ext/module/delegation"

module Raix
  module MessageAdapters
    # Transforms messages into the format expected by the OpenAI API
    class Base
      attr_accessor :context

      delegate :cache_at, :model, to: :context

      def initialize(context)
        @context = context
      end

      def transform(message)
        return message if message[:role].present?

        if message[:function].present?
          { role: "assistant", name: message.dig(:function, :name), content: message.dig(:function, :arguments).to_json }
        elsif message[:result].present?
          { role: "function", name: message[:name], content: message[:result] }
        else
          content(message)
        end
      end

      protected

      def content(message)
        case message
        in { system: content }
          { role: "system", content: }
        in { user: content }
          { role: "user", content: }
        in { assistant: content }
          { role: "assistant", content: }
        else
          raise ArgumentError, "Invalid message format: #{message.inspect}"
        end.tap do |msg|
          # convert to anthropic multipart format if model is claude-3 and cache_at is set
          if model.to_s.include?("anthropic/claude-3") && cache_at && msg[:content].to_s.length > cache_at.to_i
            msg[:content] = [{ type: "text", text: msg[:content], cache_control: { type: "ephemeral" } }]
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
raix-0.4.8 lib/raix/message_adapters/base.rb
raix-0.4.7 lib/raix/message_adapters/base.rb
raix-0.4.6 lib/raix/message_adapters/base.rb
raix-0.4.5 lib/raix/message_adapters/base.rb
raix-0.4.4 lib/raix/message_adapters/base.rb
raix-0.4.3 lib/raix/message_adapters/base.rb
raix-0.4.2 lib/raix/message_adapters/base.rb
raix-0.4.1 lib/raix/message_adapters/base.rb