@tanstack/ai
Version:
Core TanStack AI library - Open source AI SDK
75 lines (74 loc) • 2.17 kB
JavaScript
import { aiEventClient } from "@tanstack/ai-event-client";
import { streamGenerationResult } from "../stream-generation-result.js";
import { resolveDebugOption } from "../../logger/resolve.js";
const kind = "tts";
function createId(prefix) {
return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
}
function generateSpeech(options) {
if (options.stream) {
return streamGenerationResult(
() => runGenerateSpeech(options)
);
}
return runGenerateSpeech(options);
}
async function runGenerateSpeech(options) {
const { adapter, stream: _stream, debug: _debug, ...rest } = options;
const model = adapter.model;
const requestId = createId("speech");
const startTime = Date.now();
const logger = resolveDebugOption(options.debug);
const providerName = adapter.provider ?? adapter.name ?? "unknown";
aiEventClient.emit("speech:request:started", {
requestId,
provider: adapter.name,
model,
text: rest.text,
voice: rest.voice,
format: rest.format,
speed: rest.speed,
modelOptions: rest.modelOptions,
timestamp: startTime
});
logger.request(`activity=generateSpeech provider=${providerName}`, {
provider: providerName,
model
});
try {
const result = await adapter.generateSpeech({ ...rest, model, logger });
const duration = Date.now() - startTime;
aiEventClient.emit("speech:request:completed", {
requestId,
provider: adapter.name,
model,
audio: result.audio,
format: result.format,
audioDuration: result.duration,
contentType: result.contentType,
duration,
modelOptions: rest.modelOptions,
timestamp: Date.now()
});
logger.output(`activity=generateSpeech bytes=${result.audio.length}`, {
bytes: result.audio.length,
contentType: result.contentType
});
return result;
} catch (error) {
logger.errors("generateSpeech activity failed", {
error,
source: "generateSpeech"
});
throw error;
}
}
function createSpeechOptions(options) {
return options;
}
export {
createSpeechOptions,
generateSpeech,
kind
};
//# sourceMappingURL=index.js.map