Files
hermes-web-ui/tests/server/run-chat-model-config.test.ts
ekko 9a9416c99c Fix bridge history, profile models, and Windows gateway handling (#845)
* feat: support profile-aware group chat bridge flows

* feat: route cron jobs through hermes cli

* Fix group chat routing and isolate bridge tests

* Add Grok image-to-video media skill

* Default Grok videos to media directory

* Fix bridge profile fallback and cron repeat clearing

* Refine bridge chat and gateway platform handling

* Filter bridge tool-call text deltas

* Preserve structured bridge chat history

* Prepare beta release build artifacts

* Fix Windows run profile resolution

* Fix Windows path compatibility checks

* Fix profile-scoped model page display

* Hide Windows subprocess windows for jobs and updates

* Hide Windows file backend subprocess windows

* Avoid Windows gateway restart lock conflicts

* Treat Windows gateway lock as running on startup

* Force release Windows gateway lock on restart

* Tighten Windows gateway lock cleanup

* Update chat e2e source expectation

* Bump package version to 0.5.30

---------

Co-authored-by: Codex <codex@openai.com>
2026-05-19 16:09:59 +08:00

64 lines
2.4 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('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')
})
})