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:
@@ -77,4 +77,43 @@ describe('MinimalTui backend command', () => {
|
||||
|
||||
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');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -213,6 +213,10 @@ export class MinimalTui {
|
||||
|
||||
const tier = resolveModelAlias(name);
|
||||
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`);
|
||||
} else {
|
||||
console.log(`${colors.gray}Model not available:${colors.reset} ${name}\n`);
|
||||
|
||||
Reference in New Issue
Block a user