Daily edition

Nov 6, 2026

The edition exactly as it was published. Nothing here is re-selected on a later reading.

Nov 7, 20265 reads · 117 merged PRs screened

core implementation

NVIDIA-NeMo/Speech · #16069

Files changed →View PR ↗

Improve distributed dataloader handlingPython · 112 + / 27 −

Introduces 4 new declarations in nemo/collections/common/data/lhotse/broadcasting.py.

Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.

nemo/collections/common/data/lhotse/broadcasting.py ↗ · 3 files

@@ -231,5 +254,67 @@ def _resolve_group_and_source(device_mesh, axes: Sequence[str]):      group = sub.get_group()     source_global_rank = int(sub.mesh.flatten()[0].item())-    _GROUP_CACHE[cache_key] = (group, source_global_rank)     return group, source_global_rank+++def _broadcast_packet(packet, group, src: int):+    """Broadcast one pre-serialized protocol packet over ``group``.++    Serializing before the first tensor collective lets the source replace an+    unpicklable data packet with a small error packet while receivers are still+    waiting for the packet size. Failures after a collective begins must be+    handled by the process-group timeout and distributed job teardown.+    """+    is_source = dist.get_rank() == src+    source_error = None+    if is_source:+        try:+            serialized = pickle.dumps(packet, protocol=pickle.HIGHEST_PROTOCOL)+        except Exception as error:+            source_error = error+            packet = _error_packet(error, "batch serialization failed")+            serialized = pickle.dumps(packet, protocol=pickle.HIGHEST_PROTOCOL)+    else:+        serialized = b""++    device = _broadcast_device(group)+    serialized_size = torch.tensor([len(serialized)], dtype=torch.long, device=device)+    dist.broadcast(serialized_size, src=src, group=group)++    if is_source:+        serialized_buffer = bytearray(serialized)

framework internals

vercel/next.js · #97796

Files changed →View PR ↗

Improve Request Insights context menus and trace interactionsTypeScript · 356 + / 80 −

Introduces 8 new declarations in packages/next/src/next-devtools/dev-overlay/components/request-insights/request-insights-panel.tsx.

Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.

packages/next/src/next-devtools/dev-overlay/components/request-insights/request-insights-panel.tsx ↗ · 5 files

@@ -696,53 +743,165 @@ function RequestRow({     requestType.type === 'rsc'   )   const clockTime = formatClockTime(request.startTime)-  const bypassesProxy = request.proxyStatus === 'bypassed'    return (-    <button-      aria-label={`${isInstantInsights ? `Instant Insights for ${requestUrl}` : requestUrl}, ${requestType.accessibleLabel}, ${bypassesProxy ? 'Did not match the configured proxy, ' : ''}${formatDuration(request.durationMs)}, ${clockTime}`}-      className="request-insights-row"-      data-internal={isInstantInsights || undefined}-      data-nested={nested || undefined}-      data-page-load={pageLoad}-      data-selected={selected}-      onClick={onSelect}-      type="button"+    <ContextMenu.Root+      onOpenChange={onContextMenuOpenChange}+      open={contextMenuOpen}     >-      <span className="request-insights-status" data-status={request.status} />-      <span className="request-insights-route">-        {nested ? <NestedArrowIcon /> : null}-        <span className="request-insights-route-label">-          {isInstantInsights ? 'Instant Insights' : requestUrl}-        </span>-      </span>-      <span className="request-insights-duration">-        {formatDuration(request.durationMs)}-      </span>-      <span className="request-insights-meta request-insights-row-metadata">+      <ContextMenu.Trigger+        render={+          <button

core implementation

huggingface/transformers · #50431

Files changed →View PR ↗

Harden our Jinja sandboxingPython · 87 + / 6 −

Introduces 8 new declarations in src/transformers/utils/chat_template_utils.py.

Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.

src/transformers/utils/chat_template_utils.py ↗ · 4 files

@@ -620,6 +656,42 @@ def _alias_reasoning_fields(chat: ChatType) -> ChatType:     return aliased_chat  +def _plain_template_data(value: Any) -> Any:+    # Chat templates come from the Hub, but callers often put rich objects in their inputs, like the decoded images,+    # arrays and tensors in multimodal content blocks. Those objects have methods that the sandbox doesn't know are+    # dangerous (some of them write files!), so we rebuild everything the template sees out of plain JSON types,+    # and replace anything else with an inert placeholder. Templates only check whether media keys are present,+    # and never read their values, so this doesn't change what they render.+    if value is None or type(value) in (str, int, float, bool):+        # Exact JSON scalars are safe as-is+        return value+    elif isinstance(value, str):+        # Subclasses (enums, numpy scalars, ...) can carry extra methods, so we strip them back to the base type+        return str.__str__(value)+    elif isinstance(value, int):+        return int.__int__(value)+    elif isinstance(value, float):+        return float.__float__(value)+    elif isinstance(value, Mapping):+        return {_plain_template_data(key): _plain_template_data(item) for key, item in value.items()}+    elif isinstance(value, list):+        return [_plain_template_data(item) for item in value]+    elif isinstance(value, tuple):+        return tuple(_plain_template_data(item) for item in value)+    elif isinstance(value, np.generic):+        # `np.bool_(False)` would otherwise become a truthy placeholder string+        return _plain_template_data(value.item())+    elif dataclasses.is_dataclass(value) and not isinstance(value, type):+        # Fields are read one level at a time, so arrays and images inside are not deep-copied+        return {field.name: _plain_template_data(getattr(value, field.name)) for field in dataclasses.fields(value)}+    elif callable(getattr(value, "model_dump", None)):+        # Pydantic models

runtime

ggml-org/llama.cpp · #31779

Files changed →View PR ↗

model: add Kimi-K3.1-Pro text modelC++ · 820 + / 33 −

Introduces 3 new declarations in src/models/kimi-k31.cpp.

Adds new runtime rather than adjusting what was there. Tests changed with it, with code of their own.

src/models/kimi-k31.cpp ↗ · 15 files

@@ -0,0 +1,701 @@+#include "models.h"++#include <algorithm>+#include "llama-memory-recurrent.h"+#include "llama-memory-hybrid-idx.h"++//+// Kimi-K3.1 text model: Kimi-K3 with DSA (indexer + top-k) on the full-attention layers.+// KDA layers, cross-layer residuals, latent MoE, situ and the MLA shapes are unchanged.+//   1. full-attention layers run a lightning indexer over the cached latent, keep the+//      top-k cells and attend only to those (the "Gated DSA" of the model card)+//   2. the indexer keeps its own per-token key cache, one cell per attention cell+//++void llama_model_kimi_k31::load_arch_hparams(llama_model_loader & ml) {+    ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);+    ml.get_key(LLM_KV_ATTENTION_KEY_LENGTH_MLA,    hparams.n_embd_head_k_mla_impl);+    ml.get_key(LLM_KV_ATTENTION_VALUE_LENGTH_MLA,  hparams.n_embd_head_v_mla_impl);+    ml.get_key(LLM_KV_ATTENTION_Q_LORA_RANK,       hparams.n_lora_q, false);+    ml.get_key(LLM_KV_ATTENTION_KV_LORA_RANK,      hparams.n_lora_kv);+    ml.get_key(LLM_KV_SSM_CONV_KERNEL,             hparams.ssm_d_conv);+    ml.get_key(LLM_KV_KDA_HEAD_DIM,                hparams.n_embd_head_kda);+    ml.get_key(LLM_KV_KDA_GATE_LOWER_BOUND,        hparams.kda_gate_lower_bound, false);++    // the MLA cache holds the compressed latent+    // set it here too, as older GGUFs have no value_length key+    hparams.n_embd_head_v_full = hparams.n_lora_kv;++    // n_head_kv == 0 marks a KDA (recurrent) layer, as in kimi-linear+    for (uint32_t i = 0; i < hparams.n_layer(); ++i) {+        hparams.is_recr_impl[i] = hparams.n_head_kv(i) == 0;+    }+

systems design

kubernetes/kubernetes · #143849

Files changed →View PR ↗

client-go/transport: prefer connection pool members that can connectGo · 71 + / 8 −

Introduces 4 new declarations in staging/src/k8s.io/client-go/transport/connection_pool.go.

Adds new systems design rather than adjusting what was there. Tests changed with it, with code of their own.

staging/src/k8s.io/client-go/transport/connection_pool.go ↗ · 4 files

@@ -89,6 +113,34 @@ func (p *connectionPool) RoundTrip(req *http.Request) (*http.Response, error) { 	return resp, nil } +// isConnectionFailure reports whether err is a failure to dial the server, such+// as a refused connection, a failed DNS lookup or a connect timeout.+func isConnectionFailure(err error) bool {+	var opErr *net.OpError+	return errors.As(err, &opErr) && opErr.Op == "dial"+}++// rewindRequest returns req with a fresh body, so that it can be sent again,+// or false if the body can't be read again.+func rewindRequest(req *http.Request) (*http.Request, bool) {+	if req.Body == nil || req.Body == http.NoBody {+		return req, true+	}+	if req.GetBody == nil {+		return nil, false+	}+	// The first attempt closed req.Body. GetBody returns a new copy of the+	// whole body, e.g. for the byte readers client-go uses.+	body, err := req.GetBody()+	if err != nil {+		return nil, false+	}+	// Clone shares Body with req, so replace it. Cloning keeps req unmodified.+	retry := req.Clone(req.Context())+	retry.Body = body+	return retry, true+}+ func (p *connectionPool) CloseIdleConnections() { 	for _, m := range p.members {

Read today’s edition →