Class: Asimov::Utils::ChatMessagesValidator
- Inherits:
-
Object
- Object
- Asimov::Utils::ChatMessagesValidator
- Defined in:
- lib/asimov/utils/chat_messages_validator.rb
Overview
Validator for OpenAI’s chat message format
Constant Summary collapse
- ALLOWED_ROLES =
%w[assistant system user].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #normalize_parsed(message) ⇒ Object
- #validate(messages) ⇒ Object
- #validate_keys(json) ⇒ Object
- #validate_message(message) ⇒ Object
- #validate_role(role) ⇒ Object
Class Method Details
.validate_and_normalize(messages) ⇒ Object
7 8 9 |
# File 'lib/asimov/utils/chat_messages_validator.rb', line 7 def self.validate_and_normalize() new.validate() end |
Instance Method Details
#normalize_parsed(message) ⇒ Object
56 57 58 59 60 |
# File 'lib/asimov/utils/chat_messages_validator.rb', line 56 def normalize_parsed() return if .is_a?(String) JSON.parse(.respond_to?(:to_json) ? .to_json : ) end |
#validate(messages) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/asimov/utils/chat_messages_validator.rb', line 11 def validate() raise InvalidChatMessagesError, "Chat messages cannot be nil." if .nil? unless .is_a?(Array) raise InvalidChatMessagesError, "Chat messages must be an array." end .map do || (normalize_parsed()) end rescue JSON::ParserError raise InvalidChatMessagesError, "Chat messages must be valid JSON." end |
#validate_keys(json) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/asimov/utils/chat_messages_validator.rb', line 38 def validate_keys(json) additional_keys = json.keys - %w[role content] return if additional_keys.empty? raise InvalidChatMessagesError, "Chat messages must not have additional keys - #{additional_keys.join(', ')}." end |
#validate_message(message) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/asimov/utils/chat_messages_validator.rb', line 26 def () raise InvalidChatMessagesError, "Chat messages must be hashes." unless .is_a?(Hash) validate_role(["role"]) content = ["content"] raise InvalidChatMessagesError, "Chat messages must have content." if content.nil? validate_keys() end |
#validate_role(role) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/asimov/utils/chat_messages_validator.rb', line 47 def validate_role(role) raise InvalidChatMessagesError, "Chat messages must have a role." if role.nil? return true if ALLOWED_ROLES.include?(role) raise InvalidChatMessagesError, "The value '#{role}' is not a valid role for a chat message." end |