using AIStudio.Provider;
namespace AIStudio.Tools.ToolCallingSystem;
///
/// A tool collection as people see it: one entry of a tool selection, one row of the tool settings.
///
///
/// A tool which belongs to no declared collection forms one of its own, so it appears here like any
/// other entry, with its own name and icon. Whatever somebody decides about an entry applies to all
/// of its tools, see ToolCollectionDefinition.
///
public sealed class ToolCatalogItem
{
///
/// The ID of the collection, which selections and settings store.
///
public required string Id { get; init; }
public required string Icon { get; init; }
public required string DisplayName { get; init; }
public required string Description { get; init; }
///
/// What the tools of this entry do, written for a model which picks the tools of an assistant.
///
public required string DescriptionForLLM { get; init; }
///
/// The tools of the collection which exist here, in the order in which the collection lists them.
///
public required IReadOnlyList Tools { get; init; }
///
/// Whether the settings of every tool are complete; otherwise the state of the first tool whose settings are not.
///
public required ToolConfigurationState ConfigurationState { get; init; }
///
/// Who switched the collection off: tools altogether, the organization, or the user; NONE while it may be used.
///
///
/// A reason rather than a yes or no, because the settings have to tell the user apart from the
/// organization: the user can switch on again what they switched off themselves, but nothing
/// their organization switched off.
///
public ToolOfferBlockReason SwitchOffReason { get; init; } = ToolOfferBlockReason.NONE;
///
/// Whether the collection may be used at all, see ToolRegistry.IsToolActive.
///
public bool IsActive => this.SwitchOffReason is ToolOfferBlockReason.NONE;
public ConfidenceLevel MinimumProviderConfidence { get; init; } = ConfidenceLevel.NONE;
}