SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
2.9 KB · 58 lines typescript
Raw Blame History
1// Probe (c): which parameters are accepted vs rejected per model (exact error bodies).2import { CHAT_MODELS, raw, save, short } from "./lib.ts";34const base = { messages: [{ role: "user", content: "Reply with the single word: ok" }] };5const variants: Record<string, any> = {6  temperature: { temperature: 0.3, max_completion_tokens: 50 },7  top_p: { top_p: 0.9, max_completion_tokens: 50 },8  frequency_penalty: { frequency_penalty: 0.5, max_completion_tokens: 50 },9  presence_penalty: { presence_penalty: 0.5, max_completion_tokens: 50 },10  seed: { seed: 42, max_completion_tokens: 50 },11  stop: { stop: ["\n"], max_completion_tokens: 50 },12  max_tokens: { max_tokens: 50 },13  max_completion_tokens: { max_completion_tokens: 50 },14  "reasoning_effort:none": { reasoning_effort: "none", max_completion_tokens: 50 },15  "reasoning_effort:low": { reasoning_effort: "low", max_completion_tokens: 200 },16  "reasoning_effort:medium": { reasoning_effort: "medium", max_completion_tokens: 200 },17  "reasoning_effort:high": { reasoning_effort: "high", max_completion_tokens: 400 },18  "reasoning_effort:xhigh": { reasoning_effort: "xhigh", max_completion_tokens: 400 },19  "reasoning_effort:minimal": { reasoning_effort: "minimal", max_completion_tokens: 50 },20  "response_format:json_object": {21    response_format: { type: "json_object" },22    messages: [{ role: "user", content: 'Return JSON {"ok":true}' }],23    max_completion_tokens: 100,24  },25  top_k: { top_k: 40, max_completion_tokens: 50 },26  logprobs: { logprobs: true, top_logprobs: 2, max_completion_tokens: 20 },27  n2: { n: 2, max_completion_tokens: 20 },28  developer_role: { messages: [{ role: "developer", content: "Be terse." }, { role: "user", content: "ok?" }], max_completion_tokens: 20 },29  unknown_param: { foo_bar: 1, max_completion_tokens: 20 },30};3132const results: Record<string, Record<string, any>> = {};33for (const model of CHAT_MODELS) {34  results[model] = {};35  const jobs = Object.entries(variants).map(async ([name, v]) => {36    const payload = { model, ...base, ...v };37    const r = await raw("/chat/completions", { method: "POST", body: JSON.stringify(payload) });38    const b: any = r.body;39    const summary =40      r.status === 20041        ? {42            status: 200,43            finish: b.choices?.[0]?.finish_reason,44            content: short(b.choices?.[0]?.message?.content, 60),45            reasoning_tokens: b.usage?.completion_tokens_details?.reasoning_tokens,46            completion_tokens: b.usage?.completion_tokens,47            n_choices: b.choices?.length,48            system_fingerprint: b.system_fingerprint,49            has_logprobs: b.choices?.[0]?.logprobs != null,50          }51        : { status: r.status, error: b };52    results[model][name] = summary;53    console.log(model.padEnd(30), name.padEnd(28), r.status, r.status === 200 ? `rt=${summary.reasoning_tokens} ct=${summary.completion_tokens} ${summary.content}` : short(b, 220));54  });55  await Promise.all(jobs);56}57save("02-params.json", results);58