





















@@ -946,6 +946,29 @@ describe("buildAssistantMessage", () => {
946946expect(result.content).toEqual([{ type: "thinking", thinking: "Reasoning output" }]);
947947});
948948949+it("drops provider-returned thinking for non-reasoning models", () => {
950+const response = {
951+model: "minimax-m2.7:cloud",
952+created_at: "2026-01-01T00:00:00Z",
953+message: {
954+role: "assistant" as const,
955+content: "",
956+thinking: "Thinking output",
957+},
958+done: true,
959+prompt_eval_count: 10,
960+eval_count: 6,
961+};
962+const result = buildAssistantMessage(response, {
963+ ...modelInfo,
964+id: "minimax-m2.7:cloud",
965+reasoning: false,
966+});
967+expect(result.stopReason).toBe("stop");
968+expect(result.content).toEqual([]);
969+expect(result.usage.output).toBe(6);
970+});
971+949972it("strips inline reasoning prefix from kimi cloud visible text", () => {
950973const response = {
951974model: "kimi-k2.6:cloud",
@@ -2717,12 +2740,37 @@ describe("createOllamaStreamFn", () => {
27172740[
27182741'{"model":"m","created_at":"t","message":{"role":"assistant","content":"","reasoning":"reasoned"},"done":false}',
27192742'{"model":"m","created_at":"t","message":{"role":"assistant","content":"","reasoning":" output"},"done":false}',
2720-'{"model":"m","created_at":"t","message":{"role":"assistant","content":""},"done":true,"prompt_eval_count":1,"eval_count":2}',
2743+'{"model":"m","created_at":"t","message":{"role":"assistant","content":""},"done":true,"prompt_eval_count":1}',
27212744],
27222745[{ type: "thinking", thinking: "reasoned output" }],
27232746);
27242747});
272527482749+it("drops streamed reasoning chunks for non-reasoning models", async () => {
2750+await withMockNdjsonFetch(
2751+[
2752+'{"model":"m","created_at":"t","message":{"role":"assistant","content":"","reasoning":"reasoned"},"done":false}',
2753+'{"model":"m","created_at":"t","message":{"role":"assistant","content":"","reasoning":" output"},"done":false}',
2754+'{"model":"m","created_at":"t","message":{"role":"assistant","content":""},"done":true,"prompt_eval_count":1,"eval_count":2}',
2755+],
2756+async () => {
2757+const stream = await createOllamaTestStream({
2758+baseUrl: "http://ollama-host:11434",
2759+model: { reasoning: false },
2760+});
2761+const events = await collectStreamEvents(stream);
2762+const doneEvent = events.at(-1);
2763+if (!doneEvent || doneEvent.type !== "done") {
2764+throw new Error("Expected done event");
2765+}
2766+2767+expect(doneEvent.message.content).toEqual([]);
2768+expect(doneEvent.message.usage.output).toBeGreaterThan(0);
2769+expect(events.some((event) => event.type === "thinking_delta")).toBe(false);
2770+},
2771+);
2772+});
2773+27262774it("keeps streamed content after earlier reasoning chunks", async () => {
27272775await expectDoneEventContent(
27282776[
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。