helloadhavan/github_issues huggingface dataset:
Repository: electron/electron
Pull request: ci: output build cache hit rate as GHA annotation

#### Description of Change

<!--
Thank you for your Pull Request. Please provide a description above and review
the requirements below.

Contributors guide: https://github.com/electron/electron/blob/main/CONTRIBUTING.md

NOTE: PRS submitted without this template will be automatically closed.
-->

Small quality of life improvement here so you can easily see the effective cache hit rate for any given build without needing to open the 20 MB log file and search for this line.

This is what it will look like, as an annotation at the top of every build job:

<img width="330" height="245" alt="Example Screenshot" src="https://github.com/user-attachments/assets/8de3eced-986c-42b0-a9fa-438d2947ce0d" />

#### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->

- [x] PR description included

#### Release Notes

Notes: none <!-- 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 -->


Changed files:
filename: script/build-stats.mjs
patch: @@ -32,7 +32,8 @@ async function main () {
   }));
   const hitRate = stats.CacheHit / (stats.Remote + stats.CacheHit + stats.LocalFallback);
 
-  console.log(`Effective cache hit rate: ${(hitRate * 100).toFixed(2)}%`);
+  const messagePrefix = process.env.GITHUB_ACTIONS ? '::notice title=Build Stats::' : '';
+  console.log(`${messagePrefix}Effective cache hit rate: ${(hitRate * 100).toFixed(2)}%`);
 
   if (uploadStats) {
     if (!process.env.DD_API_KEY) {
Repository: huggingface/transformers
Pull request: Fix: Conditionally import `torch.distributed.fsdp` in `trainer_seq2seq.py`

# What does this PR do?

`torch.distributed.fsdp` is not available in all PyTorch builds (for example, Windows ROCm). Importing it unconditionally at the top level causes an immediate crash with:
```
ModuleNotFoundError: No module named 'torch._C._distributed_c10d'; 'torch._C' is not a package
```
This makes `import transformers` fail entirely on those builds, even for users who have no intention of using FSDP or distributed training.

## Changes
- Moved `from torch.distributed.fsdp import FullyShardedDataParallel` to after the unconditional imports, guarded with `if torch.distributed.is_available()`
- Added the same guard to the `isinstance(self.model, FullyShardedDataParallel)` check to avoid a `NameError` at runtime on non-distributed builds

## Prior art

A previous fix for the same class of issue in this repo was made in:
- [huggingface/transformers#40038](https://github.com/huggingface/transformers/pull/40038)

The same fix was applied to `huggingface/diffusers` in:
- [huggingface/diffusers#12420](https://github.com/huggingface/diffusers/pull/12420)
- [huggingface/diffusers#12425](https://github.com/huggingface/diffusers/pull/12425)



## Before submitting
- [ ] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).
- [x] Did you read the [contributor guideline](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md#create-a-pull-request),
      Pull Request section?
- [ ] Was this discussed/approved via a Github issue or the [forum](https://discuss.huggingface.co/)? Please add a link
      to it if that's the case.
- [ ] Did you make sure to update the documentation with your changes? Here are the
      [documentation guidelines](https://github.com/huggingface/transformers/tree/main/docs), and
      [here are tips on formatting docstrings](https://github.com/huggingface/transformers/tree/main/docs#writing-source-documentation).
- [ ] Did you write any new necessary tests?


## Who can review?

@SunMarc @3outeille

Changed files:
filename: src/transformers/trainer_seq2seq.py
patch: @@ -20,7 +20,6 @@
 
 import torch
 from torch import nn
-from torch.distributed.fsdp import FullyShardedDataParallel
 from torch.utils.data import Dataset
 
 from .generation.configuration_utils import GenerationConfig
@@ -30,6 +29,9 @@
 from .utils import is_datasets_available, logging
 
 
+if torch.distributed.is_available():
+    from torch.distributed.fsdp import FullyShardedDataParallel
+
 if is_datasets_available():
     import datasets
 
@@ -319,7 +321,7 @@ def prediction_step(
 
         summon_full_params_context = (
             FullyShardedDataParallel.summon_full_params(self.model)
-            if isinstance(self.model, FullyShardedDataParallel)
+            if torch.distributed.is_available() and isinstance(self.model, FullyShardedDataParallel)
             else contextlib.nullcontext()
         )
Repository: electron/electron
Pull request: ci: don't run auto close for certain circumstances

#### Description of Change
- Followup to #50348.  That PR unfortunately autoclosed roller PRs since those use a simpler PR description.  This PR changes the auto close logic to only fire for fork PRs.  Additionally, this PR changes to ignore draft PRs until they are ready for review.
<!--
Thank you for your Pull Request. Please provide a description above and review
the requirements below.

Contributors guide: https://github.com/electron/electron/blob/main/CONTRIBUTING.md

NOTE: PRS submitted without this template will be automatically closed.
-->

#### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->

- [x] PR description included
- [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: <!-- 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: .github/workflows/pr-template-check.yml
patch: @@ -2,14 +2,13 @@ name: PR Template Check
 
 on:
   pull_request_target:
-    types: [opened, edited]
-    branches:
-      - main
+    types: [opened, ready_for_review]
 
 permissions: {}
 
 jobs:
   check-pr-template:
+    if: ${{ github.event.pull_request.head.repo.fork && !github.event.pull_request.draft && !startsWith(github.head_ref, 'roller/') }}
     name: Check PR Template
     runs-on: ubuntu-slim
     permissions:
Repository: ollama/ollama
Pull request: llm: Avoid integer underflow on llama engine memory layout

On the llama engine, when we compute the memory layout, we reserve a buffer to allow for some flexibility for incorrect estimates. This is subtracted from GPU free memory and on GPUs with limited memory, it may underflow.

Fixes #13494

Changed files:
filename: llm/server.go
patch: @@ -524,8 +524,13 @@ func (s *llamaServer) Load(ctx context.Context, systemInfo ml.SystemInfo, system
 	// Use the size of one layer as a buffer
 	layers := s.ggml.Tensors().GroupLayers()
 	if blk0, ok := layers["blk.0"]; ok {
+		buffer := blk0.Size() + kv[0]
 		for i := range gpus {
-			gpus[i].FreeMemory -= blk0.Size() + kv[0]
+			if gpus[i].FreeMemory > buffer {
+				gpus[i].FreeMemory -= buffer
+			} else {
+				gpus[i].FreeMemory = 0
+			}
 		}
 	} else {
 		slog.Warn("model missing blk.0 layer size")
@@ -575,7 +580,11 @@ func (s *llamaServer) Load(ctx context.Context, systemInfo ml.SystemInfo, system
 			projectorGPU = firstIntegrated
 		}
 
-		gpus[projectorGPU].FreeMemory -= projectorWeights
+		if gpus[projectorGPU].FreeMemory > projectorWeights {
+			gpus[projectorGPU].FreeMemory -= projectorWeights
+		} else {
+			gpus[projectorGPU].FreeMemory = 0
+		}
 	}
 
 	var kvTotal uint64
Repository: nodejs/node
Pull request: crypto: default ML-KEM and ML-DSA pkcs8 export to seed-only format

Configure OpenSSL provider parameters to prefer seed-only format when exporting ML-KEM and ML-DSA private keys that contain a seed. Keys without a seed continue to use the private-only (`expandedKey`) format.

The `both` format (current default) will not be supported by BoringSSL and Web Cryptography at all and seed-only is overall the better format.

Note: this isn't possible on a per-encode basis [until 4.0](https://github.com/openssl/openssl/pull/29206)

Changed files:
filename: doc/api/crypto.md
patch: @@ -2121,6 +2121,11 @@ type, value, and parameters. This method is not
 <!-- YAML
 added: v11.6.0
 changes:
+  - version: REPLACEME
+    pr-url: https://github.com/nodejs/node/pull/62178
+    description: ML-KEM and ML-DSA private key `'pkcs8'` export now
+                 uses seed-only format by default when a seed is
+                 available.
   - version: v15.9.0
     pr-url: https://github.com/nodejs/node/pull/37081
     description: Added support for `'jwk'` format.

filename: src/crypto/crypto_util.cc
patch: @@ -138,6 +138,23 @@ void InitCryptoOnce() {
 #endif
 
   OPENSSL_init_ssl(0, settings);
+
+#if OPENSSL_WITH_PQC
+  // Configure all loaded providers to prefer seed-only format for ML-KEM and
+  // ML-DSA private keys in PKCS#8 export, falling back to priv-only when a
+  // seed is not available. The provider encoder reads these parameters at
+  // encoding time via ossl_prov_ctx_get_param().
+  OSSL_PROVIDER_do_all(
+      nullptr,
+      [](OSSL_PROVIDER* provider, void*) -> int {
+        OSSL_PROVIDER_add_conf_parameter(
+            provider, "ml-kem.output_formats", "seed-only,priv-only");
+        OSSL_PROVIDER_add_conf_parameter(
+            provider, "ml-dsa.output_formats", "seed-only,priv-only");
+        return 1;
+      },
+      nullptr);
+#endif
   OPENSSL_INIT_free(settings);
   settings = nullptr;
 

filename: test/parallel/test-crypto-pqc-key-objects-ml-dsa.js
patch: @@ -69,7 +69,7 @@ for (const [asymmetricKeyType, pubLen] of [
     assertPublicKey(createPublicKey(key));
     key.export({ format: 'der', type: 'pkcs8' });
     if (hasSeed) {
-      assert.strictEqual(key.export({ format: 'pem', type: 'pkcs8' }), keys.private);
+      assert.strictEqual(key.export({ format: 'pem', type: 'pkcs8' }), keys.private_seed_only);
     } else {
       assert.strictEqual(key.export({ format: 'pem', type: 'pkcs8' }), keys.private_priv_only);
     }

filename: test/parallel/test-crypto-pqc-key-objects-ml-kem.js
patch: @@ -48,7 +48,7 @@ for (const asymmetricKeyType of ['ml-kem-512', 'ml-kem-768', 'ml-kem-1024']) {
     assertPublicKey(createPublicKey(key));
     key.export({ format: 'der', type: 'pkcs8' });
     if (hasSeed) {
-      assert.strictEqual(key.export({ format: 'pem', type: 'pkcs8' }), keys.private);
+      assert.strictEqual(key.export({ format: 'pem', type: 'pkcs8' }), keys.private_seed_only);
     } else {
       assert.strictEqual(key.export({ format: 'pem', type: 'pkcs8' }), keys.private_priv_only);
     }
Repository: huggingface/transformers
Pull request: fix: cast to proper dtype in EmbeddingParallel

# What does this PR do?

The output function hook in `EmbeddingParallel` casts the mask to fp32. It breaks things for neuron devices. Suggested fix: cast to the outputs' dtype.


Changed files:
filename: src/transformers/integrations/tensor_parallel.py
patch: @@ -967,7 +967,7 @@ def _prepare_output_fn(self, mod, outputs, device_mesh):
             input_mask = mod._input_mask
             # Use multiplication instead of in-place assignment to preserve gradients
             mask_expanded = input_mask.unsqueeze(-1).expand_as(outputs)
-            outputs = outputs * (~mask_expanded).float()
+            outputs = outputs * (~mask_expanded).to(outputs.dtype)
             del mod._input_mask
 
         return all_reduce_forward(outputs, device_mesh)
Repository: ollama/ollama
Pull request: Revert "Omit args and params in ToolFunctions"

Reverts ollama/ollama#13516

Changed files:
filename: api/types.go
patch: @@ -341,7 +341,7 @@ type ToolFunctionParameters struct {
 	Defs       any                     `json:"$defs,omitempty"`
 	Items      any                     `json:"items,omitempty"`
 	Required   []string                `json:"required,omitempty"`
-	Properties map[string]ToolProperty `json:"properties,omitempty"`
+	Properties map[string]ToolProperty `json:"properties"`
 }
 
 func (t *ToolFunctionParameters) String() string {
@@ -352,7 +352,7 @@ func (t *ToolFunctionParameters) String() string {
 type ToolFunction struct {
 	Name        string                 `json:"name"`
 	Description string                 `json:"description,omitempty"`
-	Parameters  ToolFunctionParameters `json:"parameters,omitempty"`
+	Parameters  ToolFunctionParameters `json:"parameters"`
 }
 
 func (t *ToolFunction) String() string {

filename: server/routes_debug_test.go
patch: @@ -363,7 +363,7 @@ func TestChatDebugRenderOnly(t *testing.T) {
 				DebugRenderOnly: true,
 			},
 			expectDebug:    true,
-			expectTemplate: "[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get weather information\",\"parameters\":{\"type\":\"\"}}}]user: Get the weather\n",
+			expectTemplate: "[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get weather information\",\"parameters\":{\"type\":\"\",\"properties\":null}}}]user: Get the weather\n",
 		},
 	}
Repository: huggingface/transformers
Pull request: Allow to disable stdout hiding for TP

# What does this PR do?

By default, `initialize_tensor_parallelism` hides stdout and stderr for ranks > 0. While convenient, this is not perfect for dev and debugging. I suggest we simply add a flag to be able to disable this feature if wanted.

Changed files:
filename: src/transformers/integrations/tensor_parallel.py
patch: @@ -82,13 +82,6 @@ def initialize_tensor_parallelism(
             index = current_device.current_device()
             tp_device = torch.device(device_type, index)
             device_map = tp_device
-            # Silence output for non-primary ranks
-            if index > 0:
-                import sys
-
-                sys.stdout = open(os.devnull, "w")
-                sys.stderr = open(os.devnull, "w")
-
         else:
             tp_device = torch.device(device_type)
             device_map = device_type or {}
Repository: ollama/ollama
Pull request: Omit args and params in ToolFunctions


Changed files:
filename: api/types.go
patch: @@ -341,7 +341,7 @@ type ToolFunctionParameters struct {
 	Defs       any                     `json:"$defs,omitempty"`
 	Items      any                     `json:"items,omitempty"`
 	Required   []string                `json:"required,omitempty"`
-	Properties map[string]ToolProperty `json:"properties"`
+	Properties map[string]ToolProperty `json:"properties,omitempty"`
 }
 
 func (t *ToolFunctionParameters) String() string {
@@ -352,7 +352,7 @@ func (t *ToolFunctionParameters) String() string {
 type ToolFunction struct {
 	Name        string                 `json:"name"`
 	Description string                 `json:"description,omitempty"`
-	Parameters  ToolFunctionParameters `json:"parameters"`
+	Parameters  ToolFunctionParameters `json:"parameters,omitempty"`
 }
 
 func (t *ToolFunction) String() string {

filename: server/routes_debug_test.go
patch: @@ -363,7 +363,7 @@ func TestChatDebugRenderOnly(t *testing.T) {
 				DebugRenderOnly: true,
 			},
 			expectDebug:    true,
-			expectTemplate: "[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get weather information\",\"parameters\":{\"type\":\"\",\"properties\":null}}}]user: Get the weather\n",
+			expectTemplate: "[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get weather information\",\"parameters\":{\"type\":\"\"}}}]user: Get the weather\n",
 		},
 	}
Repository: vercel/next.js
Pull request: Turbopack: Only patch lockfile when bindings fails to load

## What?

Currently the lockfile patching is always triggered eagerly but it's only awaited when it fails to load. The patching still affects builds that don't need it. This changes that.

Changed files:
filename: packages/next/src/build/swc/index.ts
patch: @@ -229,16 +229,6 @@ export async function loadBindings(
   }
 
   pendingBindings = new Promise(async (resolve, reject) => {
-    if (!lockfilePatchPromise.cur) {
-      // always run lockfile check once so that it gets patched
-      // even if it doesn't fail to load locally
-      lockfilePatchPromise.cur = (
-        require('../../lib/patch-incorrect-lockfile') as typeof import('../../lib/patch-incorrect-lockfile')
-      )
-        .patchIncorrectLockfile(process.cwd())
-        .catch(console.error)
-    }
-
     let attempts: any[] = []
     const disableWasmFallback = process.env.NEXT_DISABLE_SWC_WASM
     const unsupportedPlatform = triples.some(
@@ -428,7 +418,14 @@ async function logLoadFailure(attempts: any, triedWasm = false) {
     wasm: triedWasm ? 'failed' : undefined,
     nativeBindingsErrorCode: lastNativeBindingsLoadErrorCode,
   })
-  await (lockfilePatchPromise.cur || Promise.resolve())
+  if (!lockfilePatchPromise.cur) {
+    lockfilePatchPromise.cur = (
+      require('../../lib/patch-incorrect-lockfile') as typeof import('../../lib/patch-incorrect-lockfile')
+    )
+      .patchIncorrectLockfile(process.cwd())
+      .catch(console.error)
+  }
+  await lockfilePatchPromise.cur
 
   Log.error(
     `Failed to load SWC binary for ${PlatformName}/${ArchName}, see more info here: https://nextjs.org/docs/messages/failed-loading-swc`

filename: packages/next/src/lib/patch-incorrect-lockfile.ts
patch: @@ -1,4 +1,4 @@
-import { promises } from 'fs'
+import { readFileSync, writeFileSync } from 'fs'
 import * as Log from '../build/output/log'
 import findUp from 'next/dist/compiled/find-up'
 // @ts-ignore no-json types
@@ -46,7 +46,7 @@ export async function patchIncorrectLockfile(dir: string) {
     // if no lockfile present there is no action to take
     return
   }
-  const content = await promises.readFile(lockfilePath, 'utf8')
+  const content = readFileSync(lockfilePath, 'utf8')
   // maintain current line ending
   const endingNewline = content.endsWith('\r\n')
     ? '\r\n'
@@ -161,7 +161,7 @@ export async function patchIncorrectLockfile(dir: string) {
       }
     }
 
-    await promises.writeFile(
+    writeFileSync(
       lockfilePath,
       JSON.stringify(lockfileParsed, null, 2) + endingNewline
     )
Repository: huggingface/transformers
Pull request: feat: add neuron in tensor parallelism initialization

# What does this PR do?

Add the `neuron` backend for initialization in TP.

Changed files:
filename: src/transformers/integrations/tensor_parallel.py
patch: @@ -63,7 +63,7 @@ def initialize_tensor_parallelism(
                 local_rank = int(os.environ["LOCAL_RANK"])
                 world_size = int(os.environ["WORLD_SIZE"])
 
-                backend_map = {"cuda": "nccl", "cpu": "gloo", "xpu": "xccl", "hpu": "hccl"}
+                backend_map = {"cuda": "nccl", "cpu": "gloo", "xpu": "xccl", "hpu": "hccl", "neuron": "neuron"}
                 backend = backend_map.get(device_type)
 
                 torch.distributed.init_process_group(backend=backend, rank=rank, world_size=world_size)
Repository: vercel/next.js
Pull request: Use charCodeAt for normalizePathTrailingSlash

## What?

Using `charCodeAt` is faster than startWith for this case.

Changed files:
filename: packages/next/src/client/normalize-trailing-slash.ts
patch: @@ -6,7 +6,8 @@ import { parsePath } from '../shared/lib/router/utils/parse-path'
  * in `next.config.js`.
  */
 export const normalizePathTrailingSlash = (path: string) => {
-  if (!path.startsWith('/') || process.env.__NEXT_MANUAL_TRAILING_SLASH) {
+  // 47 is the char code for '/'
+  if (path.charCodeAt(0) !== 47 || process.env.__NEXT_MANUAL_TRAILING_SLASH) {
     return path
   }
Repository: ollama/ollama
Pull request: revert granite-embedding


Changed files:
filename: model/models/bert/embed.go
patch: @@ -157,8 +157,6 @@ func New(c fs.Config) (model.Model, error) {
 	switch c.String("tokenizer.ggml.model", "bert") {
 	case "bert":
 		processor = model.NewWordPiece(vocab, true)
-	case "gpt2":
-		processor = model.NewBytePairEncoding(vocab)
 	default:
 		return nil, model.ErrUnsupportedTokenizer
 	}
Repository: rust-lang/rust
Pull request: resolve: Never lookup glob names in modules from other crates

This is basically rust-lang/rust#151211, but with the check moved one level above and slightly more work skipped.
rust-lang/rust#151211 showed small, but very consistent perf improvements (see "Show non-relevant results"), but I didn't notice back then.

(This change logically falls into my current work on splitting local and external name resolution modules in type system https://github.com/petrochenkov/rust/tree/modmodmod)

Changed files:
filename: compiler/rustc_resolve/src/ident.rs
patch: @@ -638,6 +638,13 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
                     Err(ControlFlow::Break(..)) => return decl,
                 }
             }
+            Scope::ModuleGlobs(module, _)
+                if let ModuleKind::Def(_, def_id, _) = module.kind
+                    && !def_id.is_local() =>
+            {
+                // Fast path: external module decoding only creates non-glob declarations.
+                Err(Determined)
+            }
             Scope::ModuleGlobs(module, derive_fallback_lint_id) => {
                 let (adjusted_parent_scope, adjusted_finalize) = if matches!(
                     scope_set,
Repository: vercel/next.js
Pull request: Perf: Use headers object directly in checkIsOnDemandRevalidate

## What?

Converting from `req.headers` to `Headers` is expensive. Here it's only used to check/read headers only, so directly using the object when it's available is better.

Changed files:
filename: packages/next/src/server/api-utils/index.ts
patch: @@ -1,4 +1,4 @@
-import type { IncomingMessage } from 'http'
+import type { IncomingHttpHeaders, IncomingMessage } from 'http'
 import type { BaseNextRequest } from '../base-http'
 import type { CookieSerializeOptions } from 'next/dist/compiled/cookie'
 import type { NextApiResponse } from '../../shared/lib/utils'
@@ -83,12 +83,26 @@ export function checkIsOnDemandRevalidate(
   isOnDemandRevalidate: boolean
   revalidateOnlyGenerated: boolean
 } {
-  const headers = HeadersAdapter.from(req.headers)
+  // Headers is a plain object for Node.js, Headers object in Edge runtime
+  if (typeof req.headers.get === 'function') {
+    const headers = HeadersAdapter.from(req.headers)
 
-  const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)
+    const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)
+    const isOnDemandRevalidate = previewModeId === previewProps.previewModeId
+
+    const revalidateOnlyGenerated = headers.has(
+      PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER
+    )
+
+    return { isOnDemandRevalidate, revalidateOnlyGenerated }
+  }
+
+  const headers = req.headers as IncomingHttpHeaders
+
+  const previewModeId = headers[PRERENDER_REVALIDATE_HEADER]
   const isOnDemandRevalidate = previewModeId === previewProps.previewModeId
 
-  const revalidateOnlyGenerated = headers.has(
+  const revalidateOnlyGenerated = headers.hasOwnProperty(
     PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER
   )
Repository: ollama/ollama
Pull request: remove unnecessary code

slog is already lazily evaluated so this code is completely redundant

Changed files:
filename: model/bytepairencoding.go
patch: @@ -2,9 +2,7 @@ package model
 
 import (
 	"cmp"
-	"fmt"
 	"iter"
-	"log/slog"
 	"slices"
 	"strings"
 
@@ -245,14 +243,6 @@ func (bpe BytePairEncoding) Encode(s string, addSpecial bool) ([]int32, error) {
 	return ids, nil
 }
 
-type lazyIdsString struct {
-	ids []int32
-}
-
-func (l lazyIdsString) LogValue() slog.Value {
-	return slog.AnyValue(fmt.Sprint(l.ids))
-}
-
 func (bpe BytePairEncoding) Decode(ids []int32) (string, error) {
 	var sb strings.Builder
 	for _, id := range ids {
@@ -277,6 +267,6 @@ func (bpe BytePairEncoding) Decode(ids []int32) (string, error) {
 		}
 	}
 
-	logutil.Trace("decoded", "string", sb.String(), "from", lazyIdsString{ids: ids})
+	logutil.Trace("decoded", "string", sb.String(), "from", ids)
 	return sb.String(), nil
 }