namespace AIStudio.Provider;
///
/// Represents the capabilities of an AI model.
///
///
/// A set of capabilities is one value, not a collection: a model profile carries this enum as a
/// single field, and asking whether a capability is present is one bit test instead of a walk
/// through a list. That is why the members are powers of two.
///
/// The numeric values are an implementation detail and are never written anywhere. Overrides,
/// plugins, and the settings file all address a capability by its name, so the names are the part
/// which must not change. Removing a member would silently drop the override an organization wrote
/// for it, which is why the members we no longer hand out ourselves are still here.
///
/// Adding a member means adding the next free bit. Sixty-four of them fit; should they ever run
/// out, the answer is a second enum next to this one rather than a wider underlying type, because
/// widening changes the meaning of every value already written down.
///
[Flags]
public enum Capability : ulong
{
///
/// No capabilities specified.
///
NONE = 0,
///
/// We don't know what the AI model can do.
///
UNKNOWN = 1UL << 0,
///
/// The AI model can perform text input.
///
TEXT_INPUT = 1UL << 1,
///
/// The AI model can perform audio input, such as music or sound.
///
AUDIO_INPUT = 1UL << 2,
///
/// The AI model can perform one image input, such as one photo or drawing.
///
SINGLE_IMAGE_INPUT = 1UL << 3,
///
/// The AI model can perform multiple images as input, such as multiple photos or drawings.
///
MULTIPLE_IMAGE_INPUT = 1UL << 4,
///
/// The AI model can perform speech input.
///
SPEECH_INPUT = 1UL << 5,
///
/// The AI model can perform video input, such as video files or streams.
///
VIDEO_INPUT = 1UL << 6,
///
/// The AI model can generate text output.
///
TEXT_OUTPUT = 1UL << 7,
///
/// The AI model can generate audio output, such as music or sound.
///
AUDIO_OUTPUT = 1UL << 8,
///
/// The AI model can generate image output, such as photos or drawings.
///
IMAGE_OUTPUT = 1UL << 9,
///
/// The AI model can generate speech output.
///
SPEECH_OUTPUT = 1UL << 10,
///
/// The AI model can generate video output.
///
VIDEO_OUTPUT = 1UL << 11,
///
/// The AI model can perform reasoning tasks. You can enable reasoning optionally, but it is disabled by default.
///
///
/// Override vocabulary. A model profile states how a model reasons through its ReasoningSupport
/// field and never sets this flag, because the three reasoning flags can be combined into
/// answers no model can give. Asking a profile whether it has this capability always says no.
///
OPTIONAL_REASONING = 1UL << 12,
///
/// The AI model always performs reasoning. There is no option to disable reasoning.
///
///
/// Override vocabulary. A model profile states how a model reasons through its ReasoningSupport
/// field and never sets this flag, because the three reasoning flags can be combined into
/// answers no model can give. Asking a profile whether it has this capability always says no.
///
ALWAYS_REASONING = 1UL << 13,
///
/// The AI model performs optional reasoning, but it is enabled by default.
///
///
/// Override vocabulary. A model profile states how a model reasons through its ReasoningSupport
/// field and never sets this flag, because the three reasoning flags can be combined into
/// answers no model can give. Asking a profile whether it has this capability always says no.
///
REASONING_BY_DEFAULT = 1UL << 14,
///
/// The AI model can embed information or data.
///
EMBEDDING = 1UL << 15,
///
/// The AI model can perform in real-time.
///
REALTIME = 1UL << 16,
///
/// The AI model can perform function calling, such as invoking APIs or executing functions.
///
FUNCTION_CALLING = 1UL << 17,
///
/// The AI model can perform web search to retrieve information from the internet.
///
WEB_SEARCH = 1UL << 18,
///
/// The AI model is used via the Chat Completion API.
///
CHAT_COMPLETION_API = 1UL << 19,
///
/// The AI model is used via the Responses API.
///
RESPONSES_API = 1UL << 20,
}