Module: DSPy::Schema::SorbetToonAdapter
- Extended by:
- T::Sig
- Defined in:
- lib/dspy/schema/sorbet_toon_adapter.rb
Class Method Summary collapse
- .field_guidance(signature_class, role) ⇒ Object
- .log_decode_error(payload, error) ⇒ Object
- .parse_output(signature_class, toon_string) ⇒ Object
- .render_expected_output(signature_class, values) ⇒ Object
- .render_input(signature_class, values) ⇒ Object
- .strip_code_fences(text) ⇒ Object
Class Method Details
.field_guidance(signature_class, role) ⇒ Object
74 75 76 77 78 |
# File 'lib/dspy/schema/sorbet_toon_adapter.rb', line 74 def field_guidance(signature_class, role) return '' unless signature_class Sorbet::Toon::SignatureFormatter.describe_signature(signature_class, role) end |
.log_decode_error(payload, error) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/dspy/schema/sorbet_toon_adapter.rb', line 60 def log_decode_error(payload, error) logger = DSPy.logger if DSPy.respond_to?(:logger) return unless logger.respond_to?(:warn) preview = payload.to_s.lines.first(5).join logger.warn( event: 'toon.decode_error', error: error., preview: preview, length: payload.to_s.length ) end |
.parse_output(signature_class, toon_string) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/dspy/schema/sorbet_toon_adapter.rb', line 34 def parse_output(signature_class, toon_string) payload = strip_code_fences(toon_string) Sorbet::Toon.decode( payload, signature: signature_class, role: :output, strict: false ) rescue Sorbet::Toon::DecodeError => e log_decode_error(payload, e) raise DSPy::LM::AdapterError, "Failed to parse TOON response: #{e.}. Ensure the model replies with a ```toon``` block using the schema described in the system prompt." end |
.render_expected_output(signature_class, values) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/dspy/schema/sorbet_toon_adapter.rb', line 25 def render_expected_output(signature_class, values) Sorbet::Toon.encode( values, signature: signature_class, role: :output ) end |
.render_input(signature_class, values) ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/dspy/schema/sorbet_toon_adapter.rb', line 16 def render_input(signature_class, values) Sorbet::Toon.encode( values, signature: signature_class, role: :input ) end |
.strip_code_fences(text) ⇒ Object
50 51 52 53 54 55 56 57 |
# File 'lib/dspy/schema/sorbet_toon_adapter.rb', line 50 def strip_code_fences(text) return '' if text.nil? match = text.match(/```(?:toon)?\s*(.*?)```/m) return match[1].strip if match text.strip end |