UNPKG

@tanstack/ai

Version:

Core TanStack AI library - Open source AI SDK

112 lines (111 loc) 2.75 kB
import { aiEventClient } from "@tanstack/ai-event-client"; import { streamGenerationResult } from "../stream-generation-result.js"; import { resolveDebugOption } from "../../logger/resolve.js"; const kind = "summarize"; function createId(prefix) { return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`; } function summarize(options) { const { stream } = options; if (stream) { return runStreamingSummarize( options ); } return runSummarize( options ); } async function runSummarize(options) { const { adapter, text, maxLength, style, focus } = options; const model = adapter.model; const requestId = createId("summarize"); const inputLength = text.length; const startTime = Date.now(); const logger = resolveDebugOption(options.debug); aiEventClient.emit("summarize:request:started", { requestId, provider: adapter.name, model, inputLength, timestamp: startTime }); logger.request(`activity=summarize provider=${adapter.name}`, { provider: adapter.name, model, inputLength }); const summarizeOptions = { model, text, maxLength, style, focus, logger }; try { const result = await adapter.summarize(summarizeOptions); const duration = Date.now() - startTime; const outputLength = result.summary.length; aiEventClient.emit("summarize:request:completed", { requestId, provider: adapter.name, model, inputLength, outputLength, duration, timestamp: Date.now() }); logger.output(`activity=summarize length=${outputLength}`, { hasSummary: !!result.summary, outputLength }); return result; } catch (error) { logger.errors("summarize activity failed", { error, source: "summarize" }); throw error; } } async function* runStreamingSummarize(options) { const { adapter, text, maxLength, style, focus } = options; const model = adapter.model; const logger = resolveDebugOption(options.debug); logger.request(`activity=summarize provider=${adapter.name}`, { provider: adapter.name, model, stream: true }); const summarizeOptions = { model, text, maxLength, style, focus, logger }; try { if (adapter.summarizeStream) { yield* adapter.summarizeStream(summarizeOptions); return; } yield* streamGenerationResult(() => adapter.summarize(summarizeOptions)); } catch (error) { logger.errors("summarize activity failed", { error, source: "summarize" }); throw error; } } function createSummarizeOptions(options) { return options; } export { createSummarizeOptions, kind, summarize }; //# sourceMappingURL=index.js.map