agentik_sdk/types/
models.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
5pub enum Model {
6 #[serde(rename = "claude-3-5-sonnet-latest")]
8 Claude3_5SonnetLatest,
9 #[serde(rename = "claude-3-5-sonnet-20241022")]
10 Claude3_5Sonnet20241022,
11 #[serde(rename = "claude-3-5-sonnet-20240620")]
12 Claude3_5Sonnet20240620,
13
14 #[serde(rename = "claude-3-5-haiku-latest")]
16 Claude3_5HaikuLatest,
17 #[serde(rename = "claude-3-5-haiku-20241022")]
18 Claude3_5Haiku20241022,
19
20 #[serde(rename = "claude-3-opus-latest")]
22 Claude3OpusLatest,
23 #[serde(rename = "claude-3-opus-20240229")]
24 Claude3Opus20240229,
25
26 #[serde(rename = "claude-3-sonnet-20240229")]
28 Claude3Sonnet20240229,
29
30 #[serde(rename = "claude-3-haiku-20240307")]
32 Claude3Haiku20240307,
33
34 #[serde(rename = "claude-2.1")]
36 Claude2_1,
37 #[serde(rename = "claude-2.0")]
38 Claude2_0,
39}
40
41impl Model {
42 pub fn as_str(&self) -> &'static str {
44 match self {
45 Self::Claude3_5SonnetLatest => "claude-3-5-sonnet-latest",
46 Self::Claude3_5Sonnet20241022 => "claude-3-5-sonnet-20241022",
47 Self::Claude3_5Sonnet20240620 => "claude-3-5-sonnet-20240620",
48 Self::Claude3_5HaikuLatest => "claude-3-5-haiku-latest",
49 Self::Claude3_5Haiku20241022 => "claude-3-5-haiku-20241022",
50 Self::Claude3OpusLatest => "claude-3-opus-latest",
51 Self::Claude3Opus20240229 => "claude-3-opus-20240229",
52 Self::Claude3Sonnet20240229 => "claude-3-sonnet-20240229",
53 Self::Claude3Haiku20240307 => "claude-3-haiku-20240307",
54 Self::Claude2_1 => "claude-2.1",
55 Self::Claude2_0 => "claude-2.0",
56 }
57 }
58
59 pub fn family(&self) -> &'static str {
61 match self {
62 Self::Claude3_5SonnetLatest
63 | Self::Claude3_5Sonnet20241022
64 | Self::Claude3_5Sonnet20240620
65 | Self::Claude3Sonnet20240229 => "sonnet",
66 Self::Claude3_5HaikuLatest
67 | Self::Claude3_5Haiku20241022
68 | Self::Claude3Haiku20240307 => "haiku",
69 Self::Claude3OpusLatest | Self::Claude3Opus20240229 => "opus",
70 Self::Claude2_1 | Self::Claude2_0 => "claude-2",
71 }
72 }
73
74 pub fn supports_vision(&self) -> bool {
76 match self {
77 Self::Claude2_1 | Self::Claude2_0 => false,
78 _ => true,
79 }
80 }
81
82 pub fn supports_tools(&self) -> bool {
84 match self {
85 Self::Claude2_1 | Self::Claude2_0 => false,
86 _ => true,
87 }
88 }
89}
90
91impl std::fmt::Display for Model {
92 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
93 write!(f, "{}", self.as_str())
94 }
95}
96
97impl From<Model> for String {
98 fn from(model: Model) -> String {
99 model.as_str().to_string()
100 }
101}
102