// Tool implementation for generating ensembles
import { createNarrative } from "../core/rtm-builder.js";
import { RTMEnsembleGenerator, createDefaultParameters } from "../core/rtm-ensemble.js";
interface GenerateEnsembleParams {
text: string;
title: string;
ensembleSize?: number;
maxBranchingFactor?: number;
maxRecallDepth?: number;
}
// Tool implementation
export default async function generateEnsemble(params: GenerateEnsembleParams) {
try {
// Create narrative from text
const narrative = createNarrative(params.text, params.title);
// Create RTM parameters
const parameters = {
...createDefaultParameters(),
maxBranchingFactor: params.maxBranchingFactor || 4,
maxRecallDepth: params.maxRecallDepth || 6
};
// Generate ensemble
const generator = new RTMEnsembleGenerator(parameters);
const ensemble = await generator.generateEnsemble(
narrative,
params.ensembleSize || 100
);
// Analyze variance
const variance = generator.analyzeEnsembleVariance(ensemble);
// Test for scale invariance
const scaleInvariance = generator.testScaleInvariance(ensemble);
return {
content: [{
type: "text",
text: JSON.stringify({
success: true,
ensembleId: `ensemble_${narrative.id}`,
narrativeId: narrative.id,
statistics: {
ensembleSize: ensemble.trees.length,
meanRecallLength: ensemble.statistics.meanRecallLength,
stdRecallLength: ensemble.statistics.stdRecallLength,
scalingExponent: ensemble.statistics.scalingExponent,
variance: variance,
scaleInvariance: scaleInvariance
},
message: `Generated ensemble of ${ensemble.trees.length} trees with mean recall length ${ensemble.statistics.meanRecallLength.toFixed(2)} ± ${ensemble.statistics.stdRecallLength.toFixed(2)}`
}, null, 2)
}],
};
} catch (error) {
return {
content: [{
type: "text",
text: JSON.stringify({
success: false,
error: error instanceof Error ? error.message : "Unknown error occurred"
}, null, 2)
}],
};
}
}