claude_agent/models/
family.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
4#[serde(rename_all = "lowercase")]
5pub enum ModelFamily {
6 Opus,
7 Sonnet,
8 Haiku,
9}
10
11impl ModelFamily {
12 pub fn aliases(&self) -> &'static [&'static str] {
13 match self {
14 Self::Opus => &["opus", "reasoning", "large"],
15 Self::Sonnet => &["sonnet", "default", "primary", "balanced"],
16 Self::Haiku => &["haiku", "small", "fast"],
17 }
18 }
19
20 pub fn default_role(&self) -> ModelRole {
21 match self {
22 Self::Opus => ModelRole::Reasoning,
23 Self::Sonnet => ModelRole::Primary,
24 Self::Haiku => ModelRole::Small,
25 }
26 }
27}
28
29#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
30#[serde(rename_all = "lowercase")]
31pub enum ModelRole {
32 Primary,
33 Small,
34 Reasoning,
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_family_aliases() {
43 assert!(ModelFamily::Sonnet.aliases().contains(&"sonnet"));
44 assert!(ModelFamily::Haiku.aliases().contains(&"fast"));
45 assert!(ModelFamily::Opus.aliases().contains(&"reasoning"));
46 }
47
48 #[test]
49 fn test_default_roles() {
50 assert_eq!(ModelFamily::Sonnet.default_role(), ModelRole::Primary);
51 assert_eq!(ModelFamily::Haiku.default_role(), ModelRole::Small);
52 assert_eq!(ModelFamily::Opus.default_role(), ModelRole::Reasoning);
53 }
54}