// Probe: finish_reason on truncation, Responses reasoning.effort on 4.20 models, x-grok-conv-id header acceptance, service_tier. import { raw, save, short } from "./lib.ts"; const results: Record = {}; results.truncation = await raw("/chat/completions", { method: "POST", body: JSON.stringify({ model: "grok-4.20-0309-non-reasoning", messages: [{ role: "user", content: "Write 200 words about the sea." }], max_completion_tokens: 10 }), }); console.log("truncation", results.truncation.status, results.truncation.body?.choices?.[0]?.finish_reason, short(results.truncation.body?.usage, 200)); results.truncationReasoning = await raw("/chat/completions", { method: "POST", body: JSON.stringify({ model: "grok-4.3", messages: [{ role: "user", content: "Write 200 words about the sea." }], max_completion_tokens: 10 }), }); console.log("truncation reasoning", results.truncationReasoning.status, results.truncationReasoning.body?.choices?.[0]?.finish_reason, short(results.truncationReasoning.body?.choices?.[0]?.message?.content, 100), short(results.truncationReasoning.body?.usage, 200)); for (const model of ["grok-4.20-0309-reasoning", "grok-4.20-0309-non-reasoning", "grok-build-0.1", "grok-4.3"]) { const r = await raw("/responses", { method: "POST", body: JSON.stringify({ model, input: "Reply: ok", reasoning: { effort: "low" }, store: false, max_output_tokens: 100 }) }); results[`responses.effort.low:${model}`] = { status: r.status, body: r.status === 200 ? { reasoning: r.body.reasoning, usage: r.body.usage } : r.body }; console.log("responses effort low", model, r.status, short(r.status === 200 ? r.body.reasoning : r.body, 200)); } const r2 = await raw("/responses", { method: "POST", body: JSON.stringify({ model: "grok-4.3", input: "Reply: ok", reasoning: { effort: "none" }, store: false, max_output_tokens: 100 }) }); results["responses.effort.none:grok-4.3"] = { status: r2.status, body: r2.status === 200 ? { reasoning: r2.body.reasoning, usage: r2.body.usage, outputTypes: r2.body.output.map((o: any) => o.type) } : r2.body }; console.log("responses effort none grok-4.3", r2.status, short(results["responses.effort.none:grok-4.3"].body, 300)); // conv id header + prompt_cache_key + service_tier const r3 = await raw("/chat/completions", { method: "POST", headers: { "x-grok-conv-id": "polyllm-probe-conv-1" }, body: JSON.stringify({ model: "grok-4.20-0309-non-reasoning", messages: [{ role: "user", content: "Reply: ok" }], max_completion_tokens: 5, prompt_cache_key: "polyllm-probe-conv-1", service_tier: "default", user: "probe-user" }), }); results.convIdHeader = { status: r3.status, headers: r3.headers, service_tier: r3.body?.service_tier, usage: r3.body?.usage, error: r3.status !== 200 ? r3.body : undefined }; console.log("conv-id/prompt_cache_key/service_tier", r3.status, r3.body?.service_tier, short(r3.body?.usage ?? r3.body, 200)); // Responses with instructions + previous_response_id conflict, and store default retrieval const r4 = await raw("/responses", { method: "POST", body: JSON.stringify({ model: "grok-4.20-0309-non-reasoning", input: "Remember the word: pamplemousse. Reply ok.", max_output_tokens: 20 }) }); const id = r4.body?.id; const r5 = id ? await raw("/responses", { method: "POST", body: JSON.stringify({ model: "grok-4.20-0309-non-reasoning", previous_response_id: id, input: "What word did I ask you to remember? One word.", max_output_tokens: 20 }) }) : null; results.stateful = { create: r4.status, storeDefault: r4.body?.store, followUp: r5?.status, followUpText: r5?.body?.output?.at(-1)?.content?.[0]?.text, error: r5?.status !== 200 ? r5?.body : undefined }; console.log("stateful", results.stateful); if (id) { const r6 = await raw(`/responses/${id}`, { method: "DELETE" }); results.delete = { status: r6.status, body: r6.body }; console.log("delete", r6.status, short(r6.body, 200)); } save("09-misc.json", results);