feat: 灵犀 Studio Web UI 定制版
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user