|
|
@@ -1712,13 +1712,6 @@ describe('plugin registration and config', () => {
|
|
|
expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }])
|
|
|
await expect(ctx.llm.listModels('deepseek-official')).resolves.toEqual([
|
|
|
{ provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'] },
|
|
|
- {
|
|
|
- provider: 'deepseek-official',
|
|
|
- id: 'deepseek-v4-flash',
|
|
|
- name: 'DeepSeek-V4-Flash',
|
|
|
- description: 'Fast, efficient, and economical; suited to focused, routine, or parallel tasks.',
|
|
|
- inputModalities: ['text'],
|
|
|
- },
|
|
|
{
|
|
|
provider: 'deepseek-official',
|
|
|
id: 'deepseek-v4-pro',
|
|
|
@@ -1726,7 +1719,6 @@ describe('plugin registration and config', () => {
|
|
|
description: 'Stronger agentic coding, knowledge, and difficult reasoning; suited to complex or quality-critical tasks at higher cost.',
|
|
|
inputModalities: ['text'],
|
|
|
},
|
|
|
- { provider: 'deepseek-official', id: 'deepseek-v4-flash-vision-exp', name: 'DeepSeek-V4-Flash-Vision-Exp', inputModalities: ['text', 'image'] },
|
|
|
])
|
|
|
await expect(ctx.llm.resolveModelInfo('deepseek-official', 'deepseek-flash'))
|
|
|
.resolves.toMatchObject({
|
|
|
@@ -1749,18 +1741,14 @@ describe('plugin registration and config', () => {
|
|
|
})
|
|
|
})
|
|
|
|
|
|
- it.each([
|
|
|
- { model: 'deepseek-v4-flash', inputModalities: ['text'] },
|
|
|
- { model: 'deepseek-v4-pro', inputModalities: ['text'] },
|
|
|
- { model: 'deepseek-v4-flash-vision-exp', inputModalities: ['text', 'image'] },
|
|
|
- ])('keeps $model available with its V4 capabilities', async ({ model, inputModalities }) => {
|
|
|
+ it('keeps deepseek-v4-pro available with its V4 capabilities', async () => {
|
|
|
const ctx = new Context()
|
|
|
await ctx.plugin(LlmRuntime)
|
|
|
await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: 'http://127.0.0.1:1' })
|
|
|
- const info = await ctx.llm.resolveModelInfo('deepseek-official', model)
|
|
|
+ const info = await ctx.llm.resolveModelInfo('deepseek-official', 'deepseek-v4-pro')
|
|
|
expect(info).toMatchObject({
|
|
|
- id: model,
|
|
|
- inputModalities,
|
|
|
+ id: 'deepseek-v4-pro',
|
|
|
+ inputModalities: ['text'],
|
|
|
context: { contextWindow: 1_000_000 },
|
|
|
defaultMaxTokens: 256_000,
|
|
|
})
|
|
|
@@ -1854,13 +1842,6 @@ describe('plugin registration and config', () => {
|
|
|
LlmDeepSeek.apply(ctx, { baseURL: 'http://127.0.0.1:1' })
|
|
|
await expect(ctx.llm.listModels('deepseek-official')).resolves.toEqual([
|
|
|
{ provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'] },
|
|
|
- {
|
|
|
- provider: 'deepseek-official',
|
|
|
- id: 'deepseek-v4-flash',
|
|
|
- name: 'DeepSeek-V4-Flash',
|
|
|
- description: 'Fast, efficient, and economical; suited to focused, routine, or parallel tasks.',
|
|
|
- inputModalities: ['text'],
|
|
|
- },
|
|
|
{
|
|
|
provider: 'deepseek-official',
|
|
|
id: 'deepseek-v4-pro',
|
|
|
@@ -1868,7 +1849,6 @@ describe('plugin registration and config', () => {
|
|
|
description: 'Stronger agentic coding, knowledge, and difficult reasoning; suited to complex or quality-critical tasks at higher cost.',
|
|
|
inputModalities: ['text'],
|
|
|
},
|
|
|
- { provider: 'deepseek-official', id: 'deepseek-v4-flash-vision-exp', name: 'DeepSeek-V4-Flash-Vision-Exp', inputModalities: ['text', 'image'] },
|
|
|
])
|
|
|
})
|
|
|
|
|
|
@@ -2193,7 +2173,7 @@ describe('plugin registration and config', () => {
|
|
|
// First-boot onboarding: the route registers so models stay discoverable;
|
|
|
// only the request itself needs a key.
|
|
|
expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }])
|
|
|
- await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(4)
|
|
|
+ await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(2)
|
|
|
const first = await assemble(ctx, { model: 'deepseek-v4-flash', messages: [] })
|
|
|
expect(first.finish).toMatchObject({ kind: 'error', failure: { code: 'MISSING_CREDENTIAL' } })
|
|
|
// The guidance leads with the managed credential store.
|
|
|
@@ -2281,7 +2261,7 @@ describe('plugin registration and config', () => {
|
|
|
expect(adapter).toBeInstanceOf(DeepSeekAdapter)
|
|
|
// Direct embedding shares the plugin's one resolve step, so it advertises
|
|
|
// the same default catalog instead of a divergent empty one.
|
|
|
- await expect(adapter.listModels('deepseek-official')).resolves.toHaveLength(4)
|
|
|
+ await expect(adapter.listModels('deepseek-official')).resolves.toHaveLength(2)
|
|
|
})
|
|
|
|
|
|
it('resolves connection facts and the credential exactly once per stream call', async () => {
|