fix: skip no-op preset refresh on resume to avoid slow agent recompile (#1110)

Co-authored-by: Letta <noreply@letta.com>
This commit is contained in:
jnjpng
2026-02-23 13:38:17 -08:00
committed by GitHub
parent 61b586174c
commit caa109c10d
4 changed files with 93 additions and 55 deletions

View File

@@ -28,6 +28,7 @@ import { getStreamToolContextId, sendMessageStream } from "./agent/message";
import {
getModelPresetUpdateForAgent,
getModelUpdateArgs,
getResumeRefreshArgs,
resolveModel,
} from "./agent/model";
import { updateAgentLLMConfig, updateAgentSystemPrompt } from "./agent/modify";
@@ -913,36 +914,19 @@ export async function handleHeadlessCommand(
// Always apply model update - different model IDs can share the same
// handle but have different settings (e.g., gpt-5.2-medium vs gpt-5.2-xhigh)
const updateArgs = getModelUpdateArgs(model);
await updateAgentLLMConfig(agent.id, modelHandle, updateArgs);
// Refresh agent state after model update
agent = await client.agents.retrieve(agent.id);
agent = await updateAgentLLMConfig(agent.id, modelHandle, updateArgs);
} else {
const presetRefresh = getModelPresetUpdateForAgent(agent);
if (presetRefresh) {
// Resume preset refresh is intentionally scoped for now.
// We only force-refresh max_output_tokens + parallel_tool_calls.
// Other preset fields available in models.json (for example:
// context_window, reasoning_effort, enable_reasoner,
// max_reasoning_tokens, verbosity, temperature,
// thinking_budget) are intentionally not auto-applied yet.
const resumeRefreshUpdateArgs: Record<string, unknown> = {};
if (typeof presetRefresh.updateArgs.max_output_tokens === "number") {
resumeRefreshUpdateArgs.max_output_tokens =
presetRefresh.updateArgs.max_output_tokens;
}
if (typeof presetRefresh.updateArgs.parallel_tool_calls === "boolean") {
resumeRefreshUpdateArgs.parallel_tool_calls =
presetRefresh.updateArgs.parallel_tool_calls;
}
const { updateArgs: resumeRefreshUpdateArgs, needsUpdate } =
getResumeRefreshArgs(presetRefresh.updateArgs, agent);
if (Object.keys(resumeRefreshUpdateArgs).length > 0) {
await updateAgentLLMConfig(
if (needsUpdate) {
agent = await updateAgentLLMConfig(
agent.id,
presetRefresh.modelHandle,
resumeRefreshUpdateArgs,
);
// Refresh agent state after model update
agent = await client.agents.retrieve(agent.id);
}
}
}