from enum import StrEnum


class OpenAIModels(StrEnum):
    """Supported OpenAI model identifiers."""

    # GPT-4o models
    gpt_4o_2024_05_13 = "gpt-4o-2024-05-13"
    gpt_4o_2024_08_06 = "gpt-4o-2024-08-06"
    gpt_4o_2024_11_20 = "gpt-4o-2024-11-20"
    gpt_4o_mini_2024_07_18 = "gpt-4o-mini-2024-07-18"

    # GPT-4.1 models
    gpt_4_1_2025_04_14 = "gpt-4.1-2025-04-14"
    gpt_4_1_mini_2025_04_14 = "gpt-4.1-mini-2025-04-14"
    gpt_4_1_nano_2025_04_14 = "gpt-4.1-nano-2025-04-14"

    # GPT-5 models
    gpt_5_2025_08_07 = "gpt-5-2025-08-07"
    gpt_5_chat_2025_08_07 = "gpt-5-chat-2025-08-07"
    gpt_5_mini_2025_08_07 = "gpt-5-mini-2025-08-07"
    gpt_5_nano_2025_08_07 = "gpt-5-nano-2025-08-07"

    # GPT-5.1 models
    gpt_5_1_2025_11_13 = "gpt-5.1-2025-11-13"

    # GPT-5.2 models
    gpt_5_2_2025_12_11 = "gpt-5.2-2025-12-11"


class GeminiModels(StrEnum):
    """Supported Google Gemini model identifiers."""

    # Gemini 2 models
    gemini_2_5_pro = "gemini-2.5-pro"
    gemini_2_5_flash = "gemini-2.5-flash"
    gemini_2_0_flash_001 = "gemini-2.0-flash-001"

    # Gemini 3 models
    gemini_3_pro_preview = "gemini-3-pro-preview"


class BedrockModels(StrEnum):
    """Supported AWS Bedrock model identifiers."""

    # Claude 3.7 models
    anthropic_claude_3_7_sonnet = "anthropic.claude-3-7-sonnet-20250219-v1:0"

    # Claude 4 models
    anthropic_claude_sonnet_4 = "anthropic.claude-sonnet-4-20250514-v1:0"

    # Claude 4.5 models
    anthropic_claude_sonnet_4_5 = "anthropic.claude-sonnet-4-5-20250929-v1:0"
    anthropic_claude_haiku_4_5 = "anthropic.claude-haiku-4-5-20251001-v1:0"
