Ozgur Guzeldereli

Work

Ternary training without master weights

Two-timescale threshold flips (TTF) train ternary {-1, 0, 1} language models with no full-precision copy of the weights. A weight moves one level when low-rank, accumulated gradient evidence crosses a threshold, so the state is about a byte per weight instead of twelve. Ahead of master-weight training at 110M, level at 1.3B and 2.9B; a 23B model trains on one 16 GB GPU.

Python PyTorch Triton Quantisation

2025– repo

Luma Auth

An open-source OAuth2 and OIDC server: complete enough for a real application, small enough that you can read the authorization endpoint and know what it does. PKCE, refresh rotation, introspection, revocation, pushed authorization requests, passwordless flows, and a full consent UI.

ASP.NET Core OAuth2 OIDC PKCE Razor

2026– repo

Weave

A language for stating what must be true of a system, and a compiler that refuses to let you break it. Declare data, behavior, seams, and closures, and a deterministic checker proves on every keystroke that nothing reaches a sealed resource except through its gateway. Ships as a command-line compiler and a desktop IDE.

TypeScript Electron Compilers

Tension

An operator that deliberates across several cheap passes, stays silent while unsure, and decides for itself when to answer. Adaptive compute worked but is essentially PonderNet. The orthogonal-synthesis geometry is the one result both new and better, extrapolating well outside its training range.

Python PyTorch

2026– repo

TTF conversion

Converts a pretrained Qwen3.5 or Qwen3.8 model into a ternary network, streaming one decoder layer at a time: GPTQ onto the ternary grid, folded norms, and ternary low-rank adapters, written as a checkpoint the TTF trainer recovers from. Qwen3.8-27B converts in about twenty minutes, recovers on one 24 GB GPU, and runs on a 12 GB laptop GPU.

Python PyTorch Triton GPTQ

2025– repo

Synccl

A local-first secrets manager, on the premise that secrets belong next to the repository that uses them. Per-repo vaults with a key per secret, sealed at rest to the machine's TPM 2.0 or Secure Enclave, with no software fallback. Moving a vault is an explicit unmount to a portable file, protected by a passphrase or an X25519 key.

C# .NET TPM 2.0 XChaCha20-Poly1305 Argon2id X25519

Skimmilk

A reading tool for dense academic papers. It clarifies jargon in place, contextualises citations so a reference is a claim you can weigh rather than a bracketed number, and reorganises the text for comprehension while keeping full access to the original.

TypeScript React FastAPI Electron LLM APIs

Neural quadrature

A small network that learns a quadrature rule from data, mapping a function and its bounds straight to the value of its integral. Fixed bounds are exactly linear, variable bounds genuinely nonlinear, and wide bounds break naive training until inputs and targets are log-compressed.

Python PyTorch SciPy

2022–23 repo

TaraOS

An experimental x86-64 operating system in C and NASM, from the first sector the BIOS loads to a shell prompt with nothing borrowed in between. Bootloader, 64-bit kernel, bitmap allocator, paging, task switching, drivers, interrupts. Every abstraction has to be built before you can use it.

C NASM x86-64

Intent and code

An empirical series on whether an author's why can be recovered from what the code does. You cannot read a purpose off code when several purposes fit it equally well. Checking a declared purpose beats guessing, but dies when the honest declaration already justifies the behaviour.

Python Statistics LLM APIs

Does an injected date shift an LLM's preferences?

A pre-registered study of whether putting today's date in a system prompt shifts a model's answers on questions the date is irrelevant to. 39,200 generations. Mixed: irrelevant questions reach significance with tiny effects, and the bigger lever is date versus no date.

Python Statistics LLM APIs

AI image detector, one-class

A one-class detector trained only on real images, scoring how atypical an image is in feature space. The hypothesis was that it would generalise to unseen generators better than a discriminative classifier. It did not: the baseline won, including on the held-out generator. A negative result cleanly obtained, with a distributional explanation.

Python PyTorch Mahalanobis

Publications