






















11import { describe, expect, it, vi } from "vitest";
22import type { ResolvedProviderAuth } from "../agents/model-auth-runtime-shared.js";
3-import type { AssistantMessage, Model } from "../llm/types.js";
3+import { AuthStorage, ModelRegistry } from "../agents/sessions/index.js";
4+import type { AssistantMessage, Model, Usage } from "../llm/types.js";
45import { MAX_TIMER_TIMEOUT_MS } from "../shared/number-coercion.js";
56import { summarizeText } from "./tts-core.js";
7+import type { SpeechModelOverridePolicy } from "./provider-types.js";
68import type { ResolvedTtsConfig } from "./tts-types.js";
7910+const modelOverridePolicy: SpeechModelOverridePolicy = {
11+enabled: false,
12+allowText: false,
13+allowProvider: false,
14+allowVoice: false,
15+allowModelId: false,
16+allowVoiceSettings: false,
17+allowNormalization: false,
18+allowSeed: false,
19+};
20+21+const usage: Usage = {
22+input: 0,
23+output: 0,
24+cacheRead: 0,
25+cacheWrite: 0,
26+totalTokens: 0,
27+cost: {
28+input: 0,
29+output: 0,
30+cacheRead: 0,
31+cacheWrite: 0,
32+total: 0,
33+},
34+};
35+836describe("TTS core", () => {
937it("clamps oversized summarization timeout timers", async () => {
1038const setTimeoutSpy = vi.spyOn(globalThis, "setTimeout");
1139try {
1240const model = {
13-api: "openai-responses",
14-provider: { id: "test-provider", name: "Test Provider" },
1541id: "test-model",
1642name: "Test Model",
17-} as unknown as Model;
43+api: "test-api",
44+provider: "test-provider",
45+baseUrl: "https://example.test",
46+reasoning: false,
47+input: ["text"],
48+cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
49+contextWindow: 4096,
50+maxTokens: 1024,
51+} satisfies Model;
1852const config = {
53+auto: "off",
54+mode: "final",
55+provider: "test-provider",
56+providerSource: "config",
57+personas: {},
1958summaryModel: "test-provider/test-model",
20-} as unknown as ResolvedTtsConfig;
21-const auth: ResolvedProviderAuth = {
59+modelOverrides: modelOverridePolicy,
60+providerConfigs: {},
61+maxTextLength: 10_000,
62+timeoutMs: 10_000,
63+} satisfies ResolvedTtsConfig;
64+const auth = {
2265apiKey: "key",
23-mode: "api-key",
2466source: "test",
25-};
67+mode: "api-key",
68+} satisfies ResolvedProviderAuth;
69+const authStorage = AuthStorage.inMemory();
70+const modelRegistry = ModelRegistry.inMemory(authStorage);
71+const assistant = {
72+role: "assistant",
73+content: [{ type: "text", text: "Short summary." }],
74+api: model.api,
75+provider: model.provider,
76+model: model.id,
77+stopReason: "stop",
78+ usage,
79+timestamp: Date.now(),
80+} satisfies AssistantMessage;
26812782const result = await summarizeText(
2883{
@@ -33,39 +88,14 @@ describe("TTS core", () => {
3388timeoutMs: MAX_TIMER_TIMEOUT_MS + 1,
3489},
3590{
36-completeSimple: vi.fn(
37-async () =>
38-({
39-role: "assistant",
40-content: [{ type: "text", text: "Short summary." }],
41-api: "openai-responses",
42-provider: model.provider,
43-model: model.id,
44-stopReason: "stop",
45-usage: {
46-input: 0,
47-output: 0,
48-cacheRead: 0,
49-cacheWrite: 0,
50-totalTokens: 0,
51-cost: {
52-input: 0,
53-output: 0,
54-cacheRead: 0,
55-cacheWrite: 0,
56-total: 0,
57-},
58-},
59-timestamp: Date.now(),
60-}) satisfies AssistantMessage,
61-),
91+completeSimple: vi.fn(async () => assistant),
6292getApiKeyForModel: vi.fn(async () => auth),
63-prepareModelForSimpleCompletion: vi.fn(({ model: preparedModel }) => preparedModel),
93+prepareModelForSimpleCompletion: vi.fn(() => model),
6494requireApiKey: vi.fn(() => "key"),
6595resolveModelAsync: vi.fn(async () => ({
66-authStorage: {} as never,
6796 model,
68-modelRegistry: {} as never,
97+ authStorage,
98+ modelRegistry,
6999})),
70100},
71101);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。