feat: show model last updated dates

This commit is contained in:
Hermes Agent
2026-08-26 01:05:00 +10:00
parent a79f033c54
commit 73d0334727
6 changed files with 15 additions and 5 deletions
+4 -1
View File
@@ -47,7 +47,10 @@ The Available downloads controls support:
Popularity and date ordering use upstream metadata only; the plugin does not invent popularity, dates, RAM requirements, or token metrics. Popularity and date ordering use upstream metadata only; the plugin does not invent popularity, dates, RAM requirements, or token metrics.
## Disk telemetry and navigation layout ## Last updated dates
Model cards now show a **Last updated** metadata field for installed, popular, and available models. Installed timestamps come from the selected Ollama endpoint. Public catalog-family timestamps come from the Ollama family page's published update timestamp. When Ollama does not publish a source timestamp, the card explicitly shows **Last updated unavailable** rather than inferring a date.
The runtime panel and top navigation now show live disk usage for the filesystem visible to the dashboard process: used percentage, used bytes, and free bytes. This is intentionally scoped to the dashboard-visible filesystem; if Ollama runs in a separate container or host, its model-volume disk usage may not be the same filesystem. The runtime panel and top navigation now show live disk usage for the filesystem visible to the dashboard process: used percentage, used bytes, and free bytes. This is intentionally scoped to the dashboard-visible filesystem; if Ollama runs in a separate container or host, its model-volume disk usage may not be the same filesystem.
+1 -1
View File
@@ -147,7 +147,7 @@
h("div", null, h("small", null, "Type"), h("strong", null, model.architecture || "Unknown")), h("div", null, h("small", null, "Type"), h("strong", null, model.architecture || "Unknown")),
h("div", null, h("small", null, "Parameters"), h("strong", null, model.parameter_size || "Unknown"), model.activated_parameter_size && h("small", { className: "ollama-activated-parameters" }, model.activated_parameter_size, " activated")) h("div", null, h("small", null, "Parameters"), h("strong", null, model.parameter_size || "Unknown"), model.activated_parameter_size && h("small", { className: "ollama-activated-parameters" }, model.activated_parameter_size, " activated"))
), ),
h("div", { className: "ollama-card-meta" }, h("span", null, (model.quantization || "Unknown") + " · " + (model.format || "Unknown")), model.context_length && h("span", null, "Context " + Number(model.context_length).toLocaleString()), installed && model.modified_at && h("span", null, "Updated " + fmtDate(model.modified_at))), h("div", { className: "ollama-card-meta" }, h("span", null, (model.quantization || "Unknown") + " · " + (model.format || "Unknown")), model.context_length && h("span", null, "Context " + Number(model.context_length).toLocaleString()), model.modified_at ? h("span", null, "Last updated " + fmtDate(model.modified_at)) : h("span", { className: "ollama-date-unavailable" }, "Last updated unavailable")),
h("div", { className: "ollama-strengths" }, h("strong", null, "Excels at: "), (model.strengths || []).join(" · ")), h("div", { className: "ollama-strengths" }, h("strong", null, "Excels at: "), (model.strengths || []).join(" · ")),
installed && h(VariantTable, { model: model, action: action, busy: busy }), installed && h(VariantTable, { model: model, action: action, busy: busy }),
h(Button, { className: "ollama-details-toggle", onClick: function () { setOpen(!open); } }, open ? "Hide capability breakdown" : "Show capability breakdown"), h(Button, { className: "ollama-details-toggle", onClick: function () { setOpen(!open); } }, open ? "Hide capability breakdown" : "Show capability breakdown"),
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -3,7 +3,7 @@
"label": "Ollama Models", "label": "Ollama Models",
"description": "Inspect, manage, and chat with local Ollama models, including shared persistent conversations, performance metrics, images, PDFs, URLs, and live memory telemetry.", "description": "Inspect, manage, and chat with local Ollama models, including shared persistent conversations, performance metrics, images, PDFs, URLs, and live memory telemetry.",
"icon": "Cpu", "icon": "Cpu",
"version": "1.5.20", "version": "1.5.21",
"tab": {"path": "/ollama-manager", "position": "after:models"}, "tab": {"path": "/ollama-manager", "position": "after:models"},
"entry": "dist/index.js", "entry": "dist/index.js",
"css": "dist/style.css", "css": "dist/style.css",
+7
View File
@@ -917,6 +917,11 @@ def _page_description(html: str) -> str:
return "" return ""
def _page_updated_at(html: str) -> str | None:
match = re.search(r'<span[^>]+title=["\']([^"\']+)["\'][^>]*>[\s\S]{0,1200}?\bUpdated\b', html, re.I)
return unescape(match.group(1)).strip() if match else None
def _parameter_hints(text: str) -> list[tuple[float, float]]: def _parameter_hints(text: str) -> list[tuple[float, float]]:
hints: set[tuple[float, float]] = set() hints: set[tuple[float, float]] = set()
for match in re.finditer(r"\b([0-9]+(?:\.[0-9]+)?)\s*B\s*[-_]\s*A\s*([0-9]+(?:\.[0-9]+)?)\s*B\b", text, re.I): for match in re.finditer(r"\b([0-9]+(?:\.[0-9]+)?)\s*B\s*[-_]\s*A\s*([0-9]+(?:\.[0-9]+)?)\s*B\b", text, re.I):
@@ -1132,11 +1137,13 @@ def _fetch_family_variants(family: str) -> list[dict[str, Any]]:
except (HTTPError, URLError, OSError, ValueError): except (HTTPError, URLError, OSError, ValueError):
family_html = tags_html family_html = tags_html
description = _page_description(family_html) or _page_description(tags_html) description = _page_description(family_html) or _page_description(tags_html)
updated_at = _page_updated_at(family_html) or _page_updated_at(tags_html)
parameter_text = family_html + " " + tags_html parameter_text = family_html + " " + tags_html
hints = _parameter_hints(parameter_text) hints = _parameter_hints(parameter_text)
rows = _parse_variant_page(tags_html, family) rows = _parse_variant_page(tags_html, family)
for row in rows: for row in rows:
row["description"] = description row["description"] = description
row["modified_at"] = updated_at
hint = _variant_parameter_hint(str(row.get("name") or ""), hints) hint = _variant_parameter_hint(str(row.get("name") or ""), hints)
if hint: if hint:
row["parameter_size"] = _format_parameter_size(hint[0]) row["parameter_size"] = _format_parameter_size(hint[0])
+1 -1
View File
@@ -1,5 +1,5 @@
name: ollama-manager name: ollama-manager
version: 1.5.20 version: 1.5.21
description: Native dashboard manager and chat interface for local Ollama models, attachments, URLs, shared persistent conversations, performance metrics, and live runtime telemetry. description: Native dashboard manager and chat interface for local Ollama models, attachments, URLs, shared persistent conversations, performance metrics, and live runtime telemetry.
auto_install_dependencies: true auto_install_dependencies: true
python_dependencies: python_dependencies: