
























@@ -2493,7 +2493,13 @@ describe("runReplyAgent fallback reasoning tags", () => {
24932493});
2494249424952495describe("runReplyAgent response usage footer", () => {
2496-function createRun(params: { responseUsage: "tokens" | "full"; sessionKey: string }) {
2496+function createRun(params: {
2497+responseUsage: "tokens" | "full";
2498+sessionKey: string;
2499+config?: unknown;
2500+provider?: string;
2501+model?: string;
2502+}) {
24972503const typing = createMockTypingController();
24982504const sessionCtx = {
24992505Provider: "whatsapp",
@@ -2521,10 +2527,10 @@ describe("runReplyAgent response usage footer", () => {
25212527messageProvider: "whatsapp",
25222528sessionFile: "/tmp/session.jsonl",
25232529workspaceDir: "/tmp",
2524-config: createCliBackendTestConfig(),
2530+config: params.config ?? createCliBackendTestConfig(),
25252531skillsSnapshot: {},
2526-provider: "anthropic",
2527-model: "claude",
2532+provider: params.provider ?? "anthropic",
2533+model: params.model ?? "claude",
25282534thinkLevel: "low",
25292535verboseLevel: "off",
25302536elevatedLevel: "off",
@@ -2582,26 +2588,95 @@ describe("runReplyAgent response usage footer", () => {
25822588expect(text).toContain(`· session \`${sessionKey}\``);
25832589});
258425902585-it("does not append session key when responseUsage=tokens", async () => {
2591+it("does not append session key or cost when responseUsage=tokens", async () => {
25862592runEmbeddedPiAgentMock.mockResolvedValueOnce({
25872593payloads: [{ text: "ok" }],
25882594meta: {
25892595agentMeta: {
2590-provider: "anthropic",
2591-model: "claude",
2596+provider: "amazon-bedrock",
2597+model: "us.anthropic.claude-sonnet-4-6",
25922598usage: { input: 12, output: 3, cacheRead: 4, cacheWrite: 2 },
25932599},
25942600},
25952601});
2596260225972603const sessionKey = "agent:main:whatsapp:dm:+1000";
2598-const res = await createRun({ responseUsage: "tokens", sessionKey });
2604+const res = await createRun({
2605+responseUsage: "tokens",
2606+ sessionKey,
2607+provider: "amazon-bedrock",
2608+model: "us.anthropic.claude-sonnet-4-6",
2609+config: {
2610+models: {
2611+providers: {
2612+"amazon-bedrock": {
2613+auth: "aws-sdk",
2614+models: [
2615+{
2616+id: "us.anthropic.claude-sonnet-4-6",
2617+cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
2618+},
2619+],
2620+},
2621+},
2622+},
2623+},
2624+});
25992625const payload = Array.isArray(res) ? res[0] : res;
26002626const text = payload?.text ?? "";
26012627expect(text).toContain("Usage:");
26022628expect(text).toContain("cache 4 cached / 2 new");
2629+expect(text).not.toContain("est $");
26032630expect(text).not.toContain("· session ");
26042631});
2632+2633+it("shows configured costs for aws-sdk providers when responseUsage=full", async () => {
2634+runEmbeddedPiAgentMock.mockResolvedValueOnce({
2635+payloads: [{ text: "ok" }],
2636+meta: {
2637+agentMeta: {
2638+provider: "amazon-bedrock",
2639+model: "us.anthropic.claude-sonnet-4-6",
2640+usage: { input: 1_000, output: 2_000, cacheRead: 500, cacheWrite: 2_000 },
2641+},
2642+},
2643+});
2644+2645+const sessionKey = "agent:main:whatsapp:dm:+1000";
2646+const res = await createRun({
2647+responseUsage: "full",
2648+ sessionKey,
2649+provider: "amazon-bedrock",
2650+model: "us.anthropic.claude-sonnet-4-6",
2651+config: {
2652+models: {
2653+providers: {
2654+"amazon-bedrock": {
2655+auth: "aws-sdk",
2656+models: [
2657+{
2658+id: "us.anthropic.claude-sonnet-4-6",
2659+cost: {
2660+input: 3,
2661+output: 15,
2662+cacheRead: 0.3,
2663+cacheWrite: 3.75,
2664+},
2665+},
2666+],
2667+},
2668+},
2669+},
2670+},
2671+});
2672+const payload = Array.isArray(res) ? res[0] : res;
2673+const text = payload?.text ?? "";
2674+2675+expect(text).toContain("Usage: 1.0k in / 2.0k out");
2676+expect(text).toContain("cache 500 cached / 2.0k new");
2677+expect(text).toContain("est $0.04");
2678+expect(text).toContain(`· session \`${sessionKey}\``);
2679+});
26052680});
2606268126072682describe("runReplyAgent transient HTTP retry", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。