Skip to content

Commit a19dca3

Browse files
committed
Address PR feedback
1 parent c8adf22 commit a19dca3

File tree

3 files changed

+20
-25
lines changed

3 files changed

+20
-25
lines changed
Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4-
using System.Collections.Generic;
5-
using Microsoft.Shared.Collections;
6-
74
namespace Microsoft.Extensions.AI;
85

96
/// <summary>Represents a tool that can be specified to an AI service to enable it to execute code it generates.</summary>
@@ -14,11 +11,7 @@ namespace Microsoft.Extensions.AI;
1411
public class CodeInterpreterTool : AITool
1512
{
1613
/// <summary>Initializes a new instance of the <see cref="CodeInterpreterTool"/> class.</summary>
17-
public CodeInterpreterTool(IReadOnlyDictionary<string, object?>? additionalProperties = null)
14+
public CodeInterpreterTool()
1815
{
19-
AdditionalProperties = additionalProperties ?? EmptyReadOnlyDictionary<string, object?>.Instance;
2016
}
21-
22-
/// <inheritdoc/>
23-
public override IReadOnlyDictionary<string, object?> AdditionalProperties { get; }
2417
}

src/Libraries/Microsoft.Extensions.AI.OpenAI/OpenAIModelMapper.ChatCompletion.cs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/CodeInterpreterToolTests.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,5 @@ public void Constructor_Roundtrips()
1515
Assert.Empty(tool.Description);
1616
Assert.Empty(tool.AdditionalProperties);
1717
Assert.Equal(nameof(CodeInterpreterTool), tool.ToString());
18-
19-
var props = new AdditionalPropertiesDictionary();
20-
tool = new CodeInterpreterTool(props);
21-
Assert.Equal(nameof(CodeInterpreterTool), tool.Name);
22-
Assert.Empty(tool.Description);
23-
Assert.Same(props, tool.AdditionalProperties);
24-
Assert.Equal(nameof(CodeInterpreterTool), tool.ToString());
2518
}
2619
}

0 commit comments

Comments
 (0)