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
This commit is contained in:
Marshall Bowers 2024-02-29 23:37:20 -05:00 committed by GitHub
parent eb1ab69606
commit 0d0ce95eae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 7 additions and 9 deletions

1
Cargo.lock generated
View file

@ -84,7 +84,6 @@ dependencies = [
"gpui", "gpui",
"isahc", "isahc",
"language", "language",
"lazy_static",
"log", "log",
"matrixmultiply", "matrixmultiply",
"ordered-float 2.10.0", "ordered-float 2.10.0",

View file

@ -20,7 +20,6 @@ futures.workspace = true
gpui.workspace = true gpui.workspace = true
isahc.workspace = true isahc.workspace = true
language.workspace = true language.workspace = true
lazy_static.workspace = true
log.workspace = true log.workspace = true
matrixmultiply = "0.3.7" matrixmultiply = "0.3.7"
ordered-float.workspace = true ordered-float.workspace = true

View file

@ -8,7 +8,6 @@ use gpui::BackgroundExecutor;
use isahc::http::StatusCode; use isahc::http::StatusCode;
use isahc::prelude::Configurable; use isahc::prelude::Configurable;
use isahc::{AsyncBody, Response}; use isahc::{AsyncBody, Response};
use lazy_static::lazy_static;
use parking_lot::{Mutex, RwLock}; use parking_lot::{Mutex, RwLock};
use parse_duration::parse; use parse_duration::parse;
use postage::watch; use postage::watch;
@ -16,7 +15,7 @@ use serde::{Deserialize, Serialize};
use serde_json; use serde_json;
use std::env; use std::env;
use std::ops::Add; use std::ops::Add;
use std::sync::Arc; use std::sync::{Arc, OnceLock};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use tiktoken_rs::{cl100k_base, CoreBPE}; use tiktoken_rs::{cl100k_base, CoreBPE};
use util::http::{HttpClient, Request}; use util::http::{HttpClient, Request};
@ -29,8 +28,9 @@ use crate::providers::open_ai::OpenAiLanguageModel;
use crate::providers::open_ai::OPEN_AI_API_URL; use crate::providers::open_ai::OPEN_AI_API_URL;
lazy_static! { pub(crate) fn open_ai_bpe_tokenizer() -> &'static CoreBPE {
pub(crate) static ref OPEN_AI_BPE_TOKENIZER: CoreBPE = cl100k_base().unwrap(); static OPEN_AI_BPE_TOKENIZER: OnceLock<CoreBPE> = OnceLock::new();
OPEN_AI_BPE_TOKENIZER.get_or_init(|| cl100k_base().unwrap())
} }
#[derive(Clone)] #[derive(Clone)]

View file

@ -3,7 +3,7 @@ use tiktoken_rs::CoreBPE;
use crate::models::{LanguageModel, TruncationDirection}; use crate::models::{LanguageModel, TruncationDirection};
use super::OPEN_AI_BPE_TOKENIZER; use super::open_ai_bpe_tokenizer;
#[derive(Clone)] #[derive(Clone)]
pub struct OpenAiLanguageModel { pub struct OpenAiLanguageModel {
@ -13,8 +13,8 @@ pub struct OpenAiLanguageModel {
impl OpenAiLanguageModel { impl OpenAiLanguageModel {
pub fn load(model_name: &str) -> Self { pub fn load(model_name: &str) -> Self {
let bpe = let bpe = tiktoken_rs::get_bpe_from_model(model_name)
tiktoken_rs::get_bpe_from_model(model_name).unwrap_or(OPEN_AI_BPE_TOKENIZER.to_owned()); .unwrap_or(open_ai_bpe_tokenizer().to_owned());
OpenAiLanguageModel { OpenAiLanguageModel {
name: model_name.to_string(), name: model_name.to_string(),
bpe: Some(bpe), bpe: Some(bpe),