Propuesta IA: cliente MiniMax con tool-calling y reintentos
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]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
5bad273977
commit
877a181a03
@@ -0,0 +1,51 @@
|
||||
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);
|
||||
Reference in New Issue
Block a user