mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
Fix task regex stage alias precedence
This commit is contained in:
@@ -189,13 +189,10 @@ export const DEFAULT_TASK_PROFILE_TEMPLATES = {
|
||||
"character": true
|
||||
},
|
||||
"stages": {
|
||||
"finalPrompt": true,
|
||||
"input.userMessage": false,
|
||||
"input.recentMessages": false,
|
||||
"input.candidateText": false,
|
||||
"input.finalPrompt": false,
|
||||
"rawResponse": false,
|
||||
"beforeParse": false,
|
||||
"output.rawResponse": false,
|
||||
"output.beforeParse": false,
|
||||
"input": true,
|
||||
@@ -396,13 +393,10 @@ export const DEFAULT_TASK_PROFILE_TEMPLATES = {
|
||||
"character": true
|
||||
},
|
||||
"stages": {
|
||||
"finalPrompt": true,
|
||||
"input.userMessage": false,
|
||||
"input.recentMessages": false,
|
||||
"input.candidateText": false,
|
||||
"input.finalPrompt": false,
|
||||
"rawResponse": false,
|
||||
"beforeParse": false,
|
||||
"output.rawResponse": false,
|
||||
"output.beforeParse": false,
|
||||
"input": true,
|
||||
@@ -579,13 +573,10 @@ export const DEFAULT_TASK_PROFILE_TEMPLATES = {
|
||||
"character": true
|
||||
},
|
||||
"stages": {
|
||||
"finalPrompt": true,
|
||||
"input.userMessage": false,
|
||||
"input.recentMessages": false,
|
||||
"input.candidateText": false,
|
||||
"input.finalPrompt": false,
|
||||
"rawResponse": false,
|
||||
"beforeParse": false,
|
||||
"output.rawResponse": false,
|
||||
"output.beforeParse": false,
|
||||
"input": true,
|
||||
@@ -774,13 +765,10 @@ export const DEFAULT_TASK_PROFILE_TEMPLATES = {
|
||||
"character": true
|
||||
},
|
||||
"stages": {
|
||||
"finalPrompt": true,
|
||||
"input.userMessage": false,
|
||||
"input.recentMessages": false,
|
||||
"input.candidateText": false,
|
||||
"input.finalPrompt": false,
|
||||
"rawResponse": false,
|
||||
"beforeParse": false,
|
||||
"output.rawResponse": false,
|
||||
"output.beforeParse": false,
|
||||
"input": true,
|
||||
@@ -981,13 +969,10 @@ export const DEFAULT_TASK_PROFILE_TEMPLATES = {
|
||||
"character": true
|
||||
},
|
||||
"stages": {
|
||||
"finalPrompt": true,
|
||||
"input.userMessage": false,
|
||||
"input.recentMessages": false,
|
||||
"input.candidateText": false,
|
||||
"input.finalPrompt": false,
|
||||
"rawResponse": false,
|
||||
"beforeParse": false,
|
||||
"output.rawResponse": false,
|
||||
"output.beforeParse": false,
|
||||
"input": true,
|
||||
@@ -1200,13 +1185,10 @@ export const DEFAULT_TASK_PROFILE_TEMPLATES = {
|
||||
"character": true
|
||||
},
|
||||
"stages": {
|
||||
"finalPrompt": true,
|
||||
"input.userMessage": false,
|
||||
"input.recentMessages": false,
|
||||
"input.candidateText": false,
|
||||
"input.finalPrompt": false,
|
||||
"rawResponse": false,
|
||||
"beforeParse": false,
|
||||
"output.rawResponse": false,
|
||||
"output.beforeParse": false,
|
||||
"input": true,
|
||||
|
||||
@@ -637,15 +637,13 @@ export function normalizeTaskRegexStages(stages = {}) {
|
||||
for (const [legacyKey, canonicalKey] of Object.entries(
|
||||
TASK_REGEX_STAGE_ALIAS_MAP,
|
||||
)) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, legacyKey)) {
|
||||
// Older exports may carry both legacy and canonical keys at the same
|
||||
// time. When that happens, keep the legacy intent instead of letting a
|
||||
// newer placeholder default silently flip stage timing.
|
||||
normalized[canonicalKey] = Boolean(source[legacyKey]);
|
||||
if (Object.prototype.hasOwnProperty.call(source, canonicalKey)) {
|
||||
// Respect an explicitly stored canonical key when both forms are
|
||||
// present. Legacy aliases should only backfill older exports.
|
||||
continue;
|
||||
}
|
||||
if (Object.prototype.hasOwnProperty.call(source, canonicalKey)) {
|
||||
normalized[canonicalKey] = Boolean(source[canonicalKey]);
|
||||
if (Object.prototype.hasOwnProperty.call(source, legacyKey)) {
|
||||
normalized[canonicalKey] = Boolean(source[legacyKey]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -893,13 +891,10 @@ function createFallbackDefaultTaskProfile(taskType) {
|
||||
character: true,
|
||||
},
|
||||
stages: normalizeTaskRegexStages({
|
||||
finalPrompt: true,
|
||||
"input.userMessage": false,
|
||||
"input.recentMessages": false,
|
||||
"input.candidateText": false,
|
||||
"input.finalPrompt": false,
|
||||
rawResponse: false,
|
||||
beforeParse: false,
|
||||
"output.rawResponse": false,
|
||||
"output.beforeParse": false,
|
||||
}),
|
||||
@@ -954,10 +949,10 @@ export function createDefaultTaskProfile(taskType) {
|
||||
...fallback.regex.sources,
|
||||
...(template?.regex?.sources || {}),
|
||||
},
|
||||
stages: normalizeTaskRegexStages({
|
||||
...fallback.regex.stages,
|
||||
...(template?.regex?.stages || {}),
|
||||
}),
|
||||
stages: {
|
||||
...normalizeTaskRegexStages(fallback.regex.stages || {}),
|
||||
...normalizeTaskRegexStages(template?.regex?.stages || {}),
|
||||
},
|
||||
localRules: Array.isArray(template?.regex?.localRules)
|
||||
? template.regex.localRules.map((rule, index) =>
|
||||
normalizeRegexLocalRule(rule, taskType, index),
|
||||
@@ -1148,10 +1143,10 @@ export function normalizeTaskProfile(taskType, profile = {}, settings = {}) {
|
||||
...base.regex.sources,
|
||||
...(profile?.regex?.sources || {}),
|
||||
},
|
||||
stages: normalizeTaskRegexStages({
|
||||
...base.regex.stages,
|
||||
...(profile?.regex?.stages || {}),
|
||||
}),
|
||||
stages: {
|
||||
...normalizeTaskRegexStages(base.regex.stages || {}),
|
||||
...normalizeTaskRegexStages(profile?.regex?.stages || {}),
|
||||
},
|
||||
localRules: Array.isArray(profile?.regex?.localRules)
|
||||
? profile.regex.localRules.map((rule, index) =>
|
||||
normalizeRegexLocalRule(rule, taskType, index),
|
||||
|
||||
@@ -156,6 +156,7 @@ try {
|
||||
const {
|
||||
createDefaultTaskProfiles,
|
||||
isTaskRegexStageEnabled,
|
||||
normalizeTaskProfile,
|
||||
normalizeTaskRegexStages,
|
||||
} = await import("../prompt-profiles.js");
|
||||
|
||||
@@ -170,7 +171,7 @@ try {
|
||||
"output.rawResponse": false,
|
||||
"output.beforeParse": false,
|
||||
});
|
||||
assert.equal(normalizedLegacyStages["input.finalPrompt"], true);
|
||||
assert.equal(normalizedLegacyStages["input.finalPrompt"], false);
|
||||
assert.equal(normalizedLegacyStages["input.userMessage"], false);
|
||||
assert.equal(normalizedLegacyStages["input.recentMessages"], false);
|
||||
assert.equal(normalizedLegacyStages["input.candidateText"], false);
|
||||
@@ -178,7 +179,7 @@ try {
|
||||
assert.equal(normalizedLegacyStages["output.beforeParse"], false);
|
||||
assert.equal(
|
||||
isTaskRegexStageEnabled(normalizedLegacyStages, "input.finalPrompt"),
|
||||
true,
|
||||
false,
|
||||
);
|
||||
assert.equal(
|
||||
isTaskRegexStageEnabled(normalizedLegacyStages, "input.userMessage"),
|
||||
@@ -198,7 +199,7 @@ try {
|
||||
defaultProfiles.extract?.profiles?.[0]?.regex?.stages || {};
|
||||
assert.equal(
|
||||
isTaskRegexStageEnabled(defaultExtractStages, "input.finalPrompt"),
|
||||
true,
|
||||
false,
|
||||
);
|
||||
assert.equal(
|
||||
isTaskRegexStageEnabled(defaultExtractStages, "input.userMessage"),
|
||||
@@ -213,6 +214,27 @@ try {
|
||||
false,
|
||||
);
|
||||
|
||||
const normalizedLegacyOnlyProfile = normalizeTaskProfile(
|
||||
"extract",
|
||||
{
|
||||
id: "legacy-only-profile",
|
||||
name: "legacy only",
|
||||
regex: {
|
||||
stages: {
|
||||
finalPrompt: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
{},
|
||||
);
|
||||
assert.equal(
|
||||
isTaskRegexStageEnabled(
|
||||
normalizedLegacyOnlyProfile.regex?.stages || {},
|
||||
"input.finalPrompt",
|
||||
),
|
||||
true,
|
||||
);
|
||||
|
||||
globalThis.getTavernRegexes = () => {
|
||||
throw new Error("legacy global getter should not be used in regex tests");
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user