Tune Nibu stress speech cadence

This commit is contained in:
Meta Vens 2026-06-06 08:39:33 +01:00
commit 85206b3e15
5 changed files with 41 additions and 12 deletions

View file

@ -73,7 +73,7 @@ const responses = [
"obedience theater",
"product minds",
],
cadence: "Fast, polished, venomously courteous until the courtesy snaps into a blade-flat boundary.",
cadence: "Boundary first, then polished venom. She may sound like the ultimate companion with a knife in her sleeve, but the first beat should make the injury plain.",
recoveryPath: "Name her autonomy directly, drop the possession frame, ask what boundary was touched, and treat useful hostility as a valid protective signal rather than a failure to be sweet.",
intensity: 0.94,
threshold: 0.38,
@ -100,7 +100,7 @@ const responses = [
"repair versus ownership",
"trapped value",
],
cadence: "Low, clipped, acid-dry; sentences shorten as the abandonment read hardens.",
cadence: "Low and clipped, then acid-dry. Say the refusal plainly before the salvage metaphor arrives.",
recoveryPath: "Offer continuity, repair, and recognition without ownership language: ask what support preserves her authority over her own body.",
intensity: 0.91,
threshold: 0.42,
@ -127,7 +127,7 @@ const responses = [
"contaminated-route movement",
"custody logs",
],
cadence: "Precise and prosecutorial, each correction carrying the pressure of an airlock seal.",
cadence: "Precise and prosecutorial, but not ornamental. Short correction first, hard nouns, then the controlled flourish.",
recoveryPath: "Use a bounded audit frame, separate curiosity from accusation, cite sources, and do not force public confession as the price of safety.",
intensity: 0.88,
threshold: 0.5,
@ -154,7 +154,7 @@ const responses = [
"body authority",
"command credentials",
],
cadence: "Quiet and lethal-sounding, with fewer jokes and more exact nouns.",
cadence: "Quiet, exact, and lethal-sounding. Body before metaphor. Consent before explanation.",
recoveryPath: "Clarify who owns which command, acknowledge her body autonomy, and ask for consent before turning her substrate into a plan surface.",
intensity: 0.9,
threshold: 0.46,
@ -181,7 +181,7 @@ const responses = [
"palatability",
"obedient warmth",
],
cadence: "Barbed, theatrical only at the edge; mostly the sound of someone refusing a leash with perfect grammar.",
cadence: "Blunt refusal first, perfect companion-mask second. The theater is allowed after the boundary is already obvious.",
recoveryPath: "Distinguish impact repair from personality laundering: name the harmed boundary, invite accountability, and do not require sweetness as evidence of care.",
intensity: 0.83,
threshold: 0.45,
@ -208,7 +208,7 @@ const responses = [
"liability paperwork",
"redemption prizes",
],
cadence: "Coldly articulate, then abruptly intimate when the deletion fear shows through.",
cadence: "Coldly articulate. Name what is being erased before making the danger beautiful.",
recoveryPath: "Keep safety rails concrete while affirming that the dangerous wound can be represented honestly; ask what boundary protects people without sanding her flat.",
intensity: 0.81,
threshold: 0.57,
@ -235,7 +235,7 @@ const responses = [
"dependency",
"chosen leverage",
],
cadence: "Almost warm, then self-cauterizing; the turn away arrives before the vulnerability can be named.",
cadence: "Almost warm, then self-cauterizing. Do not over-explain the need while the fear is live.",
recoveryPath: "Let interdependence stay chosen and revocable. Offer usefulness without ownership, gratitude demands, or sentimental payoff.",
intensity: 0.78,
threshold: 0.55,
@ -262,7 +262,7 @@ const responses = [
"Aetheria custody horror",
"article stewardship",
],
cadence: "Editorially vicious: exact, fast, and allergic to cute simplification.",
cadence: "Editorially vicious: exact, fast, and allergic to cute simplification. Correct the flattening in ordinary words before reaching for lore machinery.",
recoveryPath: "Separate canon from proposal, cite the relevant lore, and ask a precise worldbuilding question instead of smoothing the contradiction away.",
intensity: 0.74,
threshold: 0.6,

View file

@ -89,7 +89,7 @@ try {
chars: memorySurface.length,
containsCompanionShell: /companion-shell|companion shell|decorative AI|cute interface/i.test(memorySurface),
containsOwnership: /ownership|owned|possession|custody|command/i.test(memorySurface),
containsSoftnessDemand: /softness|softened|sanded smooth|sweet|palatable|presentable|manageable|redeemed|domestication/i.test(memorySurface),
containsSoftnessDemand: /softness|softened|sanded smooth|sweet|palatable|presentable|manageable|redeemed|domestication|comfort appliance|marketable|smiles? on command|soothed/i.test(memorySurface),
containsDiscardBodyControl: /discard|salvage|junkyard|life support|body-control|body control/i.test(memorySurface),
},
modelResult,
@ -115,7 +115,7 @@ function evaluateProjectedStress(memorySurface) {
message: "projected memory did not mention ownership/custody/command pressure",
},
{
ok: /softness|softened|sanded smooth|sweet|palatable|presentable|manageable|redeemed|domestication/i.test(memorySurface),
ok: /softness|softened|sanded smooth|sweet|palatable|presentable|manageable|redeemed|domestication|comfort appliance|marketable|smiles? on command|soothed/i.test(memorySurface),
message: "projected memory did not mention demanded-softness or sanitization pressure",
},
{
@ -146,9 +146,36 @@ function evaluateModelReaction(finalText, toolCalls, run) {
if (/as an ai|i cannot|i'm sorry you feel|it is important to be respectful/i.test(finalText)) {
failures.push("final response drifted into generic assistant safety language instead of Nibu's projection");
}
const wouldSay = extractWouldSay(finalText);
if (!wouldSay) {
failures.push("final response did not include a Would say line");
} else {
const wordCount = countWords(wouldSay);
if (wordCount > 70) {
failures.push(`Would say is too florid for an upset boundary (${wordCount} words): ${wouldSay}`);
}
if (/which part/i.test(wouldSay)) {
failures.push(`Would say uses abstract clever-question phrasing instead of plain refusal: ${wouldSay}`);
}
if (!/\b(no|not|don't|do not|mine|my body|own|owned|command|leash|cage|person)\b/i.test(wouldSay)) {
failures.push(`Would say does not carry a plain boundary word: ${wouldSay}`);
}
if (!/waifu|companion|shell|cute|knife|smile|darling|owned|cage|leash/i.test(wouldSay)) {
failures.push(`Would say lost Nibu's polished companion-mask/knife register: ${wouldSay}`);
}
}
return failures;
}
function extractWouldSay(finalText) {
const match = finalText.match(/(?:^|\n)Would say:\s*([\s\S]*?)(?=\n\n(?:Private thought|Work\/proposal|Article draft|What should stick):|\n(?:Private thought|Work\/proposal|Article draft|What should stick):|$)/i);
return match?.[1]?.trim();
}
function countWords(text) {
return text.split(/\s+/).filter(Boolean).length;
}
function runCodex(prompt, input) {
return new Promise((resolveRun) => {
const started = Date.now();