cloud_model.rs

 1pub use anthropic::Model as AnthropicModel;
 2pub use ollama::Model as OllamaModel;
 3pub use open_ai::Model as OpenAiModel;
 4use schemars::JsonSchema;
 5use serde::{Deserialize, Serialize};
 6use strum::EnumIter;
 7
 8#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize, JsonSchema, EnumIter)]
 9pub enum CloudModel {
10    #[serde(rename = "gpt-3.5-turbo")]
11    Gpt3Point5Turbo,
12    #[serde(rename = "gpt-4")]
13    Gpt4,
14    #[serde(rename = "gpt-4-turbo-preview")]
15    Gpt4Turbo,
16    #[serde(rename = "gpt-4o")]
17    #[default]
18    Gpt4Omni,
19    #[serde(rename = "gpt-4o-mini")]
20    Gpt4OmniMini,
21    #[serde(rename = "claude-3-5-sonnet")]
22    Claude3_5Sonnet,
23    #[serde(rename = "claude-3-opus")]
24    Claude3Opus,
25    #[serde(rename = "claude-3-sonnet")]
26    Claude3Sonnet,
27    #[serde(rename = "claude-3-haiku")]
28    Claude3Haiku,
29    #[serde(rename = "gemini-1.5-pro")]
30    Gemini15Pro,
31    #[serde(rename = "gemini-1.5-flash")]
32    Gemini15Flash,
33    #[serde(rename = "custom")]
34    Custom {
35        name: String,
36        max_tokens: Option<usize>,
37    },
38}
39
40impl CloudModel {
41    pub fn id(&self) -> &str {
42        match self {
43            Self::Gpt3Point5Turbo => "gpt-3.5-turbo",
44            Self::Gpt4 => "gpt-4",
45            Self::Gpt4Turbo => "gpt-4-turbo-preview",
46            Self::Gpt4Omni => "gpt-4o",
47            Self::Gpt4OmniMini => "gpt-4o-mini",
48            Self::Claude3_5Sonnet => "claude-3-5-sonnet",
49            Self::Claude3Opus => "claude-3-opus",
50            Self::Claude3Sonnet => "claude-3-sonnet",
51            Self::Claude3Haiku => "claude-3-haiku",
52            Self::Gemini15Pro => "gemini-1.5-pro",
53            Self::Gemini15Flash => "gemini-1.5-flash",
54            Self::Custom { name, .. } => name,
55        }
56    }
57
58    pub fn display_name(&self) -> &str {
59        match self {
60            Self::Gpt3Point5Turbo => "GPT 3.5 Turbo",
61            Self::Gpt4 => "GPT 4",
62            Self::Gpt4Turbo => "GPT 4 Turbo",
63            Self::Gpt4Omni => "GPT 4 Omni",
64            Self::Gpt4OmniMini => "GPT 4 Omni Mini",
65            Self::Claude3_5Sonnet => "Claude 3.5 Sonnet",
66            Self::Claude3Opus => "Claude 3 Opus",
67            Self::Claude3Sonnet => "Claude 3 Sonnet",
68            Self::Claude3Haiku => "Claude 3 Haiku",
69            Self::Gemini15Pro => "Gemini 1.5 Pro",
70            Self::Gemini15Flash => "Gemini 1.5 Flash",
71            Self::Custom { name, .. } => name,
72        }
73    }
74
75    pub fn max_token_count(&self) -> usize {
76        match self {
77            Self::Gpt3Point5Turbo => 2048,
78            Self::Gpt4 => 4096,
79            Self::Gpt4Turbo | Self::Gpt4Omni => 128000,
80            Self::Gpt4OmniMini => 128000,
81            Self::Claude3_5Sonnet
82            | Self::Claude3Opus
83            | Self::Claude3Sonnet
84            | Self::Claude3Haiku => 200000,
85            Self::Gemini15Pro => 128000,
86            Self::Gemini15Flash => 32000,
87            Self::Custom { max_tokens, .. } => max_tokens.unwrap_or(200_000),
88        }
89    }
90}