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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class ExtractModels(str, enum.Enum):
    GPT_41 = "gpt-4.1"
    GPT_41_MINI = "gpt-4.1-mini"
    GPT_41_NANO = "gpt-4.1-nano"
    GEMINI_20_FLASH = "gemini-2.0-flash"
    O_3_MINI = "o3-mini"
    GEMINI_25_FLASH = "gemini-2.5-flash"
    GEMINI_25_PRO = "gemini-2.5-pro"
    GEMINI_25_FLASH_LITE_PREVIEW_0617 = "gemini-2.5-flash-lite-preview-06-17"
    GPT_4_O = "gpt-4o"
    GPT_4_O_MINI = "gpt-4o-mini"

    def visit(
        self,
        gpt_41: typing.Callable[[], T_Result],
        gpt_41_mini: typing.Callable[[], T_Result],
        gpt_41_nano: typing.Callable[[], T_Result],
        gemini_20_flash: typing.Callable[[], T_Result],
        o_3_mini: typing.Callable[[], T_Result],
        gemini_25_flash: typing.Callable[[], T_Result],
        gemini_25_pro: typing.Callable[[], T_Result],
        gemini_25_flash_lite_preview_0617: typing.Callable[[], T_Result],
        gpt_4_o: typing.Callable[[], T_Result],
        gpt_4_o_mini: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is ExtractModels.GPT_41:
            return gpt_41()
        if self is ExtractModels.GPT_41_MINI:
            return gpt_41_mini()
        if self is ExtractModels.GPT_41_NANO:
            return gpt_41_nano()
        if self is ExtractModels.GEMINI_20_FLASH:
            return gemini_20_flash()
        if self is ExtractModels.O_3_MINI:
            return o_3_mini()
        if self is ExtractModels.GEMINI_25_FLASH:
            return gemini_25_flash()
        if self is ExtractModels.GEMINI_25_PRO:
            return gemini_25_pro()
        if self is ExtractModels.GEMINI_25_FLASH_LITE_PREVIEW_0617:
            return gemini_25_flash_lite_preview_0617()
        if self is ExtractModels.GPT_4_O:
            return gpt_4_o()
        if self is ExtractModels.GPT_4_O_MINI:
            return gpt_4_o_mini()
