History

Replace `lazy_static!` with `OnceLock` in `ai` crate (#8647)

This PR replaces a `lazy_static!` usage in the `ai` crate with `OnceLock` from the standard library. This allows us to drop the `lazy_static` dependency from this crate. Release Notes: - N/A

Marshall Bowers committed 2 years ago

Commit 0d0ce951 parent eb1ab694 files · +7 −9Browse files

Unified · Split

4 files
  1. Cargo.lock +0 −1
  2. crates/ai/Cargo.toml +0 −1
  3. crates/ai/src/providers/open_ai/embedding.rs +4 −4
  4. crates/ai/src/providers/open_ai/model.rs +3 −3
Cargo.lock+0−1
@@ -84,7 +84,6 @@ dependencies = [ · 83 unmodified lines
84 "gpui",84 "gpui",
85 "isahc",85 "isahc",
86 "language",86 "language",
87 "lazy_static",
88 "log",87 "log",
89 "matrixmultiply",88 "matrixmultiply",
90 "ordered-float 2.10.0",89 "ordered-float 2.10.0",
crates/ai/Cargo.toml+0−1
@@ -20,7 +20,6 @@ futures.workspace = true · 19 unmodified lines
20gpui.workspace = true20gpui.workspace = true
21isahc.workspace = true21isahc.workspace = true
22language.workspace = true22language.workspace = true
23lazy_static.workspace = true
24log.workspace = true23log.workspace = true
25matrixmultiply = "0.3.7"24matrixmultiply = "0.3.7"
26ordered-float.workspace = true25ordered-float.workspace = true
crates/ai/src/providers/open_ai/embedding.rs+4−4
@@ -8,7 +8,6 @@ use gpui::BackgroundExecutor; · 7 unmodified lines
8use isahc::http::StatusCode;8use isahc::http::StatusCode;
9use isahc::prelude::Configurable;9use isahc::prelude::Configurable;
10use isahc::{AsyncBody, Response};10use isahc::{AsyncBody, Response};
11use lazy_static::lazy_static;
12use parking_lot::{Mutex, RwLock};11use parking_lot::{Mutex, RwLock};
13use parse_duration::parse;12use parse_duration::parse;
14use postage::watch;13use postage::watch;
@@ -16,7 +15,7 @@ use serde::{Deserialize, Serialize}; · 1 unmodified line
16use serde_json;15use serde_json;
17use std::env;16use std::env;
18use std::ops::Add;17use std::ops::Add;
19use std::sync::Arc;18use std::sync::{Arc, OnceLock};
20use std::time::{Duration, Instant};19use std::time::{Duration, Instant};
21use tiktoken_rs::{cl100k_base, CoreBPE};20use tiktoken_rs::{cl100k_base, CoreBPE};
22use util::http::{HttpClient, Request};21use util::http::{HttpClient, Request};
@@ -29,8 +28,9 @@ use crate::providers::open_ai::OpenAiLanguageModel; · 6 unmodified lines
29 28
30use crate::providers::open_ai::OPEN_AI_API_URL;29use crate::providers::open_ai::OPEN_AI_API_URL;
31 30
32lazy_static! {31pub(crate) fn open_ai_bpe_tokenizer() -> &'static CoreBPE {
33 pub(crate) static ref OPEN_AI_BPE_TOKENIZER: CoreBPE = cl100k_base().unwrap();32 static OPEN_AI_BPE_TOKENIZER: OnceLock<CoreBPE> = OnceLock::new();
33 OPEN_AI_BPE_TOKENIZER.get_or_init(|| cl100k_base().unwrap())
34}34}
35 35
36#[derive(Clone)]36#[derive(Clone)]
crates/ai/src/providers/open_ai/model.rs+3−3
@@ -3,7 +3,7 @@ use tiktoken_rs::CoreBPE; · 2 unmodified lines
3 3
4use crate::models::{LanguageModel, TruncationDirection};4use crate::models::{LanguageModel, TruncationDirection};
5 5
6use super::OPEN_AI_BPE_TOKENIZER;6use super::open_ai_bpe_tokenizer;
7 7
8#[derive(Clone)]8#[derive(Clone)]
9pub struct OpenAiLanguageModel {9pub struct OpenAiLanguageModel {
@@ -13,8 +13,8 @@ pub struct OpenAiLanguageModel { · 3 unmodified lines
13 13
14impl OpenAiLanguageModel {14impl OpenAiLanguageModel {
15 pub fn load(model_name: &str) -> Self {15 pub fn load(model_name: &str) -> Self {
16 let bpe =16 let bpe = tiktoken_rs::get_bpe_from_model(model_name)
17 tiktoken_rs::get_bpe_from_model(model_name).unwrap_or(OPEN_AI_BPE_TOKENIZER.to_owned());17 .unwrap_or(open_ai_bpe_tokenizer().to_owned());
18 OpenAiLanguageModel {18 OpenAiLanguageModel {
19 name: model_name.to_string(),19 name: model_name.to_string(),
20 bpe: Some(bpe),20 bpe: Some(bpe),

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t