Daily edition

Nov 11, 2026

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

Nov 12, 20265 reads · 122 merged PRs screened

runtime

ggml-org/llama.cpp · #32053

Files changed →View PR ↗

chat: allow TTS model to provide custom text normalizer via jinjaC++ · 929 + / 0 −

Introduces 15 new declarations in common/chat-tts-norm.cpp.

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

common/chat-tts-norm.cpp ↗ · 7 files

@@ -0,0 +1,864 @@+#include "chat-tts-norm.h"++#include "jinja/runtime.h"+#include "jinja/value.h"++#include <algorithm>+#include <climits>+#include <stdexcept>+#include <string>+#include <vector>++// TTS normalization patterns, see docs/tts-norm-patterns.md for the specification+// keep this file in sync with the python reference: scripts/chat_tts_norm.py++using namespace jinja;++//+// character classes+// they are defined with explicit codepoint ranges, independent of any unicode database version,+// so that the C++ and python implementations agree on every codepoint+//++struct tts_norm_range {+    uint32_t lo;+    uint32_t hi;+};++static const tts_norm_range TTS_NORM_SPACE[] = {+    {0x0009, 0x000D}, {0x0020, 0x0020}, {0x0085, 0x0085}, {0x00A0, 0x00A0}, {0x1680, 0x1680},+    {0x2000, 0x200A}, {0x2028, 0x2029}, {0x202F, 0x202F}, {0x205F, 0x205F}, {0x3000, 0x3000},+};++static const tts_norm_range TTS_NORM_PUNCT[] = {

framework internals

kubernetes/kubernetes · #143838

Files changed →View PR ↗

Watchcache stalled resyncGo · 192 + / 54 −

Introduces 6 new declarations in staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go.

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

staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go ↗ · 4 files

@@ -571,24 +575,126 @@ func (c *Cacher) resyncWatchers() { 		return 	} +	var stalledWatchers indexedWatchers+	var minResourceVersion uint64+ 	for _, watcher := range c.unsyncedWatchers {-		c.unsyncedWatchers.deleteWatcher(watcher) 		if watcher.stopped {+			c.unsyncedWatchers.deleteWatcher(watcher) 			continue 		}-		// TODO: Once stalled watchers are moved back to unsyncedWatchers,-		// compute and send only catchup events after the last dispatched-		// resourceVersion instead of re-initializing the watcher interval.-		cacheInterval, err := c.initWatcherIntervalLocked(watcher)-		if err != nil {+		if !watcher.synced.IsNotified() {+			c.unsyncedWatchers.deleteWatcher(watcher)+			cacheInterval, err := c.initWatcherIntervalLocked(watcher)+			if err != nil {+				watcher.input <- watcherInput{err: err}+				// Drain input so watcher.done stays open until process() delivers+				// the queued watch.Error event; non-draining stop closes watcher.done+				// immediately, causing sendWatchError to drop the error.+				c.stopWatcherLocked(watcher, true)+				continue+			}+			c.registerWatcherLocked(watcher, cacheInterval)+			continue+		}++		if len(watcher.input) == cap(watcher.input) {

core implementation

huggingface/transformers · #50583

Files changed →View PR ↗

Support Enum in get_json_schema, raise on custom classesPython · 52 + / 20 −

Introduces 2 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 ↗ · 3 files

@@ -100,20 +106,47 @@ def _get_json_schema_type(param_type: type) -> dict[str, str]:         import torch          type_mapping[torch.Tensor] = {"type": "audio"}-    return type_mapping.get(param_type, {"type": "object"})+    return type_mapping.get(param_type)+++def _enum_values_to_json_schema(values: list) -> dict:+    # The "type" lists each JSON type that appears in the values once, in the order they first appear+    value_types = list(dict.fromkeys(JSON_SCALAR_TYPES[type(value)] for value in values))+    return {"type": value_types[0] if len(value_types) == 1 else value_types, "enum": values}   def _parse_type_hint(hint: str) -> dict:     origin = get_origin(hint)     args = get_args(hint) -    if origin is None:-        try:-            return _get_json_schema_type(hint)-        except KeyError:+    if origin is None and isinstance(hint, type) and issubclass(hint, Enum):+        # An Enum class becomes a JSON "enum" of its member values, since those are what the model has to generate+        values = [member.value for member in hint]+        if not values:+            raise TypeHintParsingException(+                f"The Enum {hint.__name__} has no members, so no value could ever match it."+            )+        if any(type(value) not in JSON_SCALAR_TYPES for value in values):+            raise TypeHintParsingException(+                f"The Enum {hint.__name__} has member values that cannot be written as JSON scalars.\n"+                f"Values: {values}\n"+                "Enum member values must be int, float, str, bool or None to be converted to a JSON schema."

framework internals

vercel/next.js · #101593

Files changed →View PR ↗

Prerender route handlers that await immediatesTypeScript · 142 + / 86 −

Introduces 2 new declarations in packages/next/src/server/route-modules/app-route/module.ts.

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

packages/next/src/server/route-modules/app-route/module.ts ↗ · 15 files

@@ -729,81 +726,140 @@ export class AppRouteRouteModule extends RouteModule<           isFallbackUpgradeable: false,         }) -        let responseHandled = false-        res = await new Promise((resolve, reject) => {-          scheduleImmediate(async () => {-            try {-              const result = await (this.workUnitAsyncStorage.run(-                finalRoutePrerenderStore,-                handler,-                request,-                handlerContext-              ) as Promise<Response>)-              if (responseHandled) {-                // we already rejected in the followup task-                return-              } else if (!(result instanceof Response)) {-                // This is going to error but we let that happen below-                resolve(result)-                return-              }+        const result: {+          status: 'pending-handler' | 'pending-body' | 'complete' | 'failed'+          value: unknown+        } = { status: 'pending-handler', value: undefined }+        const bodyWindow = createPromiseWithResolvers<void>()+        let bodyDeadline: NodeJS.Immediate | undefined+        let waitForBody = false++        function fail(error: unknown) {+          if (+            result.status === 'pending-handler' ||+            result.status === 'pending-body'

language design

rust-lang/rust · #165750

Files changed →View PR ↗

Wrap proc-macro `EscapeError` enum into a structRust · 54 + / 39 −

Introduces 9 new declarations in library/proc_macro/src/lib.rs.

Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.

library/proc_macro/src/lib.rs ↗ · 1 files

@@ -65,10 +65,61 @@ use crate::bridge::client::Methods as BridgeMethods; use crate::escape::{EscapeOptions, escape_bytes};  /// Mostly relating to malformed escape sequences, but also a few other problems.+#[derive(Debug, PartialEq, Eq)]+#[unstable(feature = "proc_macro_value", issue = "136652")]+pub struct EscapeError {+    kind: EscapeErrorKind,+}++#[unstable(feature = "proc_macro_value", issue = "136652")]+impl error::Error for EscapeError {}+ #[unstable(feature = "proc_macro_value", issue = "136652")]+impl fmt::Display for EscapeError {+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {+        fmt::Display::fmt(&self.kind, f)+    }+}++#[unstable(feature = "proc_macro_value", issue = "136652")]+#[doc(hidden)]+impl From<rustc_literal_escaper::EscapeError> for EscapeError {+    fn from(value: rustc_literal_escaper::EscapeError) -> Self {+        use rustc_literal_escaper::EscapeError as EE;++        let kind = match value {+            EE::ZeroChars => EscapeErrorKind::ZeroChars,+            EE::MoreThanOneChar => EscapeErrorKind::MoreThanOneChar,+            EE::LoneSlash => EscapeErrorKind::LoneSlash,+            EE::InvalidEscape => EscapeErrorKind::InvalidEscape,+            EE::BareCarriageReturn => EscapeErrorKind::BareCarriageReturn,+            EE::BareCarriageReturnInRawString => EscapeErrorKind::BareCarriageReturnInRawString,+            EE::EscapeOnlyChar => EscapeErrorKind::EscapeOnlyChar,

Read today’s edition →