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}