Selected changesmerged Nov 6, 2026
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)
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
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
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;+ }+
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 {