import * as dotenv from "dotenv";
dotenv.config();
import { getTracer } from "@flightline/node";
import * as fs from "fs";
import * as path from "path";
// Import YOUR AI operations
import {
yourOperation1,
yourOperation2,
yourOperation3
} from "../src/services/ai";
const CONCURRENCY = parseInt(process.env.CONCURRENCY || "5", 10);
type OperationType = "operation1" | "operation2" | "operation3" | "default";
function inferOperation(scenarioName: string): OperationType {
const name = scenarioName.toLowerCase();
if (name.includes("operation1")) return "operation1";
if (name.includes("operation2")) return "operation2";
if (name.includes("operation3")) return "operation3";
return "default";
}
async function runScenario(sc: any, tracer: any) {
const operation = sc.linked_node_operation_id || inferOperation(sc.name);
return tracer.startTraceAsync(
async () => {
switch (operation) {
case "operation1":
return await yourOperation1(sc.input);
case "operation2":
return await yourOperation2(sc.input);
case "operation3":
return await yourOperation3(sc.input);
default:
return await yourOperation1(sc.input);
}
},
{
trigger_type: "cli",
entry_point: sc.name,
metadata: {
category: sc.category,
question: sc.question,
operation,
scenario_id: sc.id,
},
}
);
}
async function main() {
const tracer = getTracer();
if (!tracer) {
console.error("Run with: npx fltrace npx tsx scripts/run-scenarios.ts");
process.exit(1);
}
const scenariosPath = path.join(process.cwd(), "flightline.scenarios.json");
const bundle = JSON.parse(fs.readFileSync(scenariosPath, "utf-8"));
const scenarios = bundle.scenarios;
console.log(`Running ${scenarios.length} scenarios...`);
for (let i = 0; i < scenarios.length; i += CONCURRENCY) {
const batch = scenarios.slice(i, i + CONCURRENCY);
await Promise.all(batch.map((sc: any) => runScenario(sc, tracer)));
console.log(`[${Math.min(i + CONCURRENCY, scenarios.length)}/${scenarios.length}]`);
}
console.log("Done!");
}
main().catch(console.error);