| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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)
- })
- })
|