test: cover session-scoped model overrides (#74265) · openclaw/openclaw@7be65cd
steipete
·
2026-04-29
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -760,6 +760,30 @@ describe("handleDirectiveOnly model persist behavior (fixes #1435)", () => {
|
760 | 760 | expect(sessionEntry.liveModelSwitchPending).toBe(true); |
761 | 761 | }); |
762 | 762 | |
| 763 | +it("persists /model only on the targeted session entry", async () => { |
| 764 | +const targetEntry = createSessionEntry(); |
| 765 | +const otherEntry = createSessionEntry(); |
| 766 | +const sessionStore = { |
| 767 | +[sessionKey]: targetEntry, |
| 768 | +"agent:main:dm:other": otherEntry, |
| 769 | +}; |
| 770 | + |
| 771 | +await handleDirectiveOnly( |
| 772 | +createHandleParams({ |
| 773 | +directives: parseInlineDirectives("/model openai/gpt-4o"), |
| 774 | +sessionEntry: targetEntry, |
| 775 | + sessionStore, |
| 776 | +}), |
| 777 | +); |
| 778 | + |
| 779 | +expect(targetEntry.providerOverride).toBe("openai"); |
| 780 | +expect(targetEntry.modelOverride).toBe("gpt-4o"); |
| 781 | +expect(targetEntry.modelOverrideSource).toBe("user"); |
| 782 | +expect(otherEntry.providerOverride).toBeUndefined(); |
| 783 | +expect(otherEntry.modelOverride).toBeUndefined(); |
| 784 | +expect(otherEntry.modelOverrideSource).toBeUndefined(); |
| 785 | +}); |
| 786 | + |
763 | 787 | it("remaps unsupported stored thinking levels when persisting a model switch", async () => { |
764 | 788 | const sessionEntry = createSessionEntry({ thinkingLevel: "adaptive" }); |
765 | 789 | const { persisted } = await persistModelDirectiveForTest({ |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -320,6 +320,30 @@ describe("cron model formatting and precedence edge cases", () => {
|
320 | 320 | it("falls through to default when no override is present", async () => { |
321 | 321 | await expectDefaultSelectedModel(); |
322 | 322 | }); |
| 323 | + |
| 324 | +it("does not treat another chat session /model override as a global cron default", async () => { |
| 325 | +const chatSessionAfterModelDirective = { |
| 326 | +providerOverride: "openai", |
| 327 | +modelOverride: "gpt-4.1-mini", |
| 328 | +}; |
| 329 | + |
| 330 | +await expectSelectedModel( |
| 331 | +{ sessionEntry: chatSessionAfterModelDirective }, |
| 332 | +{ provider: "openai", model: "gpt-4.1-mini" }, |
| 333 | +); |
| 334 | +await expectDefaultSelectedModel({ sessionEntry: {} }); |
| 335 | +await expectSelectedModel( |
| 336 | +{ |
| 337 | +sessionEntry: {}, |
| 338 | +payload: { |
| 339 | +kind: "agentTurn", |
| 340 | +message: DEFAULT_MESSAGE, |
| 341 | +model: "anthropic/claude-sonnet-4-6", |
| 342 | +}, |
| 343 | +}, |
| 344 | +{ provider: "anthropic", model: "claude-sonnet-4-6" }, |
| 345 | +); |
| 346 | +}); |
323 | 347 | }); |
324 | 348 | |
325 | 349 | describe("sequential model switches (CI failure regression)", () => { |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。