File size: 4,344 Bytes
fc93158 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | import type { StreamFn } from "@mariozechner/pi-agent-core";
import { describe, expect, it, vi } from "vitest";
import { applyExtraParamsToAgent } from "../pi-embedded-runner.js";
// Mock the logger to avoid noise in tests
vi.mock("./logger.js", () => ({
log: {
debug: vi.fn(),
warn: vi.fn(),
},
}));
describe("cacheRetention default behavior", () => {
it("returns 'short' for Anthropic when not configured", () => {
const agent: { streamFn?: StreamFn } = {};
const cfg = undefined;
const provider = "anthropic";
const modelId = "claude-3-sonnet";
applyExtraParamsToAgent(agent, cfg, provider, modelId);
// Verify streamFn was set (indicating cache retention was applied)
expect(agent.streamFn).toBeDefined();
// The fact that agent.streamFn was modified indicates that cacheRetention
// default "short" was applied. We don't need to call the actual function
// since that would require API provider setup.
});
it("respects explicit 'none' config", () => {
const agent: { streamFn?: StreamFn } = {};
const cfg = {
agents: {
defaults: {
models: {
"anthropic/claude-3-sonnet": {
params: {
cacheRetention: "none" as const,
},
},
},
},
},
};
const provider = "anthropic";
const modelId = "claude-3-sonnet";
applyExtraParamsToAgent(agent, cfg, provider, modelId);
// Verify streamFn was set (config was applied)
expect(agent.streamFn).toBeDefined();
});
it("respects explicit 'long' config", () => {
const agent: { streamFn?: StreamFn } = {};
const cfg = {
agents: {
defaults: {
models: {
"anthropic/claude-3-opus": {
params: {
cacheRetention: "long" as const,
},
},
},
},
},
};
const provider = "anthropic";
const modelId = "claude-3-opus";
applyExtraParamsToAgent(agent, cfg, provider, modelId);
// Verify streamFn was set (config was applied)
expect(agent.streamFn).toBeDefined();
});
it("respects legacy cacheControlTtl config", () => {
const agent: { streamFn?: StreamFn } = {};
const cfg = {
agents: {
defaults: {
models: {
"anthropic/claude-3-haiku": {
params: {
cacheControlTtl: "1h",
},
},
},
},
},
};
const provider = "anthropic";
const modelId = "claude-3-haiku";
applyExtraParamsToAgent(agent, cfg, provider, modelId);
// Verify streamFn was set (legacy config was applied)
expect(agent.streamFn).toBeDefined();
});
it("returns undefined for non-Anthropic providers", () => {
const agent: { streamFn?: StreamFn } = {};
const cfg = undefined;
const provider = "openai";
const modelId = "gpt-4";
applyExtraParamsToAgent(agent, cfg, provider, modelId);
// For OpenAI, the streamFn might be wrapped for other reasons (like OpenAI responses store)
// but cacheRetention should not be applied
// This is implicitly tested by the lack of cacheRetention-specific wrapping
});
it("prefers explicit cacheRetention over default", () => {
const agent: { streamFn?: StreamFn } = {};
const cfg = {
agents: {
defaults: {
models: {
"anthropic/claude-3-sonnet": {
params: {
cacheRetention: "long" as const,
temperature: 0.7,
},
},
},
},
},
};
const provider = "anthropic";
const modelId = "claude-3-sonnet";
applyExtraParamsToAgent(agent, cfg, provider, modelId);
// Verify streamFn was set with explicit config
expect(agent.streamFn).toBeDefined();
});
it("works with extraParamsOverride", () => {
const agent: { streamFn?: StreamFn } = {};
const cfg = undefined;
const provider = "anthropic";
const modelId = "claude-3-sonnet";
const extraParamsOverride = {
cacheRetention: "none" as const,
};
applyExtraParamsToAgent(agent, cfg, provider, modelId, extraParamsOverride);
// Verify streamFn was set (override was applied)
expect(agent.streamFn).toBeDefined();
});
});
|