mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 14:11:35 +00:00
fix(agents): harden model fallback failover paths
This commit is contained in:
@@ -61,10 +61,10 @@ describe("agent-runner-utils", () => {
|
||||
|
||||
const resolved = resolveModelFallbackOptions(run);
|
||||
|
||||
expect(hoisted.resolveAgentIdFromSessionKeyMock).toHaveBeenCalledWith(run.sessionKey);
|
||||
expect(hoisted.resolveAgentIdFromSessionKeyMock).not.toHaveBeenCalled();
|
||||
expect(hoisted.resolveAgentModelFallbacksOverrideMock).toHaveBeenCalledWith(
|
||||
run.config,
|
||||
"agent-id",
|
||||
run.agentId,
|
||||
);
|
||||
expect(resolved).toEqual({
|
||||
cfg: run.config,
|
||||
@@ -75,6 +75,21 @@ describe("agent-runner-utils", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("falls back to sessionKey agent id when run.agentId is missing", () => {
|
||||
hoisted.resolveAgentIdFromSessionKeyMock.mockReturnValue("agent-from-session-key");
|
||||
hoisted.resolveAgentModelFallbacksOverrideMock.mockReturnValue(["fallback-model"]);
|
||||
const run = makeRun({ agentId: undefined });
|
||||
|
||||
const resolved = resolveModelFallbackOptions(run);
|
||||
|
||||
expect(hoisted.resolveAgentIdFromSessionKeyMock).toHaveBeenCalledWith(run.sessionKey);
|
||||
expect(hoisted.resolveAgentModelFallbacksOverrideMock).toHaveBeenCalledWith(
|
||||
run.config,
|
||||
"agent-from-session-key",
|
||||
);
|
||||
expect(resolved.fallbacksOverride).toEqual(["fallback-model"]);
|
||||
});
|
||||
|
||||
it("builds embedded run base params with auth profile and run metadata", () => {
|
||||
const run = makeRun({ enforceFinalTag: true });
|
||||
const authProfile = resolveProviderScopedAuthProfile({
|
||||
|
||||
@@ -147,15 +147,13 @@ export const resolveEnforceFinalTag = (run: FollowupRun["run"], provider: string
|
||||
Boolean(run.enforceFinalTag || isReasoningTagProvider(provider));
|
||||
|
||||
export function resolveModelFallbackOptions(run: FollowupRun["run"]) {
|
||||
const fallbackAgentId = run.agentId ?? resolveAgentIdFromSessionKey(run.sessionKey);
|
||||
return {
|
||||
cfg: run.config,
|
||||
provider: run.provider,
|
||||
model: run.model,
|
||||
agentDir: run.agentDir,
|
||||
fallbacksOverride: resolveAgentModelFallbacksOverride(
|
||||
run.config,
|
||||
resolveAgentIdFromSessionKey(run.sessionKey),
|
||||
),
|
||||
fallbacksOverride: resolveAgentModelFallbacksOverride(run.config, fallbackAgentId),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ export function createFollowupRunner(params: {
|
||||
agentDir: queued.run.agentDir,
|
||||
fallbacksOverride: resolveAgentModelFallbacksOverride(
|
||||
queued.run.config,
|
||||
resolveAgentIdFromSessionKey(queued.run.sessionKey),
|
||||
queued.run.agentId ?? resolveAgentIdFromSessionKey(queued.run.sessionKey),
|
||||
),
|
||||
run: (provider, model) => {
|
||||
const authProfile = resolveRunAuthProfile(queued.run, provider);
|
||||
|
||||
Reference in New Issue
Block a user