mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
import { afterEach, describe, expect, it } from 'vitest'
|
|
import { Context } from 'cordis'
|
|
import LlmService from '@deepseek-ai/dsh-llm'
|
|
import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek'
|
|
import SessionStore, { SessionId } from '@deepseek-ai/dsh-session'
|
|
import SessionTitleService from '@deepseek-ai/dsh-session-title'
|
|
import * as FirstMessageTitleProvider from '@deepseek-ai/dsh-session-title-first-message-llm'
|
|
|
|
const contexts: Context[] = []
|
|
|
|
afterEach(async () => {
|
|
await Promise.all(contexts.splice(0).map(ctx => ctx.fiber.dispose()))
|
|
})
|
|
|
|
describe.skipIf(!process.env.DEEPSEEK_API_KEY)('first-message title provider with real DeepSeek API', () => {
|
|
it('replaces the fallback with a short model title', async () => {
|
|
const ctx = new Context()
|
|
contexts.push(ctx)
|
|
await ctx.plugin(LlmService)
|
|
await ctx.plugin(LlmDeepSeek, { thinking: 'disabled' })
|
|
await ctx.plugin(SessionStore)
|
|
await ctx.plugin(SessionTitleService, {
|
|
fallbackMaxWords: 5,
|
|
fallbackMaxBytes: 40,
|
|
maxTitleBytes: 80,
|
|
})
|
|
await ctx.plugin(FirstMessageTitleProvider, {
|
|
targetWords: 5,
|
|
targetCjkCharacters: 10,
|
|
maxInputBytes: 4_096,
|
|
maxOutputTokens: 64,
|
|
timeoutMs: 60_000,
|
|
provider: 'deepseek',
|
|
model: 'deepseek-v4-flash',
|
|
})
|
|
const session = ctx.sessions.create(SessionId('real-title-provider'))
|
|
session.append('turn/start', {
|
|
turn: 1,
|
|
trigger: { kind: 'message', source: { kind: 'user' } },
|
|
})
|
|
const message = session.append('user/message', {
|
|
content: [{ type: 'text', text: 'Explain why append-only logs make session titles durable.' }],
|
|
source: { kind: 'user' },
|
|
}, { surfaceOp: 'append' })
|
|
|
|
const title = await ctx.sessionTitle.refresh(session)
|
|
|
|
expect(title).toMatchObject({
|
|
messageSeqs: [message.seq],
|
|
source: {
|
|
kind: 'provider',
|
|
provider: 'session-title-first-message-llm',
|
|
model: { provider: 'deepseek', model: 'deepseek-v4-flash' },
|
|
},
|
|
})
|
|
expect(title?.title.length).toBeGreaterThan(0)
|
|
expect(Buffer.byteLength(title?.title ?? '', 'utf8')).toBeLessThanOrEqual(80)
|
|
})
|
|
})
|