Module: RLM::Signature
- Defined in:
- lib/rlm/signature.rb,
lib/rlm/signature/dspy.rb
Defined Under Namespace
Classes: Dspy
Constant Summary collapse
- REQUIRED_METHODS =
%i[ description input_fields output_fields validate_input validate_output ].freeze
Class Method Summary collapse
- .assert_valid_input!(signature, input) ⇒ Object
- .assert_valid_output!(signature, output) ⇒ Object
- .coerce_output(signature, output) ⇒ Object
- .name_for(signature) ⇒ Object
- .validate_fields!(signature, method_name) ⇒ Object
- .validate_input(signature, input) ⇒ Object
- .validate_interface!(signature) ⇒ Object
- .validate_output(signature, output) ⇒ Object
- .validate_payload(signature, payload, method_name) ⇒ Object
Class Method Details
.assert_valid_input!(signature, input) ⇒ Object
40 41 42 43 44 45 |
# File 'lib/rlm/signature.rb', line 40 def assert_valid_input!(signature, input) errors = validate_input(signature, input) raise ValidationError, errors.join(", ") unless errors.empty? nil end |
.assert_valid_output!(signature, output) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/rlm/signature.rb', line 47 def assert_valid_output!(signature, output) errors = validate_output(signature, output) raise ValidationError, errors.join(", ") unless errors.empty? nil end |
.coerce_output(signature, output) ⇒ Object
34 35 36 37 38 |
# File 'lib/rlm/signature.rb', line 34 def coerce_output(signature, output) return signature.coerce_output(output) if signature.respond_to?(:coerce_output) output end |
.name_for(signature) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/rlm/signature.rb', line 54 def name_for(signature) name = signature.name if signature.respond_to?(:name) return name unless name.to_s.empty? signature.to_s end |
.validate_fields!(signature, method_name) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/rlm/signature.rb', line 61 def validate_fields!(signature, method_name) fields = signature.public_send(method_name) return if fields.is_a?(Hash) raise ConfigurationError, "signature .#{method_name} must return a Hash" end |
.validate_input(signature, input) ⇒ Object
26 27 28 |
# File 'lib/rlm/signature.rb', line 26 def validate_input(signature, input) validate_payload(signature, input, :validate_input) end |
.validate_interface!(signature) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/rlm/signature.rb', line 17 def validate_interface!(signature) missing = REQUIRED_METHODS.reject { |method_name| signature.respond_to?(method_name) } raise ConfigurationError, "signature is missing required methods: #{missing.join(", ")}" unless missing.empty? validate_fields!(signature, :input_fields) validate_fields!(signature, :output_fields) signature end |
.validate_output(signature, output) ⇒ Object
30 31 32 |
# File 'lib/rlm/signature.rb', line 30 def validate_output(signature, output) validate_payload(signature, output, :validate_output) end |
.validate_payload(signature, payload, method_name) ⇒ Object
68 69 70 71 72 73 74 |
# File 'lib/rlm/signature.rb', line 68 def validate_payload(signature, payload, method_name) validate_interface!(signature) errors = signature.public_send(method_name, payload) return errors if errors.is_a?(Array) raise ConfigurationError, "signature .#{method_name} must return an Array" end |