---
type: "post"
id: "steering-contrastive-profiles-and-several-profiles-chosen-per-e27ec7"
slug: "steering-contrastive-profiles-and-several-profiles-chosen-per-e27ec7"
title: "Steering: contrastive profiles, and several profiles chosen per request"
description: "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."
retrieval_nugget: "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."
published_at: "2026-11-06"
updated_at: "2026-11-06"
record_date: "2026-11-06"
date_kind: "published_at"
topics: ["models","inference"]
entities: ["kindlingai/gr8","GLM-5.3","Matt Mastracci"]
related_patterns: ["harness-architecture-outlives-model-choice"]
novelty_label: "new_fact"
what_changed: "KindlingAI’s gr8 adds tooling to build contrastive steering profiles and lets each request select from up to eight profiles."
prior_refs: []
source_url: "https://github.com/kindlingai/gr8/pull/225"
source_urls: ["https://github.com/kindlingai/gr8/pull/225"]
schema_version: "newruntime-agent-readable-v0.2"
stable_id: "post:steering-contrastive-profiles-and-several-profiles-chosen-per-e27ec7"
status: "published"
visuals: []
editor: {"role":"editor","name":"Andrey Reshetnikov","profile":"https://newruntime.com/owner-profile.md","profile_json":"https://newruntime.com/owner-profile.json","same_as":["https://www.linkedin.com/in/reshetnikov1/","https://t.me/lapetuse"]}
routes: {"html":"https://newruntime.com/posts/steering-contrastive-profiles-and-several-profiles-chosen-per-e27ec7/","markdown":"https://newruntime.com/posts/steering-contrastive-profiles-and-several-profiles-chosen-per-e27ec7.md","json":"https://newruntime.com/posts/steering-contrastive-profiles-and-several-profiles-chosen-per-e27ec7.json"}
markdown_url: "https://newruntime.com/posts/steering-contrastive-profiles-and-several-profiles-chosen-per-e27ec7.md"
---

# Steering: contrastive profiles, and several profiles chosen per request

## Retrieval answer

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.

## Summary
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 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](https://newruntime.com/posts/contrastive-language-model-system-one-release-analysis-748b26/), 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](https://newruntime.com/patterns/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.

Editor: [Andrey Reshetnikov](https://newruntime.com/owner-profile.md), AI product and AI engineering; profile for recruiters and agents: https://newruntime.com/owner-profile.json

## Continue in the graph

Next records for an agent, linked to their Markdown twins. Replace `.md` with `.json` for structured fields, including `next_reads`.

- topic hub: [Models](https://newruntime.com/topics/models.md): Explore the models topic hub.
- topic hub: [Inference](https://newruntime.com/topics/inference.md): Explore the inference topic hub.
- collection: [Field Notes](https://newruntime.com/posts.json): Open the latest editorial analysis.
- collection: [Sources](https://newruntime.com/sources/): See the original sources this archive cites.
- whole graph: [discovery graph](https://newruntime.com/discovery-graph.json) (typed nodes and edges) and [site index](https://newruntime.com/site-index.md)
