{"version":3,"file":"index.cjs","sources":["@gensx/vercel-ai/../../../../src/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport type { Tool, ToolExecutionOptions } 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: ToolExecutionOptions,\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) 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        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(\n                (aggregated, chunk) => {\n                  if (chunk.type === \"text-delta\") {\n                    return {\n                      ...aggregated,\n                      text: aggregated.text + chunk.textDelta,\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                  text: \"\",\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          },\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 ai.LanguageModelV1 {\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 LanguageModelV1 instance?`);\n  }\n}\n"],"names":["Component","ai","wrap"],"mappings":"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"}