fix(pi): prove packaged workers end to end
This commit is contained in:
@@ -467,8 +467,10 @@ describe('Pi worker pool', () => {
|
||||
it('rebuilds stale idle workers before prompt and lets running workers settle first', async () => {
|
||||
const workers = new Map<string, FakeWorker[]>();
|
||||
const revisions: Array<{ conversationId: string; provider: number; resources: number }> = [];
|
||||
const telemetry: PiRuntimeTelemetryEvent[] = [];
|
||||
const pool = new PiWorkerPool({
|
||||
maxIdle: 4,
|
||||
onTelemetry: (event) => telemetry.push(event),
|
||||
openWorker: async ({ conversation: input, revision }) => {
|
||||
const worker = new FakeWorker(`worker-${input.conversationId}-${(workers.get(input.conversationId)?.length ?? 0) + 1}`);
|
||||
workers.set(input.conversationId, [...(workers.get(input.conversationId) ?? []), worker]);
|
||||
@@ -494,7 +496,7 @@ describe('Pi worker pool', () => {
|
||||
await expect.poll(() => workers.get('conversation-running')![0]!.requests.length).toBe(1);
|
||||
|
||||
pool.markProviderStale();
|
||||
pool.startTopLevel({
|
||||
const idleTicket = pool.startTopLevel({
|
||||
conversationId: 'conversation-idle',
|
||||
runId: 'run-idle',
|
||||
command: { type: 'prompt', message: 'idle' },
|
||||
@@ -503,6 +505,11 @@ describe('Pi worker pool', () => {
|
||||
await expect.poll(() => workers.get('conversation-idle')?.length).toBe(2);
|
||||
expect(workers.get('conversation-idle')![0]!.stopped).toBe(true);
|
||||
await expect.poll(() => workers.get('conversation-idle')![1]!.requests.length).toBe(1);
|
||||
await idleTicket.accepted;
|
||||
expect(telemetry.filter(({ runRef }) => runRef === 'runidle')).toEqual([
|
||||
expect.objectContaining({ milestone: 'worker.queue_wait', workerGeneration: 2, cold: false }),
|
||||
expect.objectContaining({ milestone: 'prompt.accepted', workerGeneration: 2, cold: false }),
|
||||
]);
|
||||
expect(workers.get('conversation-running')).toHaveLength(1);
|
||||
expect(workers.get('conversation-running')![0]!.stopped).toBe(false);
|
||||
|
||||
@@ -756,15 +763,17 @@ describe('Pi worker pool', () => {
|
||||
await second.accepted;
|
||||
|
||||
expect(telemetry.map(({ milestone }) => milestone)).toEqual([
|
||||
'worker.queue_wait',
|
||||
'prompt.accepted',
|
||||
'agent.settled',
|
||||
'worker.queue_wait',
|
||||
'prompt.accepted',
|
||||
]);
|
||||
expect(telemetry[1]).toMatchObject({
|
||||
expect(telemetry[0]).toMatchObject({ durationMs: 0, workerGeneration: 1, cold: true });
|
||||
expect(telemetry[2]).toMatchObject({
|
||||
milestone: 'agent.settled', durationMs: 20, workerGeneration: 1, cold: true,
|
||||
});
|
||||
expect(telemetry[2]).toMatchObject({ durationMs: 20, workerGeneration: 1, cold: true });
|
||||
expect(telemetry[3]).toMatchObject({ durationMs: 20, workerGeneration: 1, cold: true });
|
||||
const serialized = JSON.stringify(telemetry);
|
||||
expect(serialized).not.toContain('private first prompt');
|
||||
expect(serialized).not.toContain('private second prompt');
|
||||
|
||||
Reference in New Issue
Block a user