// Retest vision for ambiguous models with a 64x64 red PNG. import { readFileSync, writeFileSync } from "node:fs"; const envText = readFileSync("C:/Users/12914/.mimo2codex/.env", "utf8"); const KEY = envText.match(/^MIMO_API_KEY=(.+)$/m)?.[1]?.trim(); const BASE = "https://opencode.ai/zen/go/v1"; const B64 = readFileSync("C:/Users/12914/Desktop/vscode/.mimo2codex-audit/red64.png").toString("base64"); const MODELS = [ "gpt-5.6-luna", // retry in case 500 was transient "deepseek-v4-pro", "deepseek-v4-flash", "longcat-2.0", "hy4-preview", "qwen3.5-plus", "qwen3.6-plus", "qwen3.7-max", "qwen3.7-plus", "qwen3.8-flash", "qwen3.8-max", "glm-5.3", // sanity: previously rejected image input "minimax-m2.5", // sanity: previously rejected image input ]; async function call(body, timeoutMs = 90000) { const ctrl = new AbortController(); const t = setTimeout(() => ctrl.abort(), timeoutMs); try { const res = await fetch(`${BASE}/chat/completions`, { method: "POST", headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" }, body: JSON.stringify(body), signal: ctrl.signal, }); const raw = await res.text(); let json = null; try { json = JSON.parse(raw); } catch {} return { status: res.status, json, raw: raw.slice(0, 200) }; } catch (e) { return { status: 0, json: null, raw: String(e?.message || e) }; } finally { clearTimeout(t); } } const results = {}; for (const m of MODELS) { const r = await call({ model: m, messages: [{ role: "user", content: [ { type: "text", text: "这张图片是什么颜色?只回答颜色词。" }, { type: "image_url", image_url: { url: `data:image/png;base64,${B64}` } }, ], }], max_tokens: 400, stream: false, }); const msg = r.json?.choices?.[0]?.message; const content = typeof msg?.content === "string" ? msg.content : null; const thinkTag = content && //i.test(content); results[m] = { status: r.status, ok: r.status === 200 && !!msg, answer: content ? content.replace(/[\s\S]*?<\/think>/g, "").trim().slice(0, 100) : null, err: r.json?.error?.message?.slice(0, 220) ?? (r.status !== 200 ? r.raw : null), }; console.log(`${m}: ${r.status} ${results[m].ok ? "answer=" + results[m].answer : "err=" + results[m].err}`); writeFileSync("C:/Users/12914/Desktop/vscode/.mimo2codex-audit/vision-retest.json", JSON.stringify(results, null, 2)); } console.log("DONE");