mirror of
https://github.com/EKKOLearnAI/hermes-web-ui.git
synced 2026-05-25 21:40:13 +00:00
9a9416c99c
* 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>
64 lines
2.4 KiB
TypeScript
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')
|
|
})
|
|
})
|