Files
hermes-web-ui/tests/server/run-chat-model-config.test.ts
T
ekko badb17cf8e [codex] integrate goal command workflow (#1025)
* feat: integrate goal command workflow

* fix: keep goal done visible

* fix: add goal done slash command

* fix: promote queued message on run start
2026-05-25 19:26:23 +08:00

77 lines
2.9 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
const readConfigYamlForProfileMock = vi.fn()
vi.mock('../../packages/server/src/services/config-helpers', () => ({
readConfigYamlForProfile: readConfigYamlForProfileMock,
}))
describe('run chat model config', () => {
beforeEach(() => {
readConfigYamlForProfileMock.mockReset()
readConfigYamlForProfileMock.mockResolvedValue({
model: { default: 'default-model', provider: 'default-provider' },
})
})
it('uses the requested model for a new bridge session before falling back to profile default', async () => {
const { resolveBridgeRunModelConfig } = await import('../../packages/server/src/services/hermes/run-chat/model-config')
const result = await resolveBridgeRunModelConfig({
profile: 'default',
requestedModel: 'gpt-5.2',
requestedProvider: 'openai',
modelGroups: [{ provider: 'openai', models: ['gpt-5.2'] }],
})
expect(result).toEqual({ model: 'gpt-5.2', provider: 'openai' })
expect(readConfigYamlForProfileMock).not.toHaveBeenCalled()
})
it('keeps an existing session model ahead of a requested model', async () => {
const { resolveBridgeRunModelConfig } = await import('../../packages/server/src/services/hermes/run-chat/model-config')
const result = await resolveBridgeRunModelConfig({
profile: 'default',
sessionModel: 'claude-sonnet-4.5',
sessionProvider: 'anthropic',
requestedModel: 'gpt-5.2',
requestedProvider: 'openai',
modelGroups: [
{ provider: 'anthropic', models: ['claude-sonnet-4.5'] },
{ provider: 'openai', models: ['gpt-5.2'] },
],
})
expect(result).toEqual({ model: 'claude-sonnet-4.5', provider: 'anthropic' })
expect(readConfigYamlForProfileMock).not.toHaveBeenCalled()
})
it('keeps an explicit model when no model group list is available', async () => {
const { resolveBridgeRunModelConfig } = await import('../../packages/server/src/services/hermes/run-chat/model-config')
const result = await resolveBridgeRunModelConfig({
profile: 'default',
requestedModel: 'gpt-5.5',
requestedProvider: 'custom',
})
expect(result).toEqual({ model: 'gpt-5.5', provider: 'custom' })
expect(readConfigYamlForProfileMock).not.toHaveBeenCalled()
})
it('falls back to the profile default when the candidate model is unavailable', async () => {
const { resolveBridgeRunModelConfig } = await import('../../packages/server/src/services/hermes/run-chat/model-config')
const result = await resolveBridgeRunModelConfig({
profile: 'default',
requestedModel: 'missing-model',
requestedProvider: 'openai',
modelGroups: [{ provider: 'openai', models: ['gpt-5.2'] }],
})
expect(result).toEqual({ model: 'default-model', provider: 'default-provider' })
expect(readConfigYamlForProfileMock).toHaveBeenCalledWith('default')
})
})