Skip to content

Commit e72e7e7

Browse files
committed
fix(ai): suppress debug logs for internal devtools middleware
The devtools middleware is injected automatically by chat() and is already excluded from aiEventClient instrumentation via shouldSkipInstrumentation. Its per-hook logger.middleware / logger.config calls were still firing though, flooding the [tanstack-ai:middleware] category with internal plumbing. Move those calls inside the same skip gate so debug output only reflects user-provided middleware.
1 parent 4f9849e commit e72e7e7

1 file changed

Lines changed: 77 additions & 73 deletions

File tree

  • packages/typescript/ai/src/activities/chat/middleware

packages/typescript/ai/src/activities/chat/middleware/compose.ts

Lines changed: 77 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,15 @@ export class MiddlewareRunner {
6969
const hasTransform = result !== undefined && result !== null
7070
if (hasTransform) {
7171
current = { ...current, ...result }
72-
this.logger.config(
73-
`middleware=${mw.name ?? 'unnamed'} keys=${Object.keys(result as object).join(',')}`,
74-
{
75-
middleware: mw.name ?? 'unnamed',
76-
changes: result,
77-
},
78-
)
72+
if (!skip) {
73+
this.logger.config(
74+
`middleware=${mw.name ?? 'unnamed'} keys=${Object.keys(result as object).join(',')}`,
75+
{
76+
middleware: mw.name ?? 'unnamed',
77+
changes: result,
78+
},
79+
)
80+
}
7981
}
8082
if (!skip) {
8183
const base = instrumentCtx(ctx)
@@ -110,11 +112,11 @@ export class MiddlewareRunner {
110112
const skip = shouldSkipInstrumentation(mw)
111113
const start = Date.now()
112114
await mw.onStart(ctx)
113-
this.logger.middleware(
114-
`hook=onStart middleware=${mw.name ?? 'unnamed'}`,
115-
{ middleware: mw.name ?? 'unnamed', hook: 'onStart' },
116-
)
117115
if (!skip) {
116+
this.logger.middleware(
117+
`hook=onStart middleware=${mw.name ?? 'unnamed'}`,
118+
{ middleware: mw.name ?? 'unnamed', hook: 'onStart' },
119+
)
118120
aiEventClient.emit('middleware:hook:executed', {
119121
...instrumentCtx(ctx),
120122
middlewareName: mw.name || 'unnamed',
@@ -149,22 +151,24 @@ export class MiddlewareRunner {
149151

150152
const nextChunks: Array<StreamChunk> = []
151153
for (const c of chunks) {
152-
this.logger.middleware(
153-
`hook=onChunk middleware=${mw.name ?? 'unnamed'} in=${c.type}`,
154-
{ middleware: mw.name ?? 'unnamed', hook: 'onChunk', in: c },
155-
)
154+
if (!skip) {
155+
this.logger.middleware(
156+
`hook=onChunk middleware=${mw.name ?? 'unnamed'} in=${c.type}`,
157+
{ middleware: mw.name ?? 'unnamed', hook: 'onChunk', in: c },
158+
)
159+
}
156160
const result = await mw.onChunk(ctx, c)
157161
if (result === null) {
158162
// Drop this chunk
159-
this.logger.middleware(
160-
`hook=onChunk middleware=${mw.name ?? 'unnamed'} in=${c.type} out=<dropped>`,
161-
{
162-
middleware: mw.name ?? 'unnamed',
163-
hook: 'onChunk',
164-
dropped: true,
165-
},
166-
)
167163
if (!skip) {
164+
this.logger.middleware(
165+
`hook=onChunk middleware=${mw.name ?? 'unnamed'} in=${c.type} out=<dropped>`,
166+
{
167+
middleware: mw.name ?? 'unnamed',
168+
hook: 'onChunk',
169+
dropped: true,
170+
},
171+
)
168172
aiEventClient.emit('middleware:chunk:transformed', {
169173
...instrumentCtx(ctx),
170174
middlewareName: mw.name || 'unnamed',
@@ -180,16 +184,16 @@ export class MiddlewareRunner {
180184
} else if (Array.isArray(result)) {
181185
// Expand
182186
nextChunks.push(...result)
183-
this.logger.middleware(
184-
`hook=onChunk middleware=${mw.name ?? 'unnamed'} in=${c.type} out=[${result.map((r: StreamChunk) => r.type).join(',')}]`,
185-
{
186-
middleware: mw.name ?? 'unnamed',
187-
hook: 'onChunk',
188-
in: c,
189-
out: result,
190-
},
191-
)
192187
if (!skip) {
188+
this.logger.middleware(
189+
`hook=onChunk middleware=${mw.name ?? 'unnamed'} in=${c.type} out=[${result.map((r: StreamChunk) => r.type).join(',')}]`,
190+
{
191+
middleware: mw.name ?? 'unnamed',
192+
hook: 'onChunk',
193+
in: c,
194+
out: result,
195+
},
196+
)
193197
aiEventClient.emit('middleware:chunk:transformed', {
194198
...instrumentCtx(ctx),
195199
middlewareName: mw.name || 'unnamed',
@@ -201,16 +205,16 @@ export class MiddlewareRunner {
201205
} else {
202206
// Replace
203207
nextChunks.push(result)
204-
this.logger.middleware(
205-
`hook=onChunk middleware=${mw.name ?? 'unnamed'} in=${c.type} out=${result.type}`,
206-
{
207-
middleware: mw.name ?? 'unnamed',
208-
hook: 'onChunk',
209-
in: c,
210-
out: result,
211-
},
212-
)
213208
if (!skip) {
209+
this.logger.middleware(
210+
`hook=onChunk middleware=${mw.name ?? 'unnamed'} in=${c.type} out=${result.type}`,
211+
{
212+
middleware: mw.name ?? 'unnamed',
213+
hook: 'onChunk',
214+
in: c,
215+
out: result,
216+
},
217+
)
214218
aiEventClient.emit('middleware:chunk:transformed', {
215219
...instrumentCtx(ctx),
216220
middlewareName: mw.name || 'unnamed',
@@ -241,11 +245,11 @@ export class MiddlewareRunner {
241245
const start = Date.now()
242246
const decision = await mw.onBeforeToolCall(ctx, hookCtx)
243247
const hasTransform = decision !== undefined && decision !== null
244-
this.logger.middleware(
245-
`hook=onBeforeToolCall middleware=${mw.name ?? 'unnamed'}`,
246-
{ middleware: mw.name ?? 'unnamed', hook: 'onBeforeToolCall' },
247-
)
248248
if (!skip) {
249+
this.logger.middleware(
250+
`hook=onBeforeToolCall middleware=${mw.name ?? 'unnamed'}`,
251+
{ middleware: mw.name ?? 'unnamed', hook: 'onBeforeToolCall' },
252+
)
249253
aiEventClient.emit('middleware:hook:executed', {
250254
...instrumentCtx(ctx),
251255
middlewareName: mw.name || 'unnamed',
@@ -275,11 +279,11 @@ export class MiddlewareRunner {
275279
const skip = shouldSkipInstrumentation(mw)
276280
const start = Date.now()
277281
await mw.onAfterToolCall(ctx, info)
278-
this.logger.middleware(
279-
`hook=onAfterToolCall middleware=${mw.name ?? 'unnamed'}`,
280-
{ middleware: mw.name ?? 'unnamed', hook: 'onAfterToolCall' },
281-
)
282282
if (!skip) {
283+
this.logger.middleware(
284+
`hook=onAfterToolCall middleware=${mw.name ?? 'unnamed'}`,
285+
{ middleware: mw.name ?? 'unnamed', hook: 'onAfterToolCall' },
286+
)
283287
aiEventClient.emit('middleware:hook:executed', {
284288
...instrumentCtx(ctx),
285289
middlewareName: mw.name || 'unnamed',
@@ -305,11 +309,11 @@ export class MiddlewareRunner {
305309
const skip = shouldSkipInstrumentation(mw)
306310
const start = Date.now()
307311
await mw.onUsage(ctx, usage)
308-
this.logger.middleware(
309-
`hook=onUsage middleware=${mw.name ?? 'unnamed'}`,
310-
{ middleware: mw.name ?? 'unnamed', hook: 'onUsage' },
311-
)
312312
if (!skip) {
313+
this.logger.middleware(
314+
`hook=onUsage middleware=${mw.name ?? 'unnamed'}`,
315+
{ middleware: mw.name ?? 'unnamed', hook: 'onUsage' },
316+
)
313317
aiEventClient.emit('middleware:hook:executed', {
314318
...instrumentCtx(ctx),
315319
middlewareName: mw.name || 'unnamed',
@@ -335,11 +339,11 @@ export class MiddlewareRunner {
335339
const skip = shouldSkipInstrumentation(mw)
336340
const start = Date.now()
337341
await mw.onFinish(ctx, info)
338-
this.logger.middleware(
339-
`hook=onFinish middleware=${mw.name ?? 'unnamed'}`,
340-
{ middleware: mw.name ?? 'unnamed', hook: 'onFinish' },
341-
)
342342
if (!skip) {
343+
this.logger.middleware(
344+
`hook=onFinish middleware=${mw.name ?? 'unnamed'}`,
345+
{ middleware: mw.name ?? 'unnamed', hook: 'onFinish' },
346+
)
343347
aiEventClient.emit('middleware:hook:executed', {
344348
...instrumentCtx(ctx),
345349
middlewareName: mw.name || 'unnamed',
@@ -362,11 +366,11 @@ export class MiddlewareRunner {
362366
const skip = shouldSkipInstrumentation(mw)
363367
const start = Date.now()
364368
await mw.onAbort(ctx, info)
365-
this.logger.middleware(
366-
`hook=onAbort middleware=${mw.name ?? 'unnamed'}`,
367-
{ middleware: mw.name ?? 'unnamed', hook: 'onAbort' },
368-
)
369369
if (!skip) {
370+
this.logger.middleware(
371+
`hook=onAbort middleware=${mw.name ?? 'unnamed'}`,
372+
{ middleware: mw.name ?? 'unnamed', hook: 'onAbort' },
373+
)
370374
aiEventClient.emit('middleware:hook:executed', {
371375
...instrumentCtx(ctx),
372376
middlewareName: mw.name || 'unnamed',
@@ -389,11 +393,11 @@ export class MiddlewareRunner {
389393
const skip = shouldSkipInstrumentation(mw)
390394
const start = Date.now()
391395
await mw.onError(ctx, info)
392-
this.logger.middleware(
393-
`hook=onError middleware=${mw.name ?? 'unnamed'}`,
394-
{ middleware: mw.name ?? 'unnamed', hook: 'onError' },
395-
)
396396
if (!skip) {
397+
this.logger.middleware(
398+
`hook=onError middleware=${mw.name ?? 'unnamed'}`,
399+
{ middleware: mw.name ?? 'unnamed', hook: 'onError' },
400+
)
397401
aiEventClient.emit('middleware:hook:executed', {
398402
...instrumentCtx(ctx),
399403
middlewareName: mw.name || 'unnamed',
@@ -420,11 +424,11 @@ export class MiddlewareRunner {
420424
const skip = shouldSkipInstrumentation(mw)
421425
const start = Date.now()
422426
await mw.onIteration(ctx, info)
423-
this.logger.middleware(
424-
`hook=onIteration middleware=${mw.name ?? 'unnamed'}`,
425-
{ middleware: mw.name ?? 'unnamed', hook: 'onIteration' },
426-
)
427427
if (!skip) {
428+
this.logger.middleware(
429+
`hook=onIteration middleware=${mw.name ?? 'unnamed'}`,
430+
{ middleware: mw.name ?? 'unnamed', hook: 'onIteration' },
431+
)
428432
aiEventClient.emit('middleware:hook:executed', {
429433
...instrumentCtx(ctx),
430434
middlewareName: mw.name || 'unnamed',
@@ -451,11 +455,11 @@ export class MiddlewareRunner {
451455
const skip = shouldSkipInstrumentation(mw)
452456
const start = Date.now()
453457
await mw.onToolPhaseComplete(ctx, info)
454-
this.logger.middleware(
455-
`hook=onToolPhaseComplete middleware=${mw.name ?? 'unnamed'}`,
456-
{ middleware: mw.name ?? 'unnamed', hook: 'onToolPhaseComplete' },
457-
)
458458
if (!skip) {
459+
this.logger.middleware(
460+
`hook=onToolPhaseComplete middleware=${mw.name ?? 'unnamed'}`,
461+
{ middleware: mw.name ?? 'unnamed', hook: 'onToolPhaseComplete' },
462+
)
459463
aiEventClient.emit('middleware:hook:executed', {
460464
...instrumentCtx(ctx),
461465
middlewareName: mw.name || 'unnamed',

0 commit comments

Comments
 (0)