0d3cb498a3
CI / Shell Format Check (push) Has been cancelled
CI / Check Ruby (3.4) (push) Has been cancelled
CI / CI Config (push) Has been cancelled
CI / Test on Node ${{ matrix.node }} and ${{ matrix.os }}${{ matrix.shard && format(' (shard {0}/3)', matrix.shard) || '' }} (push) Has been cancelled
CI / Build on Node ${{ matrix.node }} (push) Has been cancelled
CI / Style Check (push) Has been cancelled
CI / Generate Assets (push) Has been cancelled
CI / Check Python (3.14) (push) Has been cancelled
CI / Check Python (3.9) (push) Has been cancelled
CI / Build Docs (push) Has been cancelled
CI / Code Scan Action (push) Has been cancelled
CI / Site tests (push) Has been cancelled
CI / webui tests (push) Has been cancelled
CI / Run Integration Tests (push) Has been cancelled
CI / Run Smoke Tests (push) Has been cancelled
CI / Go Tests (push) Has been cancelled
CI / Share Test (push) Has been cancelled
CI / Redteam (Production API) (push) Has been cancelled
CI / Redteam (Staging API) (push) Has been cancelled
CI / GitHub Actions Lint (push) Has been cancelled
CI / Check Ruby (3.0) (push) Has been cancelled
release-please / release-please (push) Has been cancelled
release-please / build (push) Has been cancelled
release-please / publish-npm (push) Has been cancelled
release-please / publish-npm-backfill (push) Has been cancelled
release-please / docker (push) Has been cancelled
release-please / publish-code-scan-action (push) Has been cancelled
release-please / attest-code-scan-action (push) Has been cancelled
Deploy local.promptfoo.app / Deploy to Cloudflare Pages (push) Has been cancelled
Test and Publish Multi-arch Docker Image / test (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-amd64 platform:linux/amd64 runner:ubuntu-latest]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / build-docker-and-push-digests (map[digest-suffix:linux-arm64 platform:linux/arm64 runner:ubuntu-24.04-arm]) (push) Has been cancelled
Test and Publish Multi-arch Docker Image / merge-docker-digests (push) Has been cancelled
Test and Publish Multi-arch Docker Image / Attest Multi-arch Image (push) Has been cancelled
Validate Renovate Config / Validate Renovate Configuration (push) Has been cancelled
102 lines
3.2 KiB
TypeScript
102 lines
3.2 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { OTLPTracingExporter } from '../../../src/providers/openai/agents-tracing';
|
|
|
|
function getAttributes(span: any): Record<string, unknown> {
|
|
return Object.fromEntries(
|
|
span.attributes.map((attribute: any) => {
|
|
const value = attribute.value;
|
|
if (value.stringValue !== undefined) {
|
|
return [attribute.key, value.stringValue];
|
|
}
|
|
if (value.intValue !== undefined) {
|
|
return [attribute.key, Number(value.intValue)];
|
|
}
|
|
if (value.boolValue !== undefined) {
|
|
return [attribute.key, value.boolValue];
|
|
}
|
|
if (value.doubleValue !== undefined) {
|
|
return [attribute.key, value.doubleValue];
|
|
}
|
|
return [attribute.key, value];
|
|
}),
|
|
);
|
|
}
|
|
|
|
describe('OTLPTracingExporter', () => {
|
|
it('maps function spans into Promptfoo trajectory-friendly tool attributes', () => {
|
|
const exporter = new OTLPTracingExporter() as any;
|
|
const payload = exporter.transformToOTLP([
|
|
{
|
|
type: 'trace.span',
|
|
traceId: 'trace_0123456789abcdef0123456789abcdef',
|
|
spanId: 'span_0123456789abcdef',
|
|
parentId: null,
|
|
startedAt: '2026-05-06T12:00:00.000Z',
|
|
endedAt: '2026-05-06T12:00:01.000Z',
|
|
spanData: {
|
|
type: 'function',
|
|
name: 'lookup_order',
|
|
input: '{"order_id":"123"}',
|
|
output: '{"status":"shipped"}',
|
|
},
|
|
traceMetadata: {
|
|
'evaluation.id': 'eval-1',
|
|
'test.case.id': 'case-1',
|
|
'promptfoo.parent_span_id': 'fedcba9876543210',
|
|
},
|
|
error: null,
|
|
},
|
|
]);
|
|
|
|
const span = payload.resourceSpans[0].scopeSpans[0].spans[0];
|
|
expect(span.name).toBe('tool lookup_order');
|
|
expect(getAttributes(span)).toMatchObject({
|
|
'evaluation.id': 'eval-1',
|
|
'openai.agents.span_type': 'function',
|
|
'test.case.id': 'case-1',
|
|
'tool.arguments': '{"order_id":"123"}',
|
|
'tool.name': 'lookup_order',
|
|
'tool.output': '{"status":"shipped"}',
|
|
});
|
|
expect(span.parentSpanId).toBe(Buffer.from('fedcba9876543210', 'hex').toString('base64'));
|
|
});
|
|
|
|
it('turns sandbox custom spans into command-aware spans', () => {
|
|
const exporter = new OTLPTracingExporter() as any;
|
|
const payload = exporter.transformToOTLP([
|
|
{
|
|
type: 'trace.span',
|
|
traceId: 'trace_0123456789abcdef0123456789abcdef',
|
|
spanId: 'span_0123456789abcdef',
|
|
parentId: null,
|
|
startedAt: '2026-05-06T12:00:00.000Z',
|
|
endedAt: '2026-05-06T12:00:01.000Z',
|
|
spanData: {
|
|
type: 'custom',
|
|
name: 'sandbox.exec',
|
|
data: {
|
|
cmd: ['cat', 'repo/task.md'],
|
|
workdir: 'repo',
|
|
},
|
|
},
|
|
traceMetadata: {},
|
|
error: null,
|
|
},
|
|
]);
|
|
|
|
const span = payload.resourceSpans[0].scopeSpans[0].spans[0];
|
|
expect(span.name).toBe('sandbox.exec');
|
|
expect(getAttributes(span)).toMatchObject({
|
|
command: 'cat repo/task.md',
|
|
cmd: {
|
|
arrayValue: {
|
|
values: [{ stringValue: 'cat' }, { stringValue: 'repo/task.md' }],
|
|
},
|
|
},
|
|
'openai.agents.custom_span.name': 'sandbox.exec',
|
|
'openai.agents.span_type': 'custom',
|
|
workdir: 'repo',
|
|
});
|
|
});
|
|
});
|