Selected changesmerged Nov 4, 2026
client-go/rest/watch: add concurrent watch event decoderGo · 225 + / 1 −
Introduces 14 new declarations in staging/src/k8s.io/client-go/rest/watch/concurrent_decoder.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/rest/watch/concurrent_decoder.go ↗ · 6 files
@@ -0,0 +1,208 @@+/*+Copyright The Kubernetes Authors.++Licensed under the Apache License, Version 2.0 (the "License");+you may not use this file except in compliance with the License.+You may obtain a copy of the License at++ http://www.apache.org/licenses/LICENSE-2.0++Unless required by applicable law or agreed to in writing, software+distributed under the License is distributed on an "AS IS" BASIS,+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+See the License for the specific language governing permissions and+limitations under the License.+*/++package watch++import (+ "fmt"+ "io"+ "sync"++ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"+ "k8s.io/apimachinery/pkg/runtime"+ "k8s.io/apimachinery/pkg/runtime/serializer/streaming"+ utilruntime "k8s.io/apimachinery/pkg/util/runtime"+ "k8s.io/apimachinery/pkg/watch"+)++type rawWatchEventResult struct {+ event *metav1.WatchEvent+ err error
feat(next/image): add internal image redirects (to match existing external image redirects)TypeScript · 131 + / 72 −
Introduces 3 new declarations in packages/next/src/server/image-optimizer.ts.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
packages/next/src/server/image-optimizer.ts ↗ · 10 files
@@ -100,6 +100,77 @@ export interface ImageParamsResult { minimumCacheTTL: number } +type ImageUrlParamResult =+ | { href: string; isAbsolute: boolean }+ | { errorMessage: string }++function validateUrlParam(+ url: string | string[] | undefined,+ imageData: ImageConfigComplete,+ isRedirect = false+): ImageUrlParamResult {+ // Note - We intentionally skip validation for local/remotePatterns when+ // validating redirect locations so that we don't break a src img redirect+ // to a new domain (e.g. github.com => githubusercontent.com).+ const { domains = [], remotePatterns = [], localPatterns } = imageData++ if (!isRedirect && domains.length > 0) {+ Log.warnOnce(+ 'The "images.domains" configuration is deprecated. Please use "images.remotePatterns" configuration instead.'+ )+ }++ if (!url) {+ return { errorMessage: '"url" parameter is required' }+ } else if (Array.isArray(url)) {+ return { errorMessage: '"url" parameter cannot be an array' }+ }++ if (url.length > 3072) {+ return { errorMessage: '"url" parameter is too long' }+ }+
salm_automodel_ctc_10ms: calibrated 40 ms to 10 ms CTC timestampsPython · 961 + / 108 −
Introduces 23 new declarations in nemo/collections/speechlm2/parts/ctc_timestamp_utils.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
nemo/collections/speechlm2/parts/ctc_timestamp_utils.py ↗ · 14 files
@@ -2207,14 +2681,229 @@ def _align_banded_ctc(aligner, prepared): diarization_frame_seconds=prepared['diarization_frame_seconds'], diarization_max_speaker_count=prepared['diarization_max_speaker_count'], )+ calibration = prepared['config'].get('boundary_interpolation')+ if calibration is not None:+ # Use raw DP edges, before any VAD snapping or extending.+ _interpolate_word_boundaries(+ rows,+ ctc,+ record['ctc_step'],+ record['time_offset'],+ record['audio_duration'],+ diarization,+ mapping,+ calibration,+ aligner=aligner,+ )+ result['speaker_word_timestamps'] = aligner._public_word_timestamps(rows)+ result['boundary_interpolation'] = {+ 'method': 'calibrated_edge_local_linear_interpolation',+ 'estimated_grid_seconds': aligner.boundary_grid_seconds,+ 'outside_words': sum(w.get('_outside_diarization', False) for w in rows),+ } result['speaker_assignment_mode'] = 'token_distribution' result['alignment_diagnostics']['failed_streams'] = failures result['alignment_diagnostics']['one_pass'] = True result['alignment_diagnostics']['banded'] = diagnostics- results.append(_refine_word_timestamps(result, prepared['config']['max_word_frames']))+ results.append(+ _refine_word_timestamps(+ result,+ prepared['config']['max_word_frames'],+ onset_snap_seconds=aligner.onset_snap_seconds,
Keep image inputs on the first chunk of a chunked prefillPython · 133 + / 13 −
Introduces 4 new declarations in src/transformers/generation/utils.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/transformers/generation/utils.py ↗ · 10 files
@@ -4322,15 +4333,47 @@ def _prefill( attention_mask = model_kwargs.pop("attention_mask", None) position_ids = model_kwargs.pop("position_ids", None)+ token_types = {+ key: model_kwargs.pop(key)+ for key in ("token_type_ids", "mm_token_type_ids", "moe_mm_token_type_ids")+ if model_kwargs.get(key) is not None+ }+ mm_encoder_outputs = model_kwargs.pop("mm_encoder_outputs", None)++ # Pre-encoded features are consumed in placeholder order over (batch, seq): feature row `i` of a modality+ # fills its `i`-th placeholder token, so each chunk gets the rows of the placeholders it contains+ chunk_mm_encoder_outputs = [{} for _ in input_chunks]+ if is_first_iteration and mm_encoder_outputs:+ for modality, output in mm_encoder_outputs.items():+ if output is None:+ continue+ mask = prefill_ids == getattr(self.config, f"{modality}_token_id")+ feature_rows = mask.flatten().cumsum(0).view_as(mask) - 1+ for chunk_idx, (chunk_mask, chunk_rows) in enumerate(+ zip(mask.split(chunk_size, dim=-1), feature_rows.split(chunk_size, dim=-1))+ ):+ if chunk_mask.any():+ chunk_mm_encoder_outputs[chunk_idx][modality] = _slice_mm_encoder_output(+ output, chunk_rows[chunk_mask]+ )+ past_length = cache.get_seq_length()- for input_chunk in input_chunks:+ for chunk_idx, input_chunk in enumerate(input_chunks): current_length = past_length + input_chunk.shape[-1] if attention_mask is not None: model_kwargs["attention_mask"] = attention_mask[:, :current_length]
v8: support X509Certificate serializationC++ · 169 + / 1 −
Introduces 3 new declarations in src/crypto/crypto_x509.cc.
Adds new runtime rather than adjusting what was there. Tests changed with it, with code of their own.
src/crypto/crypto_x509.cc ↗ · 9 files
@@ -1065,6 +1082,76 @@ void X509Certificate::NewFromHandle(const FunctionCallbackInfo<Value>& args) { issuer); } +void X509Certificate::ParseSnapshot(const FunctionCallbackInfo<Value>& args) {+ Environment* env = Environment::GetCurrent(args);+ Local<Context> context = env->context();+ if (args.Length() != 1 || !args[0]->IsArray()) {+ THROW_ERR_INVALID_ARG_TYPE(env,+ "The \"snapshot\" argument must be an Array");+ return;+ }++ Local<Array> input = args[0].As<Array>();+ std::vector<X509CertificateSnapshot::DER> certificates;+ certificates.reserve(input->Length());+ for (uint32_t i = 0; i < input->Length(); i++) {+ Local<Value> value;+ if (!input->Get(context, i).ToLocal(&value)) return;+ if (!value->IsArrayBufferView()) {+ THROW_ERR_INVALID_ARG_TYPE(+ env, "The \"snapshot\" entries must be ArrayBufferViews");+ return;+ }++ ArrayBufferViewContents<unsigned char> contents(+ value.As<ArrayBufferView>());+ certificates.emplace_back(contents.data(),+ contents.data() + contents.length());+ }++ auto snapshot = X509CertificateSnapshot::Create(std::move(certificates));+ if (!snapshot) [[unlikely]] {+ THROW_ERR_CRYPTO_OPERATION_FAILED(