Renew cache ttl on etag match (#9174)

so we don't do unnecessary fetches
This commit is contained in:
Ahmed Ibrahim
2026-01-13 17:21:41 -08:00
committed by GitHub
Unverified
parent c96c26cf5b
commit 4d787a2cc2
4 changed files with 198 additions and 0 deletions
+10
View File
@@ -53,6 +53,16 @@ impl ModelsCacheManager {
}
}
/// Renew the cache TTL by updating the fetched_at timestamp to now.
pub(crate) async fn renew_cache_ttl(&self) -> io::Result<()> {
let mut cache = match self.load().await? {
Some(cache) => cache,
None => return Err(io::Error::new(ErrorKind::NotFound, "cache not found")),
};
cache.fetched_at = Utc::now();
self.save_internal(&cache).await
}
async fn load(&self) -> io::Result<Option<ModelsCache>> {
match fs::read(&self.cache_path).await {
Ok(contents) => {
@@ -156,6 +156,9 @@ impl ModelsManager {
pub(crate) async fn refresh_if_new_etag(&self, etag: String, config: &Config) {
let current_etag = self.get_etag().await;
if current_etag.clone().is_some() && current_etag.as_deref() == Some(etag.as_str()) {
if let Err(err) = self.cache_manager.renew_cache_ttl().await {
error!("failed to renew cache TTL: {err}");
}
return;
}
if let Err(err) = self