@@ -240,8 +240,10 @@ public static ChatOptions FromOpenAIOptions(ChatCompletionOptions? options)
240240 {
241241 foreach ( ChatTool tool in tools )
242242 {
243- result . Tools ??= [ ] ;
244- result . Tools . Add ( FromOpenAIChatTool ( tool ) ) ;
243+ if ( FromOpenAIChatTool ( tool ) is { } convertedTool )
244+ {
245+ ( result . Tools ??= [ ] ) . Add ( convertedTool ) ;
246+ }
245247 }
246248
247249 using var toolChoiceJson = JsonDocument . Parse ( JsonModelHelpers . Serialize ( options . ToolChoice ) . ToMemory ( ) ) ;
@@ -407,17 +409,24 @@ public static ChatCompletionOptions ToOpenAIOptions(ChatOptions? options)
407409 return result ;
408410 }
409411
410- private static AITool FromOpenAIChatTool ( ChatTool chatTool )
412+ private static AITool ? FromOpenAIChatTool ( ChatTool chatTool )
411413 {
412- AdditionalPropertiesDictionary additionalProperties = [ ] ;
413- if ( chatTool . FunctionSchemaIsStrict is bool strictValue )
414+ switch ( chatTool . Kind )
414415 {
415- additionalProperties [ "Strict" ] = strictValue ;
416- }
416+ case ChatToolKind . Function :
417+ AdditionalPropertiesDictionary additionalProperties = [ ] ;
418+ if ( chatTool . FunctionSchemaIsStrict is bool strictValue )
419+ {
420+ additionalProperties [ "Strict" ] = strictValue ;
421+ }
422+
423+ OpenAIChatToolJson openAiChatTool = JsonSerializer . Deserialize ( chatTool . FunctionParameters . ToMemory ( ) . Span , OpenAIJsonContext . Default . OpenAIChatToolJson ) ! ;
424+ JsonElement schema = JsonSerializer . SerializeToElement ( openAiChatTool , OpenAIJsonContext . Default . OpenAIChatToolJson ) ;
425+ return new MetadataOnlyAIFunction ( chatTool . FunctionName , chatTool . FunctionDescription , schema , additionalProperties ) ;
417426
418- OpenAIChatToolJson openAiChatTool = JsonSerializer . Deserialize ( chatTool . FunctionParameters . ToMemory ( ) . Span , OpenAIJsonContext . Default . OpenAIChatToolJson ) ! ;
419- JsonElement schema = JsonSerializer . SerializeToElement ( openAiChatTool , OpenAIJsonContext . Default . OpenAIChatToolJson ) ;
420- return new MetadataOnlyAIFunction ( chatTool . FunctionName , chatTool . FunctionDescription , schema , additionalProperties ) ;
427+ default :
428+ return null ;
429+ }
421430 }
422431
423432 private sealed class MetadataOnlyAIFunction ( string name , string description , JsonElement schema , IReadOnlyDictionary < string , object ? > additionalProps ) : AIFunction
0 commit comments