assistant-stream
Version:
Streaming utilities for AI assistants
33 lines (32 loc) • 2.09 kB
JavaScript
import { unwrapModelContentEnvelope } from "./modelContentEnvelope.js";
import { toAISDKContent, toAISDKDefaultOutput } from "./toolOutputConversion.js";
import { gateway, jsonSchema } from "ai";
// src/ai-sdk/frontendTools.ts
const supportsTaggedFileData = gateway.specificationVersion === "v4";
const defaultToModelOutput = ({ output }) => {
const { result, modelContent } = unwrapModelContentEnvelope(output);
if (modelContent === void 0) return toAISDKDefaultOutput(result);
return supportsTaggedFileData ? toAISDKContent(modelContent, { taggedFileData: true }) : toAISDKContent(modelContent, { taggedFileData: false });
};
const isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
function validateFrontendTool(name, tool) {
if (!isPlainObject(tool)) throw new Error(`frontendTools() expected tool "${name}" to be an object with a JSON Schema parameters object.`);
if (!isPlainObject(tool.parameters)) throw new Error(`frontendTools() expected tool "${name}" to include a JSON Schema parameters object.`);
if (tool.description !== void 0 && typeof tool.description !== "string") throw new Error(`frontendTools() expected tool "${name}" description to be a string.`);
if (tool.providerOptions !== void 0 && !isPlainObject(tool.providerOptions)) throw new Error(`frontendTools() expected tool "${name}" providerOptions to be an object.`);
}
function validateFrontendTools(tools) {
if (!isPlainObject(tools)) throw new Error("frontendTools() expected tools to be an object keyed by tool name.");
for (const [name, tool] of Object.entries(tools)) validateFrontendTool(name, tool);
}
const frontendTools = (tools) => {
validateFrontendTools(tools);
return Object.fromEntries(Object.entries(tools).map(([name, tool]) => [name, {
...tool.description !== void 0 && { description: tool.description },
inputSchema: jsonSchema(tool.parameters),
toModelOutput: defaultToModelOutput,
...tool.providerOptions && { providerOptions: tool.providerOptions }
}]));
};
export { frontendTools };
//# sourceMappingURL=frontendTools.js.map