Files
BrowserSkill/evals/browser/lib/tasks.mjs

49 lines
1.4 KiB
JavaScript

import { loadCaseManifests } from "./case-loader.mjs";
let casesPromise;
export function allTasks({ reload = false } = {}) {
if (reload || !casesPromise) casesPromise = loadCaseManifests();
return casesPromise;
}
export function listTasks(cases) {
return cases.map(({ id, title, suite, tags, seed }) => ({ id, title, suite, tags, seed }));
}
export function getTask(taskId, cases) {
const task = cases.find(({ id }) => id === taskId);
if (!task) {
const ids = cases.map(({ id }) => id).join(", ");
throw new Error(`unknown case ${JSON.stringify(taskId)}; expected one of: ${ids}`);
}
return task;
}
export function taskUrl(task, baseUrl, runId, seed = task.seed) {
const url = new URL(task.startPath, baseUrl);
url.searchParams.set("run", runId);
if (seed !== undefined) url.searchParams.set("seed", String(seed));
return url.toString();
}
function expandTemplate(template, values) {
return Object.entries(values).reduce(
(result, [name, value]) => result.replaceAll(`{${name}}`, String(value)),
template,
);
}
export function renderPrompt(task, { baseUrl, runId, locale = "zh-CN", seed = task.seed }) {
const template = task.prompts[locale];
if (!template) {
throw new Error(`unsupported locale ${JSON.stringify(locale)}; expected en or zh-CN`);
}
return expandTemplate(template, {
baseUrl,
runId: encodeURIComponent(runId),
seed: seed ?? "",
url: taskUrl(task, baseUrl, runId, seed),
});
}