model-utils.spec.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // npx vitest src/utils/__tests__/model-utils.spec.ts
  2. import { calculateTokenDistribution } from "../model-utils"
  3. describe("calculateTokenDistribution", () => {
  4. it("should calculate token distribution correctly", () => {
  5. const contextWindow = 10000
  6. const contextTokens = 5000
  7. const maxTokens = 2000
  8. const result = calculateTokenDistribution(contextWindow, contextTokens, maxTokens)
  9. expect(result.reservedForOutput).toBe(maxTokens)
  10. expect(result.availableSize).toBe(3000) // 10000 - 5000 - 2000
  11. // Percentages should sum to 100%
  12. expect(Math.round(result.currentPercent + result.reservedPercent + result.availablePercent)).toBe(100)
  13. })
  14. it("should default to 8192 when maxTokens not provided", () => {
  15. const contextWindow = 20000
  16. const contextTokens = 5000
  17. const result = calculateTokenDistribution(contextWindow, contextTokens)
  18. expect(result.reservedForOutput).toBe(8192)
  19. expect(result.availableSize).toBe(6808) // 20000 - 5000 - 8192
  20. })
  21. it("should handle negative or zero inputs by using positive fallbacks", () => {
  22. const result = calculateTokenDistribution(-1000, -500)
  23. expect(result.currentPercent).toBe(0)
  24. expect(result.reservedPercent).toBe(100) // 8192 / 8192 = 100%
  25. expect(result.availablePercent).toBe(0)
  26. expect(result.reservedForOutput).toBe(8192) // Uses ANTHROPIC_DEFAULT_MAX_TOKENS
  27. expect(result.availableSize).toBe(0) // max(0, 0 - 0 - 8192) = 0
  28. })
  29. it("should handle zero context window without division by zero errors", () => {
  30. const result = calculateTokenDistribution(0, 0)
  31. expect(result.currentPercent).toBe(0)
  32. expect(result.reservedPercent).toBe(100) // When contextWindow is 0, reserved gets 100%
  33. expect(result.availablePercent).toBe(0)
  34. expect(result.reservedForOutput).toBe(8192) // Uses ANTHROPIC_DEFAULT_MAX_TOKENS when no maxTokens provided
  35. expect(result.availableSize).toBe(0)
  36. })
  37. })