diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/src/index.ts b/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/src/index.ts index 990859d99f7e..641a211dd92a 100644 --- a/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/src/index.ts +++ b/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/src/index.ts @@ -46,6 +46,17 @@ export default { }); return Response.json({ traceId: spanContext?.traceId }); } + case '/test-workers-ai-clairic': { + await env.AI.run('@cf/cloudflare/clairic', { + model: 'clairic', + state: 'Invoice INV-2291 from Northwind Supply. Total due: $1,080.00.', + fields: { + invoice_number: { type: 'text' }, + total: { type: 'number', decimals: 2, unit: 'USD', instructions: 'Amount due' }, + }, + }); + return Response.json({ traceId: spanContext?.traceId }); + } case '/test-span': return Response.json({ spanId: spanContext?.spanId, traceId: spanContext?.traceId }); case '/test-workflow-sleep': { diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/tests/send-to-sentry.test.ts b/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/tests/send-to-sentry.test.ts index fd79fa5b7743..59a3bd0ef6a6 100644 --- a/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/tests/send-to-sentry.test.ts +++ b/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/tests/send-to-sentry.test.ts @@ -135,3 +135,26 @@ test('Sends a Workers AI gen_ai.decide span for a Clef call to Sentry', async () 'gen_ai.output.messages': expect.stringContaining('"urgent"'), }); }); + +test('Sends a Workers AI gen_ai.extract span for a Clairic call to Sentry', async () => { + const { traceId }: { traceId: string } = JSON.parse( + await fetchFromWorker(`${workerUrl}/test-workers-ai-clairic`, 200), + ); + + console.log(`Polling for gen_ai.extract span: sentry trace view ${traceTarget(traceId)}`); + + let spanId: string | undefined; + await expect + .poll(() => (spanId = findSpanInTrace(traceId, 'gen_ai.extract')?.event_id), EVENT_POLLING_OPTIONS) + .toBeDefined(); + + await expect + .poll(() => fetchSpanAttributes(traceId, spanId!), EVENT_POLLING_OPTIONS) + .toMatchObject({ + 'gen_ai.operation.name': 'extract', + 'gen_ai.request.model': '@cf/cloudflare/clairic', + 'gen_ai.response.model': expect.stringContaining('clairic'), + 'gen_ai.input.messages': expect.stringContaining('Northwind Supply'), + 'gen_ai.output.messages': expect.stringContaining('INV-2291'), + }); +});