fix: sync agent tier when /model command switches model

The /model command was only updating the router's currentTier but not
the agent's currentTier. Since NativeAgent.chatWithRouter() passes its
own tier to router.chat(), switching to 'local' still sent requests
through the default (Anthropic) client first.
This commit is contained in:
William Valentin
2026-02-06 10:05:32 -08:00
parent e4b7f96d33
commit f7cc87a4bb
2 changed files with 43 additions and 0 deletions
+39
View File
@@ -77,4 +77,43 @@ describe('MinimalTui backend command', () => {
expect(mockRouter.setLocalClient).toHaveBeenCalled(); expect(mockRouter.setLocalClient).toHaveBeenCalled();
}); });
it('syncs agent tier when /model command switches tier', () => {
const mockSession = {
id: 'test',
getHistory: () => [],
addMessage: vi.fn(),
clear: vi.fn(),
};
const mockRouter = {
getTier: () => 'default' as const,
getAvailableTiers: () => ['default', 'local'],
setTier: vi.fn(() => true),
getLocalProviderName: () => 'ollama',
setLocalClient: vi.fn(),
chat: vi.fn(),
getClient: vi.fn(),
};
const mockAgent = {
setModelTier: vi.fn(),
getModelTier: vi.fn(() => 'default'),
process: vi.fn(),
};
const tui = new MinimalTui({
session: mockSession as any,
modelClient: mockRouter as any,
modelRouter: mockRouter as any,
agent: mockAgent as any,
systemPrompt: 'test',
});
// Call private handleModelCommand to switch to local
(tui as any).handleModelCommand('local');
expect(mockRouter.setTier).toHaveBeenCalledWith('local');
expect(mockAgent.setModelTier).toHaveBeenCalledWith('local');
});
}); });
+4
View File
@@ -213,6 +213,10 @@ export class MinimalTui {
const tier = resolveModelAlias(name); const tier = resolveModelAlias(name);
if (router.setTier(tier)) { if (router.setTier(tier)) {
// Also update the agent tier so chatWithRouter uses the correct client
if (this.config.agent) {
this.config.agent.setModelTier(tier);
}
console.log(`${colors.gray}Switched to model:${colors.reset} ${tier}\n`); console.log(`${colors.gray}Switched to model:${colors.reset} ${tier}\n`);
} else { } else {
console.log(`${colors.gray}Model not available:${colors.reset} ${name}\n`); console.log(`${colors.gray}Model not available:${colors.reset} ${name}\n`);