helloadhavan/github_issues huggingface dataset:
Repository: nodejs/node
Pull request: doc,crypto: update subtle.generateKey and subtle.importKey

Follow up to https://redirect.github.com/nodejs/node/pull/59608

Changed files:
filename: doc/api/webcrypto.md
patch: @@ -1220,9 +1220,9 @@ changes:
 * `keyUsages` {string\[]} See [Key usages][].
 * Returns: {Promise} Fulfills with a {CryptoKey|CryptoKeyPair} upon success.
 
-Using the method and parameters provided in `algorithm`, `subtle.generateKey()`
-attempts to generate new keying material. Depending the method used, the method
-may generate either a single {CryptoKey} or a {CryptoKeyPair}.
+Using the parameters provided in `algorithm`, this method
+attempts to generate new keying material. Depending on the algorithm used
+either a single {CryptoKey} or a {CryptoKeyPair} is generated.
 
 The {CryptoKeyPair} (public and private key) generating algorithms supported
 include:
@@ -1297,10 +1297,11 @@ changes:
 * `keyUsages` {string\[]} See [Key usages][].
 * Returns: {Promise} Fulfills with a {CryptoKey} upon success.
 
-The [`subtle.importKey()`][] method attempts to interpret the provided `keyData`
+This method attempts to interpret the provided `keyData`
 as the given `format` to create a {CryptoKey} instance using the provided
 `algorithm`, `extractable`, and `keyUsages` arguments. If the import is
-successful, the returned promise will be resolved with the created {CryptoKey}.
+successful, the returned promise will be resolved with a {CryptoKey}
+representation of the key material.
 
 If importing KDF algorithm keys, `extractable` must be `false`.
Repository: huggingface/transformers
Pull request: path validation for security reason

# What does this PR do?

See the comment in file change tab

Changed files:
filename: src/transformers/convert_slow_tokenizers_checkpoints_to_fast.py
patch: @@ -15,6 +15,7 @@
 
 import argparse
 import os
+from pathlib import Path
 
 import transformers
 
@@ -69,6 +70,15 @@ def convert_slow_checkpoint_to_fast(tokenizer_name, checkpoint_name, dump_path,
             if "/" in checkpoint:
                 checkpoint_directory, checkpoint_prefix_name = checkpoint.split("/")
                 dump_path_full = os.path.join(dump_path, checkpoint_directory)
+
+                # Security check
+                try:
+                    Path(dump_path_full).resolve().relative_to(Path(dump_path).resolve())
+                except ValueError:
+                    raise ValueError(
+                        f"Invalid checkpoint path: '{checkpoint}' attempts to escape `dump_path`: {dump_path}"
+                    )
+
             elif add_prefix:
                 checkpoint_prefix_name = checkpoint
                 dump_path_full = dump_path
Repository: electron/electron
Pull request: test: cleanup RenderFrame lifespan tests

Backport of #47746

See that PR for details.


Notes: <!-- Please add a one-line description for app developers to read in the release notes, or 'none' if no notes relevant to app developers. Examples and help on special cases: https://github.com/electron/clerk/blob/main/README.md#examples -->none


Changed files:
filename: spec/api-web-frame-main-spec.ts
patch: @@ -314,6 +314,7 @@ describe('webFrameMain module', () => {
     beforeEach(async () => {
       w = new BrowserWindow({ show: false });
     });
+    afterEach(closeAllWindows);
 
     // TODO(jkleinsc) fix this flaky test on linux
     ifit(process.platform !== 'linux')('throws upon accessing properties when disposed', async () => {
@@ -374,7 +375,9 @@ describe('webFrameMain module', () => {
       await w.webContents.loadURL(server.crossOriginUrl);
       // senderFrame now points to a disposed RenderFrameHost. It should
       // be null when attempting to access the lazily evaluated property.
-      expect(event.senderFrame).to.be.null();
+      waitUntil(() => {
+        return event.senderFrame === null;
+      });
     });
 
     it('is detached when unload handler sends IPC', async () => {

filename: spec/chromium-spec.ts
patch: @@ -3096,7 +3096,7 @@ describe('iframe using HTML fullscreen API while window is OS-fullscreened', ()
   });
 });
 
-describe('navigator.serial', () => {
+ifdescribe(process.platform !== 'darwin' || process.arch !== 'arm64')('navigator.serial', () => {
   let w: BrowserWindow;
   before(async () => {
     w = new BrowserWindow({
@@ -3636,7 +3636,7 @@ ifdescribe((process.platform !== 'linux' || app.isUnityRunning()))('navigator.se
   });
 });
 
-describe('navigator.bluetooth', () => {
+ifdescribe(process.platform !== 'darwin' || process.arch !== 'arm64')('navigator.bluetooth', () => {
   let w: BrowserWindow;
   before(async () => {
     w = new BrowserWindow({
Repository: ollama/ollama
Pull request: fix golangci workflow not enable gofmt and goimports

Hi, this pr tries to fix golangci not enable `gofmt` and `goimport` in github workflows.

All workflows have passed. But I notice `* text eol=lf`  was removed in commit [9164b0161](https://github.com/ollama/ollama/commit/9164b0161bcb24e543cba835a8863b80af2c0c21) which v0.1.33 was released. So I still need help from maintainers because `.github/workflows/release.yaml` is not tested. By now I can not trigger release workflow in my own repo https://github.com/alwqx/ollama because `.github/workflows/release.yaml` references some environments which I don't have or I don't known how to get my own value:
- MACOS_SIGNING_KEY
- MACOS_SIGNING_KEY_PASSWORD
- APPLE_IDENTITY
- APPLE_PASSWORD
- APPLE_ID
- KEY_CONTAINER
- GOOGLE_SIGNING_CREDENTIALS
- ...

I hope maintainer/collaborators help test release workflow for this change.

Changed files:
filename: .gitattributes
patch: @@ -1 +1,2 @@
 llm/ext_server/* linguist-vendored
+*.go text eol=lf
\ No newline at end of file

filename: .github/workflows/test.yaml
patch: @@ -269,7 +269,7 @@ jobs:
           mkdir -p llm/build/darwin/$ARCH/stub/bin
           touch llm/build/darwin/$ARCH/stub/bin/ollama_llama_server
         if: ${{ startsWith(matrix.os, 'macos-') }}
-      - uses: golangci/golangci-lint-action@v4
+      - uses: golangci/golangci-lint-action@v5
         with:
           args: --timeout 8m0s -v
   test:

filename: .golangci.yaml
patch: @@ -9,9 +9,8 @@ linters:
     - contextcheck
     - exportloopref
     - gocheckcompilerdirectives
-    # FIXME: for some reason this errors on windows
-    # - gofmt
-    # - goimports
+    - gofmt
+    - goimports
     - misspell
     - nilerr
     - unused
Repository: facebook/react
Pull request: Fix useMemoCache with setState in render

Stack from [ghstack](https://github.com/ezyang/ghstack) (oldest at bottom):
* __->__ #30889

Fixes the bug that @alexmckenley and @mofeiZ found where setState-in-render can reset useMemoCache and cause an infinite loop. The bug was that renderWithHooksAgain() was not resetting hook state when rerendering (so useMemo values were preserved) but was resetting the updateQueue. This meant that the entire memo cache was cleared on a setState-in-render.

I initially changed renderWithHooksAgain() to just reset the updateQueue, nulling out properties and setting the memoCache.index back to 0, but not clearing memoCache.data. That fixed the uMC bug, but caused some tests to fail where effect cleanup wasn’t running when a component was in a tree that suspended and showed a fallback.

Turns out renderWithHooksAgain() is also used to re-render suspended components, and that case depends on the updateQueue being cleared for effects to work correctly. So i updated to clear the updateQueue for the suspense case, reset in the setState-in-render case, and everything works. The result feels pretty clean.

In a follow-up we should be able to avoid resetting the memo cache in the replay case as well. There are a few spots in the codebase where we check for `updateQueue === null`, and only do processing in that case — including some code related to effect cleanup. I think the right thing to do there would be to check for e.g. `updateQueue?.lastEffect == null` (and any other relevant properties from updateQueue), and then it would be safe to always reset the updateQueue instead of clearing it.

Changed files:
filename: packages/react-reconciler/src/ReactFiberHooks.js
patch: @@ -835,7 +835,7 @@ function renderWithHooksAgain<Props, SecondArg>(
     workInProgressHook = null;
 
     if (workInProgress.updateQueue != null) {
-      resetFunctionComponentUpdateQueue(workInProgress.updateQueue);
+      resetFunctionComponentUpdateQueue((workInProgress.updateQueue: any));
     }
 
     if (__DEV__) {
Repository: ollama/ollama
Pull request: llm: add minimum based on layer size

adjust minimum memory requirements based on the model being loaded and reduce the static minimum

Changed files:
filename: gpu/gpu.go
patch: @@ -31,8 +31,8 @@ type handles struct {
 }
 
 const (
-	cudaMinimumMemory = 457 * format.MebiByte
-	rocmMinimumMemory = 457 * format.MebiByte
+	cudaMinimumMemory = 256 * format.MebiByte
+	rocmMinimumMemory = 256 * format.MebiByte
 )
 
 var gpuMutex sync.Mutex

filename: gpu/gpu_darwin.go
patch: @@ -15,7 +15,7 @@ import (
 )
 
 const (
-	metalMinimumMemory = 512 * format.MebiByte
+	metalMinimumMemory = 384 * format.MebiByte
 )
 
 func GetGPUInfo() GpuInfoList {

filename: llm/memory.go
patch: @@ -85,19 +85,19 @@ func EstimateGPULayers(gpus []gpu.GpuInfo, ggml *GGML, projectors []string, opts
 		graphPartialOffload = graphFullOffload
 	}
 
+	layers := ggml.Tensors().Layers()
+
 	// memoryRequiredTotal represents the memory required for full GPU offloading (all layers)
-	memoryRequiredTotal := memoryMinimum + graphFullOffload
+	memoryRequiredTotal := memoryMinimum + graphFullOffload + layers["blk.0"].size()
 
 	// memoryRequiredPartial represents the memory required for partial GPU offloading (n > 0, n < layers)
-	memoryRequiredPartial := memoryMinimum + graphPartialOffload
+	memoryRequiredPartial := memoryMinimum + graphPartialOffload + layers["blk.0"].size()
 
 	if memoryRequiredPartial > memoryAvailable {
 		slog.Debug("insufficient VRAM to load any model layers")
 		return 0, 0
 	}
 
-	layers := ggml.Tensors().Layers()
-
 	var memoryLayerOutput uint64
 	if layer, ok := layers["output_norm"]; ok {
 		memoryLayerOutput += layer.size()
Repository: denoland/deno
Pull request: fix(runtime): use XML-valid entity in flamegraph SVG

- Replace `&nbsp;` with `&#160;` in the CPU flamegraph SVG template
- `&nbsp;` is an HTML entity not recognized by XML parsers, causing `XML Parsing Error: undefined entity` when opening the SVG standalone

Fixes #32708

Changed files:
filename: runtime/cpu_profiler/flamegraph.rs
patch: @@ -153,10 +153,10 @@ pub(crate) fn generate_flamegraph_svg(
 ]]></script>
 <rect x="0" y="0" width="100%" height="100%" fill="url(#background)"/>
 <text id="title" x="50%" y="24" text-anchor="middle" style="font-size:17px">CPU Flamegraph</text>
-<text id="details" x="{x_pad}.0" y="{details_y}">&nbsp;</text>
+<text id="details" x="{x_pad}.0" y="{details_y}">&#160;</text>
 <text id="unzoom" class="hide" x="{x_pad}.0" y="24">Reset Zoom</text>
 <text id="search" x="{search_x}.0" y="24">Search</text>
-<text id="matched" class="hide" x="{search_x}.0" y="{details_y}">&nbsp;</text>
+<text id="matched" class="hide" x="{search_x}.0" y="{details_y}">&#160;</text>
 <foreignObject x="{invert_x}" y="6" width="80" height="30">
 <body xmlns="http://www.w3.org/1999/xhtml">
 <label style="font-family:Verdana,sans-serif;font-size:12px;cursor:pointer"><input type="checkbox" id="invert_cb" style="cursor:pointer"/> Invert</label>
Repository: electron/electron
Pull request: fix: deprecation warning crash when no Node.js environment available

Backport of #47700

See that PR for details.


Notes: none.

Changed files:
filename: shell/common/node_util.cc
patch: @@ -66,8 +66,13 @@ void EmitWarning(const std::string_view warning_msg,
 void EmitWarning(v8::Isolate* isolate,
                  const std::string_view warning_msg,
                  const std::string_view warning_type) {
-  node::ProcessEmitWarningGeneric(node::Environment::GetCurrent(isolate),
-                                  warning_msg, warning_type);
+  node::Environment* env = node::Environment::GetCurrent(isolate);
+  if (!env) {
+    // No Node.js environment available, fall back to console logging.
+    LOG(WARNING) << "[" << warning_type << "] " << warning_msg;
+    return;
+  }
+  node::ProcessEmitWarningGeneric(env, warning_msg, warning_type);
 }
 
 void EmitDeprecationWarning(const std::string_view warning_msg,
@@ -79,8 +84,14 @@ void EmitDeprecationWarning(const std::string_view warning_msg,
 void EmitDeprecationWarning(v8::Isolate* isolate,
                             const std::string_view warning_msg,
                             const std::string_view deprecation_code) {
-  node::ProcessEmitWarningGeneric(node::Environment::GetCurrent(isolate),
-                                  warning_msg, "DeprecationWarning",
+  node::Environment* env = node::Environment::GetCurrent(isolate);
+  if (!env) {
+    // No Node.js environment available, fall back to console logging.
+    LOG(WARNING) << "[DeprecationWarning] " << warning_msg
+                 << " (code: " << deprecation_code << ")";
+    return;
+  }
+  node::ProcessEmitWarningGeneric(env, warning_msg, "DeprecationWarning",
                                   deprecation_code);
 }
Repository: huggingface/transformers
Pull request: torch 2.9 still don't ❤️ torchcodec 0.8 💔

# What does this PR do?

torchcodec 0.8 is out. With torch 2.8, work crash issues. with torch 2.9, some torchcodec issues.

Let's pin further torchcodec<0.8 for now

Changed files:
filename: docker/examples-torch.dockerfile
patch: @@ -5,7 +5,7 @@ USER root
 RUN apt-get update &&  apt-get install -y --no-install-recommends libsndfile1-dev espeak-ng time git g++ cmake pkg-config openssh-client git-lfs ffmpeg curl
 ENV UV_PYTHON=/usr/local/bin/python
 RUN pip --no-cache-dir install uv && uv pip install --no-cache-dir -U pip setuptools
-RUN uv pip install --no-cache-dir 'torch<2.9' 'torchaudio' 'torchvision' 'torchcodec' --index-url https://download.pytorch.org/whl/cpu
+RUN uv pip install --no-cache-dir 'torch<2.9' 'torchaudio' 'torchvision' 'torchcodec<0.8' --index-url https://download.pytorch.org/whl/cpu
 RUN uv pip install --no-deps timm accelerate --extra-index-url https://download.pytorch.org/whl/cpu
 RUN uv pip install --no-cache-dir librosa "git+https://github.com/huggingface/transformers.git@${REF}#egg=transformers[sklearn,sentencepiece,vision,testing]" seqeval albumentations jiwer
 

filename: docker/pipeline-torch.dockerfile
patch: @@ -5,7 +5,7 @@ USER root
 RUN apt-get update &&  apt-get install -y --no-install-recommends libsndfile1-dev espeak-ng time git pkg-config openssh-client git ffmpeg curl
 ENV UV_PYTHON=/usr/local/bin/python
 RUN pip --no-cache-dir install uv && uv pip install --no-cache-dir -U pip setuptools
-RUN uv pip install --no-cache-dir 'torch<2.9' 'torchaudio' 'torchvision' 'torchcodec' --index-url https://download.pytorch.org/whl/cpu
+RUN uv pip install --no-cache-dir 'torch<2.9' 'torchaudio' 'torchvision' 'torchcodec<0.8' --index-url https://download.pytorch.org/whl/cpu
 RUN uv pip install --no-deps timm accelerate --extra-index-url https://download.pytorch.org/whl/cpu
 RUN uv pip install --no-cache-dir librosa "git+https://github.com/huggingface/transformers.git@${REF}#egg=transformers[sklearn,sentencepiece,vision,testing]"
 

filename: docker/torch-light.dockerfile
patch: @@ -5,7 +5,7 @@ USER root
 RUN apt-get update &&  apt-get install -y --no-install-recommends libsndfile1-dev espeak-ng time git g++ cmake pkg-config openssh-client git-lfs ffmpeg curl
 ENV UV_PYTHON=/usr/local/bin/python
 RUN pip --no-cache-dir install uv && uv pip install --no-cache-dir -U pip setuptools
-RUN uv pip install --no-cache-dir 'torch<2.9' 'torchaudio' 'torchvision' 'torchcodec' --index-url https://download.pytorch.org/whl/cpu
+RUN uv pip install --no-cache-dir 'torch<2.9' 'torchaudio' 'torchvision' 'torchcodec<0.8' --index-url https://download.pytorch.org/whl/cpu
 RUN uv pip install --no-deps timm accelerate --extra-index-url https://download.pytorch.org/whl/cpu
 RUN uv pip install --no-cache-dir librosa "git+https://github.com/huggingface/transformers.git@${REF}#egg=transformers[sklearn,sentencepiece,vision,testing,tiktoken,num2words,video]"
Repository: ollama/ollama
Pull request: note on naming restrictions

else push would fail with cryptic
retrieving manifest 
Error: file does not exist
==> maybe change that in code too

Changed files:
filename: docs/import.md
patch: @@ -136,6 +136,8 @@ Next, copy your model to your username's namespace:
 ollama cp example <your username>/example
 ```
 
+> Note: model names may only contain lowercase letters, digits, and the characters `.`, `-`, and `_`.
+
 Then push the model:
 
 ```
Repository: nodejs/node
Pull request: node-api: make napi_delete_reference use node_api_basic_env

This PR updates the signature of `napi_delete_reference` to accept a `node_api_basic_env` instead of a `napi_env`, as discussed in nodejs/node#59583. This change reflects that `napi_delete_reference` does not require the environment to be in a non-GC state and aligns the API with its intended usage.

- Updates the function signature in both the implementation and header files.
- Refactors all internal and test usages to pass a `node_api_basic_env` as the first argument.

Refs: #59583

##### Checklist
- [x] PR description includes references to the issue
- [x] Function signature and all usages updated
- [x] Tests updated to match new signature

/cc @nodejs/node-api

Changed files:
filename: src/js_native_api.h
patch: @@ -364,7 +364,7 @@ napi_create_reference(napi_env env,
 
 // Deletes a reference. The referenced value is released, and may
 // be GC'd unless there are other references to it.
-NAPI_EXTERN napi_status NAPI_CDECL napi_delete_reference(napi_env env,
+NAPI_EXTERN napi_status NAPI_CDECL napi_delete_reference(node_api_basic_env env,
                                                          napi_ref ref);
 
 // Increments the reference count, optionally returning the resulting count.

filename: src/js_native_api_v8.cc
patch: @@ -2773,7 +2773,8 @@ napi_status NAPI_CDECL napi_create_reference(napi_env env,
 // there are other references to it.
 // For a napi_reference returned from `napi_wrap`, this must be called in the
 // finalizer.
-napi_status NAPI_CDECL napi_delete_reference(napi_env env, napi_ref ref) {
+napi_status NAPI_CDECL napi_delete_reference(node_api_basic_env env,
+                                             napi_ref ref) {
   // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
   // JS exceptions.
   CHECK_ENV(env);
Repository: denoland/deno
Pull request: fix(ext/node): set up stdio streams on failed child_process spawn

In Node.js, stdio pipes are created before the OS spawn call, so child.stdout/stderr/stdin are valid stream objects even when spawn fails (e.g. ENOENT). Deno's implementation only created these after a successful Deno.Command().spawn(), leaving them as null on failure.

This caused crashes when code accessed child.stdout after a failed spawn, which is valid and expected in Node.js.

Now when spawn fails, we create the stdio streams, emit the error, then destroy the streams in the next tick so the 'close' event fires correctly (matching Node.js behavior of 'close' without 'exit' on spawn failure).



Changed files:
filename: ext/node/polyfills/internal/child_process.ts
patch: @@ -564,7 +564,51 @@ export class ChildProcess extends EventEmitter {
         // args.slice(1) to exclude argv0 (prepended by normalizeSpawnArguments)
         e = _createSpawnError("ENOENT", command, args.slice(1));
       }
+
+      // Set up stdio streams even when spawn fails (Node.js creates pipes
+      // before the OS spawn call, so they exist regardless of spawn outcome).
+      if (stdin === "pipe") {
+        this.stdin = new Writable({
+          write(_chunk, _enc, cb) {
+            cb(new Error("spawn failed"));
+          },
+        });
+      }
+      if (stdout === "pipe") {
+        this.stdout = new Readable({ read() {} });
+        this[kClosesNeeded]++;
+        this.stdout.on("close", () => {
+          maybeClose(this);
+        });
+      }
+      if (stderr === "pipe") {
+        this.stderr = new Readable({ read() {} });
+        this[kClosesNeeded]++;
+        this.stderr.on("close", () => {
+          maybeClose(this);
+        });
+      }
+
+      this.stdio[0] = this.stdin;
+      this.stdio[1] = this.stdout;
+      this.stdio[2] = this.stderr;
+
       this.#_handleError(e);
+
+      // Destroy stdio streams and emit close (matching Node.js behavior
+      // where failed spawns still trigger 'close' but not 'exit').
+      nextTick(() => {
+        if (this.stdout) {
+          this.stdout.destroy();
+        }
+        if (this.stderr) {
+          this.stderr.destroy();
+        }
+        if (this.stdin) {
+          this.stdin.destroy();
+        }
+        maybeClose(this);
+      });
     }
   }
 

filename: tests/node_compat/config.jsonc
patch: @@ -200,6 +200,7 @@
       "flaky": true
     },
     "parallel/test-child-process-constructor.js": {},
+    "parallel/test-child-process-cwd.js": {},
     "parallel/test-child-process-default-options.js": {},
     "parallel/test-child-process-detached.js": {},
     "parallel/test-child-process-disconnect.js": {},
Repository: electron/electron
Pull request: fix: deprecation warning crash when no Node.js environment available

#### Description of Change

If `util::EmitDeprecationWarning` is called from the renderer process and Node.js integration is disabled, it will crash as `node::Environment::GetCurrent(isolate)` will be `nullptr`.

#### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->

- [x] PR description included and stakeholders cc'd
- [x] `npm test` passes
- [x] [PR release notes](https://github.com/electron/clerk/blob/main/README.md) describe the change in a way relevant to app developers, and are [capitalized, punctuated, and past tense](https://github.com/electron/clerk/blob/main/README.md#examples).

#### Release Notes

Notes: none.

Changed files:
filename: shell/common/node_util.cc
patch: @@ -66,8 +66,13 @@ void EmitWarning(const std::string_view warning_msg,
 void EmitWarning(v8::Isolate* isolate,
                  const std::string_view warning_msg,
                  const std::string_view warning_type) {
-  node::ProcessEmitWarningGeneric(node::Environment::GetCurrent(isolate),
-                                  warning_msg, warning_type);
+  node::Environment* env = node::Environment::GetCurrent(isolate);
+  if (!env) {
+    // No Node.js environment available, fall back to console logging.
+    LOG(WARNING) << "[" << warning_type << "] " << warning_msg;
+    return;
+  }
+  node::ProcessEmitWarningGeneric(env, warning_msg, warning_type);
 }
 
 void EmitDeprecationWarning(const std::string_view warning_msg,
@@ -79,8 +84,14 @@ void EmitDeprecationWarning(const std::string_view warning_msg,
 void EmitDeprecationWarning(v8::Isolate* isolate,
                             const std::string_view warning_msg,
                             const std::string_view deprecation_code) {
-  node::ProcessEmitWarningGeneric(node::Environment::GetCurrent(isolate),
-                                  warning_msg, "DeprecationWarning",
+  node::Environment* env = node::Environment::GetCurrent(isolate);
+  if (!env) {
+    // No Node.js environment available, fall back to console logging.
+    LOG(WARNING) << "[DeprecationWarning] " << warning_msg
+                 << " (code: " << deprecation_code << ")";
+    return;
+  }
+  node::ProcessEmitWarningGeneric(env, warning_msg, "DeprecationWarning",
                                   deprecation_code);
 }
Repository: ollama/ollama
Pull request: Windows automatically recognizes username

get the current username by "%username%"

Changed files:
filename: docs/faq.md
patch: @@ -140,7 +140,7 @@ Refer to the section [above](#how-do-i-configure-ollama-server) for how to set e
 
 - macOS: `~/.ollama/models`
 - Linux: `/usr/share/ollama/.ollama/models`
-- Windows: `C:\Users\<username>\.ollama\models`
+- Windows: `C:\Users\%username%\.ollama\models`
 
 ### How do I set them to a different location?