@just-every/ensemble
Version:
LLM provider abstraction layer with unified streaming interface
91 lines • 2.69 kB
JavaScript
import { randomUUID } from 'crypto';
import { emitTraceEvent } from './trace_logger.js';
export class TraceContext {
agent;
operation;
turnId;
requestCount = 0;
requestNumbers = new Map();
constructor(agent, operation, turnId) {
this.agent = agent;
this.operation = operation;
this.turnId = turnId || randomUUID();
}
async emitTurnStart(data) {
await emitTraceEvent({
type: 'turn_start',
turn_id: this.turnId,
data: {
operation: this.operation,
agent_id: this.agent.agent_id,
name: this.agent.name,
model: this.agent.model,
model_class: this.agent.modelClass,
...data,
},
});
}
async emitRequestStart(requestId, data) {
this.requestCount += 1;
this.requestNumbers.set(requestId, this.requestCount);
await emitTraceEvent({
type: 'request_start',
turn_id: this.turnId,
request_id: requestId,
data: {
request_number: this.requestCount,
...data,
},
});
return this.requestCount;
}
async emitToolStart(requestId, toolCallId, data) {
await emitTraceEvent({
type: 'tool_start',
turn_id: this.turnId,
request_id: requestId,
tool_call_id: toolCallId,
data,
});
}
async emitToolDone(requestId, toolCallId, data) {
await emitTraceEvent({
type: 'tool_done',
turn_id: this.turnId,
request_id: requestId,
tool_call_id: toolCallId,
data,
});
}
async emitRequestEnd(requestId, data) {
const requestNumber = requestId ? this.requestNumbers.get(requestId) : undefined;
await emitTraceEvent({
type: 'request_end',
turn_id: this.turnId,
request_id: requestId,
data: {
request_number: requestNumber,
...data,
},
});
}
async emitTurnEnd(status, reason, data) {
await emitTraceEvent({
type: 'turn_end',
turn_id: this.turnId,
data: {
status,
reason,
request_count: this.requestCount,
...data,
},
});
}
getRequestCount() {
return this.requestCount;
}
}
export function createTraceContext(agent, operation, turnId) {
return new TraceContext(agent, operation, turnId);
}
//# sourceMappingURL=trace_context.js.map