@@ -26,15 +26,24 @@ def coerce(value, state:) = (raise NotImplementedError)
2626 #
2727 # @param value [Object]
2828 #
29+ # @param state [Hash{Symbol=>Object}] .
30+ #
31+ # @option state [Boolean] :can_retry
32+ #
2933 # @return [Object]
30- def dump ( value )
34+ def dump ( value , state : )
3135 case value
3236 in Array
33- value . map { OpenAI ::Internal ::Type ::Unknown . dump ( _1 ) }
37+ value . map { OpenAI ::Internal ::Type ::Unknown . dump ( _1 , state : state ) }
3438 in Hash
35- value . transform_values { OpenAI ::Internal ::Type ::Unknown . dump ( _1 ) }
39+ value . transform_values { OpenAI ::Internal ::Type ::Unknown . dump ( _1 , state : state ) }
3640 in OpenAI ::Internal ::Type ::BaseModel
37- value . class . dump ( value )
41+ value . class . dump ( value , state : state )
42+ in StringIO
43+ value . string
44+ in Pathname | IO
45+ state [ :can_retry ] = false if value . is_a? ( IO )
46+ OpenAI ::Internal ::Util ::SerializationAdapter . new ( value )
3847 else
3948 value
4049 end
@@ -182,7 +191,7 @@ def coerce(
182191 rescue ArgumentError , TypeError => e
183192 raise e if strictness == :strong
184193 end
185- in -> { _1 <= IO } if value . is_a? ( String )
194+ in -> { _1 <= StringIO } if value . is_a? ( String )
186195 exactness [ :yes ] += 1
187196 return StringIO . new ( value . b )
188197 else
@@ -207,13 +216,21 @@ def coerce(
207216 # @api private
208217 #
209218 # @param target [OpenAI::Internal::Type::Converter, Class]
219+ #
210220 # @param value [Object]
211221 #
222+ # @param state [Hash{Symbol=>Object}] .
223+ #
224+ # @option state [Boolean] :can_retry
225+ #
212226 # @return [Object]
213- def dump ( target , value )
214- # rubocop:disable Layout/LineLength
215- target . is_a? ( OpenAI ::Internal ::Type ::Converter ) ? target . dump ( value ) : OpenAI ::Internal ::Type ::Unknown . dump ( value )
216- # rubocop:enable Layout/LineLength
227+ def dump ( target , value , state : { can_retry : true } )
228+ case target
229+ in OpenAI ::Internal ::Type ::Converter
230+ target . dump ( value , state : state )
231+ else
232+ OpenAI ::Internal ::Type ::Unknown . dump ( value , state : state )
233+ end
217234 end
218235 end
219236 end
0 commit comments