Merge origin/master at f1402327fa
This commit is contained in:
@@ -381,13 +381,24 @@ describe('provider profile lifecycle', () => {
|
||||
await expect(supported.llm.resolveModelInfo('deepseek', 'deepseek-v4-flash'))
|
||||
.resolves.toMatchObject({ reasoning: { defaultEffort: ReasoningEffortId('max') } })
|
||||
|
||||
// A profile level this model cannot take DESCRIBES as no default rather
|
||||
// than failing: resolveModelInfo builds the model catalog, and a catalog
|
||||
// that throws takes its whole provider out of every picker — one mis-set
|
||||
// field would hide every model on the route, including the ones that do
|
||||
// support the level. The request path below is where it is refused.
|
||||
const unsupported = new Context()
|
||||
await unsupported.plugin(LlmService)
|
||||
await unsupported.plugin(LlmPiAi, {
|
||||
providers: { deepseek: { reasoning: 'medium' } },
|
||||
})
|
||||
await expect(unsupported.llm.resolveModelInfo('deepseek', 'deepseek-v4-flash'))
|
||||
.rejects.toMatchObject({ code: 'UNSUPPORTED_REASONING_EFFORT' })
|
||||
const described = await unsupported.llm.resolveModelInfo('deepseek', 'deepseek-v4-flash')
|
||||
expect(described.reasoning?.defaultEffort).toBeUndefined()
|
||||
expect(described.reasoning?.efforts.length).toBeGreaterThan(0)
|
||||
await expect(assemble(unsupported, {
|
||||
provider: 'deepseek', model: 'deepseek-v4-flash', messages: [],
|
||||
})).resolves.toMatchObject({
|
||||
finish: { kind: 'error', failure: { code: 'UNSUPPORTED_REASONING_EFFORT' } },
|
||||
})
|
||||
|
||||
const disabled = new Context()
|
||||
await disabled.plugin(LlmService)
|
||||
|
||||
@@ -135,13 +135,22 @@ describe('hand-declared providers', () => {
|
||||
it('joins the configurable-provider directory so a settings surface can reach it', async () => {
|
||||
const server = await mockServer([])
|
||||
const ctx = await harness(gateway(`${server.url}/v1`))
|
||||
const directory = ctx.llm.listConfigurableProviders()
|
||||
|
||||
expect(ctx.llm.listConfigurableProviders()).toContainEqual({
|
||||
expect(directory).toContainEqual({
|
||||
provider: 'acme-gateway',
|
||||
displayName: 'Acme Gateway',
|
||||
settingsNs: 'llm-pi-ai',
|
||||
settingsPath: ['providers', 'acme-gateway'],
|
||||
// Nothing in the installed catalog answers for this route, which is what
|
||||
// configuration surfaces mark as a route this deployment declared.
|
||||
declared: true,
|
||||
})
|
||||
// Membership of the catalog, not of the settings document: a shipped
|
||||
// provider carries a stored profile the moment anyone corrects it.
|
||||
expect(directory.filter(entry => entry.declared).map(entry => entry.provider))
|
||||
.toEqual(['acme-gateway'])
|
||||
expect(directory.find(entry => entry.provider === 'deepseek')?.declared).toBe(false)
|
||||
})
|
||||
|
||||
it('sizes a model the catalog cannot describe from the route\u2019s own fallbacks', () => {
|
||||
|
||||
@@ -72,6 +72,7 @@ describe('request-level dynamic profiles', () => {
|
||||
displayName: 'openai',
|
||||
settingsNs: 'llm-pi-ai',
|
||||
settingsPath: ['providers', 'openai'],
|
||||
declared: false,
|
||||
})
|
||||
await ctx.settings.update(NS, {
|
||||
providers: { deepseek: { apiKeyEnv: 'PI_DYNAMIC_KEY', baseURL: server.url } },
|
||||
|
||||
Reference in New Issue
Block a user