feat(deno): add google-genai integration - #22469
Conversation
a3bda7b to
af2805c
Compare
af2805c to
46512ae
Compare
| Deno.test('google-genai instrumentation: orchestrion @google/genai:generate-content channel produces a nested gen_ai span', async () => { | ||
| resetGlobals(); | ||
| const sink = transactionSink(); | ||
| init({ |
There was a problem hiding this comment.
Bug: A module-level installedIntegrations array is not cleared between tests, causing subsequent init() calls to skip setup and leading to test failures.
Severity: MEDIUM
Suggested Fix
The installedIntegrations array should be cleared between tests. This can be done by exporting a reset function from @sentry/core that clears the array and then calling this new function within resetGlobals(). This will ensure each test runs in a clean state.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.
Location:
dev-packages/deno-integration-tests/suites/orchestrion-google-genai/test.ts#L69-L72
Potential issue: A module-level array, `installedIntegrations`, is not cleared between
tests, even when `resetGlobals()` is called. When a second test in the same file calls
`init()`, the integration's `setupOnce()` function is skipped because the integration
name is already present in the array from the first test's execution. This prevents
diagnostic channel subscriptions from being set up for the second test. Consequently,
the test times out waiting for a transaction that is never created, causing a test
failure.
Also affects:
packages/core/src/integration.ts:10packages/core/src/integration.ts:117~119
Did we get this right? 👍 / 👎 to inform future reviews.
46512ae to
46e8ba9
Compare
46e8ba9 to
a2edc7e
Compare
a2edc7e to
ac2a96d
Compare
ac2a96d to
dd3e8b8
Compare
size-limit report 📦
|
dd3e8b8 to
d8bf614
Compare
d8bf614 to
8a0503f
Compare
fde4dd2 to
84fe78c
Compare
| Deno.test('google-genai instrumentation: orchestrion @google/genai:generate-content channel produces a nested gen_ai span', async () => { | ||
| resetGlobals(); | ||
| const sink = transactionSink(); | ||
| init({ | ||
| dsn: 'https://username@domain/123', | ||
| tracesSampleRate: 1, | ||
| beforeSendTransaction: sink.beforeSendTransaction, | ||
| }); | ||
|
|
There was a problem hiding this comment.
Bug: The module-level subscribed flag in the google-genai integration is not reset between tests, causing subsequent init() calls in the same file to fail to set up tracing.
Severity: MEDIUM
Suggested Fix
Export a reset function from the google-genai.ts integration module that sets the subscribed flag back to false. Call this new reset function from within the resetGlobals() helper in the test suite to ensure a clean state between test runs.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.
Location:
dev-packages/deno-integration-tests/suites/orchestrion-google-genai/test.ts#L64-L72
Potential issue: The `google-genai.ts` integration uses a module-level `subscribed` flag
to prevent re-subscribing to diagnostics channels. In the Deno test environment, tests
within the same file share module scope. The first test sets `subscribed` to `true`. A
`resetGlobals()` function is called between tests, but it fails to reset this
module-level flag. Consequently, when the second test calls `init()`, the integration's
`setupOnce()` function sees that `subscribed` is already `true` and exits prematurely,
skipping the channel subscription logic. This causes the second test to fail its
assertion, as no AI span is created.
9ebec22 to
35a3aec
Compare
35a3aec to
5718dfb
Compare
5718dfb to
08f6136
Compare
| Deno.test('google-genai instrumentation: included in default integrations (Deno 2.8.0+)', () => { | ||
| resetGlobals(); | ||
| const client = init({ dsn: 'https://username@domain/123' }) as DenoClient; | ||
| const names = client.getOptions().integrations.map(i => i.name); | ||
| assert(names.includes('Google_GenAI'), `Google_GenAI should be in defaults, got ${names.join(', ')}`); | ||
| }); |
There was a problem hiding this comment.
Bug: The test unconditionally asserts Google_GenAI is a default integration, but it's only included on Deno 2.8.0+. This will cause test failures on older Deno versions.
Severity: MEDIUM
Suggested Fix
Conditionally skip the test assertion if the Deno version is less than 2.8.0. This can be achieved by checking the MODULE_REGISTER_HOOKS_SUPPORTED flag within the test file and only running the assertion if it's true. This will align the test's logic with the SDK's conditional inclusion logic.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.
Location:
dev-packages/deno-integration-tests/suites/orchestrion-google-genai/test.ts#L57-L62
Potential issue: The `googleGenAIChannelIntegration()` is conditionally added to the
default integrations only on Deno versions 2.8.0 and newer, controlled by the
`MODULE_REGISTER_HOOKS_SUPPORTED` flag. However, the corresponding integration test
unconditionally asserts that the `'Google_GenAI'` integration is present in the
defaults. This discrepancy will cause the test to fail when run in an environment with a
Deno version older than 2.8.0, as the test suite does not enforce a minimum Deno
version. This pattern is reportedly present in over 20 other integration tests,
indicating a systemic issue.
Also affects:
packages/deno/src/sdk.ts:96~102
08f6136 to
9b9fef7
Compare
No description provided.