feat: add Pi provider managed resources
This commit is contained in:
@@ -10,6 +10,7 @@ import {
|
||||
runProbe,
|
||||
validatePiIdentity,
|
||||
} from './probe-pi-runtime.mjs';
|
||||
import { runLocalProviderContracts } from './probe-pi-provider-contracts.mjs';
|
||||
import {
|
||||
PI_RUNTIME_MANIFEST,
|
||||
defaultPiBundleTarget,
|
||||
@@ -305,6 +306,15 @@ export async function runPackagedProbe(options, projectRoot = process.cwd()) {
|
||||
cliPath,
|
||||
artifactLabel: ARTIFACT_LABEL,
|
||||
}, resolvedProjectRoot);
|
||||
const providerContracts = await runLocalProviderContracts({
|
||||
...options,
|
||||
reportPath: undefined,
|
||||
stage: false,
|
||||
keepStage: false,
|
||||
electronExecutablePath: executable,
|
||||
cliPath,
|
||||
artifactLabel: ARTIFACT_LABEL,
|
||||
}, resolvedProjectRoot);
|
||||
const report = {
|
||||
schemaVersion: 1,
|
||||
generatedAt: new Date().toISOString(),
|
||||
@@ -320,6 +330,7 @@ export async function runPackagedProbe(options, projectRoot = process.cwd()) {
|
||||
stagedClosure,
|
||||
packagedClosure,
|
||||
runtime,
|
||||
providerContracts,
|
||||
result: runtime.result,
|
||||
decision: 'incomplete',
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@ import {
|
||||
|
||||
const LOCAL_API_KEY_ENV = 'PI_PROBE_LOCAL_CONTRACT_KEY';
|
||||
const LOCAL_API_KEY = 'pi-local-contract-only';
|
||||
const LOCAL_HEADER_ENV = 'PI_PROBE_LOCAL_CONTRACT_HEADER';
|
||||
const CUSTOM_HEADER = 'x-makelore-pi-probe';
|
||||
const IMAGE_BASE64 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Y9Z4N8AAAAASUVORK5CYII=';
|
||||
|
||||
@@ -227,6 +228,7 @@ export async function runLocalProviderContracts(options, projectRoot = process.c
|
||||
const scratchRoot = await mkdtemp(join(tmpdir(), 'makelore-pi-provider-contracts-'));
|
||||
const requests = [];
|
||||
const previousApiKey = process.env[LOCAL_API_KEY_ENV];
|
||||
const previousHeader = process.env[LOCAL_HEADER_ENV];
|
||||
const server = await startContractServer(requests);
|
||||
process.env[LOCAL_API_KEY_ENV] = LOCAL_API_KEY;
|
||||
try {
|
||||
@@ -243,6 +245,7 @@ export async function runLocalProviderContracts(options, projectRoot = process.c
|
||||
await writeFile(imagePath, Buffer.from(IMAGE_BASE64, 'base64'));
|
||||
const protocols = [];
|
||||
for (const protocol of MAKELore_PROVIDER_PROTOCOLS) {
|
||||
process.env[LOCAL_HEADER_ENV] = protocol;
|
||||
const protocolRoot = join(scratchRoot, protocol);
|
||||
await mkdir(protocolRoot);
|
||||
const fixturePath = join(protocolRoot, 'fixture.json');
|
||||
@@ -255,7 +258,7 @@ export async function runLocalProviderContracts(options, projectRoot = process.c
|
||||
apiProtocol: protocol,
|
||||
baseUrl,
|
||||
apiKeyEnv: LOCAL_API_KEY_ENV,
|
||||
headers: { [CUSTOM_HEADER]: protocol },
|
||||
headers: { [CUSTOM_HEADER]: `$${LOCAL_HEADER_ENV}` },
|
||||
model: { id: modelId, input: ['text', 'image'] },
|
||||
}, null, 2)}\n`);
|
||||
const qualification = await runProviderQualification(
|
||||
@@ -283,6 +286,8 @@ export async function runLocalProviderContracts(options, projectRoot = process.c
|
||||
scope: {
|
||||
network: '127.0.0.1 only',
|
||||
realProvider: false,
|
||||
realTurnVerified: false,
|
||||
realProviderDecision: 'explicitly-waived-accepted-risk',
|
||||
limitation: 'Validates Pi HTTP/SSE request contracts and worker behavior; does not qualify a real provider account.',
|
||||
},
|
||||
protocols,
|
||||
@@ -296,6 +301,8 @@ export async function runLocalProviderContracts(options, projectRoot = process.c
|
||||
} finally {
|
||||
if (previousApiKey === undefined) delete process.env[LOCAL_API_KEY_ENV];
|
||||
else process.env[LOCAL_API_KEY_ENV] = previousApiKey;
|
||||
if (previousHeader === undefined) delete process.env[LOCAL_HEADER_ENV];
|
||||
else process.env[LOCAL_HEADER_ENV] = previousHeader;
|
||||
await server.close();
|
||||
await rm(scratchRoot, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user