UNPKG

@gensx/vercel-ai

Version:
1 lines 11.3 kB
{"version":3,"file":"index.cjs","sources":["@gensx/vercel-ai/../../../../src/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport type { LanguageModelV2 } from \"@ai-sdk/provider\";\nimport type { Tool, ToolCallOptions } from \"ai\";\n\nimport { Component, ComponentOpts, wrap } from \"@gensx/core\";\nimport * as ai from \"ai\";\n\nexport type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\n// Helper function to wrap tools in GSX components\nfunction wrapTools<T extends Record<string, Tool>>(\n tools: T | undefined,\n): T | undefined {\n if (!tools) return undefined;\n\n return Object.entries(tools).reduce<Record<string, T[string]>>(\n (acc, [name, tool]) => {\n if (!tool.execute) return acc;\n\n type ToolParams = Parameters<typeof tool.execute>[0];\n type ToolResult = Awaited<ReturnType<typeof tool.execute>>;\n\n const wrappedTool = {\n ...tool,\n execute: (\n args: ToolParams,\n options: ToolCallOptions,\n ): Promise<ToolResult> => {\n const ToolComponent = Component(\n `tool.${name}`,\n async (toolArgs: ToolParams) => {\n if (!tool.execute)\n throw new Error(`Tool ${name} has no execute function`);\n\n return await tool.execute(toolArgs, options);\n },\n );\n return ToolComponent(args as unknown as object);\n },\n } as unknown as T[string];\n\n return {\n ...acc,\n [name]: wrappedTool,\n };\n },\n {},\n ) as unknown as T;\n}\n\n// Export the original functions with proper typing\nexport const streamText = Component(\n \"StreamText\",\n new Proxy(ai.streamText, {\n apply: (target, thisArg, args) => {\n const [first, ...rest] = args;\n\n const wrappedTools = wrapTools(first.tools);\n\n return Reflect.apply(target, thisArg, [\n {\n ...first,\n model: wrapVercelAIModel(first.model),\n tools: wrappedTools,\n },\n ...rest,\n ]);\n },\n }),\n {\n __streamingResultKey: \"textStream\",\n },\n) as typeof ai.streamText;\n\nexport const streamObject = Component(\n \"StreamObject\",\n new Proxy(ai.streamObject, {\n apply: (target, thisArg, args) => {\n const [first, ...rest] = args;\n\n return Reflect.apply(target, thisArg, [\n {\n ...first,\n model: wrapVercelAIModel(first.model),\n },\n ...rest,\n ]);\n },\n }),\n) as typeof ai.streamObject;\n\nexport const generateObject = Component(\n \"GenerateObject\",\n new Proxy(ai.generateObject, {\n apply: (target, thisArg, args) => {\n const [first, ...rest] = args;\n\n return Reflect.apply(target, thisArg, [\n {\n ...first,\n model: wrapVercelAIModel(first.model),\n },\n ...rest,\n ]);\n },\n }),\n) as typeof ai.generateObject;\n\nexport const generateText = Component(\n \"GenerateText\",\n new Proxy(ai.generateText, {\n apply: (target, thisArg, args) => {\n const [first, ...rest] = args;\n\n const wrappedTools = wrapTools(first.tools);\n\n return Reflect.apply(target, thisArg, [\n {\n ...first,\n model: wrapVercelAIModel(first.model),\n tools: wrappedTools,\n },\n ...rest,\n ]);\n },\n }),\n) as typeof ai.generateText;\n\nexport const embed = Component(\"embed\", ai.embed) as typeof ai.embed;\n\nexport const embedMany = Component(\n \"embedMany\",\n ai.embedMany,\n) as typeof ai.embedMany;\n\nexport const generateImage = Component(\n \"generateImage\",\n ai.experimental_generateImage,\n) as typeof ai.experimental_generateImage;\n\nexport const wrapVercelAIModel = <T extends object>(\n languageModel: T,\n componentOpts?: ComponentOpts,\n): T => {\n assertIsLanguageModel(languageModel);\n\n const componentName = componentOpts?.name ?? languageModel.provider;\n return new Proxy(languageModel, {\n get(target, propKey, receiver) {\n const originalValue = Reflect.get(target, propKey, receiver);\n if (typeof originalValue === \"function\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((originalValue as any).__gensxComponent) {\n return originalValue;\n }\n\n // let aggregator: ((chunks: any[]) => unknown) | undefined;\n let __streamingResultKey: string | undefined;\n if (propKey === \"doStream\") {\n __streamingResultKey = \"stream\";\n // aggregator =\n // componentOpts?.aggregator ??\n // ((\n // chunks: {\n // type: \"text-delta\" | \"tool-call\" | \"finish\" | \"something-else\";\n // textDelta: string;\n // usage: unknown;\n // finishReason: unknown;\n // }[],\n // ) => {\n // return chunks.reduce((aggregated, chunk) => {\n // console.log(\"aggregating chunk\", chunk);\n // if (chunk.type === \"text-delta\") {\n // return {\n // ...aggregated,\n // };\n // } else if (chunk.type === \"tool-call\") {\n // return {\n // ...aggregated,\n // ...chunk,\n // };\n // } else if (chunk.type === \"finish\") {\n // return {\n // ...aggregated,\n // usage: chunk.usage,\n // finishReason: chunk.finishReason,\n // };\n // } else {\n // return aggregated;\n // }\n // }, {});\n // });\n }\n return Component(\n componentName,\n originalValue.bind(target) as (input: object) => unknown,\n {\n ...componentOpts,\n // aggregator,\n __streamingResultKey,\n idPropsKeys: [\"inputFormat\", \"prompt\", \"responseFormat\", \"seed\"],\n },\n );\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n originalValue != null &&\n !Array.isArray(originalValue) &&\n !(originalValue instanceof Date) &&\n typeof originalValue === \"object\"\n ) {\n return wrap(originalValue, {\n prefix: [componentName, propKey.toString()].join(\".\"),\n });\n } else {\n return originalValue;\n }\n },\n });\n};\n\nfunction assertIsLanguageModel(\n languageModel: object,\n): asserts languageModel is LanguageModelV2 {\n if (\n !(\"doStream\" in languageModel) ||\n typeof languageModel.doStream !== \"function\" ||\n !(\"doGenerate\" in languageModel) ||\n typeof languageModel.doGenerate !== \"function\"\n ) {\n throw new Error(`Invalid model. Is this a LanguageModelV2 instance?`);\n }\n}\n\nexport { asToolSet } from \"./tools.js\";\n"],"names":["Component","ai","wrap"],"mappings":"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"}