llm-target.spec.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { describe, expect, it } from 'vitest'
  2. import { Context } from 'cordis'
  3. import SystemPrompt from '@deepseek-ai/dsh-system-prompt'
  4. import {
  5. agentEvents,
  6. installAgentLlmTarget,
  7. type Agent,
  8. type AgentLlmTargetRef,
  9. } from '../src/index.ts'
  10. import type { LlmCallConfig } from '@deepseek-ai/dsh-llm'
  11. describe('installAgentLlmTarget()', () => {
  12. it('snapshots prompt variables and request routing together, then disposes both listeners', async () => {
  13. const ctx = new Context()
  14. await ctx.plugin(SystemPrompt)
  15. const target: AgentLlmTargetRef = { current: undefined, assembled: undefined }
  16. const dispose = installAgentLlmTarget(ctx, target)
  17. const agent = {} as Agent
  18. const seed: LlmCallConfig = { provider: 'seed', model: 'seed', temperature: 0.2 }
  19. const signal = new AbortController().signal
  20. expect((await ctx.systemPrompt.assemble()).variables).toEqual({})
  21. await expect(agentEvents(ctx, agent).waterfall(
  22. 'agent/request', 1, 0, signal, () => Promise.resolve(seed),
  23. )).resolves.toBe(seed)
  24. target.current = { provider: 'alpha', model: 'a1' }
  25. expect((await ctx.systemPrompt.assemble()).variables).toMatchObject({ provider: 'alpha', model: 'a1' })
  26. target.current = { provider: 'beta', model: 'b1' }
  27. await expect(agentEvents(ctx, agent).waterfall(
  28. 'agent/request', 1, 0, signal, () => Promise.resolve(seed),
  29. )).resolves.toEqual({ provider: 'alpha', model: 'a1', temperature: 0.2 })
  30. expect((await ctx.systemPrompt.assemble()).variables).toMatchObject({ provider: 'beta', model: 'b1' })
  31. await expect(agentEvents(ctx, agent).waterfall(
  32. 'agent/request', 1, 1, signal, () => Promise.resolve(seed),
  33. )).resolves.toEqual({ provider: 'beta', model: 'b1', temperature: 0.2 })
  34. dispose()
  35. expect((await ctx.systemPrompt.assemble()).variables).toEqual({})
  36. await expect(agentEvents(ctx, agent).waterfall(
  37. 'agent/request', 2, 0, signal, () => Promise.resolve(seed),
  38. )).resolves.toBe(seed)
  39. await ctx.fiber.dispose()
  40. })
  41. })