Sha256: a126c3201dfb277ec1b96d51ea0b1119a1737c503522140fbe4acc024f17823c

Contents?: true

Size: 851 Bytes

Versions: 1

Compression:

Stored size: 851 Bytes

Contents

# frozen_string_literal: true

require "dry-struct"
require "roseflow/types"

module Roseflow
  module Chat
    class Message < Dry::Struct
      attribute :role, Types::String
      attribute :content, Types::String
      attribute? :name, Types::String
      attribute? :token_count, Types::Integer

      def user?
        role == "user"
      end

      def system?
        role == "system"
      end

      def model?
        %w(system assistant).include?(role)
      end
    end

    class ModelMessage < Message
      attribute :role, Types::String.constrained(included_in: %w(system assistant))
    end

    class UserMessage < Message
      attribute :role, Types::String.constrained(included_in: %w(user))
    end

    class SystemMessage < Message
      attribute :role, Types::String.constrained(included_in: %w(system))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
roseflow-0.1.0 lib/roseflow/chat/message.rb