language_models.rs

 1use std::sync::Arc;
 2
 3use client::{Client, UserStore};
 4use fs::Fs;
 5use gpui::{App, Context, Entity};
 6use language_model::{LanguageModelProviderId, LanguageModelRegistry, ZED_CLOUD_PROVIDER_ID};
 7use provider::deepseek::DeepSeekLanguageModelProvider;
 8
 9pub mod provider;
10mod settings;
11
12use crate::provider::anthropic::AnthropicLanguageModelProvider;
13use crate::provider::bedrock::BedrockLanguageModelProvider;
14use crate::provider::cloud::CloudLanguageModelProvider;
15use crate::provider::copilot_chat::CopilotChatLanguageModelProvider;
16use crate::provider::google::GoogleLanguageModelProvider;
17use crate::provider::lmstudio::LmStudioLanguageModelProvider;
18use crate::provider::mistral::MistralLanguageModelProvider;
19use crate::provider::ollama::OllamaLanguageModelProvider;
20use crate::provider::open_ai::OpenAiLanguageModelProvider;
21pub use crate::settings::*;
22
23pub fn init(user_store: Entity<UserStore>, client: Arc<Client>, fs: Arc<dyn Fs>, cx: &mut App) {
24    crate::settings::init(fs, cx);
25    let registry = LanguageModelRegistry::global(cx);
26    registry.update(cx, |registry, cx| {
27        register_language_model_providers(registry, user_store, client, cx);
28    });
29}
30
31fn register_language_model_providers(
32    registry: &mut LanguageModelRegistry,
33    user_store: Entity<UserStore>,
34    client: Arc<Client>,
35    cx: &mut Context<LanguageModelRegistry>,
36) {
37    use feature_flags::FeatureFlagAppExt;
38
39    registry.register_provider(
40        AnthropicLanguageModelProvider::new(client.http_client(), cx),
41        cx,
42    );
43    registry.register_provider(
44        OpenAiLanguageModelProvider::new(client.http_client(), cx),
45        cx,
46    );
47    registry.register_provider(
48        OllamaLanguageModelProvider::new(client.http_client(), cx),
49        cx,
50    );
51    registry.register_provider(
52        LmStudioLanguageModelProvider::new(client.http_client(), cx),
53        cx,
54    );
55    registry.register_provider(
56        DeepSeekLanguageModelProvider::new(client.http_client(), cx),
57        cx,
58    );
59    registry.register_provider(
60        GoogleLanguageModelProvider::new(client.http_client(), cx),
61        cx,
62    );
63    registry.register_provider(
64        MistralLanguageModelProvider::new(client.http_client(), cx),
65        cx,
66    );
67    registry.register_provider(
68        BedrockLanguageModelProvider::new(client.http_client(), cx),
69        cx,
70    );
71    registry.register_provider(CopilotChatLanguageModelProvider::new(cx), cx);
72
73    cx.observe_flag::<feature_flags::LanguageModels, _>(move |enabled, cx| {
74        let user_store = user_store.clone();
75        let client = client.clone();
76        LanguageModelRegistry::global(cx).update(cx, move |registry, cx| {
77            if enabled {
78                registry.register_provider(
79                    CloudLanguageModelProvider::new(user_store.clone(), client.clone(), cx),
80                    cx,
81                );
82            } else {
83                registry.unregister_provider(
84                    LanguageModelProviderId::from(ZED_CLOUD_PROVIDER_ID.to_string()),
85                    cx,
86                );
87            }
88        });
89    })
90    .detach();
91}