@langchain/google-common 2.1.3 → 2.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -96,6 +96,8 @@ function copyAIModelParamsInto(params, options, target) {
96
96
  ret.safetySettings = options?.safetySettings ?? params?.safetySettings ?? target.safetySettings;
97
97
  ret.logprobs = options?.logprobs ?? params?.logprobs ?? target.logprobs;
98
98
  ret.topLogprobs = options?.topLogprobs ?? params?.topLogprobs ?? target.topLogprobs;
99
+ ret.thinkingLevel = options?.thinkingLevel ?? params?.thinkingLevel ?? target?.thinkingLevel;
100
+ ret.reasoningLevel = options?.reasoningLevel ?? params?.reasoningLevel ?? target?.reasoningLevel;
99
101
  ret.convertSystemMessageToHumanContent = options?.convertSystemMessageToHumanContent ?? params?.convertSystemMessageToHumanContent ?? target?.convertSystemMessageToHumanContent;
100
102
  ret.responseMimeType = options?.responseMimeType ?? params?.responseMimeType ?? target?.responseMimeType;
101
103
  ret.responseSchema = options?.responseSchema ?? params?.responseSchema ?? target?.responseSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"common.cjs","names":["params: GoogleAIModelParams | undefined","options: GoogleAIBaseLanguageModelCallOptions | undefined","toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"]","allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]","tool: GoogleAIToolType","GeminiToolAttributes","tools: GoogleAIToolType[]","geminiTools: GeminiTool[]","funcs: GeminiFunctionDeclaration[]","schemaToGeminiParameters","jsonSchemaToGeminiParameters","_modelName?: string","effort?: string","target: GoogleAIModelParams","ret: GoogleAIModelRequestParams","normalizeSpeechConfig","modelName: string | undefined","isModelGemini","isModelGemma","isModelClaude","testParams: GoogleAIModelParams","validateGeminiParams","validateClaudeParams"],"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.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 // eslint-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":";;;;;;;;;AAyBA,SAAgB,kBACdA,QACAC,SAC4B;AAC5B,QAAO,sBAAsB,QAAQ,SAAS,CAAE,EAAC;AAClD;AAED,SAAS,kBACPC,YACAC,sBAMY;AACZ,KAAI,CAAC,YAAY;AACf,MAAI,qBAEF,QAAO;GACL,aAAa;GACb,wBAAwB;EACzB;AAEH,SAAO;CACR;AAED,KAAI,eAAe,SAAS,eAAe,UAAU,eAAe,OAClE,QAAO;EACL,aAAa;EACb,wBAAwB;CACzB;AAEH,KAAI,OAAO,eAAe,SAGxB,QAAO;EACL,aAAa;EACb,wBAAwB,CAAC,GAAI,wBAAwB,CAAE,GAAG,UAAW;CACtE;AAEH,OAAM,IAAI,MAAM;AACjB;AAED,SAAS,aAAaC,MAA4C;AAChE,MAAK,MAAM,iBAAiBC,mCAC1B,KAAI,iBAAiB,KACnB,QAAO;AAGX,QAAO;AACR;AAED,SAAS,wBAAwBD,MAA4C;AAC3E,QAAO,aAAa,KAAK,IAAI,EAAE,yBAAyB;AACzD;AAED,SAAgB,qBAAqBE,OAAyC;CAC5E,MAAMC,cAA4B,CAAE;CACpC,IAAI,4BAA4B;CAChC,MAAM,QAAQ,CAAC,SAAS;AACtB,MAAI,wBAAwB,KAAK,EAC/B,YAAY,KAAK,KAAK;OACjB;AACL,OAAI,8BAA8B,IAAI;IACpC,YAAY,KAAK,EACf,sBAAsB,CAAE,EACzB,EAAC;IACF,4BAA4B,YAAY,SAAS;GAClD;AACD,OACE,0BAA0B,QAC1B,MAAM,QAAQ,KAAK,qBAAqB,EACxC;IACA,MAAMC,QAAqC,KAAK;IAChD,YAAY,2BAA2B,qBAAsB,KAC3D,GAAG,MACJ;GACF,wEAA0B,KAAK,CAC9B,KAAI;IACF,MAAM,aAAaC,0DAAyB,KAAK,OAAO;IACxD,YAAY,2BAA2B,qBAAsB,KAAK;KAChE,MAAM,KAAK;KACX,aAAa,KAAK,eAAe,CAAC,6BAA6B,CAAC;KAChE,YAAY;IACb,EAAC;GACH,SAAQ,OAAO;IACd,MAAM,eACJ,SAAS,OAAO,UAAU,YAAY,aAAa,QAC/C,OAAO,MAAM,QAAQ,GACrB,OAAO,MAAM;AACnB,UAAM,IAAI,MACR,CAAC,wBAAwB,EAAE,KAAK,KAAK,qBAAqB,EAAE,aAAa,EAAE,CAAC;GAE/E;oEACqB,KAAK,EAC3B,YAAY,2BAA2B,qBAAsB,KAAK;IAChE,MAAM,KAAK,SAAS;IACpB,aACE,KAAK,SAAS,eAAe,CAAC,6BAA6B,CAAC;IAC9D,YAAYC,8DAA6B,KAAK,SAAS,WAAW;GACnE,EAAC;OAEF,OAAM,IAAI,MAAM,CAAC,uBAAuB,EAAE,KAAK,UAAU,KAAK,EAAE;EAEnE;CACF,EAAC;AACF,QAAO;AACR;AAED,SAAS,iCACPC,YACAC,QACoB;AACpB,KAAI,WAAW,OACb,QAAO;CAET,MAAM,YAAY,KAAK;AACvB,SAAQ,QAAR;EACE,KAAK,MAEH,QAAO;EACT,KAAK,SAEH,QAAO,IAAI;EACb,KAAK,OACH,QAAO;EACT,QACE,QAAO;CACV;AACF;AAED,SAAgB,sBACdZ,QACAC,SACAY,QAC4B;CAC5B,MAAMC,MAAkC,UAAU,CAAE;CACpD,MAAM,QAAQ,SAAS,SAAS,QAAQ,SAAS,OAAO;CACxD,IAAI,YACF,SAAS,SAAS,aAAa,QAAQ,aAAa,OAAO;CAC7D,IAAI,QAAQ;CACZ,IAAI,cACF,SAAS,eAAe,QAAQ,eAAe,OAAO;CACxD,IAAI,kBACF,SAAS,mBACT,QAAQ,mBACR,OAAO;CACT,IAAI,qBACF,SAAS,sBACT,QAAQ,sBACR,QAAQ,sBACR,SAAS,kBACT,QAAQ,kBACR,QAAQ,kBACR,iCAAiC,IAAI,WAAW,QAAQ,gBAAgB,IACxE,iCAAiC,IAAI,WAAW,QAAQ,gBAAgB,IACxE,iCAAiC,IAAI,WAAW,SAAS,gBAAgB;CAC3E,IAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;CACnD,IAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;CACnD,IAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;CACnD,IAAI,kBACF,SAAS,mBACT,QAAQ,mBACR,OAAO;CACT,IAAI,mBACF,SAAS,oBACT,QAAQ,oBACR,OAAO;CACT,IAAI,gBACF,SAAS,iBAAiB,QAAQ,iBAAiB,OAAO;CAC5D,IAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,OAAO;CAC9D,IAAI,WAAW,SAAS,YAAY,QAAQ,YAAY,OAAO;CAC/D,IAAI,cACF,SAAS,eAAe,QAAQ,eAAe,OAAO;CACxD,IAAI,qCACF,SAAS,sCACT,QAAQ,sCACR,QAAQ;CACV,IAAI,mBACF,SAAS,oBACT,QAAQ,oBACR,QAAQ;CACV,IAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,QAAQ;CAC/D,IAAI,qBACF,SAAS,sBACT,QAAQ,sBACR,QAAQ;CACV,IAAI,eAAeC,qCACjB,SAAS,gBAAgB,QAAQ,gBAAgB,QAAQ,aAC1D;CACD,IAAI,YAAY,SAAS,aAAa,QAAQ,aAAa,QAAQ;CACnE,MAAM,aAAa,kBACjB,SAAS,aACT,SAAS,uBACV;AACD,KAAI,YAAY;EACd,IAAI,cAAc,WAAW;EAC7B,IAAI,yBAAyB,WAAW;CACzC;CAED,MAAM,QAAQ,SAAS;AACvB,KAAI,OAEF,IAAI,QAAQ,qBAAqB,MAA+B;AAGlE,KAAI,SAAS,eACX,IAAI,gBAAgB,QAAQ;CAG9B,IAAI,SAAS,SAAS,UAAU,QAAQ,UAAU,QAAQ;AAE1D,QAAO;AACR;AAED,SAAgB,cACdC,WACmB;AACnB,KAAI,CAAC,UACH,QAAO;UACEC,6BAAc,UAAU,CACjC,QAAO;UACEC,4BAAa,UAAU,CAChC,QAAO;UACEC,gCAAc,UAAU,CACjC,QAAO;KAEP,QAAO;AAEV;AAED,SAAgB,iBAAiBH,WAAuC;CACtE,MAAM,SAAS,cAAc,UAAU;AACvC,SAAQ,QAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK,OACH,QAAO;EAET,KAAK,SACH,QAAO;EAET,QACE,QAAO;CACV;AACF;AAED,SAAgB,oBACdhB,QACM;CACN,MAAMoB,aAAkC,UAAU,CAAE;CACpD,MAAM,QAAQ,WAAW,SAAS,WAAW;AAC7C,SAAQ,cAAc,MAAM,EAA5B;EACE,KAAK;EACL,KAAK,QACH,QAAOC,oCAAqB,WAAW;EAEzC,KAAK,SACH,QAAOC,uCAAqB,WAAW;EAEzC,QACE,OAAM,IAAI,MACR,CAAC,+BAA+B,EAAE,KAAK,UAAU,OAAO,EAAE;CAE/D;AACF;AAED,SAAgB,+BACdtB,QACAa,QACqB;CACrB,sBAAsB,QAAQ,QAAW,OAAO;CAChD,oBAAoB,OAAO;AAC3B,QAAO;AACR"}
1
+ {"version":3,"file":"common.cjs","names":["params: GoogleAIModelParams | undefined","options: GoogleAIBaseLanguageModelCallOptions | undefined","toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"]","allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]","tool: GoogleAIToolType","GeminiToolAttributes","tools: GoogleAIToolType[]","geminiTools: GeminiTool[]","funcs: GeminiFunctionDeclaration[]","schemaToGeminiParameters","jsonSchemaToGeminiParameters","_modelName?: string","effort?: string","target: GoogleAIModelParams","ret: GoogleAIModelRequestParams","normalizeSpeechConfig","modelName: string | undefined","isModelGemini","isModelGemma","isModelClaude","testParams: GoogleAIModelParams","validateGeminiParams","validateClaudeParams"],"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 // eslint-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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"}
@@ -95,6 +95,8 @@ function copyAIModelParamsInto(params, options, target) {
95
95
  ret.safetySettings = options?.safetySettings ?? params?.safetySettings ?? target.safetySettings;
96
96
  ret.logprobs = options?.logprobs ?? params?.logprobs ?? target.logprobs;
97
97
  ret.topLogprobs = options?.topLogprobs ?? params?.topLogprobs ?? target.topLogprobs;
98
+ ret.thinkingLevel = options?.thinkingLevel ?? params?.thinkingLevel ?? target?.thinkingLevel;
99
+ ret.reasoningLevel = options?.reasoningLevel ?? params?.reasoningLevel ?? target?.reasoningLevel;
98
100
  ret.convertSystemMessageToHumanContent = options?.convertSystemMessageToHumanContent ?? params?.convertSystemMessageToHumanContent ?? target?.convertSystemMessageToHumanContent;
99
101
  ret.responseMimeType = options?.responseMimeType ?? params?.responseMimeType ?? target?.responseMimeType;
100
102
  ret.responseSchema = options?.responseSchema ?? params?.responseSchema ?? target?.responseSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","names":["params: GoogleAIModelParams | undefined","options: GoogleAIBaseLanguageModelCallOptions | undefined","toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"]","allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]","tool: GoogleAIToolType","tools: GoogleAIToolType[]","geminiTools: GeminiTool[]","funcs: GeminiFunctionDeclaration[]","_modelName?: string","effort?: string","target: GoogleAIModelParams","ret: GoogleAIModelRequestParams","modelName: string | undefined","testParams: GoogleAIModelParams"],"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.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 // eslint-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":";;;;;;;;AAyBA,SAAgB,kBACdA,QACAC,SAC4B;AAC5B,QAAO,sBAAsB,QAAQ,SAAS,CAAE,EAAC;AAClD;AAED,SAAS,kBACPC,YACAC,sBAMY;AACZ,KAAI,CAAC,YAAY;AACf,MAAI,qBAEF,QAAO;GACL,aAAa;GACb,wBAAwB;EACzB;AAEH,SAAO;CACR;AAED,KAAI,eAAe,SAAS,eAAe,UAAU,eAAe,OAClE,QAAO;EACL,aAAa;EACb,wBAAwB;CACzB;AAEH,KAAI,OAAO,eAAe,SAGxB,QAAO;EACL,aAAa;EACb,wBAAwB,CAAC,GAAI,wBAAwB,CAAE,GAAG,UAAW;CACtE;AAEH,OAAM,IAAI,MAAM;AACjB;AAED,SAAS,aAAaC,MAA4C;AAChE,MAAK,MAAM,iBAAiB,qBAC1B,KAAI,iBAAiB,KACnB,QAAO;AAGX,QAAO;AACR;AAED,SAAS,wBAAwBA,MAA4C;AAC3E,QAAO,aAAa,KAAK,IAAI,EAAE,yBAAyB;AACzD;AAED,SAAgB,qBAAqBC,OAAyC;CAC5E,MAAMC,cAA4B,CAAE;CACpC,IAAI,4BAA4B;CAChC,MAAM,QAAQ,CAAC,SAAS;AACtB,MAAI,wBAAwB,KAAK,EAC/B,YAAY,KAAK,KAAK;OACjB;AACL,OAAI,8BAA8B,IAAI;IACpC,YAAY,KAAK,EACf,sBAAsB,CAAE,EACzB,EAAC;IACF,4BAA4B,YAAY,SAAS;GAClD;AACD,OACE,0BAA0B,QAC1B,MAAM,QAAQ,KAAK,qBAAqB,EACxC;IACA,MAAMC,QAAqC,KAAK;IAChD,YAAY,2BAA2B,qBAAsB,KAC3D,GAAG,MACJ;GACF,WAAU,gBAAgB,KAAK,CAC9B,KAAI;IACF,MAAM,aAAa,yBAAyB,KAAK,OAAO;IACxD,YAAY,2BAA2B,qBAAsB,KAAK;KAChE,MAAM,KAAK;KACX,aAAa,KAAK,eAAe,CAAC,6BAA6B,CAAC;KAChE,YAAY;IACb,EAAC;GACH,SAAQ,OAAO;IACd,MAAM,eACJ,SAAS,OAAO,UAAU,YAAY,aAAa,QAC/C,OAAO,MAAM,QAAQ,GACrB,OAAO,MAAM;AACnB,UAAM,IAAI,MACR,CAAC,wBAAwB,EAAE,KAAK,KAAK,qBAAqB,EAAE,aAAa,EAAE,CAAC;GAE/E;YACQ,aAAa,KAAK,EAC3B,YAAY,2BAA2B,qBAAsB,KAAK;IAChE,MAAM,KAAK,SAAS;IACpB,aACE,KAAK,SAAS,eAAe,CAAC,6BAA6B,CAAC;IAC9D,YAAY,6BAA6B,KAAK,SAAS,WAAW;GACnE,EAAC;OAEF,OAAM,IAAI,MAAM,CAAC,uBAAuB,EAAE,KAAK,UAAU,KAAK,EAAE;EAEnE;CACF,EAAC;AACF,QAAO;AACR;AAED,SAAS,iCACPC,YACAC,QACoB;AACpB,KAAI,WAAW,OACb,QAAO;CAET,MAAM,YAAY,KAAK;AACvB,SAAQ,QAAR;EACE,KAAK,MAEH,QAAO;EACT,KAAK,SAEH,QAAO,IAAI;EACb,KAAK,OACH,QAAO;EACT,QACE,QAAO;CACV;AACF;AAED,SAAgB,sBACdT,QACAC,SACAS,QAC4B;CAC5B,MAAMC,MAAkC,UAAU,CAAE;CACpD,MAAM,QAAQ,SAAS,SAAS,QAAQ,SAAS,OAAO;CACxD,IAAI,YACF,SAAS,SAAS,aAAa,QAAQ,aAAa,OAAO;CAC7D,IAAI,QAAQ;CACZ,IAAI,cACF,SAAS,eAAe,QAAQ,eAAe,OAAO;CACxD,IAAI,kBACF,SAAS,mBACT,QAAQ,mBACR,OAAO;CACT,IAAI,qBACF,SAAS,sBACT,QAAQ,sBACR,QAAQ,sBACR,SAAS,kBACT,QAAQ,kBACR,QAAQ,kBACR,iCAAiC,IAAI,WAAW,QAAQ,gBAAgB,IACxE,iCAAiC,IAAI,WAAW,QAAQ,gBAAgB,IACxE,iCAAiC,IAAI,WAAW,SAAS,gBAAgB;CAC3E,IAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;CACnD,IAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;CACnD,IAAI,OAAO,SAAS,QAAQ,QAAQ,QAAQ,OAAO;CACnD,IAAI,kBACF,SAAS,mBACT,QAAQ,mBACR,OAAO;CACT,IAAI,mBACF,SAAS,oBACT,QAAQ,oBACR,OAAO;CACT,IAAI,gBACF,SAAS,iBAAiB,QAAQ,iBAAiB,OAAO;CAC5D,IAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,OAAO;CAC9D,IAAI,WAAW,SAAS,YAAY,QAAQ,YAAY,OAAO;CAC/D,IAAI,cACF,SAAS,eAAe,QAAQ,eAAe,OAAO;CACxD,IAAI,qCACF,SAAS,sCACT,QAAQ,sCACR,QAAQ;CACV,IAAI,mBACF,SAAS,oBACT,QAAQ,oBACR,QAAQ;CACV,IAAI,iBACF,SAAS,kBAAkB,QAAQ,kBAAkB,QAAQ;CAC/D,IAAI,qBACF,SAAS,sBACT,QAAQ,sBACR,QAAQ;CACV,IAAI,eAAe,sBACjB,SAAS,gBAAgB,QAAQ,gBAAgB,QAAQ,aAC1D;CACD,IAAI,YAAY,SAAS,aAAa,QAAQ,aAAa,QAAQ;CACnE,MAAM,aAAa,kBACjB,SAAS,aACT,SAAS,uBACV;AACD,KAAI,YAAY;EACd,IAAI,cAAc,WAAW;EAC7B,IAAI,yBAAyB,WAAW;CACzC;CAED,MAAM,QAAQ,SAAS;AACvB,KAAI,OAEF,IAAI,QAAQ,qBAAqB,MAA+B;AAGlE,KAAI,SAAS,eACX,IAAI,gBAAgB,QAAQ;CAG9B,IAAI,SAAS,SAAS,UAAU,QAAQ,UAAU,QAAQ;AAE1D,QAAO;AACR;AAED,SAAgB,cACdC,WACmB;AACnB,KAAI,CAAC,UACH,QAAO;UACE,cAAc,UAAU,CACjC,QAAO;UACE,aAAa,UAAU,CAChC,QAAO;UACE,cAAc,UAAU,CACjC,QAAO;KAEP,QAAO;AAEV;AAED,SAAgB,iBAAiBA,WAAuC;CACtE,MAAM,SAAS,cAAc,UAAU;AACvC,SAAQ,QAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK,OACH,QAAO;EAET,KAAK,SACH,QAAO;EAET,QACE,QAAO;CACV;AACF;AAED,SAAgB,oBACdZ,QACM;CACN,MAAMa,aAAkC,UAAU,CAAE;CACpD,MAAM,QAAQ,WAAW,SAAS,WAAW;AAC7C,SAAQ,cAAc,MAAM,EAA5B;EACE,KAAK;EACL,KAAK,QACH,QAAO,qBAAqB,WAAW;EAEzC,KAAK,SACH,QAAO,qBAAqB,WAAW;EAEzC,QACE,OAAM,IAAI,MACR,CAAC,+BAA+B,EAAE,KAAK,UAAU,OAAO,EAAE;CAE/D;AACF;AAED,SAAgB,+BACdb,QACAU,QACqB;CACrB,sBAAsB,QAAQ,QAAW,OAAO;CAChD,oBAAoB,OAAO;AAC3B,QAAO;AACR"}
1
+ {"version":3,"file":"common.js","names":["params: GoogleAIModelParams | undefined","options: GoogleAIBaseLanguageModelCallOptions | undefined","toolChoice: GoogleAIBaseLanguageModelCallOptions[\"tool_choice\"]","allowedFunctionNames: GoogleAIBaseLanguageModelCallOptions[\"allowed_function_names\"]","tool: GoogleAIToolType","tools: GoogleAIToolType[]","geminiTools: GeminiTool[]","funcs: GeminiFunctionDeclaration[]","_modelName?: string","effort?: string","target: GoogleAIModelParams","ret: GoogleAIModelRequestParams","modelName: string | undefined","testParams: GoogleAIModelParams"],"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 // eslint-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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"}
@@ -896,12 +896,22 @@ function getGeminiAPI(config) {
896
896
  ret.responseLogprobs = parameters.logprobs;
897
897
  if (parameters.logprobs && typeof parameters.topLogprobs !== "undefined") ret.logprobs = parameters.topLogprobs;
898
898
  }
899
- if (typeof parameters.maxReasoningTokens !== "undefined") {
900
- const includeThoughts = parameters.maxReasoningTokens !== 0;
901
- ret.thinkingConfig = {
902
- thinkingBudget: parameters.maxReasoningTokens,
903
- includeThoughts
904
- };
899
+ if (typeof parameters.maxReasoningTokens !== "undefined" || typeof parameters.thinkingLevel !== "undefined" || typeof parameters.reasoningLevel !== "undefined") {
900
+ ret.thinkingConfig = {};
901
+ if (typeof parameters.maxReasoningTokens !== "undefined") {
902
+ const includeThoughts = parameters.maxReasoningTokens !== 0;
903
+ ret.thinkingConfig.thinkingBudget = parameters.maxReasoningTokens;
904
+ ret.thinkingConfig.includeThoughts = includeThoughts;
905
+ }
906
+ if (typeof parameters.reasoningLevel !== "undefined") {
907
+ const levelMap = {
908
+ low: "LOW",
909
+ medium: "MEDIUM",
910
+ high: "HIGH"
911
+ };
912
+ ret.thinkingConfig.thinkingLevel = levelMap[parameters.reasoningLevel];
913
+ }
914
+ if (typeof parameters.thinkingLevel !== "undefined") ret.thinkingConfig.thinkingLevel = parameters.thinkingLevel;
905
915
  }
906
916
  let attribute;
907
917
  for (attribute in ret) if (ret[attribute] === void 0) delete ret[attribute];