fix: mutate prefixContext object instead of reassigning for closure correctness
This commit is contained in:
@@ -127,9 +127,6 @@ export async function runAgentTurnWithFallback(params: {
|
||||
run: (provider, model) => {
|
||||
// Notify that model selection is complete (including after fallback).
|
||||
// This allows responsePrefix template interpolation with the actual model.
|
||||
logVerbose(
|
||||
`[prefix-debug] onModelSelected firing: provider=${provider} model=${model} thinkLevel=${params.followupRun.run.thinkLevel}`,
|
||||
);
|
||||
params.opts?.onModelSelected?.({
|
||||
provider,
|
||||
model,
|
||||
|
||||
@@ -75,14 +75,6 @@ function normalizeReplyPayloadInternal(
|
||||
// Prefer dynamic context provider over static context
|
||||
const prefixContext = opts.responsePrefixContextProvider?.() ?? opts.responsePrefixContext;
|
||||
|
||||
// Debug logging for prefix template resolution
|
||||
if (opts.responsePrefix?.includes("{")) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(
|
||||
`[prefix-debug] normalizing with context: ${JSON.stringify(prefixContext)} prefix: ${opts.responsePrefix}`,
|
||||
);
|
||||
}
|
||||
|
||||
return normalizeReplyPayload(payload, {
|
||||
responsePrefix: opts.responsePrefix,
|
||||
responsePrefixContext: prefixContext,
|
||||
|
||||
@@ -329,13 +329,11 @@ export async function processDiscordMessage(ctx: DiscordMessagePreflightContext)
|
||||
? !discordConfig.blockStreaming
|
||||
: undefined,
|
||||
onModelSelected: (ctx) => {
|
||||
prefixContext = {
|
||||
...prefixContext,
|
||||
provider: ctx.provider,
|
||||
model: extractShortModelName(ctx.model),
|
||||
modelFull: `${ctx.provider}/${ctx.model}`,
|
||||
thinkingLevel: ctx.thinkLevel ?? "off",
|
||||
};
|
||||
// Mutate the object directly instead of reassigning to ensure the closure sees updates
|
||||
prefixContext.provider = ctx.provider;
|
||||
prefixContext.model = extractShortModelName(ctx.model);
|
||||
prefixContext.modelFull = `${ctx.provider}/${ctx.model}`;
|
||||
prefixContext.thinkingLevel = ctx.thinkLevel ?? "off";
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -386,13 +386,11 @@ export async function monitorIMessageProvider(opts: MonitorIMessageOpts = {}): P
|
||||
? !accountInfo.config.blockStreaming
|
||||
: undefined,
|
||||
onModelSelected: (ctx) => {
|
||||
prefixContext = {
|
||||
...prefixContext,
|
||||
provider: ctx.provider,
|
||||
model: extractShortModelName(ctx.model),
|
||||
modelFull: `${ctx.provider}/${ctx.model}`,
|
||||
thinkingLevel: ctx.thinkLevel ?? "off",
|
||||
};
|
||||
// Mutate the object directly instead of reassigning to ensure the closure sees updates
|
||||
prefixContext.provider = ctx.provider;
|
||||
prefixContext.model = extractShortModelName(ctx.model);
|
||||
prefixContext.modelFull = `${ctx.provider}/${ctx.model}`;
|
||||
prefixContext.thinkingLevel = ctx.thinkLevel ?? "off";
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -354,13 +354,11 @@ export function createSignalEventHandler(deps: SignalEventHandlerDeps) {
|
||||
disableBlockStreaming:
|
||||
typeof deps.blockStreaming === "boolean" ? !deps.blockStreaming : undefined,
|
||||
onModelSelected: (ctx) => {
|
||||
prefixContext = {
|
||||
...prefixContext,
|
||||
provider: ctx.provider,
|
||||
model: extractShortModelName(ctx.model),
|
||||
modelFull: `${ctx.provider}/${ctx.model}`,
|
||||
thinkingLevel: ctx.thinkLevel ?? "off",
|
||||
};
|
||||
// Mutate the object directly instead of reassigning to ensure the closure sees updates
|
||||
prefixContext.provider = ctx.provider;
|
||||
prefixContext.model = extractShortModelName(ctx.model);
|
||||
prefixContext.modelFull = `${ctx.provider}/${ctx.model}`;
|
||||
prefixContext.thinkingLevel = ctx.thinkLevel ?? "off";
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -117,13 +117,11 @@ export async function dispatchPreparedSlackMessage(prepared: PreparedSlackMessag
|
||||
? !account.config.blockStreaming
|
||||
: undefined,
|
||||
onModelSelected: (ctx) => {
|
||||
prefixContext = {
|
||||
...prefixContext,
|
||||
provider: ctx.provider,
|
||||
model: extractShortModelName(ctx.model),
|
||||
modelFull: `${ctx.provider}/${ctx.model}`,
|
||||
thinkingLevel: ctx.thinkLevel ?? "off",
|
||||
};
|
||||
// Mutate the object directly instead of reassigning to ensure the closure sees updates
|
||||
prefixContext.provider = ctx.provider;
|
||||
prefixContext.model = extractShortModelName(ctx.model);
|
||||
prefixContext.modelFull = `${ctx.provider}/${ctx.model}`;
|
||||
prefixContext.thinkingLevel = ctx.thinkLevel ?? "off";
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -162,13 +162,11 @@ export const dispatchTelegramMessage = async ({
|
||||
: undefined,
|
||||
disableBlockStreaming,
|
||||
onModelSelected: (ctx) => {
|
||||
prefixContext = {
|
||||
...prefixContext,
|
||||
provider: ctx.provider,
|
||||
model: extractShortModelName(ctx.model),
|
||||
modelFull: `${ctx.provider}/${ctx.model}`,
|
||||
thinkingLevel: ctx.thinkLevel ?? "off",
|
||||
};
|
||||
// Mutate the object directly instead of reassigning to ensure the closure sees updates
|
||||
prefixContext.provider = ctx.provider;
|
||||
prefixContext.model = extractShortModelName(ctx.model);
|
||||
prefixContext.modelFull = `${ctx.provider}/${ctx.model}`;
|
||||
prefixContext.thinkingLevel = ctx.thinkLevel ?? "off";
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -278,13 +278,11 @@ export async function processMessage(params: {
|
||||
? !params.cfg.channels.whatsapp.blockStreaming
|
||||
: undefined,
|
||||
onModelSelected: (ctx) => {
|
||||
prefixContext = {
|
||||
...prefixContext,
|
||||
provider: ctx.provider,
|
||||
model: extractShortModelName(ctx.model),
|
||||
modelFull: `${ctx.provider}/${ctx.model}`,
|
||||
thinkingLevel: ctx.thinkLevel ?? "off",
|
||||
};
|
||||
// Mutate the object directly instead of reassigning to ensure the closure sees updates
|
||||
prefixContext.provider = ctx.provider;
|
||||
prefixContext.model = extractShortModelName(ctx.model);
|
||||
prefixContext.modelFull = `${ctx.provider}/${ctx.model}`;
|
||||
prefixContext.thinkingLevel = ctx.thinkLevel ?? "off";
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user