UNPKG

assistant-stream

Version:

Streaming utilities for AI assistants

33 lines (32 loc) • 2.09 kB
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