Skip to content

Commit ea874b9

Browse files
committed
Check for existing SentryCallbackHandler via name property instead of identity
1 parent 2704ffd commit ea874b9

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

packages/core/src/tracing/langchain/utils.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,17 @@ function isCallbackManager(value: unknown): value is {
551551
return typeof candidate.addHandler === 'function' && typeof candidate.copy === 'function';
552552
}
553553

554+
function isSentryHandler(handler: unknown): boolean {
555+
return (
556+
typeof handler === 'object' &&
557+
(handler as Record<string, unknown>)?.name === 'SentryCallbackHandler'
558+
);
559+
}
560+
561+
function containsSentryHandler(handlers: unknown[]): boolean {
562+
return handlers.some(isSentryHandler);
563+
}
564+
554565
/**
555566
* Merge `sentryHandler` into a given set of LangChain callbacks or callback manager.
556567
* @internal Exported for cross-package instrumentation.
@@ -560,11 +571,11 @@ export function _INTERNAL_mergeLangChainCallbackHandler(existing: unknown, sentr
560571
return [sentryHandler];
561572
}
562573

563-
if (Array.isArray(existing) && !existing.includes(sentryHandler)) {
574+
if (Array.isArray(existing) && !containsSentryHandler(existing)) {
564575
return [...existing, sentryHandler];
565576
}
566577

567-
if (isCallbackManager(existing) && !existing.handlers?.includes(sentryHandler)) {
578+
if (isCallbackManager(existing) && !containsSentryHandler(existing.handlers ?? [])) {
568579
const copied = existing.copy() as {
569580
addHandler: (handler: unknown, inherit?: boolean) => void;
570581
};

packages/core/test/lib/tracing/langchain-utils.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ describe('extractChatModelRequestAttributes with multimodal content', () => {
252252
});
253253

254254
describe('_INTERNAL_mergeLangChainCallbackHandler', () => {
255-
const sentryHandler = { _sentry: true };
255+
const sentryHandler = { name: 'SentryCallbackHandler' };
256256

257257
function makeFakeCallbackManager(existingHandlers: unknown[] = []) {
258258
const manager = {

0 commit comments

Comments
 (0)