use std::path::PathBuf;
const APP_GROUP_IDENTIFIER: &str = "group.com.ondeinference.apps";
pub fn setup_shared_model_cache() {
if let Some(shared_dir) = resolve_shared_container() {
let models_home = shared_dir.join("models");
let model_hub = models_home.join("hub");
if let Err(error) = std::fs::create_dir_all(&model_hub) {
log::warn!(
"Failed to create shared model cache at {}: {error} — falling back to default",
model_hub.display()
);
return;
}
if std::env::var("HF_HOME").is_err() {
unsafe { std::env::set_var("HF_HOME", &models_home) };
log::info!("HF_HOME → shared App Group: {}", models_home.display());
} else {
log::debug!(
"HF_HOME already set by user: {}",
std::env::var("HF_HOME").unwrap_or_default()
);
}
if std::env::var("HF_HUB_CACHE").is_err() {
unsafe { std::env::set_var("HF_HUB_CACHE", &model_hub) };
log::info!("HF_HUB_CACHE → shared App Group: {}", model_hub.display());
}
} else {
log::debug!("Shared App Group container not available — using default HF cache");
}
}
#[cfg(target_os = "macos")]
fn resolve_shared_container() -> Option<PathBuf> {
let home = std::env::var("HOME").ok()?;
let container = PathBuf::from(home)
.join("Library")
.join("Group Containers")
.join(APP_GROUP_IDENTIFIER);
if container.is_dir() {
log::debug!("App Group container found: {}", container.display());
Some(container)
} else {
log::debug!(
"App Group container does not exist at {} — \
has siGit desktop been launched at least once?",
container.display()
);
None
}
}
#[cfg(not(target_os = "macos"))]
fn resolve_shared_container() -> Option<PathBuf> {
None
}