Field noteNov 6, 20265 min read1 source

Steering: contrastive profiles, and several profiles chosen per request

In one minute

A merged change to kindlingai/gr8 adds a way to fit steering profiles from contrastive answer pairs and select among as many as eight loaded profiles per request. Its GLM-5.3 language-direction example shows measurable steering in a small held-out test, while leaving clear limits on what that result demonstrates.

What changed: KindlingAI’s gr8 adds tooling to build contrastive steering profiles and lets each request select from up to eight profiles.

What happened

The GitHub pull request, opened on October 25 and merged into main on October 29, adds tools/steering/contrast.py to build a profile from prompts paired with positive and negative answers. The tool tokenizes both answers with the model's served chat template, converts a logged serving command into an offline teacher-forced run, reduces residual-dump data into per-layer sums, and fits a direction and alpha for each layer. Layers with alpha outside the supported range of 0 to 4 are excluded. The output is a manifest and direction data; an anchor option creates a one-way profile, and a direction flag can steer toward the negative answer.

The repository includes an English-to-Chinese and Chinese-to-English example. The reported evaluation used GLM-5.3 at tensor parallelism 4, 48 answer pairs, medium reasoning effort, and 16 held-out questions per language. It measured the share of answers in Chinese over several steering scales. For the default English-to-Chinese profile, English questions produced Chinese answers 67% of the time at scale 0.5 and 66% at 0.65; at scale 1.0 that share fell to 25%. The anchored profile reached 95% at 0.5 and 99% at 1.0 and 1.5. The reverse anchored profile moved Chinese questions toward English, though some outputs shifted to Spanish or Russian instead.

The change also lets a server load up to eight local profile directories through --steering-profile or the launcher's STEERING_PROFILE. Each profile has its own manifest, digest, layers, and distinct name; all loaded profiles must share a scope. Requests identify a loaded profile by name, and an unknown name returns HTTP 400. Batched decode rows can use different profiles in the same step. GET /health lists loaded profiles when there is more than one. Weighted blending of profiles per request is explicitly outside this change.

The pull request reports tests for the contrastive fitter, transport and slot handling, CUDA execution, and launcher profile lists. Its cluster check on four GB10 GPUs reports unchanged no-profile output and decode rates close to the baseline: 58.2 versus 58.5 tokens per second for code, 38.7 versus 38.8 for prose, and 74.1 versus 74.0 for structured output at concurrency four. The change is marked bit-exact and off by default.

What the archive adds

New Runtime's earlier coverage on October 1 examined the Contrastive language model system one release, describing a contrastive language-model workflow as a runnable engineering artifact whose practical advantage remained unverified. This is a new implementation detail on a related contrastive-steering thread: gr8 now documents profile fitting, request-level selection, and a small language-direction evaluation.

Trend signal

This supports, narrowly, harness architecture outlives model choice: the change puts steering-profile construction, loading, identity, and per-request routing in the serving harness rather than tying behavior to a new model. It does not establish that this is a durable production boundary across systems; the evidence is one repository and one example.

Why now

The pull request was merged on October 29 after the branch was tested against the current mainline, including a conflict resolution involving another engine change. That timing matters operationally because the profile selection was checked alongside the repository's active inference path rather than only as an isolated fitter.

Why it matters

For teams operating a local inference server, per-request profiles offer a way to apply distinct behavioral directions without restarting the process or maintaining a separate server for each direction. The batch-level selection matters when requests with different needs share a serving workload. The profile builder also makes the process more reproducible than hand-assembling steering artifacts: it specifies the paired data, fitting procedure, and validation path.

The strongest immediate implication is operational, not a general claim that steering solves translation. The measured sample is small, and the reverse-direction test shows that removing a language direction does not guarantee the intended alternative; a few outputs moved to other languages. Teams considering this should treat profiles as task-specific controls, validate on their own prompts, and keep routing explicit. Since the feature is off by default, existing behavior is intended to remain unchanged until an operator opts in.

What happens next

  • Teams using gr8 will adopt named steering profiles for multiple task directions without duplicating server processes. (6 months, 55%). Watch for: additional merged examples or deployment configurations loading multiple profiles.

Limits and uncertainty

The evaluation covers 48 pairs and 16 held-out questions per language on GLM-5.3; the pull request does not establish performance on broader translation sets, other models, or production traffic. The reported language share is a narrow outcome measure, not a full quality or meaning-preservation assessment. Some reverse-steered answers became Spanish or Russian, illustrating that suppressing one direction does not guarantee the desired target. The cluster comparison is a repository test, not an independent benchmark. Operators still need to validate their own profile data, scales, and task-specific behavior.

Skill to build now

Build a small held-out validation set before fitting a profile: keep prompts separate from the contrastive pairs, define the expected behavior in advance, and sweep the steering scale rather than assuming more is better. For bilingual use, score both target-language rate and unintended-language drift, as the gr8 example does. This week, a team evaluating gr8 can use the documented English/Chinese example as a template, but should rerun it against its own model build and representative prompts before enabling request-level routing.

Reader takeaway

gr8 turns contrastive answer pairs into selectable steering profiles and can route requests among up to eight profiles in one server. Its example demonstrates a useful mechanism, not a general guarantee: the test is small, scale-sensitive, and needs task-specific quality checks before deployment.

Evidence / sources

  1. 1github.com/kindlingai/gr8/pull/225
All Field Notes

Next reads

Read next

Open the graph
  1. 01topicModelsExplore the models topic hub.
  2. 02topicInferenceExplore the inference topic hub.
  3. 03archiveField NotesOpen the latest editorial analysis.
  4. 04sourcesSourcesSee the original sources this archive cites.
Who read this page?Machine requests, hidden until opened

Loading the privacy-safe route aggregate...

Open the JSON contract