File size: 2,157 Bytes
9f80f96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5df0d69
9f80f96
 
 
 
 
 
2afe335
d4cab2b
309d438
 
 
2afe335
5df0d69
309d438
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9f80f96
 
 
 
 
309d438
 
 
 
9f80f96
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from enum import Enum

class OpenAIModel(str, Enum):
    gpt_5_1 = "gpt-5.1"
    gpt_4o = "gpt-4o"
    gpt_4o_mini = "gpt-4o-mini"
    gpt_4_1 = "gpt-4.1"
    gpt_4_1_mini = "gpt-4.1-mini"
    gpt_4_turbo = "gpt-4-turbo"
    gpt_3_5_turbo = "gpt-3.5-turbo-0125"


class AnthropicModel(str, Enum):
    claude_3_5_sonnet = "claude-3-5-sonnet-20240620"
    claude_3_5_haiku = "claude-3-5-haiku-20241022"
    claude_3_opus = "claude-3-opus-20240229"


class GeminiModel(str, Enum):
    gemini_3_pro_preview = "gemini-3-pro-preview"
    gemini_2_5_flash = "gemini-2.5-flash"
    gemini_2_5_pro = "gemini-2.5-pro"


class OSSModel(str, Enum):
    llama3_70b_instruct = "meta-llama/Meta-Llama-3-70B-Instruct"
    llama3_8b_instruct = "meta-llama/Meta-Llama-3.1-8B-Instruct"
    qwen2_7b_instruct = "Qwen/Qwen2.5-7B-Instruct"
    deepseek_v3_terminus = "deepseek-ai/DeepSeek-V3.1-Terminus"
    deepseek_r1 = "deepseek-ai/DeepSeek-R1"
    gpt_oss_120b = "openai/gpt-oss-120b"
    kimi_k2_thinking = "moonshotai/Kimi-K2-Thinking",
    qwen_3_coder = 'Qwen/Qwen3-Coder-480B-A35B-Instruct'

class EnumNamespace:
    """Proxy to expose Enum members as attribute-accessed .value strings."""

    def __init__(self, enum_cls: type[Enum]):
        self._enum_cls = enum_cls

    def __getattr__(self, item: str) -> str:
        try:
            return getattr(self._enum_cls, item).value
        except AttributeError as exc:
            raise AttributeError(f"{self._enum_cls.__name__} has no member '{item}'") from exc

    def __dir__(self) -> list[str]:
        return [name for name in self._enum_cls.__members__]

    def members(self) -> list[Enum]:
        """Return the actual Enum members if needed."""
        return list(self._enum_cls)


class LLMModelType:
    """Namespaced access to curated model enums, e.g. LLMModelType.openai.gpt_5_1."""

    openai = EnumNamespace(OpenAIModel)
    claude = EnumNamespace(AnthropicModel)
    gemini = EnumNamespace(GeminiModel)
    open_source = EnumNamespace(OSSModel)

class LLMProviderType(str, Enum):
    OPENAI = "openai"
    GEMINI = "gemini"
    CLAUDE = "claude"
    HF = "hf"
    OPENROUTER = "openrouter"