modelmix
Version:
🧬 Reliable interface with automatic fallback for AI LLMs.
78 lines (66 loc) • 3.01 kB
JavaScript
import { ModelMix } from '../index.js';
import ivm from 'isolated-vm';
try { process.loadEnvFile(); } catch {}
console.log('🧬 ModelMix - JavaScript REPL Tool Demo');
// Crear isolate una sola vez (reutilizable)
const isolate = new ivm.Isolate({ memoryLimit: 128 }); // 128MB máximo
// Ejemplo simple: REPL de JavaScript para calcular potencias de 2
async function replPowersExample() {
console.log('\n=== JavaScript REPL - Potencias de 2 ===\n');
const gptArgs = { options: { reasoning_effort: "none", verbosity: null } };
const mmix = ModelMix.new({ config: { debug: 2, max_history: 10 } })
.gpt41nano()
.gpt52(gptArgs)
.gemini3flash()
.setSystem('You are a helpful assistant with access to a JavaScript REPL. When you use the REPL and get results, always show them to the user in your response.');
// Variable para capturar el resultado de la herramienta
let toolResult = null;
// Agregar herramienta REPL personalizada
mmix.addTool({
name: "javascript_repl",
description: "Execute JavaScript code in a REPL environment. You can run any valid JavaScript code and get the result.",
inputSchema: {
type: "object",
properties: {
code: {
type: "string",
description: "JavaScript code to execute"
}
},
required: ["code"]
}
}, async ({ code }) => {
console.log('đź”§ Ejecutando cĂłdigo JavaScript:');
console.log('─'.repeat(50));
console.log(code);
console.log('─'.repeat(50));
try {
const context = await isolate.createContext();
const result = await context.eval(`JSON.stringify(eval(${JSON.stringify(code)}))`, { timeout: 10000 });
toolResult = JSON.parse(result);
console.log('\nâś… Resultado:', toolResult);
return result;
} catch (error) {
console.log('\n❌ Error:', error.message);
return `Error: ${error.message}`;
}
});
// Pedir al modelo que calcule 100 potencias de 2
mmix.addText('Calcular las primeras 100 potencias de 2 (2^0 hasta 2^99). Después de ejecutar el código, menciona algunos valores del resultado como las primeras 5 y las últimas 5 potencias.');
const result = await mmix.message();
console.log('\nđź’¬ Respuesta del modelo:');
console.log(result);
// Mostrar muestra del resultado si está disponible
if (toolResult && Array.isArray(toolResult)) {
console.log('\n📊 Muestra de resultados (primeros 10 y últimos 10):');
console.log('Primeros 10:', toolResult.slice(0, 10));
console.log('Ăšltimos 10:', toolResult.slice(-10));
console.log(`\nTotal: ${toolResult.length} potencias calculadas`);
}
}
try {
await replPowersExample();
console.log('\nâś… Ejemplo completado');
} catch (error) {
console.error('❌ Error:', error);
}