





























@@ -60,6 +60,7 @@ function runXaiToolPayloadWrapper(params: {
6060id:
6161params.modelId ??
6262(api === "openai-completions" ? "grok-4-1-fast-reasoning" : "grok-4-fast"),
63+reasoning: params.modelId ? !params.modelId.includes("non-reasoning") : true,
6364 ...(params.input ? { input: params.input } : {}),
6465} as Model<XaiStreamApi>,
6566{ messages: [] } as Context,
@@ -158,32 +159,49 @@ describe("xai stream wrappers", () => {
158159},
159160],
160161};
161-runXaiToolPayloadWrapper({ payload, api: "openai-completions" });
162+runXaiToolPayloadWrapper({
163+ payload,
164+api: "openai-completions",
165+modelId: "grok-4-fast-non-reasoning",
166+});
162167163168expect(payload).not.toHaveProperty("reasoning");
164169expect(payload).not.toHaveProperty("reasoningEffort");
165170expect(payload).not.toHaveProperty("reasoning_effort");
166171expect(payload.tools[0]?.function).not.toHaveProperty("strict");
167172});
168173169-it("strips unsupported reasoning controls from xai payloads", () => {
174+it("strips unsupported reasoning controls from non-reasoning xai payloads", () => {
170175const payload: Record<string, unknown> = {
171176reasoning: { effort: "high" },
172177reasoningEffort: "high",
173178reasoning_effort: "high",
174179};
175-runXaiToolPayloadWrapper({ payload });
180+runXaiToolPayloadWrapper({ payload, modelId: "grok-4-fast-non-reasoning" });
176181177182expect(payload).not.toHaveProperty("reasoning");
178183expect(payload).not.toHaveProperty("reasoningEffort");
179184expect(payload).not.toHaveProperty("reasoning_effort");
180185});
181186182-it("marks native xAI Responses thinking efforts unsupported before pi-ai builds payloads", async () => {
187+it("passes reasoning controls through for reasoning-capable xai payloads", () => {
188+const payload: Record<string, unknown> = {
189+reasoning: { effort: "high" },
190+reasoningEffort: "high",
191+reasoning_effort: "high",
192+};
193+runXaiToolPayloadWrapper({ payload, modelId: "grok-4.3" });
194+195+expect(payload.reasoning).toEqual({ effort: "high" });
196+expect(payload.reasoningEffort).toBe("high");
197+expect(payload.reasoning_effort).toBe("high");
198+});
199+200+it("keeps native xAI Responses thinking efforts before pi-ai dispatches payloads", async () => {
183201const payload = await captureXaiResponsesPayloadWithThinking();
184202185-expect(payload).not.toHaveProperty("reasoning");
186-expect(payload).not.toHaveProperty("include");
203+expect(payload.reasoning).toEqual({ effort: "low", summary: "auto" });
204+expect(payload.include).toEqual(["reasoning.encrypted_content"]);
187205});
188206189207it("moves image-bearing tool results out of function_call_output payloads", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。