From 956b6772056ec14fa968d75909adf79a907d317f Mon Sep 17 00:00:00 2001 From: "randomizedcoder dave.seddon.ca@gmail.com" Date: Sat, 31 Jan 2026 14:30:58 -0800 Subject: [PATCH] refactor(ollama): use prettyBytes for model size formatting --- .../components/settings/providers/Ollama.tsx | 73 ++++++++----------- webview-ui/src/i18n/locales/ca/settings.json | 6 +- webview-ui/src/i18n/locales/de/settings.json | 6 +- webview-ui/src/i18n/locales/en/settings.json | 6 +- webview-ui/src/i18n/locales/es/settings.json | 6 +- webview-ui/src/i18n/locales/fr/settings.json | 6 +- webview-ui/src/i18n/locales/hi/settings.json | 6 +- webview-ui/src/i18n/locales/id/settings.json | 6 +- webview-ui/src/i18n/locales/it/settings.json | 6 +- webview-ui/src/i18n/locales/ja/settings.json | 6 +- webview-ui/src/i18n/locales/ko/settings.json | 6 +- webview-ui/src/i18n/locales/nl/settings.json | 6 +- webview-ui/src/i18n/locales/pl/settings.json | 6 +- .../src/i18n/locales/pt-BR/settings.json | 6 +- webview-ui/src/i18n/locales/ru/settings.json | 6 +- webview-ui/src/i18n/locales/tr/settings.json | 6 +- webview-ui/src/i18n/locales/vi/settings.json | 6 +- .../src/i18n/locales/zh-CN/settings.json | 6 +- .../src/i18n/locales/zh-TW/settings.json | 6 +- 19 files changed, 49 insertions(+), 132 deletions(-) diff --git a/webview-ui/src/components/settings/providers/Ollama.tsx b/webview-ui/src/components/settings/providers/Ollama.tsx index 75d82791d1..e52abf6996 100644 --- a/webview-ui/src/components/settings/providers/Ollama.tsx +++ b/webview-ui/src/components/settings/providers/Ollama.tsx @@ -15,9 +15,9 @@ import { useAppTranslation } from "@src/i18n/TranslationContext" import { useRouterModels } from "@src/components/ui/hooks/useRouterModels" import { vscode } from "@src/utils/vscode" import { Button } from "@src/components/ui/button" +import prettyBytes from "pretty-bytes" import { inputEventTransform } from "../transforms" -import { ModelPicker } from "../ModelPicker" type OllamaProps = { apiConfiguration: ProviderSettings @@ -382,47 +382,36 @@ export const Ollama = ({ apiConfiguration, setApiConfigurationField }: OllamaPro - {sortedModelsWithTools.map((model) => { - const formatSize = (bytes?: number): string => { - if (!bytes) return "-" - const gb = bytes / (1024 * 1024 * 1024) - if (gb >= 1) { - return `${gb.toFixed(1)} ${t("settings:providers.ollama.table.sizeFormatting.gb")}` - } - const mb = bytes / (1024 * 1024) - return `${mb.toFixed(1)} ${t("settings:providers.ollama.table.sizeFormatting.mb")}` - } - return ( - - - - {model.name} - - - - {model.contextWindow.toLocaleString()} - - - {formatSize(model.size)} - - - {model.quantizationLevel || "-"} - - - {model.family || "-"} - - - {model.supportsImages - ? t("settings:providers.ollama.table.yes") - : t("settings:providers.ollama.table.no")} - - - ) - })} + {sortedModelsWithTools.map((model) => ( + + + + {model.name} + + + + {model.contextWindow.toLocaleString()} + + + {model.size ? prettyBytes(model.size) : "-"} + + + {model.quantizationLevel || "-"} + + + {model.family || "-"} + + + {model.supportsImages + ? t("settings:providers.ollama.table.yes") + : t("settings:providers.ollama.table.no")} + + + ))} diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index d91a8c178a..f81f6f7e8e 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -502,11 +502,7 @@ "family": "Família", "images": "Imatges", "yes": "Sí", - "no": "No", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "No" }, "streaming": "Transmissió", "streamingHelp": "La transmissió sempre està habilitada per a les sol·licituds de l'API d'Ollama. Les respostes es transmeten en temps real mentre es generen.", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 907338b437..74f32f560a 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -502,11 +502,7 @@ "family": "Familie", "images": "Bilder", "yes": "Ja", - "no": "Nein", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "Nein" }, "streaming": "Streaming", "streamingHelp": "Streaming ist für Ollama API-Anfragen immer aktiviert. Antworten werden in Echtzeit gestreamt, während sie generiert werden.", diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 7cca047a41..1422bda4c5 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -511,11 +511,7 @@ "family": "Family", "images": "Images", "yes": "Yes", - "no": "No", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "No" }, "streaming": "Streaming", "streamingHelp": "Streaming is always enabled for Ollama API requests. Responses are streamed in real-time as they are generated.", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 325398873f..aaca569250 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -502,11 +502,7 @@ "family": "Familia", "images": "Imágenes", "yes": "Sí", - "no": "No", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "No" }, "streaming": "Transmisión", "streamingHelp": "La transmisión siempre está habilitada para las solicitudes de API de Ollama. Las respuestas se transmiten en tiempo real a medida que se generan.", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index fcedc43958..883f9f64b6 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -502,11 +502,7 @@ "family": "Famille", "images": "Images", "yes": "Oui", - "no": "Non", - "sizeFormatting": { - "gb": "Go", - "mb": "Mo" - } + "no": "Non" }, "streaming": "Diffusion en continu", "streamingHelp": "La diffusion en continu est toujours activée pour les requêtes API Ollama. Les réponses sont diffusées en temps réel au fur et à mesure de leur génération.", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index d09774d961..5eb964b102 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -502,11 +502,7 @@ "family": "परिवार", "images": "छवियां", "yes": "हाँ", - "no": "नहीं", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "नहीं" }, "streaming": "स्ट्रीमिंग", "streamingHelp": "Ollama API अनुरोधों के लिए स्ट्रीमिंग हमेशा सक्षम होती है। प्रतिक्रियाएं वास्तविक समय में स्ट्रीम की जाती हैं जैसे ही वे उत्पन्न होती हैं।", diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 22b1cb586c..86c69bace0 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -506,11 +506,7 @@ "family": "Keluarga", "images": "Gambar", "yes": "Ya", - "no": "Tidak", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "Tidak" }, "streaming": "Streaming", "streamingHelp": "Streaming selalu diaktifkan untuk permintaan API Ollama. Respons di-stream secara real-time saat dibuat.", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 3925cebd48..e5fa5e6934 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -502,11 +502,7 @@ "family": "Famiglia", "images": "Immagini", "yes": "Sì", - "no": "No", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "No" }, "streaming": "Streaming", "streamingHelp": "Lo streaming è sempre abilitato per le richieste API Ollama. Le risposte vengono trasmesse in tempo reale mentre vengono generate.", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index eb0eba954b..1e5294bfe1 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -502,11 +502,7 @@ "family": "ファミリー", "images": "画像", "yes": "はい", - "no": "いいえ", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "いいえ" }, "streaming": "ストリーミング", "streamingHelp": "Ollama APIリクエストではストリーミングが常に有効です。応答は生成されると同時にリアルタイムでストリーミングされます。", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index eecbd73a43..8cd6758463 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -502,11 +502,7 @@ "family": "패밀리", "images": "이미지", "yes": "예", - "no": "아니오", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "아니오" }, "streaming": "스트리밍", "streamingHelp": "Ollama API 요청에 대해 스트리밍이 항상 활성화되어 있습니다. 응답은 생성되는 대로 실시간으로 스트리밍됩니다.", diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index def423d4f6..20ae00f3ae 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -502,11 +502,7 @@ "family": "Familie", "images": "Afbeeldingen", "yes": "Ja", - "no": "Nee", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "Nee" }, "streaming": "Streaming", "streamingHelp": "Streaming is altijd ingeschakeld voor Ollama API-verzoeken. Reacties worden in real-time gestreamd terwijl ze worden gegenereerd.", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index e23df90418..caaa80a151 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -504,11 +504,7 @@ "family": "Rodzina", "images": "Obrazy", "yes": "Tak", - "no": "Nie", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "Nie" }, "streaming": "Przesyłanie strumieniowe", "streamingHelp": "Przesyłanie strumieniowe jest zawsze włączone dla żądań API Ollama. Odpowiedzi są przesyłane strumieniowo w czasie rzeczywistym podczas generowania.", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 2c9df9bf07..99350075a4 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -502,11 +502,7 @@ "family": "Família", "images": "Imagens", "yes": "Sim", - "no": "Não", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "Não" }, "streaming": "Transmissão", "streamingHelp": "A transmissão está sempre habilitada para solicitações da API Ollama. As respostas são transmitidas em tempo real conforme são geradas.", diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 520016961c..1e8f78ecf2 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -504,11 +504,7 @@ "family": "Семейство", "images": "Изображения", "yes": "Да", - "no": "Нет", - "sizeFormatting": { - "gb": "ГБ", - "mb": "МБ" - } + "no": "Нет" }, "streaming": "Потоковая передача", "streamingHelp": "Потоковая передача всегда включена для запросов API Ollama. Ответы передаются в реальном времени по мере их генерации.", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index f5fbba7653..9d2f99974d 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -502,11 +502,7 @@ "family": "Aile", "images": "Görüntüler", "yes": "Evet", - "no": "Hayır", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "Hayır" }, "streaming": "Akış", "streamingHelp": "Ollama API istekleri için akış her zaman etkindir. Yanıtlar oluşturuldukça gerçek zamanlı olarak akışa alınır.", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 0290f262ab..3ce0c95dd9 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -502,11 +502,7 @@ "family": "Họ", "images": "Hình ảnh", "yes": "Có", - "no": "Không", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "Không" }, "streaming": "Phát trực tuyến", "streamingHelp": "Phát trực tuyến luôn được bật cho các yêu cầu API Ollama. Phản hồi được phát trực tuyến theo thời gian thực khi chúng được tạo.", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 5e9fe3a9a2..77389de2ff 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -502,11 +502,7 @@ "family": "系列", "images": "图像", "yes": "是", - "no": "否", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "否" }, "streaming": "流式传输", "streamingHelp": "Ollama API 请求始终启用流式传输。响应在生成时实时流式传输。", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 9cdfd8d145..8213eedb7b 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -511,11 +511,7 @@ "family": "系列", "images": "影像", "yes": "是", - "no": "否", - "sizeFormatting": { - "gb": "GB", - "mb": "MB" - } + "no": "否" }, "streaming": "串流", "streamingHelp": "Ollama API 請求始終啟用串流。回應在生成時即時串流。",