@vtstech/pi-ollama-sync 1.0.4-1 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/ollama-sync.js +31 -8
  2. package/package.json +3 -3
package/ollama-sync.js CHANGED
@@ -2,14 +2,15 @@
2
2
  import {
3
3
  MODELS_JSON_PATH as MODELS_FILE,
4
4
  fetchOllamaModels,
5
+ fetchContextLengthsBatched,
5
6
  readModelsJson,
6
7
  writeModelsJson,
7
8
  isReasoningModel,
8
9
  getOllamaBaseUrl
9
10
  } from "@vtstech/pi-shared/ollama";
10
- import { section, ok, warn, info } from "@vtstech/pi-shared/format";
11
+ import { section, ok, warn, info, bytesHuman, estimateVram } from "@vtstech/pi-shared/format";
11
12
  var BRANDING = [
12
- ` \u26A1 Pi Ollama Sync v1.0.3`,
13
+ ` \u26A1 Pi Ollama Sync v1.0.5`,
13
14
  ` Written by VTSTech`,
14
15
  ` GitHub: https://github.com/VTSTech`,
15
16
  ` Website: www.vts-tech.org`
@@ -27,13 +28,16 @@ function getProviderConfig(existing) {
27
28
  }
28
29
  };
29
30
  }
30
- function buildModelEntry(m) {
31
+ function buildModelEntry(m, contextLength) {
32
+ const estimatedSize = estimateVram(m.details.parameter_size, m.details.quantization_level);
31
33
  return {
32
34
  id: m.name,
33
35
  reasoning: isReasoningModel(m.name),
34
36
  parameterSize: m.details.parameter_size,
35
37
  quantizationLevel: m.details.quantization_level,
36
- modelFamily: m.details.family || m.details.families?.[0] || "unknown"
38
+ modelFamily: m.details.family || m.details.families?.[0] || "unknown",
39
+ contextLength,
40
+ estimatedSize
37
41
  };
38
42
  }
39
43
  function mergeModels(newModels, oldModels) {
@@ -74,7 +78,14 @@ function ollama_sync_temp_default(pi) {
74
78
  return;
75
79
  }
76
80
  const sorted = [...models].sort((a, b) => a.size - b.size);
77
- const newModels = sorted.map(buildModelEntry);
81
+ ctx.ui.setStatus("ollama-sync", "Fetching model details...");
82
+ const contextMap = await fetchContextLengthsBatched(
83
+ ollamaBaseUrl,
84
+ sorted.map((m) => m.name)
85
+ );
86
+ const newModels = sorted.map(
87
+ (m) => buildModelEntry(m, contextMap.get(m.name))
88
+ );
78
89
  const oldIds = new Set(
79
90
  existing.providers["ollama"]?.models?.map((m) => m.id) ?? []
80
91
  );
@@ -96,8 +107,10 @@ function ollama_sync_temp_default(pi) {
96
107
  lines.push(section("Synced Models"));
97
108
  for (const m of newModels) {
98
109
  lines.push(ok(m.id));
110
+ const ctxStr = m.contextLength != null ? m.contextLength.toLocaleString() : "?";
111
+ const sizeStr = m.estimatedSize ? bytesHuman(m.estimatedSize) : "?";
99
112
  lines.push(
100
- ` Params: ${m.parameterSize ?? "?"} \xB7 Quant: ${m.quantizationLevel ?? "?"} \xB7 Family: ${m.modelFamily ?? "?"}`
113
+ ` Params: ${m.parameterSize ?? "?"} \xB7 Quant: ${m.quantizationLevel ?? "?"} \xB7 Family: ${m.modelFamily ?? "?"} \xB7 Context: ${ctxStr} \xB7 VRAM: ~${sizeStr}`
101
114
  );
102
115
  }
103
116
  if (added.length > 0 || removed.length > 0) {
@@ -153,7 +166,13 @@ function ollama_sync_temp_default(pi) {
153
166
  try {
154
167
  const models = await fetchOllamaModels(ollamaBaseUrl);
155
168
  const sorted = [...models].sort((a, b) => a.size - b.size);
156
- const newModels = sorted.map(buildModelEntry);
169
+ const contextMap = await fetchContextLengthsBatched(
170
+ ollamaBaseUrl,
171
+ sorted.map((m) => m.name)
172
+ );
173
+ const newModels = sorted.map(
174
+ (m) => buildModelEntry(m, contextMap.get(m.name))
175
+ );
157
176
  const mergedModels = mergeModels(
158
177
  newModels,
159
178
  existing.providers["ollama"]?.models ?? []
@@ -165,7 +184,11 @@ function ollama_sync_temp_default(pi) {
165
184
  };
166
185
  writeModelsJson(existing);
167
186
  const modelDetails = newModels.map(
168
- (m) => ` \u2022 ${m.id} (${m.parameterSize}, ${m.quantizationLevel}, family: ${m.modelFamily})`
187
+ (m) => {
188
+ const ctxStr = m.contextLength ?? "?";
189
+ const sizeStr = m.estimatedSize ? bytesHuman(m.estimatedSize) : "?";
190
+ return ` \u2022 ${m.id} (${m.parameterSize}, ${m.quantizationLevel}, ctx: ${ctxStr}, ~${sizeStr})`;
191
+ }
169
192
  ).join("\n");
170
193
  return {
171
194
  content: [
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@vtstech/pi-ollama-sync",
3
- "version": "1.0.4-1",
3
+ "version": "1.0.5",
4
4
  "description": "Ollama model sync extension for Pi Coding Agent",
5
5
  "main": "ollama-sync.js",
6
- "keywords": ["pi-package", "pi-extensions"],
6
+ "keywords": ["pi-extensions"],
7
7
  "license": "MIT",
8
8
  "access": "public",
9
9
  "type": "module",
@@ -14,7 +14,7 @@
14
14
  "url": "https://github.com/VTSTech/pi-coding-agent"
15
15
  },
16
16
  "dependencies": {
17
- "@vtstech/pi-shared": "1.0.4-1"
17
+ "@vtstech/pi-shared": "1.0.5"
18
18
  },
19
19
  "peerDependencies": {
20
20
  "@mariozechner/pi-coding-agent": ">=0.66"