@tanstack/ai
Version:
Core TanStack AI library - Open source AI SDK
112 lines (111 loc) • 2.75 kB
JavaScript
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