{"version":3,"file":"common.cjs","names":["GeminiToolAttributes","schemaToGeminiParameters","jsonSchemaToGeminiParameters","normalizeSpeechConfig","isModelGemini","isModelGemma","isModelClaude","validateGeminiParams"],"sources":["../../src/utils/common.ts"],"sourcesContent":["import { isOpenAITool } from \"@langchain/core/language_models/base\";\nimport { isLangChainTool } from \"@langchain/core/utils/function_calling\";\nimport {\n  isModelGemini,\n  isModelGemma,\n  normalizeSpeechConfig,\n  validateGeminiParams,\n} from \"./gemini.js\";\nimport {\n  GeminiFunctionDeclaration,\n  GeminiFunctionSchema,\n  GeminiTool,\n  GeminiToolAttributes,\n  GoogleAIBaseLanguageModelCallOptions,\n  GoogleAIModelParams,\n  GoogleAIModelRequestParams,\n  GoogleAIToolType,\n  VertexModelFamily,\n} from \"../types.js\";\nimport {\n  jsonSchemaToGeminiParameters,\n  schemaToGeminiParameters,\n} from \"./zod_to_gemini_parameters.js\";\nimport { isModelClaude, validateClaudeParams } from \"./anthropic.js\";\n\nexport function copyAIModelParams(\n  params: GoogleAIModelParams | undefined,\n  options: GoogleAIBaseLanguageModelCallOptions | undefined\n): GoogleAIModelRequestParams {\n  return copyAIModelParamsInto(params, options, {});\n}\n\nfunction processToolChoice(\n  toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"],\n  allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]\n):\n  | {\n      tool_choice: \"any\" | \"auto\" | \"none\";\n      allowed_function_names?: string[];\n    }\n  | undefined {\n  if (!toolChoice) {\n    if (allowedFunctionNames) {\n      // Allowed func names is passed, return 'any' so it forces the model to use a tool.\n      return {\n        tool_choice: \"any\",\n        allowed_function_names: allowedFunctionNames,\n      };\n    }\n    return undefined;\n  }\n\n  if (toolChoice === \"any\" || toolChoice === \"auto\" || toolChoice === \"none\") {\n    return {\n      tool_choice: toolChoice,\n      allowed_function_names: allowedFunctionNames,\n    };\n  }\n  if (typeof toolChoice === \"string\") {\n    // String representing the function name.\n    // Return any to force the model to predict the specified function call.\n    return {\n      tool_choice: \"any\",\n      allowed_function_names: [...(allowedFunctionNames ?? []), toolChoice],\n    };\n  }\n  throw new Error(\"Object inputs for tool_choice not supported.\");\n}\n\nfunction isGeminiTool(tool: GoogleAIToolType): tool is GeminiTool {\n  for (const toolAttribute of GeminiToolAttributes) {\n    if (toolAttribute in tool) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isGeminiNonFunctionTool(tool: GoogleAIToolType): tool is GeminiTool {\n  return isGeminiTool(tool) && !(\"functionDeclaration\" in tool);\n}\n\nexport function convertToGeminiTools(tools: GoogleAIToolType[]): GeminiTool[] {\n  const geminiTools: GeminiTool[] = [];\n  let functionDeclarationsIndex = -1;\n  tools.forEach((tool) => {\n    if (isGeminiNonFunctionTool(tool)) {\n      geminiTools.push(tool);\n    } else {\n      if (functionDeclarationsIndex === -1) {\n        geminiTools.push({\n          functionDeclarations: [],\n        });\n        functionDeclarationsIndex = geminiTools.length - 1;\n      }\n      if (\n        \"functionDeclarations\" in tool &&\n        Array.isArray(tool.functionDeclarations)\n      ) {\n        const funcs: GeminiFunctionDeclaration[] = tool.functionDeclarations;\n        geminiTools[functionDeclarationsIndex].functionDeclarations!.push(\n          ...funcs\n        );\n      } else if (isLangChainTool(tool)) {\n        try {\n          const jsonSchema = schemaToGeminiParameters(tool.schema);\n          geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n            name: tool.name,\n            description: tool.description ?? `A function available to call.`,\n            parameters: jsonSchema as GeminiFunctionSchema,\n          });\n        } catch (error) {\n          const errorMessage =\n            error && typeof error === \"object\" && \"message\" in error\n              ? String(error.message)\n              : String(error);\n          throw new Error(\n            `Failed to convert tool '${tool.name}' schema for Gemini: ${errorMessage}. `\n          );\n        }\n      } else if (isOpenAITool(tool)) {\n        geminiTools[functionDeclarationsIndex].functionDeclarations!.push({\n          name: tool.function.name,\n          description:\n            tool.function.description ?? `A function available to call.`,\n          parameters: jsonSchemaToGeminiParameters(tool.function.parameters),\n        });\n      } else {\n        throw new Error(`Received invalid tool: ${JSON.stringify(tool)}`);\n      }\n    }\n  });\n  return geminiTools;\n}\n\nfunction reasoningEffortToReasoningTokens(\n  _modelName?: string,\n  effort?: string\n): number | undefined {\n  if (effort === undefined) {\n    return undefined;\n  }\n  const maxEffort = 24 * 1024; // Max for Gemini 2.5 Flash\n  switch (effort) {\n    case \"low\":\n      // Defined as 1k by https://ai.google.dev/gemini-api/docs/openai#thinking\n      return 1024;\n    case \"medium\":\n      // Defined as 8k by https://ai.google.dev/gemini-api/docs/openai#thinking\n      return 8 * 1024;\n    case \"high\":\n      return maxEffort;\n    default:\n      return undefined;\n  }\n}\n\nexport function copyAIModelParamsInto(\n  params: GoogleAIModelParams | undefined,\n  options: GoogleAIBaseLanguageModelCallOptions | undefined,\n  target: GoogleAIModelParams\n): GoogleAIModelRequestParams {\n  const ret: GoogleAIModelRequestParams = target || {};\n  const model = options?.model ?? params?.model ?? target.model;\n  ret.modelName =\n    model ?? options?.modelName ?? params?.modelName ?? target.modelName;\n  ret.model = model;\n  ret.temperature =\n    options?.temperature ?? params?.temperature ?? target.temperature;\n  ret.maxOutputTokens =\n    options?.maxOutputTokens ??\n    params?.maxOutputTokens ??\n    target.maxOutputTokens;\n  ret.maxReasoningTokens =\n    options?.maxReasoningTokens ??\n    params?.maxReasoningTokens ??\n    target?.maxReasoningTokens ??\n    options?.thinkingBudget ??\n    params?.thinkingBudget ??\n    target?.thinkingBudget ??\n    reasoningEffortToReasoningTokens(ret.modelName, params?.reasoningEffort) ??\n    reasoningEffortToReasoningTokens(ret.modelName, target?.reasoningEffort) ??\n    reasoningEffortToReasoningTokens(ret.modelName, options?.reasoningEffort);\n  ret.topP = options?.topP ?? params?.topP ?? target.topP;\n  ret.topK = options?.topK ?? params?.topK ?? target.topK;\n  ret.seed = options?.seed ?? params?.seed ?? target.seed;\n  ret.presencePenalty =\n    options?.presencePenalty ??\n    params?.presencePenalty ??\n    target.presencePenalty;\n  ret.frequencyPenalty =\n    options?.frequencyPenalty ??\n    params?.frequencyPenalty ??\n    target.frequencyPenalty;\n  ret.stopSequences =\n    options?.stopSequences ?? params?.stopSequences ?? target.stopSequences;\n  ret.safetySettings =\n    options?.safetySettings ?? params?.safetySettings ?? target.safetySettings;\n  ret.logprobs = options?.logprobs ?? params?.logprobs ?? target.logprobs;\n  ret.topLogprobs =\n    options?.topLogprobs ?? params?.topLogprobs ?? target.topLogprobs;\n  ret.thinkingLevel =\n    options?.thinkingLevel ?? params?.thinkingLevel ?? target?.thinkingLevel;\n  ret.reasoningLevel =\n    options?.reasoningLevel ?? params?.reasoningLevel ?? target?.reasoningLevel;\n  ret.convertSystemMessageToHumanContent =\n    options?.convertSystemMessageToHumanContent ??\n    params?.convertSystemMessageToHumanContent ??\n    target?.convertSystemMessageToHumanContent;\n  ret.responseMimeType =\n    options?.responseMimeType ??\n    params?.responseMimeType ??\n    target?.responseMimeType;\n  ret.responseSchema =\n    options?.responseSchema ?? params?.responseSchema ?? target?.responseSchema;\n  ret.responseModalities =\n    options?.responseModalities ??\n    params?.responseModalities ??\n    target?.responseModalities;\n  ret.speechConfig = normalizeSpeechConfig(\n    options?.speechConfig ?? params?.speechConfig ?? target?.speechConfig\n  );\n  ret.streaming = options?.streaming ?? params?.streaming ?? target?.streaming;\n  const toolChoice = processToolChoice(\n    options?.tool_choice,\n    options?.allowed_function_names\n  );\n  if (toolChoice) {\n    ret.tool_choice = toolChoice.tool_choice;\n    ret.allowed_function_names = toolChoice.allowed_function_names;\n  }\n\n  const tools = options?.tools;\n  if (tools) {\n    // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n    ret.tools = convertToGeminiTools(tools as Record<string, any>[]);\n  }\n\n  if (options?.cachedContent) {\n    ret.cachedContent = options.cachedContent;\n  }\n\n  ret.labels = options?.labels ?? params?.labels ?? target?.labels;\n\n  return ret;\n}\n\nexport function modelToFamily(\n  modelName: string | undefined\n): VertexModelFamily {\n  if (!modelName) {\n    return null;\n  } else if (isModelGemini(modelName)) {\n    return \"gemini\";\n  } else if (isModelGemma(modelName)) {\n    return \"gemma\";\n  } else if (isModelClaude(modelName)) {\n    return \"claude\";\n  } else {\n    return null;\n  }\n}\n\nexport function modelToPublisher(modelName: string | undefined): string {\n  const family = modelToFamily(modelName);\n  switch (family) {\n    case \"gemini\":\n    case \"gemma\":\n    case \"palm\":\n      return \"google\";\n\n    case \"claude\":\n      return \"anthropic\";\n\n    default:\n      return \"unknown\";\n  }\n}\n\nexport function validateModelParams(\n  params: GoogleAIModelParams | undefined\n): void {\n  const testParams: GoogleAIModelParams = params ?? {};\n  const model = testParams.model ?? testParams.modelName;\n  switch (modelToFamily(model)) {\n    case \"gemini\":\n    case \"gemma\": // TODO: Are we sure?\n      return validateGeminiParams(testParams);\n\n    case \"claude\":\n      return validateClaudeParams(testParams);\n\n    default:\n      throw new Error(\n        `Unable to verify model params: ${JSON.stringify(params)}`\n      );\n  }\n}\n\nexport function copyAndValidateModelParamsInto(\n  params: GoogleAIModelParams | undefined,\n  target: GoogleAIModelParams\n): GoogleAIModelParams {\n  copyAIModelParamsInto(params, undefined, target);\n  validateModelParams(target);\n  return target;\n}\n"],"mappings":"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"}