mirror of
https://github.com/luckyyzh/pi-agent-integrated.git
synced 2026-10-03 02:59:35 +00:00
feat: integrate Pi backend and Pi Web
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { mkdirSync } from "node:fs";
|
||||
import { spawnSync } from "node:child_process";
|
||||
import { createRequire } from "node:module";
|
||||
import { dirname, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
||||
const artifactDirectory = process.env.PI_EVAL_ARTIFACT_DIR
|
||||
? resolve(packageRoot, process.env.PI_EVAL_ARTIFACT_DIR)
|
||||
: resolve(
|
||||
packageRoot,
|
||||
".eval",
|
||||
`${new Date().toISOString().replaceAll(":", "-")}_${randomUUID()}`,
|
||||
);
|
||||
const args = process.argv.slice(2);
|
||||
let provider;
|
||||
let model;
|
||||
let hasCliModelSelection = false;
|
||||
const vitestArgs = [];
|
||||
|
||||
for (let index = 0; index < args.length; index += 1) {
|
||||
const arg = args[index];
|
||||
if (arg === "--provider" || arg === "--model") {
|
||||
const value = args[index + 1];
|
||||
if (!value || value.startsWith("-")) {
|
||||
console.error(`Missing value for ${arg}`);
|
||||
process.exit(1);
|
||||
}
|
||||
if (arg === "--provider") provider = value;
|
||||
else model = value;
|
||||
hasCliModelSelection = true;
|
||||
index += 1;
|
||||
continue;
|
||||
}
|
||||
if (arg.startsWith("--provider=")) {
|
||||
provider = arg.slice("--provider=".length);
|
||||
hasCliModelSelection = true;
|
||||
continue;
|
||||
}
|
||||
if (arg.startsWith("--model=")) {
|
||||
model = arg.slice("--model=".length);
|
||||
hasCliModelSelection = true;
|
||||
continue;
|
||||
}
|
||||
vitestArgs.push(arg);
|
||||
}
|
||||
|
||||
provider = provider?.trim() || undefined;
|
||||
model = model?.trim() || undefined;
|
||||
if (hasCliModelSelection) {
|
||||
if (!provider || !model) {
|
||||
console.error("CLI model selection requires both --provider and --model.");
|
||||
process.exit(1);
|
||||
}
|
||||
} else {
|
||||
provider = process.env.PI_PROVIDER?.trim() || undefined;
|
||||
model = process.env.PI_MODEL?.trim() || undefined;
|
||||
if (Boolean(provider) !== Boolean(model)) {
|
||||
console.error("Default model selection requires both PI_PROVIDER and PI_MODEL.");
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
const vitestPackagePath = require.resolve("vitest/package.json");
|
||||
const vitestCliPath = resolve(dirname(vitestPackagePath), "vitest.mjs");
|
||||
|
||||
mkdirSync(artifactDirectory, { recursive: true, mode: 0o700 });
|
||||
console.error(`[eval] default-model=${provider && model ? `${provider}/${model}` : "none"}`);
|
||||
console.error(`[eval] artifacts=${artifactDirectory}`);
|
||||
const childEnvironment = {
|
||||
...process.env,
|
||||
PI_EVAL_ARTIFACT_DIR: artifactDirectory,
|
||||
};
|
||||
if (provider && model) {
|
||||
childEnvironment.PI_PROVIDER = provider;
|
||||
childEnvironment.PI_MODEL = model;
|
||||
} else {
|
||||
delete childEnvironment.PI_PROVIDER;
|
||||
delete childEnvironment.PI_MODEL;
|
||||
}
|
||||
const result = spawnSync(
|
||||
process.execPath,
|
||||
[vitestCliPath, "run", "--config", "vitest.config.ts", ...vitestArgs],
|
||||
{
|
||||
cwd: packageRoot,
|
||||
stdio: "inherit",
|
||||
env: childEnvironment,
|
||||
},
|
||||
);
|
||||
|
||||
if (result.error) {
|
||||
throw result.error;
|
||||
}
|
||||
|
||||
process.exit(result.status ?? 1);
|
||||
Reference in New Issue
Block a user