Defined in: packages/ai/src/activities/middleware/types.ts:191
Activity-agnostic, observe-only middleware.
A thin lifecycle observer registerable on any activity via its middleware option. Unlike ChatMiddleware (which can also rewrite config, chunks, and tool calls), these hooks only observe — the right fit for the single request → response shape of media activities. Pass otelMiddleware() for OpenTelemetry, or implement the hooks directly for a custom backend.
Hooks are awaited in registration order. A hook that throws PROPAGATES and fails the activity — matching chat() middleware semantics. Keep them cheap; they run inline with the request.
Exactly one of onFinish / onAbort / onError fires per call.
import { generateImage } from '@tanstack/ai'
import { otelMiddleware } from '@tanstack/ai/middlewares/otel'
import { openaiImage } from '@tanstack/ai-openai'
import { trace } from '@opentelemetry/api'
await generateImage({
adapter: openaiImage('gpt-image-1'),
prompt: 'A serene mountain landscape at sunset',
middleware: [otelMiddleware({ tracer: trace.getTracer('my-app') })],
})TContext = unknown
optional name?: string;Defined in: packages/ai/src/activities/middleware/types.ts:193
Optional name, surfaced in diagnostics.
optional onAbort?: (ctx, info) => void | Promise<void>;Defined in: packages/ai/src/activities/middleware/types.ts:207
Called when the activity is aborted (e.g. an abandoned stream).
GenerationMiddlewareContext<TContext>
void | Promise<void>
optional onError?: (ctx, info) => void | Promise<void>;Defined in: packages/ai/src/activities/middleware/types.ts:212
Called when the activity throws before completing.
GenerationMiddlewareContext<TContext>
void | Promise<void>
optional onFinish?: (ctx, info) => void | Promise<void>;Defined in: packages/ai/src/activities/middleware/types.ts:202
Called after the activity completes successfully.
GenerationMiddlewareContext<TContext>
void | Promise<void>
optional onStart?: (ctx) => void | Promise<void>;Defined in: packages/ai/src/activities/middleware/types.ts:195
Called before the adapter request begins.
GenerationMiddlewareContext<TContext>
void | Promise<void>
optional onUsage?: (ctx, usage) => void | Promise<void>;Defined in: packages/ai/src/activities/middleware/types.ts:197
Called when the provider reports usage, before onFinish.
GenerationMiddlewareContext<TContext>
void | Promise<void>