Sha256: 0d2ad247918118574b66cc98fa502bab50ac575375e64ce9b3f5c1c90bb26ed9

Contents?: true

Size: 1.73 KB

Versions: 8

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true

module OmniAI
  class Chat
    # A specific message that contains the result of a tool call.
    class ToolCallMessage < Message
      # @return [String]
      attr_accessor :tool_call_id

      # @param content [String]
      # @param tool_call_id [String]
      def initialize(content:, tool_call_id:, role: OmniAI::Chat::Role::TOOL)
        super(content:, role:)
        @tool_call_id = tool_call_id
      end

      # @return [String]
      def inspect
        "#<#{self.class.name} content=#{content.inspect} tool_call_id=#{tool_call_id.inspect}>"
      end

      # Usage:
      #
      #   ToolCall.deserialize({ 'role' => 'tool', content: '{ 'temperature': 0 }' }) # => #<ToolCall ...>
      #
      # @param data [Hash]
      # @param context [Context] optional
      #
      # @return [ToolMessage]
      def self.deserialize(data, context: nil)
        deserialize = context&.deserializer(:tool_message)
        return deserialize.call(data, context:) if deserialize

        role = data['role']
        content = JSON.parse(data['content'])
        tool_call_id = data['tool_call_id']

        new(role:, content:, tool_call_id:)
      end

      # Usage:
      #
      #   message.serialize # => { role: :user, content: 'Hello!' }
      #   message.serialize # => { role: :user, content: [{ type: 'text', text: 'Hello!' }] }
      #
      # @param context [Context] optional
      #
      # @return [Hash]
      def serialize(context: nil)
        serializer = context&.serializer(:tool_message)
        return serializer.call(self, context:) if serializer

        role = @role
        content = JSON.generate(@content)
        tool_call_id = @tool_call_id

        { role:, content:, tool_call_id: }
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
omniai-1.9.2 lib/omniai/chat/tool_call_message.rb
omniai-1.9.1 lib/omniai/chat/tool_call_message.rb
omniai-1.9.0 lib/omniai/chat/tool_call_message.rb
omniai-1.8.4 lib/omniai/chat/tool_call_message.rb
omniai-1.8.3 lib/omniai/chat/tool_call_message.rb
omniai-1.8.2 lib/omniai/chat/tool_call_message.rb
omniai-1.8.1 lib/omniai/chat/tool_call_message.rb
omniai-1.8.0 lib/omniai/chat/tool_call_message.rb