cost-calculation-priority.test.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { describe, expect, test } from "vitest";
  2. import { calculateRequestCost } from "@/lib/utils/cost-calculation";
  3. import type { ModelPriceData } from "@/types/model-price";
  4. function makePriceData(overrides: Partial<ModelPriceData> = {}): ModelPriceData {
  5. return {
  6. mode: "responses",
  7. input_cost_per_token: 1,
  8. output_cost_per_token: 10,
  9. cache_read_input_token_cost: 0.1,
  10. input_cost_per_token_priority: 2,
  11. output_cost_per_token_priority: 20,
  12. cache_read_input_token_cost_priority: 0.2,
  13. ...overrides,
  14. };
  15. }
  16. describe("calculateRequestCost priority service tier", () => {
  17. test("uses priority pricing fields when priority service tier is applied", () => {
  18. const cost = calculateRequestCost(
  19. { input_tokens: 2, output_tokens: 3, cache_read_input_tokens: 5 },
  20. makePriceData(),
  21. 1,
  22. false,
  23. true
  24. );
  25. expect(Number(cost.toString())).toBe(65);
  26. });
  27. test("falls back to regular pricing when priority fields are absent", () => {
  28. const cost = calculateRequestCost(
  29. { input_tokens: 2, output_tokens: 3, cache_read_input_tokens: 5 },
  30. makePriceData({
  31. input_cost_per_token_priority: undefined,
  32. output_cost_per_token_priority: undefined,
  33. cache_read_input_token_cost_priority: undefined,
  34. }),
  35. 1,
  36. false,
  37. true
  38. );
  39. expect(Number(cost.toString())).toBe(32.5);
  40. });
  41. });