{"version":3,"sources":["../../src/backend/utils.ts"],"names":["findProviderDef","value","Object","values","BackendProviders","find","p","name","module","aliases","includes","parseModel","ValueError","providerId","rest","split","modelId","join","providerDef","loadModel","type","capitalize","generateToolUnionSchema","tools","isEmpty","schemas","Promise","all","map","tool","z","object","literal","parameters","inputSchema","hasMinLength","discriminatedUnion","filterToolsByToolChoice","Tool"],"mappings":"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","file":"utils.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ValueError } from \"@/errors.js\";\nimport { ClassConstructor } from \"@/internals/types.js\";\nimport { BackendProviders, ProviderDef, ProviderName } from \"@/backend/constants.js\";\nimport { capitalize, isEmpty } from \"remeda\";\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { ChatModelToolChoice } from \"@/backend/chat.js\";\nimport { hasMinLength } from \"@/internals/helpers/array.js\";\nimport { z, ZodSchema } from \"zod\";\n\nexport type FullModelName = `${ProviderName}:${string}`;\n\nfunction findProviderDef(value: string): ProviderDef | null {\n  return (\n    Object.values(BackendProviders).find(\n      (p) => p.name === value || p.module === value || p.aliases.includes(value),\n    ) ?? null\n  );\n}\n\nexport function parseModel(name: string) {\n  if (!name) {\n    throw new ValueError(\"Neither 'provider' nor 'provider:model' was specified.\");\n  }\n  const [providerId, ...rest] = name.split(\":\") as [ProviderName, ...string[]];\n  const modelId = rest.join(\":\");\n\n  const providerDef = findProviderDef(providerId);\n  if (!providerDef) {\n    throw new ValueError(\"Model does not contain provider name!\");\n  }\n  return { providerId, modelId, providerDef };\n}\n\nexport async function loadModel<T>(\n  name: ProviderName | FullModelName,\n  type: \"embedding\" | \"chat\",\n): Promise<ClassConstructor<T>> {\n  const { providerDef } = parseModel(name);\n  const module = await import(`beeai-framework/adapters/${providerDef.module}/backend/${type}`);\n  return module[`${providerDef.name}${capitalize(type)}Model`];\n}\n\nexport async function generateToolUnionSchema(tools: AnyTool[]): Promise<ZodSchema> {\n  if (isEmpty(tools)) {\n    throw new ValueError(\"No tools provided!\");\n  }\n\n  const schemas = await Promise.all(\n    tools.map(async (tool) =>\n      z.object({\n        name: z.literal(tool.name),\n        parameters: (await tool.inputSchema()) as ZodSchema,\n      }),\n    ),\n  );\n\n  return hasMinLength(schemas, 2) ? z.discriminatedUnion(\"name\", schemas) : schemas[0];\n}\n\nexport function filterToolsByToolChoice(tools: AnyTool[], value?: ChatModelToolChoice): AnyTool[] {\n  if (value === \"none\") {\n    return [];\n  }\n\n  if (!value || value === \"required\" || value === \"auto\") {\n    return tools;\n  }\n\n  if (value instanceof Tool) {\n    const tool = tools.find((tool) => tool === value);\n    if (!tool) {\n      throw new ValueError(`Invalid tool choice provided! Tool was not found.`);\n    }\n    return [tool];\n  }\n\n  throw new ValueError(`Invalid tool choice provided (${value})!`);\n}\n"]}