Class: Langchain::Assistant::Messages::GoogleGeminiMessage

Inherits:
Base
  • Object
show all
Defined in:
lib/langchain/assistant/messages/google_gemini_message.rb

Constant Summary collapse

ROLES =

Google Gemini uses the following roles:

[
  "user",
  "model",
  "function"
].freeze
TOOL_ROLE =
"function"

Instance Attribute Summary

Attributes inherited from Base

#content, #image_url, #role, #tool_call_id, #tool_calls

Instance Method Summary collapse

Methods inherited from Base

#image, #standard_role

Constructor Details

#initialize(role:, content: nil, tool_calls: [], tool_call_id: nil) ⇒ GoogleGeminiMessage

Initialize a new Google Gemini message

Parameters:

  • role (String)

    The role of the message

  • content (String) (defaults to: nil)

    The content of the message

  • tool_calls (Array<Hash>) (defaults to: [])

    The tool calls made in the message

  • tool_call_id (String) (defaults to: nil)

    The ID of the tool call

Raises:

  • (ArgumentError)

22
23
24
25
26
27
28
29
30
31
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 22

def initialize(role:, content: nil, tool_calls: [], tool_call_id: nil)
  raise ArgumentError, "Role must be one of #{ROLES.join(", ")}" unless ROLES.include?(role)
  raise ArgumentError, "Tool calls must be an array of hashes" unless tool_calls.is_a?(Array) && tool_calls.all? { |tool_call| tool_call.is_a?(Hash) }

  @role = role
  # Some Tools return content as a JSON hence `.to_s`
  @content = content.to_s
  @tool_calls = tool_calls
  @tool_call_id = tool_call_id
end

Instance Method Details

#build_partsArray<Hash>

Builds the part value for the message hash

Returns:

  • (Array<Hash>)

    An array of content hashes of the text or of the tool calls if present


116
117
118
119
120
121
122
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 116

def build_parts
  if tool_calls.any?
    tool_calls
  else
    [{text: content}]
  end
end

#function?Boolean

Check if the message is a tool call

Returns:

  • (Boolean)

    true/false whether this message is a tool call


75
76
77
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 75

def function?
  role == "function"
end

#llm?Boolean

Check if the message came from an LLM

Returns:

  • (Boolean)

    true/false whether this message was produced by an LLM


36
37
38
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 36

def llm?
  model?
end

#model?Boolean

Check if the message came from an LLM

Returns:

  • (Boolean)

    true/false whether this message was produced by an LLM


127
128
129
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 127

def model?
  role == "model"
end

#model_hashHash

Convert the message to an GoogleGemini API-compatible hash

Returns:

  • (Hash)

    The message as an GoogleGemini API-compatible hash, with the role as “model”


81
82
83
84
85
86
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 81

def model_hash
  {
    role: role,
    parts: build_parts
  }
end

#system?Boolean

Google Gemini does not implement system prompts

Returns:

  • (Boolean)

54
55
56
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 54

def system?
  false
end

#to_hashHash

Convert the message to a Google Gemini API-compatible hash

Returns:

  • (Hash)

    The message as a Google Gemini API-compatible hash


43
44
45
46
47
48
49
50
51
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 43

def to_hash
  if tool?
    tool_hash
  elsif model?
    model_hash
  elsif user?
    user_hash
  end
end

#tool?Boolean

Check if the message is a tool call

Returns:

  • (Boolean)

    true/false whether this message is a tool call


61
62
63
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 61

def tool?
  function?
end

#tool_hashHash

Convert the message to an GoogleGemini API-compatible hash

Returns:

  • (Hash)

    The message as an GoogleGemini API-compatible hash, with the role as “function”


90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 90

def tool_hash
  {
    role: role,
    parts: [{
      functionResponse: {
        name: tool_call_id,
        response: {
          name: tool_call_id,
          content: content
        }
      }
    }]
  }
end

#user?Boolean

Check if the message is a user call

Returns:

  • (Boolean)

    true/false whether this message is a user call


68
69
70
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 68

def user?
  role == "user"
end

#user_hashHash

Convert the message to an GoogleGemini API-compatible hash

Returns:

  • (Hash)

    The message as an GoogleGemini API-compatible hash, with the role as “user”


107
108
109
110
111
112
# File 'lib/langchain/assistant/messages/google_gemini_message.rb', line 107

def user_hash
  {
    role: role,
    parts: build_parts
  }
end