src/Custom/Assistants/ToolConstraint.cs (47 lines of code) (raw):

using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("AssistantsNamedToolChoice")] public partial class ToolConstraint { private readonly string _plainTextValue; [CodeGenMember("Type")] private readonly string _objectType; private readonly string _objectFunctionName; // CUSTOM: Made internal. /// <summary> Gets or sets the function. </summary> [CodeGenMember("Function")] internal InternalAssistantsNamedToolChoiceFunction Function { get; set; } public static ToolConstraint None { get; } = new("none"); public static ToolConstraint Auto { get; } = new("auto"); public static ToolConstraint Required { get; } = new("required"); public ToolConstraint(ToolDefinition toolDefinition) { switch (toolDefinition) { case CodeInterpreterToolDefinition: _objectType = "code_interpreter"; break; case FileSearchToolDefinition: _objectType = "file_search"; break; case FunctionToolDefinition functionTool: _objectType = "function"; _objectFunctionName = functionTool.FunctionName; break; default: throw new ArgumentOutOfRangeException(nameof(toolDefinition)); } SerializedAdditionalRawData = new ChangeTrackingDictionary<string, BinaryData>(); } internal ToolConstraint(string plainTextValue) : this(plainTextValue, null, null, null) { } internal ToolConstraint(string plainTextValue, string objectType, string objectFunctionName, IDictionary<string, BinaryData> serializedAdditionalRawData) { _plainTextValue = plainTextValue; _objectType = objectType; _objectFunctionName = objectFunctionName; SerializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary<string, BinaryData>(); } }