@tanstack/ai
Version:
Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.
66 lines (65 loc) • 2.39 kB
JavaScript
//#region src/activities/middleware/run.ts
/**
* Build the stable context for a single media-activity call.
*
* Media activities are always server-side and carry no user runtime context,
* so `source` is fixed to `'server'` and `context` to `undefined`.
*/
function createGenerationContext(args) {
return {
requestId: args.requestId,
activity: args.activity,
provider: args.provider,
model: args.model,
modelOptions: args.modelOptions,
threadId: args.threadId,
runId: args.runId,
source: "server",
createId: args.createId,
context: void 0,
resultTransforms: [],
artifactInputs: args.artifactInputs
};
}
/**
* Run a single lifecycle hook across each middleware in registration order,
* awaiting each. Exceptions PROPAGATE (matching `chat()` middleware) — a
* broken middleware fails the activity rather than being silently swallowed.
*/
async function run(middleware, invoke) {
if (!middleware || middleware.length === 0) return;
for (const mw of middleware) await invoke(mw);
}
function runGenerationStart(middleware, ctx) {
return run(middleware, (mw) => mw.onStart?.(ctx));
}
function runGenerationUsage(middleware, ctx, usage) {
return run(middleware, (mw) => mw.onUsage?.(ctx, usage));
}
function runGenerationFinish(middleware, ctx, info) {
return run(middleware, (mw) => mw.onFinish?.(ctx, info));
}
function runGenerationAbort(middleware, ctx, info) {
return run(middleware, (mw) => mw.onAbort?.(ctx, info));
}
function runGenerationError(middleware, ctx, info) {
return run(middleware, (mw) => mw.onError?.(ctx, info));
}
/**
* Apply the result transforms middleware registered on the context, in order,
* to the raw adapter result. Each transform may return a replacement result or
* `undefined` to leave it unchanged. Runs after the adapter result exists and
* before the final result is returned or streamed.
*/
async function applyGenerationResultTransforms(ctx, result) {
let current = result;
const transformCtx = { middleware: ctx };
for (const transform of ctx.resultTransforms ?? []) {
const transformed = await transform(current, transformCtx);
if (transformed !== void 0) current = transformed;
}
return current;
}
//#endregion
export { applyGenerationResultTransforms, createGenerationContext, runGenerationAbort, runGenerationError, runGenerationFinish, runGenerationStart, runGenerationUsage };
//# sourceMappingURL=run.js.map