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, }