mistralrs_quant/utils/
log.rs

1use std::{
2    hash::{DefaultHasher, Hash, Hasher},
3    sync::{LazyLock, Mutex},
4};
5
6use tracing::{info, warn};
7
8static CACHED_INFO: LazyLock<Mutex<Vec<u64>>> = LazyLock::new(|| Mutex::new(Vec::new()));
9static CACHED_WARN: LazyLock<Mutex<Vec<u64>>> = LazyLock::new(|| Mutex::new(Vec::new()));
10
11pub fn once_log_info<M: AsRef<str>>(msg: M) {
12    let msg = msg.as_ref();
13    let mut hasher = DefaultHasher::new();
14    msg.hash(&mut hasher);
15    let hash = hasher.finish();
16
17    let mut log = CACHED_INFO.lock().expect("Poisoned Lock");
18    if !log.contains(&hash) {
19        info!("{msg}");
20        log.push(hasher.finish());
21    } else {
22        log.push(hasher.finish());
23    }
24}
25
26pub fn once_log_warn<M: AsRef<str>>(msg: M) {
27    let msg = msg.as_ref();
28    let mut hasher = DefaultHasher::new();
29    msg.hash(&mut hasher);
30    let hash = hasher.finish();
31
32    let mut log = CACHED_WARN.lock().expect("Poisoned Lock");
33    if !log.contains(&hash) {
34        warn!("{msg}");
35        log.push(hasher.finish());
36    } else {
37        log.push(hasher.finish());
38    }
39}