// experiments/compare/claude--nowledge.ts
import { defineExperiment } from "niceeval";
import { e2bSandbox } from "niceeval/sandbox";
import { nowledgeAgent, nowledgeTunnel } from "../../agents/nowledge.ts";
import { loadMemoryState, saveMemoryState } from "../shared/memory-state.ts";
let tunnel: { url: string; apiKey: string; stop(): Promise<void> } | undefined;
export default defineExperiment({
agent: nowledgeAgent(() => ({ url: tunnel!.url, apiKey: tunnel!.apiKey })),
evals: ["memory/"],
maxConcurrency: 1,
sharedState: { key: "nowledge/claude/cohort-a" },
sandbox: e2bSandbox({ template: "niceeval-agents" })
.before(async (sandbox, ctx) => {
// 把宿主机上的坐标写进 Sandbox
await sandbox.writeText(
".nowledge/config.json",
JSON.stringify({ url: tunnel!.url, apiKey: tunnel!.apiKey }),
);
await loadMemoryState(sandbox, ctx.experimentId);
ctx.onCleanup(async (sandbox) => {
await saveMemoryState(sandbox, ctx.experimentId);
});
}),
async setup(ctx) {
tunnel = await nowledgeTunnel({ signal: ctx.signal });
},
async teardown() {
await tunnel?.stop();
},
});