El contrato se fuerza con el input_schema de la herramienta porque MiniMax no soporta structured outputs. tool_choice no se envia: fijarlo solo en el reintento le daria un prefijo distinto y se pagaria el contexto completo. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
52 lines
2.0 KiB
TypeScript
52 lines
2.0 KiB
TypeScript
import { crearCliente, modelo } from "@/lib/propuesta/cliente-ia";
|
|
|
|
// No llama a la API. Comprueba el contrato local y que el fallo sin clave sea claro.
|
|
|
|
let fallas = 0;
|
|
function check(n: string, ok: boolean, d = "") {
|
|
console.log(`${ok ? " OK " : " FALLA"} | ${n}${d ? " -> " + d : ""}`);
|
|
if (!ok) fallas++;
|
|
}
|
|
|
|
const guardada = process.env.MINIMAX_API_KEY;
|
|
const guardadaBase = process.env.MINIMAX_BASE_URL;
|
|
|
|
delete process.env.MINIMAX_API_KEY;
|
|
let msg = "";
|
|
try {
|
|
crearCliente();
|
|
} catch (e) {
|
|
msg = e instanceof Error ? e.message : String(e);
|
|
}
|
|
check("sin clave falla en vez de llamar a ciegas", msg.length > 0);
|
|
check("el error nombra la variable correcta", msg.includes("MINIMAX_API_KEY"));
|
|
check("el error advierte del prefijo ANTHROPIC_", msg.includes("ANTHROPIC_API_KEY"));
|
|
|
|
process.env.MINIMAX_API_KEY = "clave-de-prueba";
|
|
delete process.env.MINIMAX_BASE_URL;
|
|
const c = crearCliente();
|
|
check("baseURL apunta a MiniMax por defecto", String(c.baseURL).includes("api.minimax.io"), String(c.baseURL));
|
|
check("modelo por defecto es MiniMax-M3", modelo() === "MiniMax-M3", modelo());
|
|
|
|
// Aunque el shell tenga ANTHROPIC_BASE_URL, el cliente no debe hacerle caso.
|
|
process.env.ANTHROPIC_BASE_URL = "https://api.anthropic.com";
|
|
const c2 = crearCliente();
|
|
check("ANTHROPIC_BASE_URL del shell no secuestra el baseURL",
|
|
!String(c2.baseURL).includes("api.anthropic.com"), String(c2.baseURL));
|
|
delete process.env.ANTHROPIC_BASE_URL;
|
|
|
|
process.env.MINIMAX_BASE_URL = "https://ejemplo.local/anthropic";
|
|
check("MINIMAX_BASE_URL si se respeta", String(crearCliente().baseURL).includes("ejemplo.local"));
|
|
|
|
process.env.MINIMAX_MODEL = "MiniMax-M2";
|
|
check("MINIMAX_MODEL se respeta", modelo() === "MiniMax-M2");
|
|
delete process.env.MINIMAX_MODEL;
|
|
|
|
if (guardada) process.env.MINIMAX_API_KEY = guardada;
|
|
else delete process.env.MINIMAX_API_KEY;
|
|
if (guardadaBase) process.env.MINIMAX_BASE_URL = guardadaBase;
|
|
else delete process.env.MINIMAX_BASE_URL;
|
|
|
|
console.log(fallas === 0 ? "\ntodo paso\n" : `\n${fallas} fallas\n`);
|
|
process.exit(fallas === 0 ? 0 : 1);
|