feat: show model last updated dates
This commit is contained in:
@@ -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.
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -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"),
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -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",
|
||||||
|
|||||||
@@ -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
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user