Module: OmniAI::OpenAI::Chat::MessageSerializer
- Defined in:
- lib/omniai/openai/chat/message_serializer.rb
Overview
Overrides message serialize / deserialize.
Class Method Summary collapse
- .arrayify(content) ⇒ Array<Object>
- .deserialize(data, context:) ⇒ OmniAI::Chat::Message
- .deserialize_for_content(data, context:) ⇒ OmniAI::Chat::Message
- .deserialize_for_tool_call(data, context:) ⇒ OmniAI::Chat::Message
- .serialize(message, context:) ⇒ Hash
- .serialize_for_content(message, context:) ⇒ Hash
- .serialize_for_tool_call(message, context:) ⇒ Hash
Class Method Details
.arrayify(content) ⇒ 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
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
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
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
12 13 14 15 16 17 18 |
# File 'lib/omniai/openai/chat/message_serializer.rb', line 12 def self.serialize(, context:) if .tool? serialize_for_tool_call(, context:) else serialize_for_content(, context:) end end |
.serialize_for_content(message, context:) ⇒ 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(, context:) role = .role direction = .direction parts = arrayify(.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
24 25 26 27 28 |
# File 'lib/omniai/openai/chat/message_serializer.rb', line 24 def self.serialize_for_tool_call(, context:) tool_call_list = .tool_call_list tool_call = tool_call_list[0] tool_call.serialize(context:) end |