anthropic-effort.test.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import { describe, expect, test } from "vitest";
  2. import type { SpecialSetting } from "@/types/special-settings";
  3. import {
  4. extractAnthropicEffortInfo,
  5. type AnthropicEffortOverrideInfo,
  6. } from "@/lib/utils/anthropic-effort";
  7. describe("extractAnthropicEffortInfo", () => {
  8. const cases: Array<{
  9. name: string;
  10. input: SpecialSetting[] | null | undefined;
  11. expected: AnthropicEffortOverrideInfo | null;
  12. }> = [
  13. {
  14. name: "null specialSettings returns null",
  15. input: null,
  16. expected: null,
  17. },
  18. {
  19. name: "undefined specialSettings returns null",
  20. input: undefined,
  21. expected: null,
  22. },
  23. {
  24. name: "empty array returns null",
  25. input: [],
  26. expected: null,
  27. },
  28. {
  29. name: "no effort-related settings returns null",
  30. input: [
  31. {
  32. type: "response_fixer",
  33. scope: "response",
  34. hit: true,
  35. fixersApplied: [],
  36. totalBytesProcessed: 0,
  37. processingTimeMs: 0,
  38. },
  39. ],
  40. expected: null,
  41. },
  42. {
  43. name: "anthropic_effort only (no override) returns original effort",
  44. input: [
  45. {
  46. type: "anthropic_effort",
  47. scope: "request",
  48. hit: true,
  49. effort: "medium",
  50. },
  51. ],
  52. expected: {
  53. originalEffort: "medium",
  54. overriddenEffort: null,
  55. isOverridden: false,
  56. },
  57. },
  58. {
  59. name: "anthropic_effort + override with changed:true returns overridden info",
  60. input: [
  61. {
  62. type: "anthropic_effort",
  63. scope: "request",
  64. hit: true,
  65. effort: "medium",
  66. },
  67. {
  68. type: "provider_parameter_override",
  69. scope: "provider",
  70. providerId: 1,
  71. providerName: "test",
  72. providerType: "claude",
  73. hit: true,
  74. changed: true,
  75. changes: [
  76. { path: "max_tokens", before: 1024, after: 1024, changed: false },
  77. { path: "output_config.effort", before: "medium", after: "high", changed: true },
  78. ],
  79. },
  80. ],
  81. expected: {
  82. originalEffort: "medium",
  83. overriddenEffort: "high",
  84. isOverridden: true,
  85. },
  86. },
  87. {
  88. name: "override with changed:false returns non-overridden info",
  89. input: [
  90. {
  91. type: "anthropic_effort",
  92. scope: "request",
  93. hit: true,
  94. effort: "high",
  95. },
  96. {
  97. type: "provider_parameter_override",
  98. scope: "provider",
  99. providerId: 1,
  100. providerName: "test",
  101. providerType: "claude",
  102. hit: true,
  103. changed: false,
  104. changes: [
  105. { path: "output_config.effort", before: "high", after: "high", changed: false },
  106. ],
  107. },
  108. ],
  109. expected: {
  110. originalEffort: "high",
  111. overriddenEffort: null,
  112. isOverridden: false,
  113. },
  114. },
  115. {
  116. name: "fallback: no anthropic_effort but override exists uses before as original",
  117. input: [
  118. {
  119. type: "provider_parameter_override",
  120. scope: "provider",
  121. providerId: 1,
  122. providerName: "test",
  123. providerType: "claude",
  124. hit: true,
  125. changed: true,
  126. changes: [{ path: "output_config.effort", before: "low", after: "max", changed: true }],
  127. },
  128. ],
  129. expected: {
  130. originalEffort: "low",
  131. overriddenEffort: "max",
  132. isOverridden: true,
  133. },
  134. },
  135. {
  136. name: "override with no effort path returns effort from anthropic_effort only",
  137. input: [
  138. {
  139. type: "anthropic_effort",
  140. scope: "request",
  141. hit: true,
  142. effort: "auto",
  143. },
  144. {
  145. type: "provider_parameter_override",
  146. scope: "provider",
  147. providerId: 1,
  148. providerName: "test",
  149. providerType: "claude",
  150. hit: true,
  151. changed: true,
  152. changes: [{ path: "max_tokens", before: 1024, after: 2048, changed: true }],
  153. },
  154. ],
  155. expected: {
  156. originalEffort: "auto",
  157. overriddenEffort: null,
  158. isOverridden: false,
  159. },
  160. },
  161. {
  162. name: "anthropic_effort with whitespace-only effort is ignored",
  163. input: [
  164. {
  165. type: "anthropic_effort",
  166. scope: "request",
  167. hit: true,
  168. effort: " ",
  169. },
  170. ],
  171. expected: null,
  172. },
  173. {
  174. name: "override changed:true but both originalEffort and overrideBefore are null returns null",
  175. input: [
  176. {
  177. type: "provider_parameter_override",
  178. scope: "provider",
  179. providerId: 1,
  180. providerName: "test",
  181. providerType: "claude",
  182. hit: true,
  183. changed: true,
  184. changes: [{ path: "output_config.effort", before: null, after: "high", changed: true }],
  185. },
  186. ],
  187. expected: null,
  188. },
  189. ];
  190. for (const { name, input, expected } of cases) {
  191. test(name, () => {
  192. expect(extractAnthropicEffortInfo(input)).toEqual(expected);
  193. });
  194. }
  195. });