@langchain/google-common 2.1.30 → 2.2.0
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.
- package/CHANGELOG.md +22 -0
- package/README.md +2 -7
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/chat_models.cjs +21 -11
- package/dist/chat_models.cjs.map +1 -1
- package/dist/chat_models.d.cts +2 -0
- package/dist/chat_models.d.cts.map +1 -1
- package/dist/chat_models.d.ts +2 -0
- package/dist/chat_models.d.ts.map +1 -1
- package/dist/chat_models.js +21 -11
- package/dist/chat_models.js.map +1 -1
- package/dist/connection.cjs.map +1 -1
- package/dist/connection.js.map +1 -1
- package/dist/embeddings.cjs.map +1 -1
- package/dist/embeddings.js.map +1 -1
- package/dist/experimental/media.cjs.map +1 -1
- package/dist/experimental/media.js.map +1 -1
- package/dist/experimental/utils/media_core.cjs.map +1 -1
- package/dist/experimental/utils/media_core.js.map +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/llms.cjs +1 -1
- package/dist/llms.cjs.map +1 -1
- package/dist/llms.js +1 -1
- package/dist/llms.js.map +1 -1
- package/dist/output_parsers.cjs.map +1 -1
- package/dist/output_parsers.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +9 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/anthropic.cjs.map +1 -1
- package/dist/utils/anthropic.js.map +1 -1
- package/dist/utils/common.cjs.map +1 -1
- package/dist/utils/common.js.map +1 -1
- package/dist/utils/gemini.cjs +31 -8
- package/dist/utils/gemini.cjs.map +1 -1
- package/dist/utils/gemini.d.cts.map +1 -1
- package/dist/utils/gemini.d.ts.map +1 -1
- package/dist/utils/gemini.js +31 -8
- package/dist/utils/gemini.js.map +1 -1
- package/dist/utils/stream.cjs.map +1 -1
- package/dist/utils/stream.js.map +1 -1
- package/dist/utils/stream_events.cjs +173 -0
- package/dist/utils/stream_events.cjs.map +1 -0
- package/dist/utils/stream_events.d.cts +11 -0
- package/dist/utils/stream_events.d.cts.map +1 -0
- package/dist/utils/stream_events.d.ts +11 -0
- package/dist/utils/stream_events.d.ts.map +1 -0
- package/dist/utils/stream_events.js +173 -0
- package/dist/utils/stream_events.js.map +1 -0
- package/dist/utils/zod_to_gemini_parameters.cjs.map +1 -1
- package/dist/utils/zod_to_gemini_parameters.js.map +1 -1
- package/package.json +5 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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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"}
|
|
1
|
+
{"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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"}
|
package/dist/utils/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":[],"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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"}
|
|
1
|
+
{"version":3,"file":"common.js","names":[],"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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"}
|
package/dist/utils/gemini.cjs
CHANGED
|
@@ -386,10 +386,10 @@ function getGeminiAPI(config) {
|
|
|
386
386
|
return config?.useSystemInstruction ? roleMessageToContent("system", message) : [...await roleMessageToContent("user", message), ...await roleMessageToContent("model", new _langchain_core_messages.AIMessage("Ok"))];
|
|
387
387
|
}
|
|
388
388
|
function toolMessageToContent(message, prevMessage) {
|
|
389
|
-
const contentStr = typeof message.content === "string" ? message.content : message.content.reduce((acc, content) => {
|
|
389
|
+
const contentStr = typeof message.content === "string" ? message.content : Array.isArray(message.content) ? message.content.reduce((acc, content) => {
|
|
390
390
|
if (content.type === "text") return acc + content.text;
|
|
391
391
|
else return acc;
|
|
392
|
-
}, "");
|
|
392
|
+
}, "") : JSON.stringify(message.content);
|
|
393
393
|
const responseName = ((0, _langchain_core_messages.isAIMessage)(prevMessage) && !!prevMessage.tool_calls?.length ? prevMessage.tool_calls[0].name : prevMessage.name) ?? message.tool_call_id;
|
|
394
394
|
try {
|
|
395
395
|
return [{
|
|
@@ -961,27 +961,50 @@ function getGeminiAPI(config) {
|
|
|
961
961
|
if (langChainTools.length > 0) result.push({ functionDeclarations: langChainTools.map(structuredToolToFunctionDeclaration) });
|
|
962
962
|
return result;
|
|
963
963
|
}
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
964
|
+
/**
|
|
965
|
+
* Checks whether the tools array contains a mix of server-side built-in
|
|
966
|
+
* tools (e.g. googleSearch, codeExecution) and function declarations.
|
|
967
|
+
* The Gemini API requires `toolConfig.includeServerSideToolInvocations`
|
|
968
|
+
* in that case, otherwise it returns HTTP 400.
|
|
969
|
+
* See https://ai.google.dev/gemini-api/docs/tool-combination
|
|
970
|
+
*/
|
|
971
|
+
function mixesBuiltinAndFunctionTools(tools) {
|
|
972
|
+
let hasBuiltin = false;
|
|
973
|
+
let hasFunctionDeclarations = false;
|
|
974
|
+
for (const tool of tools) {
|
|
975
|
+
if (tool.functionDeclarations && tool.functionDeclarations.length > 0) hasFunctionDeclarations = true;
|
|
976
|
+
else hasBuiltin = true;
|
|
977
|
+
if (hasBuiltin && hasFunctionDeclarations) return true;
|
|
978
|
+
}
|
|
979
|
+
return false;
|
|
980
|
+
}
|
|
981
|
+
function formatToolConfig(parameters, tools) {
|
|
982
|
+
const needsServerSideToolInvocations = tools && tools.length > 1 && mixesBuiltinAndFunctionTools(tools);
|
|
983
|
+
let config;
|
|
984
|
+
if (parameters.tool_choice && typeof parameters.tool_choice === "string") if ([
|
|
967
985
|
"auto",
|
|
968
986
|
"any",
|
|
969
987
|
"none"
|
|
970
|
-
].includes(parameters.tool_choice))
|
|
988
|
+
].includes(parameters.tool_choice)) config = { functionCallingConfig: {
|
|
971
989
|
mode: parameters.tool_choice,
|
|
972
990
|
allowedFunctionNames: parameters.allowed_function_names
|
|
973
991
|
} };
|
|
974
|
-
|
|
992
|
+
else config = { functionCallingConfig: {
|
|
975
993
|
mode: "any",
|
|
976
994
|
allowedFunctionNames: [parameters.tool_choice]
|
|
977
995
|
} };
|
|
996
|
+
if (needsServerSideToolInvocations) {
|
|
997
|
+
config = config ?? {};
|
|
998
|
+
config.includeServerSideToolInvocations = true;
|
|
999
|
+
}
|
|
1000
|
+
return config;
|
|
978
1001
|
}
|
|
979
1002
|
async function formatData(input, parameters) {
|
|
980
1003
|
const typedInput = input;
|
|
981
1004
|
const contents = await formatContents(typedInput, parameters);
|
|
982
1005
|
const generationConfig = formatGenerationConfig(parameters);
|
|
983
1006
|
const tools = formatTools(parameters);
|
|
984
|
-
const toolConfig = formatToolConfig(parameters);
|
|
1007
|
+
const toolConfig = formatToolConfig(parameters, tools);
|
|
985
1008
|
const safetySettings = formatSafetySettings(parameters);
|
|
986
1009
|
const systemInstruction = await formatSystemInstruction(typedInput);
|
|
987
1010
|
const ret = {
|