






























1+import { describe, expect, it } from "vitest";
2+import { mapOpenAIStopReason } from "./openai-stop-reason.js";
3+4+describe("mapOpenAIStopReason", () => {
5+it.each([
6+["stop", { stopReason: "stop" }],
7+["end", { stopReason: "stop" }],
8+["length", { stopReason: "length" }],
9+["function_call", { stopReason: "toolUse" }],
10+["tool_calls", { stopReason: "toolUse" }],
11+[null, { stopReason: "stop" }],
12+] as const)("maps %s", (reason, expected) => {
13+expect(mapOpenAIStopReason(reason)).toEqual(expected);
14+});
15+16+it("keeps singular tool_call opt-in", () => {
17+expect(mapOpenAIStopReason("tool_call")).toEqual({
18+stopReason: "error",
19+errorMessage: "Provider finish_reason: tool_call",
20+});
21+expect(mapOpenAIStopReason("tool_call", { allowSingularToolCall: true })).toEqual({
22+stopReason: "toolUse",
23+});
24+});
25+26+it("surfaces provider errors and unknown reasons", () => {
27+expect(mapOpenAIStopReason("content_filter")).toEqual({
28+stopReason: "error",
29+errorMessage: "Provider finish_reason: content_filter",
30+});
31+expect(mapOpenAIStopReason("unexpected")).toEqual({
32+stopReason: "error",
33+errorMessage: "Provider finish_reason: unexpected",
34+});
35+});
36+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。