Class: Riffer::Tools::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/riffer/tools/response.rb,
sig/generated/riffer/tools/response.rbs

Overview

Represents the result of a tool execution; every tool's call must return one.

class MyTool < Riffer::Tool
def call(context:, **kwargs)
  result = perform_operation
  Riffer::Tools::Response.success(result)
rescue MyError => e
  Riffer::Tools::Response.error(e.message)
end
end

Direct Known Subclasses

Mcp::SearchTool::Result

Constant Summary collapse

VALID_FORMATS =

RBS:

  • @success: bool

Returns:

  • (Array[Symbol])
%i[text json].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(content:, success:, error_message: nil, error_type: nil, exception: nil) ⇒ Response

-- : (content: String, success: bool, ?error_message: String?, ?error_type: Symbol?, ?exception: Exception?) -> void

Parameters:

  • content: (String)
  • success: (Boolean)
  • error_message: (String, nil) (defaults to: nil)
  • error_type: (Symbol, nil) (defaults to: nil)
  • exception: (Exception, nil) (defaults to: nil)


96
97
98
99
100
101
102
# File 'lib/riffer/tools/response.rb', line 96

def initialize(content:, success:, error_message: nil, error_type: nil, exception: nil)
  @content = content
  @success = success
  @error_message = error_message
  @error_type = error_type
  @exception = exception
end

Instance Attribute Details

#contentString (readonly)

The response content.

Returns:

  • (String)


23
24
25
# File 'lib/riffer/tools/response.rb', line 23

def content
  @content
end

#error_messageString? (readonly)

The error message, or nil on success.

Returns:

  • (String, nil)


26
27
28
# File 'lib/riffer/tools/response.rb', line 26

def error_message
  @error_message
end

#error_typeSymbol? (readonly)

The error type, or nil on success.

Returns:

  • (Symbol, nil)


29
30
31
# File 'lib/riffer/tools/response.rb', line 29

def error_type
  @error_type
end

#exceptionException? (readonly)

The exception an unhandled failure was folded from, or nil. Kept out of every serialized form so it never reaches an LLM or a message payload.

Returns:

  • (Exception, nil)


33
34
35
# File 'lib/riffer/tools/response.rb', line 33

def exception
  @exception
end

Class Method Details

.error(message, type: :execution_error, exception: nil) ⇒ Riffer::Tools::Response

Creates an error response.

-- : (String, ?type: Symbol, ?exception: Exception?) -> Riffer::Tools::Response

Parameters:

  • (String)
  • type: (Symbol) (defaults to: :execution_error)
  • exception: (Exception, nil) (defaults to: nil)

Returns:



70
71
72
# File 'lib/riffer/tools/response.rb', line 70

def self.error(message, type: :execution_error, exception: nil)
  new(content: message, success: false, error_message: message, error_type: type, exception: exception)
end

.json(result) ⇒ Riffer::Tools::Response

Creates a success response with JSON format.

-- : (untyped) -> Riffer::Tools::Response

Parameters:

  • (Object)

Returns:



62
63
64
# File 'lib/riffer/tools/response.rb', line 62

def self.json(result)
  success(result, format: :json)
end

.success(result, format: :text) ⇒ Riffer::Tools::Response

Creates a success response.

Raises Riffer::ArgumentError if format is invalid.

-- : (untyped, ?format: Symbol) -> Riffer::Tools::Response

Parameters:

  • (Object)
  • format: (Symbol) (defaults to: :text)

Returns:



41
42
43
44
45
46
47
48
# File 'lib/riffer/tools/response.rb', line 41

def self.success(result, format: :text)
  unless VALID_FORMATS.include?(format)
    raise Riffer::ArgumentError, "Invalid format: #{format}. Must be one of: #{VALID_FORMATS.join(', ')}"
  end

  content = format == :json ? result.to_json : result.to_s
  new(content: content, success: true)
end

.text(result) ⇒ Riffer::Tools::Response

Creates a success response with text format.

-- : (untyped) -> Riffer::Tools::Response

Parameters:

  • (Object)

Returns:



54
55
56
# File 'lib/riffer/tools/response.rb', line 54

def self.text(result)
  success(result, format: :text)
end

Instance Method Details

#error?Boolean

Returns true if the tool execution failed.

: () -> bool

Returns:

  • (Boolean)


82
# File 'lib/riffer/tools/response.rb', line 82

def error? = !@success

#success?Boolean

Returns true if the tool execution succeeded.

: () -> bool

Returns:

  • (Boolean)


77
# File 'lib/riffer/tools/response.rb', line 77

def success? = @success

#to_hHash[Symbol, untyped]

Returns a hash representation of the response.

-- : () -> Hash[Symbol, untyped]

Returns:

  • (Hash[Symbol, untyped])


88
89
90
# File 'lib/riffer/tools/response.rb', line 88

def to_h
  { content: @content, error: @error_message, error_type: @error_type }
end