helloadhavan/github_issues huggingface dataset:
Repository: nodejs/node
Pull request: stream: preserve error over AbortError in pipeline

Fixes: https://github.com/nodejs/node/issues/62089

Errors thrown inside `Readable.map()` when used as a pipeline stage with an infinite or fast source stream are swallowed and replaced by `AbortError: The operation was aborted`.

When the map callback throws, the map's internal pump exits its `for await` loop over the source stream. This triggers the stream's async iterator cleanup, which calls `destroyImpl.destroyer(stream, null)`. Since the stream isn't finished, `destroyer` creates a new `AbortError` and destroys the stream with it. This `AbortError` propagates through pipe's `eos` callback to `finishImpl` **before** the original error arrives via `pumpToNode`, winning the race.

`finishImpl` already allows overwriting `ERR_STREAM_PREMATURE_CLOSE` with later, more meaningful errors. This change applies the same logic to `AbortError`, which is also an internal cleanup artifact that should not take precedence over user errors.


Changed files:
filename: lib/internal/streams/pipeline.js
patch: @@ -227,7 +227,7 @@ function pipelineImpl(streams, callback, opts) {
   }
 
   function finishImpl(err, final) {
-    if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {
+    if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE' || error.name === 'AbortError')) {
       error = err;
     }
 

filename: test/parallel/test-stream-pipeline.js
patch: @@ -1749,3 +1749,24 @@ tmpdir.refresh();
     assert.deepStrictEqual(err, new Error('booom'));
   }));
 }
+
+{
+  // Errors thrown in Readable.map inside pipeline should not be
+  // swallowed by AbortError when the source is an infinite stream.
+  pipeline(
+    new Readable({ read() { this.push('data'); } }),
+    new Transform({
+      readableObjectMode: true,
+      transform(chunk, encoding, callback) {
+        this.push({});
+        callback();
+      },
+    }),
+    (readable) => readable.map(async () => {
+      throw new Error('Boom!');
+    }),
+    common.mustCall((err) => {
+      assert.strictEqual(err.message, 'Boom!');
+    }),
+  );
+}
Repository: huggingface/transformers
Pull request: support xxxFast alias in v5 tokenizers

for when remote code tries to import from `tokenization_xxx_fast`

Changed files:
filename: src/transformers/models/auto/tokenization_auto.py
patch: @@ -16,6 +16,7 @@
 import importlib
 import json
 import os
+import sys
 from collections import OrderedDict
 from typing import Any
 
@@ -410,7 +411,13 @@ def tokenizer_class_from_name(class_name: str) -> type[Any] | None:
             else:
                 module = importlib.import_module(f".{module_name}", "transformers.models")
             try:
-                return getattr(module, class_name)
+                result = getattr(module, class_name)
+                # BC v5: expose XxxFast alias and tokenization_*_fast submodule for pre-v5 remote code.
+                if (submod := getattr(result, "__module__", None)) and submod in sys.modules:
+                    base_mod = sys.modules[submod]
+                    setattr(base_mod, result.__name__ + "Fast", result)
+                    sys.modules.setdefault(submod + "_fast", base_mod)
+                return result
             except AttributeError:
                 continue
 
@@ -425,6 +432,10 @@ def tokenizer_class_from_name(class_name: str) -> type[Any] | None:
     if hasattr(main_module, class_name):
         return getattr(main_module, class_name)
 
+    # BC v5: If a XxxFast class is not found, retry without 'Fast' for tokenizers saved pre-v5.
+    if class_name.endswith("Fast"):
+        return tokenizer_class_from_name(class_name[:-4])
+
     return None
 
 
@@ -730,6 +741,9 @@ def from_pretrained(
             )
 
         if has_remote_code and trust_remote_code:
+            # BC v5: register *Fast aliases before remote code loads.
+            if tokenizer_config_class:
+                tokenizer_class_from_name(tokenizer_config_class.removesuffix("Fast"))
             tokenizer_class = get_class_from_dynamic_module(class_ref, pretrained_model_name_or_path, **kwargs)
             _ = kwargs.pop("code_revision", None)
             tokenizer_class.register_for_auto_class()

filename: tests/models/auto/test_tokenization_auto.py
patch: @@ -209,6 +209,17 @@ def test_custom_tokenizer_from_hub(self):
         )
         self.assertTrue(tokenizer.__class__.__module__.startswith("transformers_modules."))
 
+    @require_tokenizers
+    @slow
+    def test_remote_code_imports_removed_fast_submodule(self):
+        # BC v5: remote tokenizer code may import from a deprecated tokenization_*_fast
+        tokenizer = AutoTokenizer.from_pretrained(
+            "Alibaba-NLP/gte-Qwen2-1.5B-instruct",
+            trust_remote_code=True,
+            revision="a9af15a6372d7d6b25e9fb07c2ccb9e1fe645644",
+        )
+        self.assertGreater(len(tokenizer("hello world")["input_ids"]), 0)
+
     @require_tokenizers
     def test_voxtral_tokenizer_converts_from_tekken(self):
         # Test that voxtral tokenizer loads correctly when falling back to TokenizersBackend
Repository: rust-lang/rust
Pull request: Windows: Replace `GetThreadId`+`GetCurrentThread` with `GetCurrentThreadId`

Reference: https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getcurrentthreadid

<!-- homu-ignore:start -->
I added this to Miri but forgot to make the change in std.
r? @ChrisDenton
<!-- homu-ignore:end -->

Changed files:
filename: library/std/src/sys/pal/windows/c/bindings.txt
patch: @@ -2158,6 +2158,7 @@ GetCurrentDirectoryW
 GetCurrentProcess
 GetCurrentProcessId
 GetCurrentThread
+GetCurrentThreadId
 GetEnvironmentStringsW
 GetEnvironmentVariableW
 GetExitCodeProcess
@@ -2185,7 +2186,6 @@ GetSystemInfo
 GetSystemTimeAsFileTime
 GetSystemTimePreciseAsFileTime
 GetTempPathW
-GetThreadId
 GetUserProfileDirectoryW
 GetWindowsDirectoryW
 HANDLE

filename: library/std/src/sys/pal/windows/c/windows_sys.rs
patch: @@ -38,6 +38,7 @@ windows_targets::link!("kernel32.dll" "system" fn GetCurrentDirectoryW(nbufferle
 windows_targets::link!("kernel32.dll" "system" fn GetCurrentProcess() -> HANDLE);
 windows_targets::link!("kernel32.dll" "system" fn GetCurrentProcessId() -> u32);
 windows_targets::link!("kernel32.dll" "system" fn GetCurrentThread() -> HANDLE);
+windows_targets::link!("kernel32.dll" "system" fn GetCurrentThreadId() -> u32);
 windows_targets::link!("kernel32.dll" "system" fn GetEnvironmentStringsW() -> PWSTR);
 windows_targets::link!("kernel32.dll" "system" fn GetEnvironmentVariableW(lpname : PCWSTR, lpbuffer : PWSTR, nsize : u32) -> u32);
 windows_targets::link!("kernel32.dll" "system" fn GetExitCodeProcess(hprocess : HANDLE, lpexitcode : *mut u32) -> BOOL);
@@ -61,7 +62,6 @@ windows_targets::link!("kernel32.dll" "system" fn GetSystemInfo(lpsysteminfo : *
 windows_targets::link!("kernel32.dll" "system" fn GetSystemTimeAsFileTime(lpsystemtimeasfiletime : *mut FILETIME));
 windows_targets::link!("kernel32.dll" "system" fn GetSystemTimePreciseAsFileTime(lpsystemtimeasfiletime : *mut FILETIME));
 windows_targets::link!("kernel32.dll" "system" fn GetTempPathW(nbufferlength : u32, lpbuffer : PWSTR) -> u32);
-windows_targets::link!("kernel32.dll" "system" fn GetThreadId(thread : HANDLE) -> u32);
 windows_targets::link!("userenv.dll" "system" fn GetUserProfileDirectoryW(htoken : HANDLE, lpprofiledir : PWSTR, lpcchsize : *mut u32) -> BOOL);
 windows_targets::link!("kernel32.dll" "system" fn GetWindowsDirectoryW(lpbuffer : PWSTR, usize : u32) -> u32);
 windows_targets::link!("kernel32.dll" "system" fn InitOnceBeginInitialize(lpinitonce : *mut INIT_ONCE, dwflags : u32, fpending : *mut BOOL, lpcontext : *mut *mut core::ffi::c_void) -> BOOL);

filename: library/std/src/sys/pal/windows/thread.rs
patch: @@ -129,7 +129,7 @@ impl Thread {
 
 pub(crate) fn current_os_id() -> Option<u64> {
     // SAFETY: FFI call with no preconditions.
-    let id: u32 = unsafe { c::GetThreadId(c::GetCurrentThread()) };
+    let id: u32 = unsafe { c::GetCurrentThreadId() };
 
     // A return value of 0 indicates failed lookup.
     if id == 0 { None } else { Some(id.into()) }
Repository: electron/electron
Pull request: fix: crash in clipboard.readImage() on malformed image data

Backport of #50475

See that PR for details.


Notes: Fixed a crash in `clipboard.readImage()` when the clipboard contains malformed image data.

Changed files:
filename: shell/common/api/electron_api_clipboard.cc
patch: @@ -245,7 +245,11 @@ gfx::Image Clipboard::ReadImage(gin_helper::Arguments* args) {
           [](std::optional<gfx::Image>* image, base::RepeatingClosure cb,
              const std::vector<uint8_t>& result) {
             SkBitmap bitmap = gfx::PNGCodec::Decode(result);
-            image->emplace(gfx::Image::CreateFrom1xBitmap(bitmap));
+            if (bitmap.isNull()) {
+              image->emplace();
+            } else {
+              image->emplace(gfx::Image::CreateFrom1xBitmap(bitmap));
+            }
             std::move(cb).Run();
           },
           &image, std::move(callback)));
Repository: ollama/ollama
Pull request: cmd: add fallback for claude


Changed files:
filename: cmd/config/claude.go
patch: @@ -4,6 +4,8 @@ import (
 	"fmt"
 	"os"
 	"os/exec"
+	"path/filepath"
+	"runtime"
 )
 
 // Claude implements Runner for Claude Code integration
@@ -18,12 +20,32 @@ func (c *Claude) args(model string) []string {
 	return nil
 }
 
+func (c *Claude) findPath() (string, error) {
+	if p, err := exec.LookPath("claude"); err == nil {
+		return p, nil
+	}
+	home, err := os.UserHomeDir()
+	if err != nil {
+		return "", err
+	}
+	name := "claude"
+	if runtime.GOOS == "windows" {
+		name = "claude.exe"
+	}
+	fallback := filepath.Join(home, ".claude", "local", name)
+	if _, err := os.Stat(fallback); err != nil {
+		return "", err
+	}
+	return fallback, nil
+}
+
 func (c *Claude) Run(model string) error {
-	if _, err := exec.LookPath("claude"); err != nil {
+	claudePath, err := c.findPath()
+	if err != nil {
 		return fmt.Errorf("claude is not installed, install from https://code.claude.com/docs/en/quickstart")
 	}
 
-	cmd := exec.Command("claude", c.args(model)...)
+	cmd := exec.Command(claudePath, c.args(model)...)
 	cmd.Stdin = os.Stdin
 	cmd.Stdout = os.Stdout
 	cmd.Stderr = os.Stderr

filename: cmd/config/claude_test.go
patch: @@ -1,6 +1,9 @@
 package config
 
 import (
+	"os"
+	"path/filepath"
+	"runtime"
 	"slices"
 	"testing"
 )
@@ -19,6 +22,62 @@ func TestClaudeIntegration(t *testing.T) {
 	})
 }
 
+func TestClaudeFindPath(t *testing.T) {
+	c := &Claude{}
+
+	t.Run("finds claude in PATH", func(t *testing.T) {
+		tmpDir := t.TempDir()
+		name := "claude"
+		if runtime.GOOS == "windows" {
+			name = "claude.exe"
+		}
+		fakeBin := filepath.Join(tmpDir, name)
+		os.WriteFile(fakeBin, []byte("#!/bin/sh\n"), 0o755)
+		t.Setenv("PATH", tmpDir)
+
+		got, err := c.findPath()
+		if err != nil {
+			t.Fatalf("unexpected error: %v", err)
+		}
+		if got != fakeBin {
+			t.Errorf("findPath() = %q, want %q", got, fakeBin)
+		}
+	})
+
+	t.Run("falls back to ~/.claude/local/claude", func(t *testing.T) {
+		tmpDir := t.TempDir()
+		setTestHome(t, tmpDir)
+		t.Setenv("PATH", t.TempDir()) // empty dir, no claude binary
+
+		name := "claude"
+		if runtime.GOOS == "windows" {
+			name = "claude.exe"
+		}
+		fallback := filepath.Join(tmpDir, ".claude", "local", name)
+		os.MkdirAll(filepath.Dir(fallback), 0o755)
+		os.WriteFile(fallback, []byte("#!/bin/sh\n"), 0o755)
+
+		got, err := c.findPath()
+		if err != nil {
+			t.Fatalf("unexpected error: %v", err)
+		}
+		if got != fallback {
+			t.Errorf("findPath() = %q, want %q", got, fallback)
+		}
+	})
+
+	t.Run("returns error when neither PATH nor fallback exists", func(t *testing.T) {
+		tmpDir := t.TempDir()
+		setTestHome(t, tmpDir)
+		t.Setenv("PATH", t.TempDir()) // empty dir, no claude binary
+
+		_, err := c.findPath()
+		if err == nil {
+			t.Fatal("expected error, got nil")
+		}
+	})
+}
+
 func TestClaudeArgs(t *testing.T) {
 	c := &Claude{}
Repository: vercel/next.js
Pull request: [test] Show decoded binary WebSocket messages in traces

Follow-up to https://github.com/vercel/next.js/pull/91266

Showing the Buffer is just noise. Now we print it decoded which shows us the Flight data from the debug channel:
<img width="1664" height="842" alt="CleanShot 2026-03-13 at 13 42 08@2x" src="https://github.com/user-attachments/assets/086198fa-e48f-4af7-bd34-9e002d4c5b84" />

I switched to just evaluating the string. It'll still show up in traces but won't show up in browser logs i.e. CI logs. Felt to spammy.


Changed files:
filename: test/lib/browsers/playwright.ts
patch: @@ -318,15 +318,17 @@ export class Playwright<TCurrent = undefined> {
     }
 
     page.on('websocket', (ws) => {
+      const decoder = tracePlaywright ? new TextDecoder() : null
       if (tracePlaywright) {
-        page
-          .evaluate(`console.log('connected to ws at ${ws.url()}')`)
-          .catch(() => {})
+        // We're just evaluating a string here so that it appears in Playwright
+        // traces.
+        // console.log spams CI logs. If you already have a browser open, you can
+        // see WebSocket messages in the network tab of dev tools.
+        // TODO: Revisit once https://github.com/microsoft/playwright/issues/10996 is resolved.
+        page.evaluate(`'connected to ws at ${ws.url()}'`).catch(() => {})
 
         ws.on('close', () =>
-          page
-            .evaluate(`console.log('closed websocket ${ws.url()}')`)
-            .catch(() => {})
+          page.evaluate(`'closed websocket ${ws.url()}'`).catch(() => {})
         )
       }
       ws.on('framereceived', (frame) => {
@@ -337,7 +339,7 @@ export class Playwright<TCurrent = undefined> {
           page
             // Note that passing the payload as a an argument is 2 orders of magnitude more expensive in Playwright.
             .evaluate(
-              `console.log('received ws message ${JSON.stringify(payload)}')`
+              `'received ws message ${JSON.stringify(typeof payload === 'string' ? payload : decoder!.decode(payload))}'`
             )
             .catch(() => {})
         }
Repository: ollama/ollama
Pull request: glm4moelite: fix attention scale calculation

Use the original key dimension (qkNopeHeadDim + qkRopeHeadDim = 256) for the attention scale instead of the MLA absorbed dimension (kvLoraRank + qkRopeHeadDim = 576).

MLA absorption is a mathematically equivalent reorganization of the attention computation - it should not change the effective attention scale. The scale should match training, which uses 1/sqrt(256).

This improves tool calling and model looping issues.

Changed files:
filename: model/models/glm4moelite/model.go
patch: @@ -223,12 +223,7 @@ func New(c fs.Config) (model.Model, error) {
 
 	keyLength := int(c.Uint("attention.key_length"))
 	valueLength := int(c.Uint("attention.value_length"))
-	kvLoraRank := int(c.Uint("attention.kv_lora_rank"))
-	qkRopeHeadDim := int(c.Uint("rope.dimension_count"))
-
-	// For MLA absorption, the effective key dimension is kvLoraRank + qkRopeHeadDim
-	mlaKeyLength := kvLoraRank + qkRopeHeadDim
-	kqScale := 1.0 / math.Sqrt(float64(mlaKeyLength))
+	kqScale := 1.0 / math.Sqrt(float64(keyLength))
 
 	var pre []string
 	switch c.String("tokenizer.ggml.pre") {
Repository: ollama/ollama
Pull request: glm4moelite: quantize more tensors to 8-bit and avoid double BOS token


Changed files:
filename: model/models/glm4moelite/model.go
patch: @@ -246,7 +246,7 @@ func New(c fs.Config) (model.Model, error) {
 				Values: c.Strings("tokenizer.ggml.tokens"),
 				Types:  c.Ints("tokenizer.ggml.token_type"),
 				Merges: c.Strings("tokenizer.ggml.merges"),
-				AddBOS: c.Bool("tokenizer.ggml.add_bos_token", true),
+				AddBOS: c.Bool("tokenizer.ggml.add_bos_token", false),
 				BOS:    []int32{int32(c.Uint("tokenizer.ggml.bos_token_id"))},
 				AddEOS: c.Bool("tokenizer.ggml.add_eos_token", false),
 				EOS: append(

filename: server/quantization.go
patch: @@ -95,6 +95,13 @@ func getTensorNewType(kv fsggml.KV, qs *quantizeState, newType fsggml.TensorType
 			// for the 8-expert model, bumping this to Q8_0 trades just ~128MB
 			newType = fsggml.TensorTypeQ8_0
 		}
+	} else if strings.Contains(name, "attn_k_b.weight") ||
+		strings.Contains(name, "attn_v_b.weight") ||
+		strings.Contains(name, "attn_kv_a_mqa.weight") ||
+		strings.Contains(name, "attn_q_a.weight") ||
+		strings.Contains(name, "attn_q_b.weight") {
+		// MLA tensors need higher precision to avoid quality degradation
+		newType = fsggml.TensorTypeQ8_0
 	} else if strings.Contains(name, "ffn_down") {
 		iLayer := qs.iFfnDown
 		n_layer := qs.nFfnDown
Repository: facebook/react
Pull request: fix[devtools]: feature-check document with typeof instead of direct reference

Follow-up to https://github.com/facebook/react/pull/35296.

We can get `ReferenceError` if this is unavailable. Using `typeof` check instead for safety.

Changed files:
filename: packages/react-devtools-shared/src/backend/views/Highlighter/index.js
patch: @@ -96,8 +96,11 @@ export default function setupHighlighter(
     applyingScroll = false;
   }
 
-  // $FlowFixMe[method-unbinding]
-  if (document && typeof document.addEventListener === 'function') {
+  if (
+    typeof document === 'object' &&
+    // $FlowFixMe[method-unbinding]
+    typeof document.addEventListener === 'function'
+  ) {
     document.addEventListener('scroll', () => {
       if (!scrollTimer) {
         // Periodically synchronize the scroll while scrolling.
Repository: electron/electron
Pull request: fix: crash in clipboard.readImage() on malformed image data

Backport of #50475

See that PR for details.


Notes: Fixed a crash in `clipboard.readImage()` when the clipboard contains malformed image data.

Changed files:
filename: shell/common/api/electron_api_clipboard.cc
patch: @@ -266,7 +266,11 @@ gfx::Image Clipboard::ReadImage(gin::Arguments* const args) {
           [](std::optional<gfx::Image>* image, base::RepeatingClosure cb,
              const std::vector<uint8_t>& result) {
             SkBitmap bitmap = gfx::PNGCodec::Decode(result);
-            image->emplace(gfx::Image::CreateFrom1xBitmap(bitmap));
+            if (bitmap.isNull()) {
+              image->emplace();
+            } else {
+              image->emplace(gfx::Image::CreateFrom1xBitmap(bitmap));
+            }
             std::move(cb).Run();
           },
           &image, std::move(callback)));
Repository: huggingface/transformers
Pull request: [CI] Temporarily skip Mistral4 tests as they almost all fail

# What does this PR do?

As per the title. cc @3outeille as I know you're looking into it


Changed files:
filename: tests/models/mistral4/test_modeling_mistral4.py
patch: @@ -49,6 +49,7 @@ class Mistral4ModelTester(CausalLMModelTester):
 
 
 @require_torch
+@unittest.skip("Causing a lot of failures on CI")
 class Mistral4ModelTest(CausalLMModelTest, unittest.TestCase):
     _is_stateful = True
     model_split_percents = [0.5, 0.6]
Repository: nodejs/node
Pull request: test: skip test-cluster-dgram-reuse on AIX 7.3

Identified during AIX 7.3 testing being done under https://github.com/nodejs/node/issues/61660

TL;DR This is a workaround for a hang which is showing up when node is built on or AIX 7.3 machines. If the binary is built on 7.2 and then run on 7.3 (which would be true for anyone using our release builds) then it seems to work ok. It is a consistently reproducible failure.

While this version check technically stops an AIX 7.2 binary being tested on 7.3 it is an appropriate change to allow AIX 7.3 to be included in the CI without impacting the coverage we have on 7.2.

Alternate solutions:
- Expose this through `common` and use it there (Suggestions on variable names etc. welcome if we go for this, but I don't think there's too much precedent)
- Identify and fix the underlying problem (Analysis there will continue todo this anyway, but I'd rather not hold up adding 7.3 - which is now nearly 5 years old - into the mix right now if possible since we're very close to being able to do that now)


Changed files:
filename: test/parallel/test-cluster-dgram-reuse.js
patch: @@ -1,7 +1,10 @@
 'use strict';
 const common = require('../common');
+const os = require('os');
 if (common.isWindows)
   common.skip('dgram clustering is currently not supported on windows.');
+if (common.isAIX && os.release() === '7.3')
+  common.skip('dgram clutering with reuse does not work if built on AIX 7.3.');
 
 const assert = require('assert');
 const cluster = require('cluster');
Repository: ollama/ollama
Pull request: README: Update the "Ollama for ruby" to the most popular and maintained ruby gem. 

The ollama-ai ruby gem is vastly less popular and seems unmaintained:
https://rubygems.org/gems/ollama-ai

The defacto standard with the most downloads in the ruby ecosystem is ruby_llm
https://rubygems.org/gems/ruby_llm

I would link to ruby_llm to avoid complication and guarantee feature compatibility with ollama.

Otherwise people using ruby might get lost on the way.

Changed files:
filename: README.md
patch: @@ -558,7 +558,7 @@ See the [API documentation](./docs/api.md) for all endpoints.
 - [LiteLLM](https://github.com/BerriAI/litellm)
 - [OllamaFarm for Go](https://github.com/presbrey/ollamafarm)
 - [OllamaSharp for .NET](https://github.com/awaescher/OllamaSharp)
-- [Ollama for Ruby](https://github.com/gbaptista/ollama-ai)
+- [Ollama for Ruby](https://github.com/crmne/ruby_llm)
 - [Ollama-rs for Rust](https://github.com/pepperoni21/ollama-rs)
 - [Ollama-hpp for C++](https://github.com/jmont-dev/ollama-hpp)
 - [Ollama4j for Java](https://github.com/ollama4j/ollama4j)
Repository: rust-lang/rust
Pull request: triagebot: Add a mention for `dec2flt`, `flt2dec`, and `fmt/num.rs`


Changed files:
filename: triagebot.toml
patch: @@ -1059,6 +1059,18 @@ gets adapted for the changes, if necessary.
 """
 cc = ["@rust-lang/miri", "@RalfJung", "@oli-obk", "@lcnr"]
 
+[mentions."library/core/src/num/dec2flt"]
+message = "Some changes occurred in float parsing"
+cc = ["@tgross35"]
+
+[mentions."library/core/src/num/flt2dec"]
+message = "Some changes occurred in float printing"
+cc = ["@tgross35"]
+
+[mentions."library/core/src/fmt/num.rs"]
+message = "Some changes occurred in integer formatting"
+cc = ["@tgross35"]
+
 [mentions."library/portable-simd"]
 message = """
 Portable SIMD is developed in its own repository. If possible, consider \