mirror of
https://github.com/Tencent/BrowserSkill.git
synced 2026-09-10 13:01:23 +08:00
49 lines
1.4 KiB
JavaScript
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),
|
|
});
|
|
}
|