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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class SupportedLlmModelNames(str, enum.Enum):
    GPT_3_5_TURBO = "GPT_3_5_TURBO"
    GPT_4 = "GPT_4"
    GPT_4_TURBO = "GPT_4_TURBO"
    GPT_4_O = "GPT_4O"
    GPT_4_O_MINI = "GPT_4O_MINI"
    AZURE_OPENAI_GPT_3_5_TURBO = "AZURE_OPENAI_GPT_3_5_TURBO"
    AZURE_OPENAI_GPT_4_O = "AZURE_OPENAI_GPT_4O"
    AZURE_OPENAI_GPT_4_O_MINI = "AZURE_OPENAI_GPT_4O_MINI"
    AZURE_OPENAI_GPT_4 = "AZURE_OPENAI_GPT_4"
    CLAUDE_3_5_SONNET = "CLAUDE_3_5_SONNET"
    BEDROCK_CLAUDE_3_5_SONNET = "BEDROCK_CLAUDE_3_5_SONNET"
    VERTEX_AI_CLAUDE_3_5_SONNET = "VERTEX_AI_CLAUDE_3_5_SONNET"

    def visit(
        self,
        gpt_3_5_turbo: typing.Callable[[], T_Result],
        gpt_4: typing.Callable[[], T_Result],
        gpt_4_turbo: typing.Callable[[], T_Result],
        gpt_4_o: typing.Callable[[], T_Result],
        gpt_4_o_mini: typing.Callable[[], T_Result],
        azure_openai_gpt_3_5_turbo: typing.Callable[[], T_Result],
        azure_openai_gpt_4_o: typing.Callable[[], T_Result],
        azure_openai_gpt_4_o_mini: typing.Callable[[], T_Result],
        azure_openai_gpt_4: typing.Callable[[], T_Result],
        claude_3_5_sonnet: typing.Callable[[], T_Result],
        bedrock_claude_3_5_sonnet: typing.Callable[[], T_Result],
        vertex_ai_claude_3_5_sonnet: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is SupportedLlmModelNames.GPT_3_5_TURBO:
            return gpt_3_5_turbo()
        if self is SupportedLlmModelNames.GPT_4:
            return gpt_4()
        if self is SupportedLlmModelNames.GPT_4_TURBO:
            return gpt_4_turbo()
        if self is SupportedLlmModelNames.GPT_4_O:
            return gpt_4_o()
        if self is SupportedLlmModelNames.GPT_4_O_MINI:
            return gpt_4_o_mini()
        if self is SupportedLlmModelNames.AZURE_OPENAI_GPT_3_5_TURBO:
            return azure_openai_gpt_3_5_turbo()
        if self is SupportedLlmModelNames.AZURE_OPENAI_GPT_4_O:
            return azure_openai_gpt_4_o()
        if self is SupportedLlmModelNames.AZURE_OPENAI_GPT_4_O_MINI:
            return azure_openai_gpt_4_o_mini()
        if self is SupportedLlmModelNames.AZURE_OPENAI_GPT_4:
            return azure_openai_gpt_4()
        if self is SupportedLlmModelNames.CLAUDE_3_5_SONNET:
            return claude_3_5_sonnet()
        if self is SupportedLlmModelNames.BEDROCK_CLAUDE_3_5_SONNET:
            return bedrock_claude_3_5_sonnet()
        if self is SupportedLlmModelNames.VERTEX_AI_CLAUDE_3_5_SONNET:
            return vertex_ai_claude_3_5_sonnet()
