





















@@ -1027,7 +1027,7 @@ describe("anthropic transport stream", () => {
10271027]);
10281028});
102910291030-it("backfills empty reasoning_content for compatible Anthropic tool-use replays", async () => {
1030+it("backfills empty reasoning_content thinking blocks for compatible Anthropic tool-use replays", async () => {
10311031await runTransportStream(
10321032makeAnthropicTransportModel({
10331033id: "mimo-v2.6-pro",
@@ -1066,13 +1066,69 @@ describe("anthropic transport stream", () => {
10661066latestAnthropicRequest().payload.messages,
10671067(record) => record.role === "assistant",
10681068);
1069-expect(assistantMessage.reasoning_content).toBe("");
1069+expect(assistantMessage).not.toHaveProperty("reasoning_content");
1070+expect(assistantMessage.content).toEqual([
1071+{
1072+type: "thinking",
1073+thinking: "",
1074+signature: "reasoning_content",
1075+},
1076+{ type: "tool_use", id: "call_1", name: "lookup", input: {} },
1077+]);
1078+});
1079+1080+it("backfills MiMo v2-flash tool-use replay when OpenClaw thinking is off", async () => {
1081+await runTransportStream(
1082+makeAnthropicTransportModel({
1083+id: "mimo-v2-flash",
1084+name: "MiMo V2 Flash",
1085+provider: "xiaomi",
1086+baseUrl: "https://api.xiaomimimo.com/anthropic",
1087+reasoning: false,
1088+}),
1089+{
1090+messages: [
1091+{ role: "user", content: "look this up" },
1092+{
1093+role: "assistant",
1094+provider: "xiaomi",
1095+api: "anthropic-messages",
1096+model: "mimo-v2-flash",
1097+stopReason: "toolUse",
1098+timestamp: 0,
1099+content: [{ type: "toolCall", id: "call_1", name: "lookup", arguments: {} }],
1100+},
1101+{
1102+role: "toolResult",
1103+toolCallId: "call_1",
1104+content: [{ type: "text", text: "found" }],
1105+isError: false,
1106+},
1107+{ role: "user", content: "continue" },
1108+],
1109+} as AnthropicStreamContext,
1110+{
1111+apiKey: "sk-xiaomi-test",
1112+} as AnthropicStreamOptions,
1113+);
1114+1115+const assistantMessage = findRecord(
1116+latestAnthropicRequest().payload.messages,
1117+(record) => record.role === "assistant",
1118+);
1119+expect(latestAnthropicRequest().payload).not.toHaveProperty("thinking");
1120+expect(assistantMessage).not.toHaveProperty("reasoning_content");
10701121expect(assistantMessage.content).toEqual([
1122+{
1123+type: "thinking",
1124+thinking: "",
1125+signature: "reasoning_content",
1126+},
10711127{ type: "tool_use", id: "call_1", name: "lookup", input: {} },
10721128]);
10731129});
107411301075-it("backfills empty reasoning_content for compatible Anthropic text replays", async () => {
1131+it("backfills empty reasoning_content thinking blocks for compatible Anthropic text replays", async () => {
10761132await runTransportStream(
10771133makeAnthropicTransportModel({
10781134id: "mimo-v2.6-pro",
@@ -1105,8 +1161,15 @@ describe("anthropic transport stream", () => {
11051161latestAnthropicRequest().payload.messages,
11061162(record) => record.role === "assistant",
11071163);
1108-expect(assistantMessage.reasoning_content).toBe("");
1109-expect(assistantMessage.content).toEqual([{ type: "text", text: "Hello!" }]);
1164+expect(assistantMessage).not.toHaveProperty("reasoning_content");
1165+expect(assistantMessage.content).toEqual([
1166+{
1167+type: "thinking",
1168+thinking: "",
1169+signature: "reasoning_content",
1170+},
1171+{ type: "text", text: "Hello!" },
1172+]);
11101173});
1111117411121175it("does not backfill reasoning_content for generic Anthropic-compatible tool-use replays", async () => {
@@ -1154,7 +1217,7 @@ describe("anthropic transport stream", () => {
11541217]);
11551218});
115612191157-it("does not replay reasoning_content when compatible Anthropic thinking is disabled", async () => {
1220+it("replays observed reasoning_content for compatible Anthropic routes when thinking is disabled", async () => {
11581221await runTransportStream(
11591222makeAnthropicTransportModel({
11601223id: "mimo-v2.6-pro",
@@ -1194,8 +1257,15 @@ describe("anthropic transport stream", () => {
11941257(record) => record.role === "assistant",
11951258);
11961259expect(latestAnthropicRequest().payload.thinking).toEqual({ type: "disabled" });
1197-expect(assistantMessage).not.toHaveProperty("reasoning_content");
1198-expect(assistantMessage.content).toEqual([{ type: "text", text: "Hello!" }]);
1260+expect(assistantMessage.reasoning_content).toBe("Need to answer politely.");
1261+expect(assistantMessage.content).toEqual([
1262+{
1263+type: "thinking",
1264+thinking: "Need to answer politely.",
1265+signature: "reasoning_content",
1266+},
1267+{ type: "text", text: "Hello!" },
1268+]);
11991269});
1200127012011271it("does not replay synthetic reasoning_content to native Anthropic models", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。