ai
Version:
AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.
45 lines (42 loc) • 1.53 kB
text/typescript
import type { Context } from '@ai-sdk/provider-utils';
import { createTelemetryDispatcher } from '../telemetry/create-telemetry-dispatcher';
import { filterIncludedContext } from '../telemetry/filter-included-context';
import type { TelemetryDispatcher } from '../telemetry/telemetry';
import type { TelemetryOptions } from '../telemetry/telemetry-options';
import type { Callback } from '../util/callback';
import type { EmbedStartEvent, EmbedEndEvent } from './embed-events';
/**
* Filters runtime context before sending operation events to telemetry integrations.
* User callbacks continue to receive the original context.
*/
export function createRestrictedTelemetryDispatcher<
RUNTIME_CONTEXT extends Context,
>({
telemetry,
}: {
telemetry?: TelemetryOptions<RUNTIME_CONTEXT>;
}): Omit<TelemetryDispatcher, 'onStart' | 'onEnd'> & {
onStart: Callback<EmbedStartEvent<RUNTIME_CONTEXT>>;
onEnd: Callback<EmbedEndEvent<RUNTIME_CONTEXT>>;
} {
const dispatcher = createTelemetryDispatcher({ telemetry });
return {
...dispatcher,
onStart: event =>
dispatcher.onStart?.({
...event,
runtimeContext: filterIncludedContext({
context: event.runtimeContext,
includeContext: telemetry?.includeRuntimeContext,
}),
}),
onEnd: event =>
dispatcher.onEnd?.({
...event,
runtimeContext: filterIncludedContext({
context: event.runtimeContext,
includeContext: telemetry?.includeRuntimeContext,
}),
}),
};
}