Module: OmniAI::OpenAI::Chat::MessageSerializer

Defined in:
lib/omniai/openai/chat/message_serializer.rb

Overview

Overrides message serialize / deserialize.

Class Method Summary collapse

Class Method Details

.arrayify(content) ⇒ Array<Object>

Parameters:

  • content (Object)

Returns:

  • (Array<Object>)


85
86
87
88
89
# File 'lib/omniai/openai/chat/message_serializer.rb', line 85

def self.arrayify(content)
  return [] if content.nil?

  content.is_a?(Array) ? content : [content]
end

.deserialize(data, context:) ⇒ OmniAI::Chat::Message

Parameters:

  • data (Hash)
  • context (OmniAI::Context)

Returns:

  • (OmniAI::Chat::Message)


53
54
55
56
57
58
# File 'lib/omniai/openai/chat/message_serializer.rb', line 53

def self.deserialize(data, context:)
  case data["type"]
  when "message" then deserialize_for_content(data, context:)
  when "function_call" then deserialize_for_tool_call(data, context:)
  end
end

.deserialize_for_content(data, context:) ⇒ OmniAI::Chat::Message

Parameters:

  • data (Hash)
  • context (OmniAI::Context)

Returns:

  • (OmniAI::Chat::Message)


64
65
66
67
68
69
70
# File 'lib/omniai/openai/chat/message_serializer.rb', line 64

def self.deserialize_for_content(data, context:)
  role = data["role"]
  content = data["content"].map do |content|
    OmniAI::Chat::Content.deserialize(content, context:)
  end
  OmniAI::Chat::Message.new(role:, content:)
end

.deserialize_for_tool_call(data, context:) ⇒ OmniAI::Chat::Message

Parameters:

  • data (Hash)
  • context (OmniAI::Context)

Returns:

  • (OmniAI::Chat::Message)


76
77
78
79
80
# File 'lib/omniai/openai/chat/message_serializer.rb', line 76

def self.deserialize_for_tool_call(data, context:)
  entry = OmniAI::Chat::ToolCall.deserialize(data, context:)
  tool_call_list = OmniAI::Chat::ToolCallList.new(entries: [entry])
  OmniAI::Chat::Message.new(role: OmniAI::Chat::Role::TOOL, content: nil, tool_call_list:)
end

.serialize(message, context:) ⇒ Hash

Parameters:

  • message (OmniAI::Chat::Message)
  • context (OmniAI::Context)

Returns:

  • (Hash)


12
13
14
15
16
17
18
# File 'lib/omniai/openai/chat/message_serializer.rb', line 12

def self.serialize(message, context:)
  if message.tool?
    serialize_for_tool_call(message, context:)
  else
    serialize_for_content(message, context:)
  end
end

.serialize_for_content(message, context:) ⇒ Hash

Parameters:

  • message (OmniAI::Chat::Message)
  • context (OmniAI::Context)

Returns:

  • (Hash)


34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/omniai/openai/chat/message_serializer.rb', line 34

def self.serialize_for_content(message, context:)
  role = message.role
  direction = message.direction
  parts = arrayify(message.content)

  content = parts.map do |part|
    case part
    when String then { type: "#{direction}_text", text: part }
    else part.serialize(context:, direction:)
    end
  end

  { role:, content: }
end

.serialize_for_tool_call(message, context:) ⇒ Hash

Parameters:

  • message (OmniAI::Chat::Message)
  • context (OmniAI::Context)

Returns:

  • (Hash)


24
25
26
27
28
# File 'lib/omniai/openai/chat/message_serializer.rb', line 24

def self.serialize_for_tool_call(message, context:)
  tool_call_list = message.tool_call_list
  tool_call = tool_call_list[0]
  tool_call.serialize(context:)
end