mod.rs

 1pub mod cloud_model;
 2
 3pub use anthropic::Model as AnthropicModel;
 4pub use cloud_model::*;
 5pub use ollama::Model as OllamaModel;
 6pub use open_ai::Model as OpenAiModel;
 7
 8use serde::{Deserialize, Serialize};
 9
10#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
11pub enum LanguageModel {
12    Cloud(CloudModel),
13    OpenAi(OpenAiModel),
14    Anthropic(AnthropicModel),
15    Ollama(OllamaModel),
16}
17
18impl Default for LanguageModel {
19    fn default() -> Self {
20        LanguageModel::Cloud(CloudModel::default())
21    }
22}
23
24impl LanguageModel {
25    pub fn telemetry_id(&self) -> String {
26        match self {
27            LanguageModel::OpenAi(model) => format!("openai/{}", model.id()),
28            LanguageModel::Anthropic(model) => format!("anthropic/{}", model.id()),
29            LanguageModel::Cloud(model) => format!("zed.dev/{}", model.id()),
30            LanguageModel::Ollama(model) => format!("ollama/{}", model.id()),
31        }
32    }
33
34    pub fn display_name(&self) -> String {
35        match self {
36            LanguageModel::OpenAi(model) => model.display_name().into(),
37            LanguageModel::Anthropic(model) => model.display_name().into(),
38            LanguageModel::Cloud(model) => model.display_name().into(),
39            LanguageModel::Ollama(model) => model.display_name().into(),
40        }
41    }
42
43    pub fn max_token_count(&self) -> usize {
44        match self {
45            LanguageModel::OpenAi(model) => model.max_token_count(),
46            LanguageModel::Anthropic(model) => model.max_token_count(),
47            LanguageModel::Cloud(model) => model.max_token_count(),
48            LanguageModel::Ollama(model) => model.max_token_count(),
49        }
50    }
51
52    pub fn id(&self) -> &str {
53        match self {
54            LanguageModel::OpenAi(model) => model.id(),
55            LanguageModel::Anthropic(model) => model.id(),
56            LanguageModel::Cloud(model) => model.id(),
57            LanguageModel::Ollama(model) => model.id(),
58        }
59    }
60}