|
|
@@ -0,0 +1,197 @@
|
|
|
+import { describe, expect, test } from "vitest";
|
|
|
+import type { SpecialSetting } from "@/types/special-settings";
|
|
|
+import {
|
|
|
+ extractAnthropicEffortInfo,
|
|
|
+ type AnthropicEffortOverrideInfo,
|
|
|
+} from "@/lib/utils/anthropic-effort";
|
|
|
+
|
|
|
+describe("extractAnthropicEffortInfo", () => {
|
|
|
+ const cases: Array<{
|
|
|
+ name: string;
|
|
|
+ input: SpecialSetting[] | null | undefined;
|
|
|
+ expected: AnthropicEffortOverrideInfo | null;
|
|
|
+ }> = [
|
|
|
+ {
|
|
|
+ name: "null specialSettings returns null",
|
|
|
+ input: null,
|
|
|
+ expected: null,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "undefined specialSettings returns null",
|
|
|
+ input: undefined,
|
|
|
+ expected: null,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "empty array returns null",
|
|
|
+ input: [],
|
|
|
+ expected: null,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "no effort-related settings returns null",
|
|
|
+ input: [
|
|
|
+ {
|
|
|
+ type: "response_fixer",
|
|
|
+ scope: "response",
|
|
|
+ hit: true,
|
|
|
+ fixersApplied: [],
|
|
|
+ totalBytesProcessed: 0,
|
|
|
+ processingTimeMs: 0,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ expected: null,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "anthropic_effort only (no override) returns original effort",
|
|
|
+ input: [
|
|
|
+ {
|
|
|
+ type: "anthropic_effort",
|
|
|
+ scope: "request",
|
|
|
+ hit: true,
|
|
|
+ effort: "medium",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ expected: {
|
|
|
+ originalEffort: "medium",
|
|
|
+ overriddenEffort: null,
|
|
|
+ isOverridden: false,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "anthropic_effort + override with changed:true returns overridden info",
|
|
|
+ input: [
|
|
|
+ {
|
|
|
+ type: "anthropic_effort",
|
|
|
+ scope: "request",
|
|
|
+ hit: true,
|
|
|
+ effort: "medium",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "provider_parameter_override",
|
|
|
+ scope: "provider",
|
|
|
+ providerId: 1,
|
|
|
+ providerName: "test",
|
|
|
+ providerType: "claude",
|
|
|
+ hit: true,
|
|
|
+ changed: true,
|
|
|
+ changes: [
|
|
|
+ { path: "max_tokens", before: 1024, after: 1024, changed: false },
|
|
|
+ { path: "output_config.effort", before: "medium", after: "high", changed: true },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ expected: {
|
|
|
+ originalEffort: "medium",
|
|
|
+ overriddenEffort: "high",
|
|
|
+ isOverridden: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "override with changed:false returns non-overridden info",
|
|
|
+ input: [
|
|
|
+ {
|
|
|
+ type: "anthropic_effort",
|
|
|
+ scope: "request",
|
|
|
+ hit: true,
|
|
|
+ effort: "high",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "provider_parameter_override",
|
|
|
+ scope: "provider",
|
|
|
+ providerId: 1,
|
|
|
+ providerName: "test",
|
|
|
+ providerType: "claude",
|
|
|
+ hit: true,
|
|
|
+ changed: false,
|
|
|
+ changes: [
|
|
|
+ { path: "output_config.effort", before: "high", after: "high", changed: false },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ expected: {
|
|
|
+ originalEffort: "high",
|
|
|
+ overriddenEffort: null,
|
|
|
+ isOverridden: false,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "fallback: no anthropic_effort but override exists uses before as original",
|
|
|
+ input: [
|
|
|
+ {
|
|
|
+ type: "provider_parameter_override",
|
|
|
+ scope: "provider",
|
|
|
+ providerId: 1,
|
|
|
+ providerName: "test",
|
|
|
+ providerType: "claude",
|
|
|
+ hit: true,
|
|
|
+ changed: true,
|
|
|
+ changes: [{ path: "output_config.effort", before: "low", after: "max", changed: true }],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ expected: {
|
|
|
+ originalEffort: "low",
|
|
|
+ overriddenEffort: "max",
|
|
|
+ isOverridden: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "override with no effort path returns effort from anthropic_effort only",
|
|
|
+ input: [
|
|
|
+ {
|
|
|
+ type: "anthropic_effort",
|
|
|
+ scope: "request",
|
|
|
+ hit: true,
|
|
|
+ effort: "auto",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "provider_parameter_override",
|
|
|
+ scope: "provider",
|
|
|
+ providerId: 1,
|
|
|
+ providerName: "test",
|
|
|
+ providerType: "claude",
|
|
|
+ hit: true,
|
|
|
+ changed: true,
|
|
|
+ changes: [{ path: "max_tokens", before: 1024, after: 2048, changed: true }],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ expected: {
|
|
|
+ originalEffort: "auto",
|
|
|
+ overriddenEffort: null,
|
|
|
+ isOverridden: false,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "anthropic_effort with whitespace-only effort is ignored",
|
|
|
+ input: [
|
|
|
+ {
|
|
|
+ type: "anthropic_effort",
|
|
|
+ scope: "request",
|
|
|
+ hit: true,
|
|
|
+ effort: " ",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ expected: null,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "override changed:true but both originalEffort and overrideBefore are null returns null",
|
|
|
+ input: [
|
|
|
+ {
|
|
|
+ type: "provider_parameter_override",
|
|
|
+ scope: "provider",
|
|
|
+ providerId: 1,
|
|
|
+ providerName: "test",
|
|
|
+ providerType: "claude",
|
|
|
+ hit: true,
|
|
|
+ changed: true,
|
|
|
+ changes: [{ path: "output_config.effort", before: null, after: "high", changed: true }],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ expected: null,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+
|
|
|
+ for (const { name, input, expected } of cases) {
|
|
|
+ test(name, () => {
|
|
|
+ expect(extractAnthropicEffortInfo(input)).toEqual(expected);
|
|
|
+ });
|
|
|
+ }
|
|
|
+});
|