# This file was auto-generated by Fern from our API Definition.

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class ProviderEnum(str, enum.Enum):
    """
    - `ANTHROPIC` - Anthropic
    - `AWS_BEDROCK` - AWS Bedrock
    - `AZURE_OPENAI` - Azure OpenAI
    - `COHERE` - Cohere
    - `GOOGLE` - Google
    - `HOSTED` - Hosted
    - `MOSAICML` - MosaicML
    - `OPENAI` - OpenAI
    - `FIREWORKS_AI` - Fireworks AI
    - `HUGGINGFACE` - HuggingFace
    - `MYSTIC` - Mystic
    - `PYQ` - Pyq
    - `REPLICATE` - Replicate
    """

    ANTHROPIC = "ANTHROPIC"
    AWS_BEDROCK = "AWS_BEDROCK"
    AZURE_OPENAI = "AZURE_OPENAI"
    COHERE = "COHERE"
    GOOGLE = "GOOGLE"
    HOSTED = "HOSTED"
    MOSAICML = "MOSAICML"
    OPENAI = "OPENAI"
    FIREWORKS_AI = "FIREWORKS_AI"
    HUGGINGFACE = "HUGGINGFACE"
    MYSTIC = "MYSTIC"
    PYQ = "PYQ"
    REPLICATE = "REPLICATE"

    def visit(
        self,
        anthropic: typing.Callable[[], T_Result],
        aws_bedrock: typing.Callable[[], T_Result],
        azure_openai: typing.Callable[[], T_Result],
        cohere: typing.Callable[[], T_Result],
        google: typing.Callable[[], T_Result],
        hosted: typing.Callable[[], T_Result],
        mosaicml: typing.Callable[[], T_Result],
        openai: typing.Callable[[], T_Result],
        fireworks_ai: typing.Callable[[], T_Result],
        huggingface: typing.Callable[[], T_Result],
        mystic: typing.Callable[[], T_Result],
        pyq: typing.Callable[[], T_Result],
        replicate: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is ProviderEnum.ANTHROPIC:
            return anthropic()
        if self is ProviderEnum.AWS_BEDROCK:
            return aws_bedrock()
        if self is ProviderEnum.AZURE_OPENAI:
            return azure_openai()
        if self is ProviderEnum.COHERE:
            return cohere()
        if self is ProviderEnum.GOOGLE:
            return google()
        if self is ProviderEnum.HOSTED:
            return hosted()
        if self is ProviderEnum.MOSAICML:
            return mosaicml()
        if self is ProviderEnum.OPENAI:
            return openai()
        if self is ProviderEnum.FIREWORKS_AI:
            return fireworks_ai()
        if self is ProviderEnum.HUGGINGFACE:
            return huggingface()
        if self is ProviderEnum.MYSTIC:
            return mystic()
        if self is ProviderEnum.PYQ:
            return pyq()
        if self is ProviderEnum.REPLICATE:
            return replicate()
