40 lines
2.4 KiB
JavaScript
40 lines
2.4 KiB
JavaScript
// Row 333 P5 (#1831) background telemetry controls. They run with the bus package suite.
|
|
// Only fake loopback HTTP, explicit event barriers and virtual existing timers.
|
|
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { createHash } from 'node:crypto';
|
|
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
import { join } from 'node:path';
|
|
import { startTimeOf } from '../../seat/src/proc.mjs';
|
|
import { telemetryFixture } from './p5-telemetry-fixture.mjs';
|
|
async function nativeTurn(f) {
|
|
const model=await f.bus.modelPreflight({business:'demo',role:'coder'});
|
|
const keyId=createHash('sha256').update(model.key).digest('hex').slice(0,12),dir=join(f.root,'native-transcript');mkdirSync(dir);
|
|
const {cap}=f.bus.bindLaunch({business:'demo',role:'coder',run:'held-poll-native',harness:'pi',modelKeyId:keyId,transcript:dir,
|
|
pid:process.pid,startTime:startTimeOf(process.pid)});
|
|
f.bus.broker.request(cap,{verb:'role.claim'});
|
|
assert.deepEqual(await f.bus.mayLaunch({business:'demo',instance:'coder',provider:'fixture',model:'fake'}),{allow:true});
|
|
const human=f.human(),{id}=f.bus.broker.request(human,{verb:'message.send',args:{to:'coder',body:'native work while optional queue is held'}});
|
|
f.bus.broker.request(cap,{verb:'message.receive'});
|
|
await f.bus.broker.request(cap,{verb:'usage.begin',args:{turn:id}});
|
|
writeFileSync(join(dir,'native.jsonl'),JSON.stringify({type:'message',id:'native',message:{role:'assistant',usage:{input:2,output:1,cacheRead:0,cacheWrite:0}}})+'\n');
|
|
await f.bus.broker.request(cap,{verb:'usage.end',args:{turn:id}});
|
|
const view=f.bus.broker.request(human,{verb:'usage'});
|
|
assert.equal(view.total.input,2);assert.equal(view.byKey[0].modelKeyId,keyId);
|
|
assert.deepEqual(f.bus.broker.request(cap,{verb:'message.receive'}),[]);
|
|
}
|
|
test('configured telemetry stays undrained across startup, native work, ticks and close', async t => {
|
|
t.mock.timers.enable({ apis: ['Date', 'setInterval'], now: Date.now() });
|
|
const f = await telemetryFixture(t, { hold: true });
|
|
await f.start();
|
|
assert.equal(f.queueCalls(), 0);
|
|
assert.equal(f.state.queued.length, 1);
|
|
assert.equal(f.bus.broker.request(f.human(), { verb: 'usage' }).proxy.state, 'unavailable');
|
|
await nativeTurn(f);
|
|
t.mock.timers.tick(5000);
|
|
await new Promise(setImmediate);
|
|
assert.equal(f.queueCalls(), 0);
|
|
assert.equal(f.state.queued.length, 1);
|
|
await f.close();
|
|
});
|