@langchain/google-genai 2.1.24 → 2.1.26-dev-1773698445534

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.
@@ -2,7 +2,6 @@ import { GoogleGenerativeAI } from "@google/generative-ai";
2
2
  import { getEnvironmentVariable } from "@langchain/core/utils/env";
3
3
  import { Embeddings } from "@langchain/core/embeddings";
4
4
  import { chunkArray } from "@langchain/core/utils/chunk_array";
5
-
6
5
  //#region src/embeddings.ts
7
6
  /**
8
7
  * Class that extends the Embeddings class and provides methods for
@@ -88,7 +87,7 @@ var GoogleGenerativeAIEmbeddings = class extends Embeddings {
88
87
  return this.caller.call(this._embedDocumentsContent.bind(this), documents);
89
88
  }
90
89
  };
91
-
92
90
  //#endregion
93
91
  export { GoogleGenerativeAIEmbeddings };
92
+
94
93
  //# sourceMappingURL=embeddings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"embeddings.js","names":[],"sources":["../src/embeddings.ts"],"sourcesContent":["import { GoogleGenerativeAI, GenerativeModel } from \"@google/generative-ai\";\nimport type { TaskType, EmbedContentRequest } from \"@google/generative-ai\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Embeddings, EmbeddingsParams } from \"@langchain/core/embeddings\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\n\n/**\n * Interface that extends EmbeddingsParams and defines additional\n * parameters specific to the GoogleGenerativeAIEmbeddings class.\n */\nexport interface GoogleGenerativeAIEmbeddingsParams extends EmbeddingsParams {\n /**\n * Model Name to use\n *\n * Alias for `model`\n *\n * Note: The format must follow the pattern - `{model}`\n */\n modelName?: string;\n /**\n * Model Name to use\n *\n * Note: The format must follow the pattern - `{model}`\n */\n model?: string;\n\n /**\n * Type of task for which the embedding will be used\n *\n * Note: currently only supported by `embedding-001` model\n */\n taskType?: TaskType;\n\n /**\n * An optional title for the text. Only applicable when TaskType is\n * `RETRIEVAL_DOCUMENT`\n *\n * Note: currently only supported by `embedding-001` model\n */\n title?: string;\n\n /**\n * Whether to strip new lines from the input text. Default to true\n */\n stripNewLines?: boolean;\n\n /**\n * Google API key to use\n */\n apiKey?: string;\n\n /**\n * Google API base URL to use\n */\n baseUrl?: string;\n}\n\n/**\n * Class that extends the Embeddings class and provides methods for\n * generating embeddings using the Google Palm API.\n * @example\n * ```typescript\n * const model = new GoogleGenerativeAIEmbeddings({\n * apiKey: \"<YOUR API KEY>\",\n * modelName: \"embedding-001\",\n * });\n *\n * // Embed a single query\n * const res = await model.embedQuery(\n * \"What would be a good company name for a company that makes colorful socks?\"\n * );\n * console.log({ res });\n *\n * // Embed multiple documents\n * const documentRes = await model.embedDocuments([\"Hello world\", \"Bye bye\"]);\n * console.log({ documentRes });\n * ```\n */\nexport class GoogleGenerativeAIEmbeddings\n extends Embeddings\n implements GoogleGenerativeAIEmbeddingsParams\n{\n apiKey?: string;\n\n modelName = \"embedding-001\";\n\n model = \"embedding-001\";\n\n taskType?: TaskType;\n\n title?: string;\n\n stripNewLines = true;\n\n maxBatchSize = 100; // Max batch size for embedDocuments set by GenerativeModel client's batchEmbedContents call\n\n private client: GenerativeModel;\n\n constructor(fields?: GoogleGenerativeAIEmbeddingsParams) {\n super(fields ?? {});\n\n this.modelName =\n fields?.model?.replace(/^models\\//, \"\") ??\n fields?.modelName?.replace(/^models\\//, \"\") ??\n this.modelName;\n this.model = this.modelName;\n\n this.taskType = fields?.taskType ?? this.taskType;\n\n this.title = fields?.title ?? this.title;\n\n if (this.title && this.taskType !== \"RETRIEVAL_DOCUMENT\") {\n throw new Error(\n \"title can only be sepcified with TaskType.RETRIEVAL_DOCUMENT\"\n );\n }\n\n this.apiKey = fields?.apiKey ?? getEnvironmentVariable(\"GOOGLE_API_KEY\");\n if (!this.apiKey) {\n throw new Error(\n \"Please set an API key for Google GenerativeAI \" +\n \"in the environmentb variable GOOGLE_API_KEY \" +\n \"or in the `apiKey` field of the \" +\n \"GoogleGenerativeAIEmbeddings constructor\"\n );\n }\n\n this.client = new GoogleGenerativeAI(this.apiKey).getGenerativeModel(\n {\n model: this.model,\n },\n {\n baseUrl: fields?.baseUrl,\n }\n );\n }\n\n private _convertToContent(text: string): EmbedContentRequest {\n const cleanedText = this.stripNewLines ? text.replace(/\\n/g, \" \") : text;\n return {\n content: { role: \"user\", parts: [{ text: cleanedText }] },\n taskType: this.taskType,\n title: this.title,\n };\n }\n\n protected async _embedQueryContent(text: string): Promise<number[]> {\n const req = this._convertToContent(text);\n const res = await this.client.embedContent(req);\n return res.embedding.values ?? [];\n }\n\n protected async _embedDocumentsContent(\n documents: string[]\n ): Promise<number[][]> {\n const batchEmbedChunks: string[][] = chunkArray<string>(\n documents,\n this.maxBatchSize\n );\n\n const batchEmbedRequests = batchEmbedChunks.map((chunk) => ({\n requests: chunk.map((doc) => this._convertToContent(doc)),\n }));\n\n const responses = await Promise.allSettled(\n batchEmbedRequests.map((req) => this.client.batchEmbedContents(req))\n );\n\n const embeddings = responses.flatMap((res, idx) => {\n if (res.status === \"fulfilled\") {\n return res.value.embeddings.map((e) => e.values || []);\n } else {\n return Array(batchEmbedChunks[idx].length).fill([]);\n }\n });\n\n return embeddings;\n }\n\n /**\n * Method that takes a document as input and returns a promise that\n * resolves to an embedding for the document. It calls the _embedText\n * method with the document as the input.\n * @param document Document for which to generate an embedding.\n * @returns Promise that resolves to an embedding for the input document.\n */\n embedQuery(document: string): Promise<number[]> {\n return this.caller.call(this._embedQueryContent.bind(this), document);\n }\n\n /**\n * Method that takes an array of documents as input and returns a promise\n * that resolves to a 2D array of embeddings for each document. It calls\n * the _embedText method for each document in the array.\n * @param documents Array of documents for which to generate embeddings.\n * @returns Promise that resolves to a 2D array of embeddings for each input document.\n */\n embedDocuments(documents: string[]): Promise<number[][]> {\n return this.caller.call(this._embedDocumentsContent.bind(this), documents);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA,IAAa,+BAAb,cACU,WAEV;CACE;CAEA,YAAY;CAEZ,QAAQ;CAER;CAEA;CAEA,gBAAgB;CAEhB,eAAe;CAEf,AAAQ;CAER,YAAY,QAA6C;AACvD,QAAM,UAAU,EAAE,CAAC;AAEnB,OAAK,YACH,QAAQ,OAAO,QAAQ,aAAa,GAAG,IACvC,QAAQ,WAAW,QAAQ,aAAa,GAAG,IAC3C,KAAK;AACP,OAAK,QAAQ,KAAK;AAElB,OAAK,WAAW,QAAQ,YAAY,KAAK;AAEzC,OAAK,QAAQ,QAAQ,SAAS,KAAK;AAEnC,MAAI,KAAK,SAAS,KAAK,aAAa,qBAClC,OAAM,IAAI,MACR,+DACD;AAGH,OAAK,SAAS,QAAQ,UAAU,uBAAuB,iBAAiB;AACxE,MAAI,CAAC,KAAK,OACR,OAAM,IAAI,MACR,qKAID;AAGH,OAAK,SAAS,IAAI,mBAAmB,KAAK,OAAO,CAAC,mBAChD,EACE,OAAO,KAAK,OACb,EACD,EACE,SAAS,QAAQ,SAClB,CACF;;CAGH,AAAQ,kBAAkB,MAAmC;AAE3D,SAAO;GACL,SAAS;IAAE,MAAM;IAAQ,OAAO,CAAC,EAAE,MAFjB,KAAK,gBAAgB,KAAK,QAAQ,OAAO,IAAI,GAAG,MAEZ,CAAC;IAAE;GACzD,UAAU,KAAK;GACf,OAAO,KAAK;GACb;;CAGH,MAAgB,mBAAmB,MAAiC;EAClE,MAAM,MAAM,KAAK,kBAAkB,KAAK;AAExC,UADY,MAAM,KAAK,OAAO,aAAa,IAAI,EACpC,UAAU,UAAU,EAAE;;CAGnC,MAAgB,uBACd,WACqB;EACrB,MAAM,mBAA+B,WACnC,WACA,KAAK,aACN;EAED,MAAM,qBAAqB,iBAAiB,KAAK,WAAW,EAC1D,UAAU,MAAM,KAAK,QAAQ,KAAK,kBAAkB,IAAI,CAAC,EAC1D,EAAE;AAcH,UAZkB,MAAM,QAAQ,WAC9B,mBAAmB,KAAK,QAAQ,KAAK,OAAO,mBAAmB,IAAI,CAAC,CACrE,EAE4B,SAAS,KAAK,QAAQ;AACjD,OAAI,IAAI,WAAW,YACjB,QAAO,IAAI,MAAM,WAAW,KAAK,MAAM,EAAE,UAAU,EAAE,CAAC;OAEtD,QAAO,MAAM,iBAAiB,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;IAErD;;;;;;;;;CAYJ,WAAW,UAAqC;AAC9C,SAAO,KAAK,OAAO,KAAK,KAAK,mBAAmB,KAAK,KAAK,EAAE,SAAS;;;;;;;;;CAUvE,eAAe,WAA0C;AACvD,SAAO,KAAK,OAAO,KAAK,KAAK,uBAAuB,KAAK,KAAK,EAAE,UAAU"}
1
+ {"version":3,"file":"embeddings.js","names":[],"sources":["../src/embeddings.ts"],"sourcesContent":["import { GoogleGenerativeAI, GenerativeModel } from \"@google/generative-ai\";\nimport type { TaskType, EmbedContentRequest } from \"@google/generative-ai\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Embeddings, EmbeddingsParams } from \"@langchain/core/embeddings\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\n\n/**\n * Interface that extends EmbeddingsParams and defines additional\n * parameters specific to the GoogleGenerativeAIEmbeddings class.\n */\nexport interface GoogleGenerativeAIEmbeddingsParams extends EmbeddingsParams {\n /**\n * Model Name to use\n *\n * Alias for `model`\n *\n * Note: The format must follow the pattern - `{model}`\n */\n modelName?: string;\n /**\n * Model Name to use\n *\n * Note: The format must follow the pattern - `{model}`\n */\n model?: string;\n\n /**\n * Type of task for which the embedding will be used\n *\n * Note: currently only supported by `embedding-001` model\n */\n taskType?: TaskType;\n\n /**\n * An optional title for the text. Only applicable when TaskType is\n * `RETRIEVAL_DOCUMENT`\n *\n * Note: currently only supported by `embedding-001` model\n */\n title?: string;\n\n /**\n * Whether to strip new lines from the input text. Default to true\n */\n stripNewLines?: boolean;\n\n /**\n * Google API key to use\n */\n apiKey?: string;\n\n /**\n * Google API base URL to use\n */\n baseUrl?: string;\n}\n\n/**\n * Class that extends the Embeddings class and provides methods for\n * generating embeddings using the Google Palm API.\n * @example\n * ```typescript\n * const model = new GoogleGenerativeAIEmbeddings({\n * apiKey: \"<YOUR API KEY>\",\n * modelName: \"embedding-001\",\n * });\n *\n * // Embed a single query\n * const res = await model.embedQuery(\n * \"What would be a good company name for a company that makes colorful socks?\"\n * );\n * console.log({ res });\n *\n * // Embed multiple documents\n * const documentRes = await model.embedDocuments([\"Hello world\", \"Bye bye\"]);\n * console.log({ documentRes });\n * ```\n */\nexport class GoogleGenerativeAIEmbeddings\n extends Embeddings\n implements GoogleGenerativeAIEmbeddingsParams\n{\n apiKey?: string;\n\n modelName = \"embedding-001\";\n\n model = \"embedding-001\";\n\n taskType?: TaskType;\n\n title?: string;\n\n stripNewLines = true;\n\n maxBatchSize = 100; // Max batch size for embedDocuments set by GenerativeModel client's batchEmbedContents call\n\n private client: GenerativeModel;\n\n constructor(fields?: GoogleGenerativeAIEmbeddingsParams) {\n super(fields ?? {});\n\n this.modelName =\n fields?.model?.replace(/^models\\//, \"\") ??\n fields?.modelName?.replace(/^models\\//, \"\") ??\n this.modelName;\n this.model = this.modelName;\n\n this.taskType = fields?.taskType ?? this.taskType;\n\n this.title = fields?.title ?? this.title;\n\n if (this.title && this.taskType !== \"RETRIEVAL_DOCUMENT\") {\n throw new Error(\n \"title can only be sepcified with TaskType.RETRIEVAL_DOCUMENT\"\n );\n }\n\n this.apiKey = fields?.apiKey ?? getEnvironmentVariable(\"GOOGLE_API_KEY\");\n if (!this.apiKey) {\n throw new Error(\n \"Please set an API key for Google GenerativeAI \" +\n \"in the environmentb variable GOOGLE_API_KEY \" +\n \"or in the `apiKey` field of the \" +\n \"GoogleGenerativeAIEmbeddings constructor\"\n );\n }\n\n this.client = new GoogleGenerativeAI(this.apiKey).getGenerativeModel(\n {\n model: this.model,\n },\n {\n baseUrl: fields?.baseUrl,\n }\n );\n }\n\n private _convertToContent(text: string): EmbedContentRequest {\n const cleanedText = this.stripNewLines ? text.replace(/\\n/g, \" \") : text;\n return {\n content: { role: \"user\", parts: [{ text: cleanedText }] },\n taskType: this.taskType,\n title: this.title,\n };\n }\n\n protected async _embedQueryContent(text: string): Promise<number[]> {\n const req = this._convertToContent(text);\n const res = await this.client.embedContent(req);\n return res.embedding.values ?? [];\n }\n\n protected async _embedDocumentsContent(\n documents: string[]\n ): Promise<number[][]> {\n const batchEmbedChunks: string[][] = chunkArray<string>(\n documents,\n this.maxBatchSize\n );\n\n const batchEmbedRequests = batchEmbedChunks.map((chunk) => ({\n requests: chunk.map((doc) => this._convertToContent(doc)),\n }));\n\n const responses = await Promise.allSettled(\n batchEmbedRequests.map((req) => this.client.batchEmbedContents(req))\n );\n\n const embeddings = responses.flatMap((res, idx) => {\n if (res.status === \"fulfilled\") {\n return res.value.embeddings.map((e) => e.values || []);\n } else {\n return Array(batchEmbedChunks[idx].length).fill([]);\n }\n });\n\n return embeddings;\n }\n\n /**\n * Method that takes a document as input and returns a promise that\n * resolves to an embedding for the document. It calls the _embedText\n * method with the document as the input.\n * @param document Document for which to generate an embedding.\n * @returns Promise that resolves to an embedding for the input document.\n */\n embedQuery(document: string): Promise<number[]> {\n return this.caller.call(this._embedQueryContent.bind(this), document);\n }\n\n /**\n * Method that takes an array of documents as input and returns a promise\n * that resolves to a 2D array of embeddings for each document. It calls\n * the _embedText method for each document in the array.\n * @param documents Array of documents for which to generate embeddings.\n * @returns Promise that resolves to a 2D array of embeddings for each input document.\n */\n embedDocuments(documents: string[]): Promise<number[][]> {\n return this.caller.call(this._embedDocumentsContent.bind(this), documents);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA,IAAa,+BAAb,cACU,WAEV;CACE;CAEA,YAAY;CAEZ,QAAQ;CAER;CAEA;CAEA,gBAAgB;CAEhB,eAAe;CAEf;CAEA,YAAY,QAA6C;AACvD,QAAM,UAAU,EAAE,CAAC;AAEnB,OAAK,YACH,QAAQ,OAAO,QAAQ,aAAa,GAAG,IACvC,QAAQ,WAAW,QAAQ,aAAa,GAAG,IAC3C,KAAK;AACP,OAAK,QAAQ,KAAK;AAElB,OAAK,WAAW,QAAQ,YAAY,KAAK;AAEzC,OAAK,QAAQ,QAAQ,SAAS,KAAK;AAEnC,MAAI,KAAK,SAAS,KAAK,aAAa,qBAClC,OAAM,IAAI,MACR,+DACD;AAGH,OAAK,SAAS,QAAQ,UAAU,uBAAuB,iBAAiB;AACxE,MAAI,CAAC,KAAK,OACR,OAAM,IAAI,MACR,qKAID;AAGH,OAAK,SAAS,IAAI,mBAAmB,KAAK,OAAO,CAAC,mBAChD,EACE,OAAO,KAAK,OACb,EACD,EACE,SAAS,QAAQ,SAClB,CACF;;CAGH,kBAA0B,MAAmC;AAE3D,SAAO;GACL,SAAS;IAAE,MAAM;IAAQ,OAAO,CAAC,EAAE,MAFjB,KAAK,gBAAgB,KAAK,QAAQ,OAAO,IAAI,GAAG,MAEZ,CAAC;IAAE;GACzD,UAAU,KAAK;GACf,OAAO,KAAK;GACb;;CAGH,MAAgB,mBAAmB,MAAiC;EAClE,MAAM,MAAM,KAAK,kBAAkB,KAAK;AAExC,UADY,MAAM,KAAK,OAAO,aAAa,IAAI,EACpC,UAAU,UAAU,EAAE;;CAGnC,MAAgB,uBACd,WACqB;EACrB,MAAM,mBAA+B,WACnC,WACA,KAAK,aACN;EAED,MAAM,qBAAqB,iBAAiB,KAAK,WAAW,EAC1D,UAAU,MAAM,KAAK,QAAQ,KAAK,kBAAkB,IAAI,CAAC,EAC1D,EAAE;AAcH,UAZkB,MAAM,QAAQ,WAC9B,mBAAmB,KAAK,QAAQ,KAAK,OAAO,mBAAmB,IAAI,CAAC,CACrE,EAE4B,SAAS,KAAK,QAAQ;AACjD,OAAI,IAAI,WAAW,YACjB,QAAO,IAAI,MAAM,WAAW,KAAK,MAAM,EAAE,UAAU,EAAE,CAAC;OAEtD,QAAO,MAAM,iBAAiB,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;IAErD;;;;;;;;;CAYJ,WAAW,UAAqC;AAC9C,SAAO,KAAK,OAAO,KAAK,KAAK,mBAAmB,KAAK,KAAK,EAAE,SAAS;;;;;;;;;CAUvE,eAAe,WAA0C;AACvD,SAAO,KAAK,OAAO,KAAK,KAAK,uBAAuB,KAAK,KAAK,EAAE,UAAU"}
package/dist/index.cjs CHANGED
@@ -1,6 +1,5 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_chat_models = require('./chat_models.cjs');
3
- const require_embeddings = require('./embeddings.cjs');
4
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_chat_models = require("./chat_models.cjs");
3
+ const require_embeddings = require("./embeddings.cjs");
5
4
  exports.ChatGoogleGenerativeAI = require_chat_models.ChatGoogleGenerativeAI;
6
- exports.GoogleGenerativeAIEmbeddings = require_embeddings.GoogleGenerativeAIEmbeddings;
5
+ exports.GoogleGenerativeAIEmbeddings = require_embeddings.GoogleGenerativeAIEmbeddings;
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
1
  import { ChatGoogleGenerativeAI } from "./chat_models.js";
2
2
  import { GoogleGenerativeAIEmbeddings } from "./embeddings.js";
3
-
4
- export { ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings };
3
+ export { ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings };
@@ -1,6 +1,5 @@
1
1
  let _langchain_core_utils_types = require("@langchain/core/utils/types");
2
2
  let _langchain_core_output_parsers = require("@langchain/core/output_parsers");
3
-
4
3
  //#region src/output_parsers.ts
5
4
  var GoogleGenerativeAIToolsOutputParser = class extends _langchain_core_output_parsers.BaseLLMOutputParser {
6
5
  static lc_name() {
@@ -47,7 +46,7 @@ var GoogleGenerativeAIToolsOutputParser = class extends _langchain_core_output_p
47
46
  return await this._validateResult(tool.args);
48
47
  }
49
48
  };
50
-
51
49
  //#endregion
52
50
  exports.GoogleGenerativeAIToolsOutputParser = GoogleGenerativeAIToolsOutputParser;
51
+
53
52
  //# sourceMappingURL=output_parsers.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"output_parsers.cjs","names":["BaseLLMOutputParser","OutputParserException"],"sources":["../src/output_parsers.ts"],"sourcesContent":["import {\n BaseLLMOutputParser,\n OutputParserException,\n} from \"@langchain/core/output_parsers\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { ToolCall } from \"@langchain/core/messages/tool\";\nimport {\n InteropZodType,\n interopSafeParseAsync,\n} from \"@langchain/core/utils/types\";\nimport {\n JsonOutputKeyToolsParserParamsInterop,\n JsonOutputKeyToolsParserParamsSerializable,\n} from \"@langchain/core/output_parsers/openai_tools\";\nimport { SerializableSchema } from \"@langchain/core/utils/standard_schema\";\n\ninterface GoogleGenerativeAIToolsOutputParserParams<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any>,\n>\n extends\n JsonOutputKeyToolsParserParamsInterop<T>,\n JsonOutputKeyToolsParserParamsSerializable<T> {}\n\nexport class GoogleGenerativeAIToolsOutputParser<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> extends BaseLLMOutputParser<T> {\n static lc_name() {\n return \"GoogleGenerativeAIToolsOutputParser\";\n }\n\n lc_namespace = [\"langchain\", \"google_genai\", \"output_parsers\"];\n\n returnId = false;\n\n /** The type of tool calls to return. */\n keyName: string;\n\n /** Whether to return only the first tool call. */\n returnSingle = false;\n\n zodSchema?: InteropZodType<T>;\n\n serializableSchema?: SerializableSchema<T>;\n\n constructor(params: GoogleGenerativeAIToolsOutputParserParams<T>) {\n super(params);\n this.keyName = params.keyName;\n this.returnSingle = params.returnSingle ?? this.returnSingle;\n this.zodSchema = params.zodSchema;\n this.serializableSchema = params.serializableSchema;\n }\n\n protected async _validateResult(result: unknown): Promise<T> {\n if (this.serializableSchema !== undefined) {\n const validated =\n await this.serializableSchema[\"~standard\"].validate(result);\n if (validated.issues) {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(validated.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n return validated.value as T;\n }\n if (this.zodSchema === undefined) {\n return result as T;\n }\n const zodParsedResult = await interopSafeParseAsync(this.zodSchema, result);\n if (zodParsedResult.success) {\n return zodParsedResult.data;\n } else {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(zodParsedResult.error.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n }\n\n async parseResult(generations: ChatGeneration[]): Promise<T> {\n const tools = generations.flatMap((generation) => {\n const { message } = generation;\n if (!(\"tool_calls\" in message) || !Array.isArray(message.tool_calls)) {\n return [];\n }\n return message.tool_calls as ToolCall[];\n });\n if (tools[0] === undefined) {\n throw new Error(\n \"No parseable tool calls provided to GoogleGenerativeAIToolsOutputParser.\"\n );\n }\n const [tool] = tools;\n const validatedResult = await this._validateResult(tool.args);\n return validatedResult;\n }\n}\n"],"mappings":";;;;AAwBA,IAAa,sCAAb,cAGUA,mDAAuB;CAC/B,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAgB;EAAiB;CAE9D,WAAW;;CAGX;;CAGA,eAAe;CAEf;CAEA;CAEA,YAAY,QAAsD;AAChE,QAAM,OAAO;AACb,OAAK,UAAU,OAAO;AACtB,OAAK,eAAe,OAAO,gBAAgB,KAAK;AAChD,OAAK,YAAY,OAAO;AACxB,OAAK,qBAAqB,OAAO;;CAGnC,MAAgB,gBAAgB,QAA6B;AAC3D,MAAI,KAAK,uBAAuB,QAAW;GACzC,MAAM,YACJ,MAAM,KAAK,mBAAmB,aAAa,SAAS,OAAO;AAC7D,OAAI,UAAU,OACZ,OAAM,IAAIC,qDACR,2BAA2B,KAAK,UAC9B,QACA,MACA,EACD,CAAC,YAAY,KAAK,UAAU,UAAU,OAAO,IAC9C,KAAK,UAAU,QAAQ,MAAM,EAAE,CAChC;AAEH,UAAO,UAAU;;AAEnB,MAAI,KAAK,cAAc,OACrB,QAAO;EAET,MAAM,kBAAkB,6DAA4B,KAAK,WAAW,OAAO;AAC3E,MAAI,gBAAgB,QAClB,QAAO,gBAAgB;MAEvB,OAAM,IAAIA,qDACR,2BAA2B,KAAK,UAC9B,QACA,MACA,EACD,CAAC,YAAY,KAAK,UAAU,gBAAgB,MAAM,OAAO,IAC1D,KAAK,UAAU,QAAQ,MAAM,EAAE,CAChC;;CAIL,MAAM,YAAY,aAA2C;EAC3D,MAAM,QAAQ,YAAY,SAAS,eAAe;GAChD,MAAM,EAAE,YAAY;AACpB,OAAI,EAAE,gBAAgB,YAAY,CAAC,MAAM,QAAQ,QAAQ,WAAW,CAClE,QAAO,EAAE;AAEX,UAAO,QAAQ;IACf;AACF,MAAI,MAAM,OAAO,OACf,OAAM,IAAI,MACR,2EACD;EAEH,MAAM,CAAC,QAAQ;AAEf,SADwB,MAAM,KAAK,gBAAgB,KAAK,KAAK"}
1
+ {"version":3,"file":"output_parsers.cjs","names":["BaseLLMOutputParser","OutputParserException"],"sources":["../src/output_parsers.ts"],"sourcesContent":["import {\n BaseLLMOutputParser,\n OutputParserException,\n} from \"@langchain/core/output_parsers\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { ToolCall } from \"@langchain/core/messages/tool\";\nimport {\n InteropZodType,\n interopSafeParseAsync,\n} from \"@langchain/core/utils/types\";\nimport {\n JsonOutputKeyToolsParserParamsInterop,\n JsonOutputKeyToolsParserParamsSerializable,\n} from \"@langchain/core/output_parsers/openai_tools\";\nimport { SerializableSchema } from \"@langchain/core/utils/standard_schema\";\n\ninterface GoogleGenerativeAIToolsOutputParserParams<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any>,\n>\n extends\n JsonOutputKeyToolsParserParamsInterop<T>,\n JsonOutputKeyToolsParserParamsSerializable<T> {}\n\nexport class GoogleGenerativeAIToolsOutputParser<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> extends BaseLLMOutputParser<T> {\n static lc_name() {\n return \"GoogleGenerativeAIToolsOutputParser\";\n }\n\n lc_namespace = [\"langchain\", \"google_genai\", \"output_parsers\"];\n\n returnId = false;\n\n /** The type of tool calls to return. */\n keyName: string;\n\n /** Whether to return only the first tool call. */\n returnSingle = false;\n\n zodSchema?: InteropZodType<T>;\n\n serializableSchema?: SerializableSchema<T>;\n\n constructor(params: GoogleGenerativeAIToolsOutputParserParams<T>) {\n super(params);\n this.keyName = params.keyName;\n this.returnSingle = params.returnSingle ?? this.returnSingle;\n this.zodSchema = params.zodSchema;\n this.serializableSchema = params.serializableSchema;\n }\n\n protected async _validateResult(result: unknown): Promise<T> {\n if (this.serializableSchema !== undefined) {\n const validated =\n await this.serializableSchema[\"~standard\"].validate(result);\n if (validated.issues) {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(validated.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n return validated.value as T;\n }\n if (this.zodSchema === undefined) {\n return result as T;\n }\n const zodParsedResult = await interopSafeParseAsync(this.zodSchema, result);\n if (zodParsedResult.success) {\n return zodParsedResult.data;\n } else {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(zodParsedResult.error.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n }\n\n async parseResult(generations: ChatGeneration[]): Promise<T> {\n const tools = generations.flatMap((generation) => {\n const { message } = generation;\n if (!(\"tool_calls\" in message) || !Array.isArray(message.tool_calls)) {\n return [];\n }\n return message.tool_calls as ToolCall[];\n });\n if (tools[0] === undefined) {\n throw new Error(\n \"No parseable tool calls provided to GoogleGenerativeAIToolsOutputParser.\"\n );\n }\n const [tool] = tools;\n const validatedResult = await this._validateResult(tool.args);\n return validatedResult;\n }\n}\n"],"mappings":";;;AAwBA,IAAa,sCAAb,cAGUA,+BAAAA,oBAAuB;CAC/B,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAgB;EAAiB;CAE9D,WAAW;;CAGX;;CAGA,eAAe;CAEf;CAEA;CAEA,YAAY,QAAsD;AAChE,QAAM,OAAO;AACb,OAAK,UAAU,OAAO;AACtB,OAAK,eAAe,OAAO,gBAAgB,KAAK;AAChD,OAAK,YAAY,OAAO;AACxB,OAAK,qBAAqB,OAAO;;CAGnC,MAAgB,gBAAgB,QAA6B;AAC3D,MAAI,KAAK,uBAAuB,KAAA,GAAW;GACzC,MAAM,YACJ,MAAM,KAAK,mBAAmB,aAAa,SAAS,OAAO;AAC7D,OAAI,UAAU,OACZ,OAAM,IAAIC,+BAAAA,sBACR,2BAA2B,KAAK,UAC9B,QACA,MACA,EACD,CAAC,YAAY,KAAK,UAAU,UAAU,OAAO,IAC9C,KAAK,UAAU,QAAQ,MAAM,EAAE,CAChC;AAEH,UAAO,UAAU;;AAEnB,MAAI,KAAK,cAAc,KAAA,EACrB,QAAO;EAET,MAAM,kBAAkB,OAAA,GAAA,4BAAA,uBAA4B,KAAK,WAAW,OAAO;AAC3E,MAAI,gBAAgB,QAClB,QAAO,gBAAgB;MAEvB,OAAM,IAAIA,+BAAAA,sBACR,2BAA2B,KAAK,UAC9B,QACA,MACA,EACD,CAAC,YAAY,KAAK,UAAU,gBAAgB,MAAM,OAAO,IAC1D,KAAK,UAAU,QAAQ,MAAM,EAAE,CAChC;;CAIL,MAAM,YAAY,aAA2C;EAC3D,MAAM,QAAQ,YAAY,SAAS,eAAe;GAChD,MAAM,EAAE,YAAY;AACpB,OAAI,EAAE,gBAAgB,YAAY,CAAC,MAAM,QAAQ,QAAQ,WAAW,CAClE,QAAO,EAAE;AAEX,UAAO,QAAQ;IACf;AACF,MAAI,MAAM,OAAO,KAAA,EACf,OAAM,IAAI,MACR,2EACD;EAEH,MAAM,CAAC,QAAQ;AAEf,SADwB,MAAM,KAAK,gBAAgB,KAAK,KAAK"}
@@ -1,6 +1,5 @@
1
1
  import { interopSafeParseAsync } from "@langchain/core/utils/types";
2
2
  import { BaseLLMOutputParser, OutputParserException } from "@langchain/core/output_parsers";
3
-
4
3
  //#region src/output_parsers.ts
5
4
  var GoogleGenerativeAIToolsOutputParser = class extends BaseLLMOutputParser {
6
5
  static lc_name() {
@@ -47,7 +46,7 @@ var GoogleGenerativeAIToolsOutputParser = class extends BaseLLMOutputParser {
47
46
  return await this._validateResult(tool.args);
48
47
  }
49
48
  };
50
-
51
49
  //#endregion
52
50
  export { GoogleGenerativeAIToolsOutputParser };
51
+
53
52
  //# sourceMappingURL=output_parsers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output_parsers.js","names":[],"sources":["../src/output_parsers.ts"],"sourcesContent":["import {\n BaseLLMOutputParser,\n OutputParserException,\n} from \"@langchain/core/output_parsers\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { ToolCall } from \"@langchain/core/messages/tool\";\nimport {\n InteropZodType,\n interopSafeParseAsync,\n} from \"@langchain/core/utils/types\";\nimport {\n JsonOutputKeyToolsParserParamsInterop,\n JsonOutputKeyToolsParserParamsSerializable,\n} from \"@langchain/core/output_parsers/openai_tools\";\nimport { SerializableSchema } from \"@langchain/core/utils/standard_schema\";\n\ninterface GoogleGenerativeAIToolsOutputParserParams<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any>,\n>\n extends\n JsonOutputKeyToolsParserParamsInterop<T>,\n JsonOutputKeyToolsParserParamsSerializable<T> {}\n\nexport class GoogleGenerativeAIToolsOutputParser<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> extends BaseLLMOutputParser<T> {\n static lc_name() {\n return \"GoogleGenerativeAIToolsOutputParser\";\n }\n\n lc_namespace = [\"langchain\", \"google_genai\", \"output_parsers\"];\n\n returnId = false;\n\n /** The type of tool calls to return. */\n keyName: string;\n\n /** Whether to return only the first tool call. */\n returnSingle = false;\n\n zodSchema?: InteropZodType<T>;\n\n serializableSchema?: SerializableSchema<T>;\n\n constructor(params: GoogleGenerativeAIToolsOutputParserParams<T>) {\n super(params);\n this.keyName = params.keyName;\n this.returnSingle = params.returnSingle ?? this.returnSingle;\n this.zodSchema = params.zodSchema;\n this.serializableSchema = params.serializableSchema;\n }\n\n protected async _validateResult(result: unknown): Promise<T> {\n if (this.serializableSchema !== undefined) {\n const validated =\n await this.serializableSchema[\"~standard\"].validate(result);\n if (validated.issues) {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(validated.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n return validated.value as T;\n }\n if (this.zodSchema === undefined) {\n return result as T;\n }\n const zodParsedResult = await interopSafeParseAsync(this.zodSchema, result);\n if (zodParsedResult.success) {\n return zodParsedResult.data;\n } else {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(zodParsedResult.error.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n }\n\n async parseResult(generations: ChatGeneration[]): Promise<T> {\n const tools = generations.flatMap((generation) => {\n const { message } = generation;\n if (!(\"tool_calls\" in message) || !Array.isArray(message.tool_calls)) {\n return [];\n }\n return message.tool_calls as ToolCall[];\n });\n if (tools[0] === undefined) {\n throw new Error(\n \"No parseable tool calls provided to GoogleGenerativeAIToolsOutputParser.\"\n );\n }\n const [tool] = tools;\n const validatedResult = await this._validateResult(tool.args);\n return validatedResult;\n }\n}\n"],"mappings":";;;;AAwBA,IAAa,sCAAb,cAGU,oBAAuB;CAC/B,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAgB;EAAiB;CAE9D,WAAW;;CAGX;;CAGA,eAAe;CAEf;CAEA;CAEA,YAAY,QAAsD;AAChE,QAAM,OAAO;AACb,OAAK,UAAU,OAAO;AACtB,OAAK,eAAe,OAAO,gBAAgB,KAAK;AAChD,OAAK,YAAY,OAAO;AACxB,OAAK,qBAAqB,OAAO;;CAGnC,MAAgB,gBAAgB,QAA6B;AAC3D,MAAI,KAAK,uBAAuB,QAAW;GACzC,MAAM,YACJ,MAAM,KAAK,mBAAmB,aAAa,SAAS,OAAO;AAC7D,OAAI,UAAU,OACZ,OAAM,IAAI,sBACR,2BAA2B,KAAK,UAC9B,QACA,MACA,EACD,CAAC,YAAY,KAAK,UAAU,UAAU,OAAO,IAC9C,KAAK,UAAU,QAAQ,MAAM,EAAE,CAChC;AAEH,UAAO,UAAU;;AAEnB,MAAI,KAAK,cAAc,OACrB,QAAO;EAET,MAAM,kBAAkB,MAAM,sBAAsB,KAAK,WAAW,OAAO;AAC3E,MAAI,gBAAgB,QAClB,QAAO,gBAAgB;MAEvB,OAAM,IAAI,sBACR,2BAA2B,KAAK,UAC9B,QACA,MACA,EACD,CAAC,YAAY,KAAK,UAAU,gBAAgB,MAAM,OAAO,IAC1D,KAAK,UAAU,QAAQ,MAAM,EAAE,CAChC;;CAIL,MAAM,YAAY,aAA2C;EAC3D,MAAM,QAAQ,YAAY,SAAS,eAAe;GAChD,MAAM,EAAE,YAAY;AACpB,OAAI,EAAE,gBAAgB,YAAY,CAAC,MAAM,QAAQ,QAAQ,WAAW,CAClE,QAAO,EAAE;AAEX,UAAO,QAAQ;IACf;AACF,MAAI,MAAM,OAAO,OACf,OAAM,IAAI,MACR,2EACD;EAEH,MAAM,CAAC,QAAQ;AAEf,SADwB,MAAM,KAAK,gBAAgB,KAAK,KAAK"}
1
+ {"version":3,"file":"output_parsers.js","names":[],"sources":["../src/output_parsers.ts"],"sourcesContent":["import {\n BaseLLMOutputParser,\n OutputParserException,\n} from \"@langchain/core/output_parsers\";\nimport { ChatGeneration } from \"@langchain/core/outputs\";\nimport { ToolCall } from \"@langchain/core/messages/tool\";\nimport {\n InteropZodType,\n interopSafeParseAsync,\n} from \"@langchain/core/utils/types\";\nimport {\n JsonOutputKeyToolsParserParamsInterop,\n JsonOutputKeyToolsParserParamsSerializable,\n} from \"@langchain/core/output_parsers/openai_tools\";\nimport { SerializableSchema } from \"@langchain/core/utils/standard_schema\";\n\ninterface GoogleGenerativeAIToolsOutputParserParams<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any>,\n>\n extends\n JsonOutputKeyToolsParserParamsInterop<T>,\n JsonOutputKeyToolsParserParamsSerializable<T> {}\n\nexport class GoogleGenerativeAIToolsOutputParser<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>,\n> extends BaseLLMOutputParser<T> {\n static lc_name() {\n return \"GoogleGenerativeAIToolsOutputParser\";\n }\n\n lc_namespace = [\"langchain\", \"google_genai\", \"output_parsers\"];\n\n returnId = false;\n\n /** The type of tool calls to return. */\n keyName: string;\n\n /** Whether to return only the first tool call. */\n returnSingle = false;\n\n zodSchema?: InteropZodType<T>;\n\n serializableSchema?: SerializableSchema<T>;\n\n constructor(params: GoogleGenerativeAIToolsOutputParserParams<T>) {\n super(params);\n this.keyName = params.keyName;\n this.returnSingle = params.returnSingle ?? this.returnSingle;\n this.zodSchema = params.zodSchema;\n this.serializableSchema = params.serializableSchema;\n }\n\n protected async _validateResult(result: unknown): Promise<T> {\n if (this.serializableSchema !== undefined) {\n const validated =\n await this.serializableSchema[\"~standard\"].validate(result);\n if (validated.issues) {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(validated.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n return validated.value as T;\n }\n if (this.zodSchema === undefined) {\n return result as T;\n }\n const zodParsedResult = await interopSafeParseAsync(this.zodSchema, result);\n if (zodParsedResult.success) {\n return zodParsedResult.data;\n } else {\n throw new OutputParserException(\n `Failed to parse. Text: \"${JSON.stringify(\n result,\n null,\n 2\n )}\". Error: ${JSON.stringify(zodParsedResult.error.issues)}`,\n JSON.stringify(result, null, 2)\n );\n }\n }\n\n async parseResult(generations: ChatGeneration[]): Promise<T> {\n const tools = generations.flatMap((generation) => {\n const { message } = generation;\n if (!(\"tool_calls\" in message) || !Array.isArray(message.tool_calls)) {\n return [];\n }\n return message.tool_calls as ToolCall[];\n });\n if (tools[0] === undefined) {\n throw new Error(\n \"No parseable tool calls provided to GoogleGenerativeAIToolsOutputParser.\"\n );\n }\n const [tool] = tools;\n const validatedResult = await this._validateResult(tool.args);\n return validatedResult;\n }\n}\n"],"mappings":";;;AAwBA,IAAa,sCAAb,cAGU,oBAAuB;CAC/B,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAgB;EAAiB;CAE9D,WAAW;;CAGX;;CAGA,eAAe;CAEf;CAEA;CAEA,YAAY,QAAsD;AAChE,QAAM,OAAO;AACb,OAAK,UAAU,OAAO;AACtB,OAAK,eAAe,OAAO,gBAAgB,KAAK;AAChD,OAAK,YAAY,OAAO;AACxB,OAAK,qBAAqB,OAAO;;CAGnC,MAAgB,gBAAgB,QAA6B;AAC3D,MAAI,KAAK,uBAAuB,KAAA,GAAW;GACzC,MAAM,YACJ,MAAM,KAAK,mBAAmB,aAAa,SAAS,OAAO;AAC7D,OAAI,UAAU,OACZ,OAAM,IAAI,sBACR,2BAA2B,KAAK,UAC9B,QACA,MACA,EACD,CAAC,YAAY,KAAK,UAAU,UAAU,OAAO,IAC9C,KAAK,UAAU,QAAQ,MAAM,EAAE,CAChC;AAEH,UAAO,UAAU;;AAEnB,MAAI,KAAK,cAAc,KAAA,EACrB,QAAO;EAET,MAAM,kBAAkB,MAAM,sBAAsB,KAAK,WAAW,OAAO;AAC3E,MAAI,gBAAgB,QAClB,QAAO,gBAAgB;MAEvB,OAAM,IAAI,sBACR,2BAA2B,KAAK,UAC9B,QACA,MACA,EACD,CAAC,YAAY,KAAK,UAAU,gBAAgB,MAAM,OAAO,IAC1D,KAAK,UAAU,QAAQ,MAAM,EAAE,CAChC;;CAIL,MAAM,YAAY,aAA2C;EAC3D,MAAM,QAAQ,YAAY,SAAS,eAAe;GAChD,MAAM,EAAE,YAAY;AACpB,OAAI,EAAE,gBAAgB,YAAY,CAAC,MAAM,QAAQ,QAAQ,WAAW,CAClE,QAAO,EAAE;AAEX,UAAO,QAAQ;IACf;AACF,MAAI,MAAM,OAAO,KAAA,EACf,OAAM,IAAI,MACR,2EACD;EAEH,MAAM,CAAC,QAAQ;AAEf,SADwB,MAAM,KAAK,gBAAgB,KAAK,KAAK"}
package/dist/profiles.cjs CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/profiles.ts
3
2
  const PROFILES = {
4
3
  "gemini-embedding-001": {
@@ -366,7 +365,7 @@ const PROFILES = {
366
365
  structuredOutput: false
367
366
  }
368
367
  };
369
-
370
368
  //#endregion
371
369
  exports.default = PROFILES;
370
+
372
371
  //# sourceMappingURL=profiles.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.cjs","names":[],"sources":["../src/profiles.ts"],"sourcesContent":["/**\n * This file was automatically generated by an automated script. Do not edit manually.\n */\nimport type { ModelProfile } from \"@langchain/core/language_models/profile\";\nconst PROFILES: Record<string, ModelProfile> = {\n \"gemini-embedding-001\": {\n maxInputTokens: 2048,\n imageInputs: false,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 3072,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-lite-preview-09-2025\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-pro-preview-06-05\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash-preview-04-17\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-preview-09-2025\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-pro-preview-05-06\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash-preview-05-20\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-live-2.5-flash\": {\n maxInputTokens: 128000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 8000,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: true,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-3-flash-preview\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-live-2.5-flash-preview-native-audio\": {\n maxInputTokens: 131072,\n imageInputs: false,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: true,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-lite\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash-preview-tts\": {\n maxInputTokens: 8000,\n imageInputs: false,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 16000,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: true,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-flash-latest\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash-lite-preview-06-17\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-image\": {\n maxInputTokens: 32768,\n imageInputs: true,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 32768,\n reasoningOutput: true,\n imageOutputs: true,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-2.5-pro-preview-tts\": {\n maxInputTokens: 8000,\n imageInputs: false,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 16000,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: true,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-image-preview\": {\n maxInputTokens: 32768,\n imageInputs: true,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 32768,\n reasoningOutput: true,\n imageOutputs: true,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-1.5-flash-8b\": {\n maxInputTokens: 1000000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-3-pro-preview\": {\n maxInputTokens: 1000000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 64000,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.0-flash-lite\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-1.5-flash\": {\n maxInputTokens: 1000000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-flash-lite-latest\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-pro\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.0-flash\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-1.5-pro\": {\n maxInputTokens: 1000000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n};\nexport default PROFILES;\n"],"mappings":";;AAIA,MAAM,WAAyC;CAC7C,wBAAwB;EACtB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,yCAAyC;EACvC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,gCAAgC;EAC9B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kCAAkC;EAChC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,oCAAoC;EAClC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,gCAAgC;EAC9B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kCAAkC;EAChC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,oBAAoB;EAClB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,yBAAyB;EACvB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,0BAA0B;EACxB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,8CAA8C;EAC5C,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,yBAAyB;EACvB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,gCAAgC;EAC9B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,uBAAuB;EACrB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,uCAAuC;EACrC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,0BAA0B;EACxB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,8BAA8B;EAC5B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kCAAkC;EAChC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,uBAAuB;EACrB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,wBAAwB;EACtB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,yBAAyB;EACvB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,oBAAoB;EAClB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,4BAA4B;EAC1B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kBAAkB;EAChB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,oBAAoB;EAClB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kBAAkB;EAChB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACF"}
1
+ {"version":3,"file":"profiles.cjs","names":[],"sources":["../src/profiles.ts"],"sourcesContent":["/**\n * This file was automatically generated by an automated script. Do not edit manually.\n */\nimport type { ModelProfile } from \"@langchain/core/language_models/profile\";\nconst PROFILES: Record<string, ModelProfile> = {\n \"gemini-embedding-001\": {\n maxInputTokens: 2048,\n imageInputs: false,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 3072,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-lite-preview-09-2025\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-pro-preview-06-05\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash-preview-04-17\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-preview-09-2025\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-pro-preview-05-06\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash-preview-05-20\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-live-2.5-flash\": {\n maxInputTokens: 128000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 8000,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: true,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-3-flash-preview\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-live-2.5-flash-preview-native-audio\": {\n maxInputTokens: 131072,\n imageInputs: false,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: true,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-lite\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash-preview-tts\": {\n maxInputTokens: 8000,\n imageInputs: false,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 16000,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: true,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-flash-latest\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-flash-lite-preview-06-17\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-image\": {\n maxInputTokens: 32768,\n imageInputs: true,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 32768,\n reasoningOutput: true,\n imageOutputs: true,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-2.5-pro-preview-tts\": {\n maxInputTokens: 8000,\n imageInputs: false,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 16000,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: true,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-2.5-flash-image-preview\": {\n maxInputTokens: 32768,\n imageInputs: true,\n audioInputs: false,\n pdfInputs: false,\n videoInputs: false,\n maxOutputTokens: 32768,\n reasoningOutput: true,\n imageOutputs: true,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: false,\n structuredOutput: false,\n },\n \"gemini-1.5-flash-8b\": {\n maxInputTokens: 1000000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-3-pro-preview\": {\n maxInputTokens: 1000000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 64000,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.0-flash-lite\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-1.5-flash\": {\n maxInputTokens: 1000000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n \"gemini-flash-lite-latest\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.5-pro\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 65536,\n reasoningOutput: true,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-2.0-flash\": {\n maxInputTokens: 1048576,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: true,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: true,\n },\n \"gemini-1.5-pro\": {\n maxInputTokens: 1000000,\n imageInputs: true,\n audioInputs: true,\n pdfInputs: false,\n videoInputs: true,\n maxOutputTokens: 8192,\n reasoningOutput: false,\n imageOutputs: false,\n audioOutputs: false,\n videoOutputs: false,\n toolCalling: true,\n structuredOutput: false,\n },\n};\nexport default PROFILES;\n"],"mappings":";AAIA,MAAM,WAAyC;CAC7C,wBAAwB;EACtB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,yCAAyC;EACvC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,gCAAgC;EAC9B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kCAAkC;EAChC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,oCAAoC;EAClC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,gCAAgC;EAC9B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kCAAkC;EAChC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,oBAAoB;EAClB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,yBAAyB;EACvB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,0BAA0B;EACxB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,8CAA8C;EAC5C,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,yBAAyB;EACvB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,gCAAgC;EAC9B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,uBAAuB;EACrB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,uCAAuC;EACrC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,0BAA0B;EACxB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,8BAA8B;EAC5B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kCAAkC;EAChC,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,uBAAuB;EACrB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,wBAAwB;EACtB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,yBAAyB;EACvB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,oBAAoB;EAClB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,4BAA4B;EAC1B,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kBAAkB;EAChB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,oBAAoB;EAClB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACD,kBAAkB;EAChB,gBAAgB;EAChB,aAAa;EACb,aAAa;EACb,WAAW;EACX,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,cAAc;EACd,cAAc;EACd,aAAa;EACb,kBAAkB;EACnB;CACF"}
package/dist/profiles.js CHANGED
@@ -365,7 +365,7 @@ const PROFILES = {
365
365
  structuredOutput: false
366
366
  }
367
367
  };
368
-
369
368
  //#endregion
370
369
  export { PROFILES as default };
370
+
371
371
  //# sourceMappingURL=profiles.js.map
@@ -1,11 +1,10 @@
1
- const require_zod_to_genai_parameters = require('./zod_to_genai_parameters.cjs');
2
- const require_validate_schema = require('./validate_schema.cjs');
1
+ const require_zod_to_genai_parameters = require("./zod_to_genai_parameters.cjs");
2
+ const require_validate_schema = require("./validate_schema.cjs");
3
3
  let _langchain_core_messages = require("@langchain/core/messages");
4
4
  let _langchain_core_outputs = require("@langchain/core/outputs");
5
5
  let _langchain_core_utils_function_calling = require("@langchain/core/utils/function_calling");
6
6
  let _langchain_core_language_models_base = require("@langchain/core/language_models/base");
7
7
  let uuid = require("uuid");
8
-
9
8
  //#region src/utils/common.ts
10
9
  const _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY = "__gemini_function_call_thought_signatures__";
11
10
  const DUMMY_SIGNATURE = "ErYCCrMCAdHtim9kOoOkrPiCNVsmlpMIKd7ZMxgiFbVQOkgp7nlLcDMzVsZwIzvuT7nQROivoXA72ccC2lSDvR0Gh7dkWaGuj7ctv6t7ZceHnecx0QYa+ix8tYpRfjhyWozQ49lWiws6+YGjCt10KRTyWsZ2h6O7iHTYJwKIRwGUHRKy/qK/6kFxJm5ML00gLq4D8s5Z6DBpp2ZlR+uF4G8jJgeWQgyHWVdx2wGYElaceVAc66tZdPQRdOHpWtgYSI1YdaXgVI8KHY3/EfNc2YqqMIulvkDBAnuMhkAjV9xmBa54Tq+ih3Im4+r3DzqhGqYdsSkhS0kZMwte4Hjs65dZzCw9lANxIqYi1DJ639WNPYihp/DCJCos7o+/EeSPJaio5sgWDyUnMGkY1atsJZ+m7pj7DD5tvQ==";
@@ -51,6 +50,37 @@ function inferToolNameFromPreviousMessages(message, previousMessages) {
51
50
  return toolCall.id === message.tool_call_id;
52
51
  })?.name;
53
52
  }
53
+ /**
54
+ * Converts a ContentBlock.Multimodal block (image, video, audio, file)
55
+ * to the appropriate Google Generative AI Part format.
56
+ *
57
+ * Handles three data record variants:
58
+ * - DataRecordBase64: has `data` property → InlineDataPart
59
+ * - DataRecordUrl: has `url` property → FileDataPart (or InlineDataPart for data: URLs)
60
+ * - DataRecordFileId: has `fileId` property → not directly supported, throws
61
+ */
62
+ function _multimodalContentBlockToPart(block, defaultMimeType) {
63
+ if ("data" in block && block.data !== void 0) {
64
+ const data = block.data instanceof Uint8Array ? btoa(String.fromCharCode(...block.data)) : block.data;
65
+ return { inlineData: {
66
+ mimeType: block.mimeType || defaultMimeType,
67
+ data
68
+ } };
69
+ }
70
+ if ("url" in block && block.url !== void 0) {
71
+ const parsed = (0, _langchain_core_messages.parseBase64DataUrl)({ dataUrl: block.url });
72
+ if (parsed) return { inlineData: {
73
+ mimeType: parsed.mime_type,
74
+ data: parsed.data
75
+ } };
76
+ return { fileData: {
77
+ mimeType: block.mimeType || defaultMimeType,
78
+ fileUri: block.url
79
+ } };
80
+ }
81
+ if ("fileId" in block && block.fileId !== void 0) throw new Error("ContentBlock.Multimodal fileId is not supported by Google Generative AI. Use a URL or base64 data instead.");
82
+ throw new Error(`Invalid multimodal content block: must have "data", "url", or "fileId" property. Received: ${JSON.stringify(block)}`);
83
+ }
54
84
  function _getStandardContentBlockConverter(isMultimodalModel) {
55
85
  return {
56
86
  providerName: "Google Gemini",
@@ -137,7 +167,14 @@ function _convertLangChainContentToPart(content, isMultimodalModel) {
137
167
  mimeType
138
168
  } };
139
169
  } else if (content.type === "media") return messageContentMedia(content);
140
- else if (content.type === "tool_use") return { functionCall: {
170
+ else if (content.type === "image") return _multimodalContentBlockToPart(content, "image/png");
171
+ else if (content.type === "video") return _multimodalContentBlockToPart(content, "video/mp4");
172
+ else if (content.type === "audio") return _multimodalContentBlockToPart(content, "audio/mpeg");
173
+ else if (content.type === "file") return _multimodalContentBlockToPart(content, "application/octet-stream");
174
+ else if (content.type === "text-plain") {
175
+ if ("text" in content && typeof content.text === "string") return { text: content.text };
176
+ return _multimodalContentBlockToPart(content, "text/plain");
177
+ } else if (content.type === "tool_use") return { functionCall: {
141
178
  name: content.name,
142
179
  args: content.input
143
180
  } };
@@ -231,7 +268,7 @@ function mapGenerateContentResultToChatResult(response, extra) {
231
268
  };
232
269
  const [candidate] = response.candidates;
233
270
  const { content: candidateContent, ...generationInfo } = candidate;
234
- const functionCalls = candidateContent.parts?.reduce((acc, p) => {
271
+ const functionCalls = candidateContent?.parts?.reduce((acc, p) => {
235
272
  if ("functionCall" in p && p.functionCall) acc.push({
236
273
  ...p,
237
274
  id: "id" in p.functionCall && typeof p.functionCall.id === "string" ? p.functionCall.id : (0, uuid.v4)()
@@ -441,11 +478,11 @@ function convertUsageMetadata(usageMetadata, model) {
441
478
  }
442
479
  return output;
443
480
  }
444
-
445
481
  //#endregion
446
482
  exports.convertBaseMessagesToContent = convertBaseMessagesToContent;
447
483
  exports.convertResponseContentToChatGenerationChunk = convertResponseContentToChatGenerationChunk;
448
484
  exports.convertToGenerativeAITools = convertToGenerativeAITools;
449
485
  exports.convertUsageMetadata = convertUsageMetadata;
450
486
  exports.mapGenerateContentResultToChatResult = mapGenerateContentResultToChatResult;
487
+
451
488
  //# sourceMappingURL=common.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.cjs","names":["ChatMessage","AIMessage","ChatGenerationChunk","AIMessageChunk","schemaToGenerativeAIParameters","jsonSchemaToGeminiParameters"],"sources":["../../src/utils/common.ts"],"sourcesContent":["import {\n EnhancedGenerateContentResponse,\n Content,\n Part,\n type FunctionDeclarationsTool as GoogleGenerativeAIFunctionDeclarationsTool,\n type FunctionDeclaration as GenerativeAIFunctionDeclaration,\n POSSIBLE_ROLES,\n FunctionCallPart,\n TextPart,\n FileDataPart,\n InlineDataPart,\n type GenerateContentResponse,\n} from \"@google/generative-ai\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n ChatMessage,\n ToolMessage,\n ToolMessageChunk,\n MessageContent,\n MessageContentComplex,\n UsageMetadata,\n isAIMessage,\n isBaseMessage,\n isToolMessage,\n StandardContentBlockConverter,\n parseBase64DataUrl,\n convertToProviderContentBlock,\n isDataContentBlock,\n InputTokenDetails,\n} from \"@langchain/core/messages\";\nimport {\n ChatGeneration,\n ChatGenerationChunk,\n ChatResult,\n} from \"@langchain/core/outputs\";\nimport { isLangChainTool } from \"@langchain/core/utils/function_calling\";\nimport { isOpenAITool } from \"@langchain/core/language_models/base\";\nimport { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n jsonSchemaToGeminiParameters,\n schemaToGenerativeAIParameters,\n} from \"./zod_to_genai_parameters.js\";\nimport {\n GoogleGenerativeAIPart,\n GoogleGenerativeAIToolType,\n} from \"../types.js\";\nimport { assertNoEmptyStringEnums } from \"./validate_schema.js\";\n\nexport const _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY =\n \"__gemini_function_call_thought_signatures__\";\nconst DUMMY_SIGNATURE =\n \"ErYCCrMCAdHtim9kOoOkrPiCNVsmlpMIKd7ZMxgiFbVQOkgp7nlLcDMzVsZwIzvuT7nQROivoXA72ccC2lSDvR0Gh7dkWaGuj7ctv6t7ZceHnecx0QYa+ix8tYpRfjhyWozQ49lWiws6+YGjCt10KRTyWsZ2h6O7iHTYJwKIRwGUHRKy/qK/6kFxJm5ML00gLq4D8s5Z6DBpp2ZlR+uF4G8jJgeWQgyHWVdx2wGYElaceVAc66tZdPQRdOHpWtgYSI1YdaXgVI8KHY3/EfNc2YqqMIulvkDBAnuMhkAjV9xmBa54Tq+ih3Im4+r3DzqhGqYdsSkhS0kZMwte4Hjs65dZzCw9lANxIqYi1DJ639WNPYihp/DCJCos7o+/EeSPJaio5sgWDyUnMGkY1atsJZ+m7pj7DD5tvQ==\";\n\nconst iife = (fn: () => string) => fn();\n\nexport function getMessageAuthor(message: BaseMessage) {\n if (ChatMessage.isInstance(message)) {\n return message.role;\n }\n return message.type;\n}\n\n/**\n * Maps a message type to a Google Generative AI chat author.\n * @param message The message to map.\n * @param model The model to use for mapping.\n * @returns The message type mapped to a Google Generative AI chat author.\n */\nexport function convertAuthorToRole(\n author: string\n): (typeof POSSIBLE_ROLES)[number] {\n switch (author) {\n /**\n * Note: Gemini currently is not supporting system messages\n * we will convert them to human messages and merge with following\n * */\n case \"supervisor\":\n case \"ai\":\n case \"model\":\n return \"model\";\n case \"system\":\n return \"system\";\n case \"human\":\n return \"user\";\n case \"tool\":\n case \"function\":\n return \"function\";\n default:\n throw new Error(`Unknown / unsupported author: ${author}`);\n }\n}\n\nfunction messageContentMedia(content: MessageContentComplex): Part {\n if (\"mimeType\" in content && \"data\" in content) {\n return {\n inlineData: {\n mimeType: content.mimeType,\n data: content.data,\n },\n };\n }\n if (\"mimeType\" in content && \"fileUri\" in content) {\n return {\n fileData: {\n mimeType: content.mimeType,\n fileUri: content.fileUri,\n },\n };\n }\n\n throw new Error(\"Invalid media content\");\n}\n\nfunction inferToolNameFromPreviousMessages(\n message: ToolMessage | ToolMessageChunk,\n previousMessages: BaseMessage[]\n): string | undefined {\n return previousMessages\n .map((msg) => {\n if (isAIMessage(msg)) {\n return msg.tool_calls ?? [];\n }\n return [];\n })\n .flat()\n .find((toolCall) => {\n return toolCall.id === message.tool_call_id;\n })?.name;\n}\n\nfunction _getStandardContentBlockConverter(isMultimodalModel: boolean) {\n const standardContentBlockConverter: StandardContentBlockConverter<{\n text: TextPart;\n image: FileDataPart | InlineDataPart;\n audio: FileDataPart | InlineDataPart;\n file: FileDataPart | InlineDataPart | TextPart;\n }> = {\n providerName: \"Google Gemini\",\n\n fromStandardTextBlock(block) {\n return {\n text: block.text,\n };\n },\n\n fromStandardImageBlock(block): FileDataPart | InlineDataPart {\n if (!isMultimodalModel) {\n throw new Error(\"This model does not support images\");\n }\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (data) {\n return {\n inlineData: {\n mimeType: data.mime_type,\n data: data.data,\n },\n };\n } else {\n return {\n fileData: {\n mimeType: block.mime_type ?? \"\",\n fileUri: block.url,\n },\n };\n }\n }\n\n if (block.source_type === \"base64\") {\n return {\n inlineData: {\n mimeType: block.mime_type ?? \"\",\n data: block.data,\n },\n };\n }\n\n throw new Error(`Unsupported source type: ${block.source_type}`);\n },\n\n fromStandardAudioBlock(block): FileDataPart | InlineDataPart {\n if (!isMultimodalModel) {\n throw new Error(\"This model does not support audio\");\n }\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (data) {\n return {\n inlineData: {\n mimeType: data.mime_type,\n data: data.data,\n },\n };\n } else {\n return {\n fileData: {\n mimeType: block.mime_type ?? \"\",\n fileUri: block.url,\n },\n };\n }\n }\n\n if (block.source_type === \"base64\") {\n return {\n inlineData: {\n mimeType: block.mime_type ?? \"\",\n data: block.data,\n },\n };\n }\n\n throw new Error(`Unsupported source type: ${block.source_type}`);\n },\n\n fromStandardFileBlock(block): FileDataPart | InlineDataPart | TextPart {\n if (!isMultimodalModel) {\n throw new Error(\"This model does not support files\");\n }\n if (block.source_type === \"text\") {\n return {\n text: block.text,\n };\n }\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (data) {\n return {\n inlineData: {\n mimeType: data.mime_type,\n data: data.data,\n },\n };\n } else {\n return {\n fileData: {\n mimeType: block.mime_type ?? \"\",\n fileUri: block.url,\n },\n };\n }\n }\n\n if (block.source_type === \"base64\") {\n return {\n inlineData: {\n mimeType: block.mime_type ?? \"\",\n data: block.data,\n },\n };\n }\n throw new Error(`Unsupported source type: ${block.source_type}`);\n },\n };\n return standardContentBlockConverter;\n}\n\nfunction _convertLangChainContentToPart(\n content: MessageContentComplex,\n isMultimodalModel: boolean\n): Part | undefined {\n if (isDataContentBlock(content)) {\n return convertToProviderContentBlock(\n content,\n _getStandardContentBlockConverter(isMultimodalModel)\n );\n }\n\n if (content.type === \"text\") {\n return { text: content.text };\n } else if (content.type === \"executableCode\") {\n return { executableCode: content.executableCode };\n } else if (content.type === \"codeExecutionResult\") {\n return { codeExecutionResult: content.codeExecutionResult };\n } else if (content.type === \"image_url\") {\n if (!isMultimodalModel) {\n throw new Error(`This model does not support images`);\n }\n let source;\n if (typeof content.image_url === \"string\") {\n source = content.image_url;\n } else if (\n typeof content.image_url === \"object\" &&\n \"url\" in content.image_url\n ) {\n source = content.image_url.url;\n } else {\n throw new Error(\"Please provide image as base64 encoded data URL\");\n }\n const [dm, data] = source.split(\",\");\n if (!dm.startsWith(\"data:\")) {\n throw new Error(\"Please provide image as base64 encoded data URL\");\n }\n\n const [mimeType, encoding] = dm.replace(/^data:/, \"\").split(\";\");\n if (encoding !== \"base64\") {\n throw new Error(\"Please provide image as base64 encoded data URL\");\n }\n\n return {\n inlineData: {\n data,\n mimeType,\n },\n };\n } else if (content.type === \"media\") {\n return messageContentMedia(content);\n } else if (content.type === \"tool_use\") {\n return {\n functionCall: {\n name: content.name,\n args: content.input,\n },\n };\n } else if (content.type === \"tool_call\") {\n return {\n functionCall: {\n name: content.name,\n args: content.args,\n },\n };\n } else if (\n content.type?.includes(\"/\") &&\n // Ensure it's a single slash.\n content.type.split(\"/\").length === 2 &&\n \"data\" in content &&\n typeof content.data === \"string\"\n ) {\n return {\n inlineData: {\n mimeType: content.type,\n data: content.data,\n },\n };\n } else if (\"functionCall\" in content) {\n // No action needed here — function calls will be added later from message.tool_calls\n return undefined;\n } else {\n if (\"type\" in content) {\n throw new Error(`Unknown content type ${content.type}`);\n } else {\n throw new Error(`Unknown content ${JSON.stringify(content)}`);\n }\n }\n}\n\nexport function convertMessageContentToParts(\n message: BaseMessage,\n isMultimodalModel: boolean,\n previousMessages: BaseMessage[],\n model?: string\n): Part[] {\n if (isToolMessage(message)) {\n const messageName =\n message.name ??\n inferToolNameFromPreviousMessages(message, previousMessages);\n if (messageName === undefined) {\n throw new Error(\n `Google requires a tool name for each tool call response, and we could not infer a called tool name for ToolMessage \"${message.id}\" from your passed messages. Please populate a \"name\" field on that ToolMessage explicitly.`\n );\n }\n\n const result = Array.isArray(message.content)\n ? (message.content\n .map((c) => _convertLangChainContentToPart(c, isMultimodalModel))\n .filter((p) => p !== undefined) as Part[])\n : message.content;\n\n if (message.status === \"error\") {\n return [\n {\n functionResponse: {\n name: messageName,\n // The API expects an object with an `error` field if the function call fails.\n // `error` must be a valid object (not a string or array), so we wrap `message.content` here\n response: { error: { details: result } },\n },\n },\n ];\n }\n\n return [\n {\n functionResponse: {\n name: messageName,\n // again, can't have a string or array value for `response`, so we wrap it as an object here\n response: { result },\n },\n },\n ];\n }\n\n let functionCalls: FunctionCallPart[] = [];\n const messageParts: Part[] = [];\n\n if (typeof message.content === \"string\" && message.content) {\n messageParts.push({ text: message.content });\n }\n\n if (Array.isArray(message.content)) {\n messageParts.push(\n ...(message.content\n .map((c) => _convertLangChainContentToPart(c, isMultimodalModel))\n .filter((p) => p !== undefined) as Part[])\n );\n }\n\n const functionThoughtSignatures = message.additional_kwargs?.[\n _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY\n ] as Record<string, string>;\n\n if (isAIMessage(message) && message.tool_calls?.length) {\n functionCalls = message.tool_calls.map((tc) => {\n const thoughtSignature = iife(() => {\n if (tc.id) {\n const signature = functionThoughtSignatures?.[tc.id];\n if (signature) {\n return signature;\n }\n }\n if (model?.includes(\"gemini-3\")) {\n return DUMMY_SIGNATURE;\n }\n return \"\";\n });\n return {\n functionCall: {\n name: tc.name,\n args: tc.args,\n },\n ...(thoughtSignature ? { thoughtSignature } : {}),\n };\n });\n }\n\n return [...messageParts, ...functionCalls];\n}\n\nexport function convertBaseMessagesToContent(\n messages: BaseMessage[],\n isMultimodalModel: boolean,\n convertSystemMessageToHumanContent: boolean = false,\n model: string\n) {\n return messages.reduce<{\n content: Content[];\n mergeWithPreviousContent: boolean;\n }>(\n (acc, message, index) => {\n if (!isBaseMessage(message)) {\n throw new Error(\"Unsupported message input\");\n }\n const author = getMessageAuthor(message);\n if (author === \"system\" && index !== 0) {\n throw new Error(\"System message should be the first one\");\n }\n const role = convertAuthorToRole(author);\n\n const prevContent = acc.content[acc.content.length];\n if (\n !acc.mergeWithPreviousContent &&\n prevContent &&\n prevContent.role === role\n ) {\n throw new Error(\n \"Google Generative AI requires alternate messages between authors\"\n );\n }\n\n const parts = convertMessageContentToParts(\n message,\n isMultimodalModel,\n messages.slice(0, index),\n model\n );\n\n if (acc.mergeWithPreviousContent) {\n const prevContent = acc.content[acc.content.length - 1];\n if (!prevContent) {\n throw new Error(\n \"There was a problem parsing your system message. Please try a prompt without one.\"\n );\n }\n prevContent.parts.push(...parts);\n\n return {\n mergeWithPreviousContent: false,\n content: acc.content,\n };\n }\n let actualRole = role;\n if (\n actualRole === \"function\" ||\n (actualRole === \"system\" && !convertSystemMessageToHumanContent)\n ) {\n // GenerativeAI API will throw an error if the role is not \"user\" or \"model.\"\n actualRole = \"user\";\n }\n const content: Content = {\n role: actualRole,\n parts,\n };\n return {\n mergeWithPreviousContent:\n author === \"system\" && !convertSystemMessageToHumanContent,\n content: [...acc.content, content],\n };\n },\n { content: [], mergeWithPreviousContent: false }\n ).content;\n}\n\nexport function mapGenerateContentResultToChatResult(\n response: EnhancedGenerateContentResponse,\n extra?: {\n usageMetadata: UsageMetadata | undefined;\n }\n): ChatResult {\n // if rejected or error, return empty generations with reason in filters\n if (\n !response.candidates ||\n response.candidates.length === 0 ||\n !response.candidates[0]\n ) {\n return {\n generations: [],\n llmOutput: {\n filters: response.promptFeedback,\n },\n };\n }\n const [candidate] = response.candidates;\n const { content: candidateContent, ...generationInfo } = candidate;\n const functionCalls = candidateContent.parts?.reduce(\n (acc, p) => {\n if (\"functionCall\" in p && p.functionCall) {\n acc.push({\n ...p,\n id:\n \"id\" in p.functionCall && typeof p.functionCall.id === \"string\"\n ? p.functionCall.id\n : uuidv4(),\n });\n }\n return acc;\n },\n [] as (FunctionCallPart & { id: string })[]\n );\n let content: MessageContent | undefined;\n\n const parts = candidateContent?.parts as GoogleGenerativeAIPart[] | undefined;\n\n if (\n Array.isArray(parts) &&\n parts.length === 1 &&\n \"text\" in parts[0] &&\n parts[0].text &&\n !parts[0].thought\n ) {\n content = parts[0].text;\n } else if (Array.isArray(parts) && parts.length > 0) {\n content = parts.map((p) => {\n if (p.thought && \"text\" in p && p.text) {\n return {\n type: \"thinking\",\n thinking: p.text,\n ...(p.thoughtSignature ? { signature: p.thoughtSignature } : {}),\n };\n } else if (\"text\" in p) {\n return {\n type: \"text\",\n text: p.text,\n };\n } else if (\"inlineData\" in p) {\n return {\n type: \"inlineData\",\n inlineData: p.inlineData,\n };\n } else if (\"functionCall\" in p) {\n return {\n type: \"functionCall\",\n functionCall: p.functionCall,\n };\n } else if (\"functionResponse\" in p) {\n return {\n type: \"functionResponse\",\n functionResponse: p.functionResponse,\n };\n } else if (\"fileData\" in p) {\n return {\n type: \"fileData\",\n fileData: p.fileData,\n };\n } else if (\"executableCode\" in p) {\n return {\n type: \"executableCode\",\n executableCode: p.executableCode,\n };\n } else if (\"codeExecutionResult\" in p) {\n return {\n type: \"codeExecutionResult\",\n codeExecutionResult: p.codeExecutionResult,\n };\n }\n return p;\n });\n } else {\n // no content returned - likely due to abnormal stop reason, e.g. malformed function call\n content = [];\n }\n\n const functionThoughtSignatures = functionCalls?.reduce(\n (acc, fc) => {\n if (\"thoughtSignature\" in fc && typeof fc.thoughtSignature === \"string\") {\n acc[fc.id] = fc.thoughtSignature;\n }\n return acc;\n },\n {} as Record<string, string>\n );\n\n let text = \"\";\n if (typeof content === \"string\") {\n text = content;\n } else if (Array.isArray(content) && content.length > 0) {\n const block = content.find((b) => \"text\" in b) as\n | { text: string }\n | undefined;\n text = block?.text ?? text;\n }\n\n const generation: ChatGeneration = {\n text,\n message: new AIMessage({\n content: content ?? \"\",\n tool_calls: functionCalls?.map((fc) => ({\n type: \"tool_call\",\n id: fc.id,\n name: fc.functionCall.name,\n args: fc.functionCall.args,\n })),\n additional_kwargs: {\n ...generationInfo,\n [_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY]: functionThoughtSignatures,\n },\n usage_metadata: extra?.usageMetadata,\n }),\n generationInfo,\n };\n\n return {\n generations: [generation],\n llmOutput: {\n tokenUsage: {\n promptTokens: extra?.usageMetadata?.input_tokens,\n completionTokens: extra?.usageMetadata?.output_tokens,\n totalTokens: extra?.usageMetadata?.total_tokens,\n },\n },\n };\n}\n\nexport function convertResponseContentToChatGenerationChunk(\n response: EnhancedGenerateContentResponse,\n extra: {\n usageMetadata?: UsageMetadata | undefined;\n index: number;\n }\n): ChatGenerationChunk | null {\n if (!response.candidates || response.candidates.length === 0) {\n return null;\n }\n const [candidate] = response.candidates;\n const { content: candidateContent, ...generationInfo } = candidate;\n const functionCalls = candidateContent.parts?.reduce(\n (acc, p) => {\n if (\"functionCall\" in p && p.functionCall) {\n acc.push({\n ...p,\n id:\n \"id\" in p.functionCall && typeof p.functionCall.id === \"string\"\n ? p.functionCall.id\n : uuidv4(),\n });\n }\n return acc;\n },\n [] as (FunctionCallPart & { id: string })[]\n );\n let content: MessageContent | undefined;\n const streamParts = candidateContent?.parts as\n | GoogleGenerativeAIPart[]\n | undefined;\n\n // Checks if all parts are plain text (no thought flags). If so, join as string.\n if (\n Array.isArray(streamParts) &&\n streamParts.every((p) => \"text\" in p && !p.thought)\n ) {\n content = streamParts.map((p) => p.text).join(\"\");\n } else if (Array.isArray(streamParts)) {\n content = streamParts.map((p) => {\n if (p.thought && \"text\" in p && p.text) {\n return {\n type: \"thinking\",\n thinking: p.text,\n ...(p.thoughtSignature ? { signature: p.thoughtSignature } : {}),\n };\n } else if (\"text\" in p) {\n return {\n type: \"text\",\n text: p.text,\n };\n } else if (\"inlineData\" in p) {\n return {\n type: \"inlineData\",\n inlineData: p.inlineData,\n };\n } else if (\"functionCall\" in p) {\n return {\n type: \"functionCall\",\n functionCall: p.functionCall,\n };\n } else if (\"functionResponse\" in p) {\n return {\n type: \"functionResponse\",\n functionResponse: p.functionResponse,\n };\n } else if (\"fileData\" in p) {\n return {\n type: \"fileData\",\n fileData: p.fileData,\n };\n } else if (\"executableCode\" in p) {\n return {\n type: \"executableCode\",\n executableCode: p.executableCode,\n };\n } else if (\"codeExecutionResult\" in p) {\n return {\n type: \"codeExecutionResult\",\n codeExecutionResult: p.codeExecutionResult,\n };\n }\n return p;\n });\n } else {\n // no content returned - likely due to abnormal stop reason, e.g. malformed function call\n content = [];\n }\n\n let text = \"\";\n if (content && typeof content === \"string\") {\n text = content;\n } else if (Array.isArray(content)) {\n const block = content.find((b) => \"text\" in b) as\n | { text: string }\n | undefined;\n text = block?.text ?? \"\";\n }\n\n const toolCallChunks: ToolCallChunk[] = [];\n if (functionCalls) {\n toolCallChunks.push(\n ...functionCalls.map((fc) => ({\n type: \"tool_call_chunk\" as const,\n id: fc.id,\n name: fc.functionCall.name,\n args: JSON.stringify(fc.functionCall.args),\n }))\n );\n }\n\n const functionThoughtSignatures = functionCalls?.reduce(\n (acc, fc) => {\n if (\"thoughtSignature\" in fc && typeof fc.thoughtSignature === \"string\") {\n acc[fc.id] = fc.thoughtSignature;\n }\n return acc;\n },\n {} as Record<string, string>\n );\n\n return new ChatGenerationChunk({\n text,\n message: new AIMessageChunk({\n content: content || \"\",\n name: !candidateContent ? undefined : candidateContent.role,\n tool_call_chunks: toolCallChunks,\n // Each chunk can have unique \"generationInfo\", and merging strategy is unclear,\n // so leave blank for now.\n additional_kwargs: {\n [_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY]: functionThoughtSignatures,\n },\n response_metadata: {\n model_provider: \"google-genai\",\n },\n usage_metadata: extra.usageMetadata,\n }),\n generationInfo,\n });\n}\n\nexport function convertToGenerativeAITools(\n tools: GoogleGenerativeAIToolType[]\n): GoogleGenerativeAIFunctionDeclarationsTool[] {\n if (\n tools.every(\n (tool) =>\n \"functionDeclarations\" in tool &&\n Array.isArray(tool.functionDeclarations)\n )\n ) {\n return tools as GoogleGenerativeAIFunctionDeclarationsTool[];\n }\n return [\n {\n functionDeclarations: tools.map(\n (tool): GenerativeAIFunctionDeclaration => {\n if (isLangChainTool(tool)) {\n const jsonSchema = schemaToGenerativeAIParameters(tool.schema);\n if (\n jsonSchema.type === \"object\" &&\n \"properties\" in jsonSchema &&\n Object.keys(jsonSchema.properties).length === 0\n ) {\n return {\n name: tool.name,\n description: tool.description,\n };\n }\n assertNoEmptyStringEnums(jsonSchema, tool.name);\n return {\n name: tool.name,\n description: tool.description,\n parameters: jsonSchema,\n };\n }\n if (isOpenAITool(tool)) {\n const params = jsonSchemaToGeminiParameters(\n tool.function.parameters\n );\n assertNoEmptyStringEnums(params, tool.function.name);\n return {\n name: tool.function.name,\n description:\n tool.function.description ?? `A function available to call.`,\n parameters: params,\n };\n }\n return tool as unknown as GenerativeAIFunctionDeclaration;\n }\n ),\n },\n ];\n}\n\nexport function convertUsageMetadata(\n usageMetadata: GenerateContentResponse[\"usageMetadata\"],\n model: string\n): UsageMetadata {\n const output: UsageMetadata = {\n input_tokens: usageMetadata?.promptTokenCount ?? 0,\n output_tokens: usageMetadata?.candidatesTokenCount ?? 0,\n total_tokens: usageMetadata?.totalTokenCount ?? 0,\n };\n if (usageMetadata?.cachedContentTokenCount) {\n output.input_token_details ??= {};\n output.input_token_details.cache_read =\n usageMetadata.cachedContentTokenCount;\n }\n // gemini-3-pro-preview has bracket based tracking of tokens per request\n // FIXME(hntrl): move this usageMetadata calculation elsewhere\n if (model === \"gemini-3-pro-preview\") {\n const over200k = Math.max(0, usageMetadata?.promptTokenCount ?? 0 - 200000);\n const cachedOver200k = Math.max(\n 0,\n usageMetadata?.cachedContentTokenCount ?? 0 - 200000\n );\n if (over200k) {\n output.input_token_details = {\n ...output.input_token_details,\n over_200k: over200k,\n } as InputTokenDetails;\n }\n if (cachedOver200k) {\n output.input_token_details = {\n ...output.input_token_details,\n cache_read_over_200k: cachedOver200k,\n } as InputTokenDetails;\n }\n }\n return output;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"common.cjs","names":["ChatMessage","AIMessage","ChatGenerationChunk","AIMessageChunk","schemaToGenerativeAIParameters","jsonSchemaToGeminiParameters"],"sources":["../../src/utils/common.ts"],"sourcesContent":["import {\n EnhancedGenerateContentResponse,\n Content,\n Part,\n type FunctionDeclarationsTool as GoogleGenerativeAIFunctionDeclarationsTool,\n type FunctionDeclaration as GenerativeAIFunctionDeclaration,\n POSSIBLE_ROLES,\n FunctionCallPart,\n TextPart,\n FileDataPart,\n InlineDataPart,\n type GenerateContentResponse,\n} from \"@google/generative-ai\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n ChatMessage,\n ContentBlock,\n ToolMessage,\n ToolMessageChunk,\n MessageContent,\n MessageContentComplex,\n UsageMetadata,\n isAIMessage,\n isBaseMessage,\n isToolMessage,\n StandardContentBlockConverter,\n parseBase64DataUrl,\n convertToProviderContentBlock,\n isDataContentBlock,\n InputTokenDetails,\n} from \"@langchain/core/messages\";\nimport {\n ChatGeneration,\n ChatGenerationChunk,\n ChatResult,\n} from \"@langchain/core/outputs\";\nimport { isLangChainTool } from \"@langchain/core/utils/function_calling\";\nimport { isOpenAITool } from \"@langchain/core/language_models/base\";\nimport { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n jsonSchemaToGeminiParameters,\n schemaToGenerativeAIParameters,\n} from \"./zod_to_genai_parameters.js\";\nimport {\n GoogleGenerativeAIPart,\n GoogleGenerativeAIToolType,\n} from \"../types.js\";\nimport { assertNoEmptyStringEnums } from \"./validate_schema.js\";\n\nexport const _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY =\n \"__gemini_function_call_thought_signatures__\";\nconst DUMMY_SIGNATURE =\n \"ErYCCrMCAdHtim9kOoOkrPiCNVsmlpMIKd7ZMxgiFbVQOkgp7nlLcDMzVsZwIzvuT7nQROivoXA72ccC2lSDvR0Gh7dkWaGuj7ctv6t7ZceHnecx0QYa+ix8tYpRfjhyWozQ49lWiws6+YGjCt10KRTyWsZ2h6O7iHTYJwKIRwGUHRKy/qK/6kFxJm5ML00gLq4D8s5Z6DBpp2ZlR+uF4G8jJgeWQgyHWVdx2wGYElaceVAc66tZdPQRdOHpWtgYSI1YdaXgVI8KHY3/EfNc2YqqMIulvkDBAnuMhkAjV9xmBa54Tq+ih3Im4+r3DzqhGqYdsSkhS0kZMwte4Hjs65dZzCw9lANxIqYi1DJ639WNPYihp/DCJCos7o+/EeSPJaio5sgWDyUnMGkY1atsJZ+m7pj7DD5tvQ==\";\n\nconst iife = (fn: () => string) => fn();\n\nexport function getMessageAuthor(message: BaseMessage) {\n if (ChatMessage.isInstance(message)) {\n return message.role;\n }\n return message.type;\n}\n\n/**\n * Maps a message type to a Google Generative AI chat author.\n * @param message The message to map.\n * @param model The model to use for mapping.\n * @returns The message type mapped to a Google Generative AI chat author.\n */\nexport function convertAuthorToRole(\n author: string\n): (typeof POSSIBLE_ROLES)[number] {\n switch (author) {\n /**\n * Note: Gemini currently is not supporting system messages\n * we will convert them to human messages and merge with following\n * */\n case \"supervisor\":\n case \"ai\":\n case \"model\":\n return \"model\";\n case \"system\":\n return \"system\";\n case \"human\":\n return \"user\";\n case \"tool\":\n case \"function\":\n return \"function\";\n default:\n throw new Error(`Unknown / unsupported author: ${author}`);\n }\n}\n\nfunction messageContentMedia(content: MessageContentComplex): Part {\n if (\"mimeType\" in content && \"data\" in content) {\n return {\n inlineData: {\n mimeType: content.mimeType,\n data: content.data,\n },\n };\n }\n if (\"mimeType\" in content && \"fileUri\" in content) {\n return {\n fileData: {\n mimeType: content.mimeType,\n fileUri: content.fileUri,\n },\n };\n }\n\n throw new Error(\"Invalid media content\");\n}\n\nfunction inferToolNameFromPreviousMessages(\n message: ToolMessage | ToolMessageChunk,\n previousMessages: BaseMessage[]\n): string | undefined {\n return previousMessages\n .map((msg) => {\n if (isAIMessage(msg)) {\n return msg.tool_calls ?? [];\n }\n return [];\n })\n .flat()\n .find((toolCall) => {\n return toolCall.id === message.tool_call_id;\n })?.name;\n}\n\n/**\n * Converts a ContentBlock.Multimodal block (image, video, audio, file)\n * to the appropriate Google Generative AI Part format.\n *\n * Handles three data record variants:\n * - DataRecordBase64: has `data` property → InlineDataPart\n * - DataRecordUrl: has `url` property → FileDataPart (or InlineDataPart for data: URLs)\n * - DataRecordFileId: has `fileId` property → not directly supported, throws\n */\nfunction _multimodalContentBlockToPart(\n block: ContentBlock.Multimodal.Data,\n defaultMimeType: string\n): InlineDataPart | FileDataPart {\n if (\"data\" in block && block.data !== undefined) {\n // DataRecordBase64: inline base64 data\n const data =\n // eslint-disable-next-line no-instanceof/no-instanceof\n block.data instanceof Uint8Array\n ? btoa(String.fromCharCode(...block.data))\n : block.data;\n return {\n inlineData: {\n mimeType: block.mimeType || defaultMimeType,\n data,\n },\n };\n }\n\n if (\"url\" in block && block.url !== undefined) {\n // DataRecordUrl: check if it's a data: URL first\n const parsed = parseBase64DataUrl({ dataUrl: block.url });\n if (parsed) {\n return {\n inlineData: {\n mimeType: parsed.mime_type,\n data: parsed.data,\n },\n };\n }\n // Regular URL → fileData\n return {\n fileData: {\n mimeType: block.mimeType || defaultMimeType,\n fileUri: block.url,\n },\n };\n }\n\n if (\"fileId\" in block && block.fileId !== undefined) {\n throw new Error(\n `ContentBlock.Multimodal fileId is not supported by Google Generative AI. ` +\n `Use a URL or base64 data instead.`\n );\n }\n\n throw new Error(\n `Invalid multimodal content block: must have \"data\", \"url\", or \"fileId\" property. ` +\n `Received: ${JSON.stringify(block)}`\n );\n}\n\nfunction _getStandardContentBlockConverter(isMultimodalModel: boolean) {\n const standardContentBlockConverter: StandardContentBlockConverter<{\n text: TextPart;\n image: FileDataPart | InlineDataPart;\n audio: FileDataPart | InlineDataPart;\n file: FileDataPart | InlineDataPart | TextPart;\n }> = {\n providerName: \"Google Gemini\",\n\n fromStandardTextBlock(block) {\n return {\n text: block.text,\n };\n },\n\n fromStandardImageBlock(block): FileDataPart | InlineDataPart {\n if (!isMultimodalModel) {\n throw new Error(\"This model does not support images\");\n }\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (data) {\n return {\n inlineData: {\n mimeType: data.mime_type,\n data: data.data,\n },\n };\n } else {\n return {\n fileData: {\n mimeType: block.mime_type ?? \"\",\n fileUri: block.url,\n },\n };\n }\n }\n\n if (block.source_type === \"base64\") {\n return {\n inlineData: {\n mimeType: block.mime_type ?? \"\",\n data: block.data,\n },\n };\n }\n\n throw new Error(`Unsupported source type: ${block.source_type}`);\n },\n\n fromStandardAudioBlock(block): FileDataPart | InlineDataPart {\n if (!isMultimodalModel) {\n throw new Error(\"This model does not support audio\");\n }\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (data) {\n return {\n inlineData: {\n mimeType: data.mime_type,\n data: data.data,\n },\n };\n } else {\n return {\n fileData: {\n mimeType: block.mime_type ?? \"\",\n fileUri: block.url,\n },\n };\n }\n }\n\n if (block.source_type === \"base64\") {\n return {\n inlineData: {\n mimeType: block.mime_type ?? \"\",\n data: block.data,\n },\n };\n }\n\n throw new Error(`Unsupported source type: ${block.source_type}`);\n },\n\n fromStandardFileBlock(block): FileDataPart | InlineDataPart | TextPart {\n if (!isMultimodalModel) {\n throw new Error(\"This model does not support files\");\n }\n if (block.source_type === \"text\") {\n return {\n text: block.text,\n };\n }\n if (block.source_type === \"url\") {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (data) {\n return {\n inlineData: {\n mimeType: data.mime_type,\n data: data.data,\n },\n };\n } else {\n return {\n fileData: {\n mimeType: block.mime_type ?? \"\",\n fileUri: block.url,\n },\n };\n }\n }\n\n if (block.source_type === \"base64\") {\n return {\n inlineData: {\n mimeType: block.mime_type ?? \"\",\n data: block.data,\n },\n };\n }\n throw new Error(`Unsupported source type: ${block.source_type}`);\n },\n };\n return standardContentBlockConverter;\n}\n\nfunction _convertLangChainContentToPart(\n content: MessageContentComplex,\n isMultimodalModel: boolean\n): Part | undefined {\n if (isDataContentBlock(content)) {\n return convertToProviderContentBlock(\n content,\n _getStandardContentBlockConverter(isMultimodalModel)\n );\n }\n\n if (content.type === \"text\") {\n return { text: content.text };\n } else if (content.type === \"executableCode\") {\n return { executableCode: content.executableCode };\n } else if (content.type === \"codeExecutionResult\") {\n return { codeExecutionResult: content.codeExecutionResult };\n } else if (content.type === \"image_url\") {\n if (!isMultimodalModel) {\n throw new Error(`This model does not support images`);\n }\n let source;\n if (typeof content.image_url === \"string\") {\n source = content.image_url;\n } else if (\n typeof content.image_url === \"object\" &&\n \"url\" in content.image_url\n ) {\n source = content.image_url.url;\n } else {\n throw new Error(\"Please provide image as base64 encoded data URL\");\n }\n const [dm, data] = source.split(\",\");\n if (!dm.startsWith(\"data:\")) {\n throw new Error(\"Please provide image as base64 encoded data URL\");\n }\n\n const [mimeType, encoding] = dm.replace(/^data:/, \"\").split(\";\");\n if (encoding !== \"base64\") {\n throw new Error(\"Please provide image as base64 encoded data URL\");\n }\n\n return {\n inlineData: {\n data,\n mimeType,\n },\n };\n } else if (content.type === \"media\") {\n return messageContentMedia(content);\n } else if (content.type === \"image\") {\n return _multimodalContentBlockToPart(\n content as ContentBlock.Multimodal.Image,\n \"image/png\"\n );\n } else if (content.type === \"video\") {\n return _multimodalContentBlockToPart(\n content as ContentBlock.Multimodal.Video,\n \"video/mp4\"\n );\n } else if (content.type === \"audio\") {\n return _multimodalContentBlockToPart(\n content as ContentBlock.Multimodal.Audio,\n \"audio/mpeg\"\n );\n } else if (content.type === \"file\") {\n return _multimodalContentBlockToPart(\n content as ContentBlock.Multimodal.File,\n \"application/octet-stream\"\n );\n } else if (content.type === \"text-plain\") {\n // text-plain blocks can have an inline text property\n if (\n \"text\" in content &&\n typeof (content as ContentBlock.Multimodal.PlainText).text === \"string\"\n ) {\n return { text: (content as ContentBlock.Multimodal.PlainText).text! };\n }\n return _multimodalContentBlockToPart(\n content as ContentBlock.Multimodal.PlainText,\n \"text/plain\"\n );\n } else if (content.type === \"tool_use\") {\n return {\n functionCall: {\n name: content.name,\n args: content.input,\n },\n };\n } else if (content.type === \"tool_call\") {\n return {\n functionCall: {\n name: content.name,\n args: content.args,\n },\n };\n } else if (\n content.type?.includes(\"/\") &&\n // Ensure it's a single slash.\n content.type.split(\"/\").length === 2 &&\n \"data\" in content &&\n typeof content.data === \"string\"\n ) {\n return {\n inlineData: {\n mimeType: content.type,\n data: content.data,\n },\n };\n } else if (\"functionCall\" in content) {\n // No action needed here — function calls will be added later from message.tool_calls\n return undefined;\n } else {\n if (\"type\" in content) {\n throw new Error(`Unknown content type ${content.type}`);\n } else {\n throw new Error(`Unknown content ${JSON.stringify(content)}`);\n }\n }\n}\n\nexport function convertMessageContentToParts(\n message: BaseMessage,\n isMultimodalModel: boolean,\n previousMessages: BaseMessage[],\n model?: string\n): Part[] {\n if (isToolMessage(message)) {\n const messageName =\n message.name ??\n inferToolNameFromPreviousMessages(message, previousMessages);\n if (messageName === undefined) {\n throw new Error(\n `Google requires a tool name for each tool call response, and we could not infer a called tool name for ToolMessage \"${message.id}\" from your passed messages. Please populate a \"name\" field on that ToolMessage explicitly.`\n );\n }\n\n const result = Array.isArray(message.content)\n ? (message.content\n .map((c) => _convertLangChainContentToPart(c, isMultimodalModel))\n .filter((p) => p !== undefined) as Part[])\n : message.content;\n\n if (message.status === \"error\") {\n return [\n {\n functionResponse: {\n name: messageName,\n // The API expects an object with an `error` field if the function call fails.\n // `error` must be a valid object (not a string or array), so we wrap `message.content` here\n response: { error: { details: result } },\n },\n },\n ];\n }\n\n return [\n {\n functionResponse: {\n name: messageName,\n // again, can't have a string or array value for `response`, so we wrap it as an object here\n response: { result },\n },\n },\n ];\n }\n\n let functionCalls: FunctionCallPart[] = [];\n const messageParts: Part[] = [];\n\n if (typeof message.content === \"string\" && message.content) {\n messageParts.push({ text: message.content });\n }\n\n if (Array.isArray(message.content)) {\n messageParts.push(\n ...(message.content\n .map((c) => _convertLangChainContentToPart(c, isMultimodalModel))\n .filter((p) => p !== undefined) as Part[])\n );\n }\n\n const functionThoughtSignatures = message.additional_kwargs?.[\n _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY\n ] as Record<string, string>;\n\n if (isAIMessage(message) && message.tool_calls?.length) {\n functionCalls = message.tool_calls.map((tc) => {\n const thoughtSignature = iife(() => {\n if (tc.id) {\n const signature = functionThoughtSignatures?.[tc.id];\n if (signature) {\n return signature;\n }\n }\n if (model?.includes(\"gemini-3\")) {\n return DUMMY_SIGNATURE;\n }\n return \"\";\n });\n return {\n functionCall: {\n name: tc.name,\n args: tc.args,\n },\n ...(thoughtSignature ? { thoughtSignature } : {}),\n };\n });\n }\n\n return [...messageParts, ...functionCalls];\n}\n\nexport function convertBaseMessagesToContent(\n messages: BaseMessage[],\n isMultimodalModel: boolean,\n convertSystemMessageToHumanContent: boolean = false,\n model: string\n) {\n return messages.reduce<{\n content: Content[];\n mergeWithPreviousContent: boolean;\n }>(\n (acc, message, index) => {\n if (!isBaseMessage(message)) {\n throw new Error(\"Unsupported message input\");\n }\n const author = getMessageAuthor(message);\n if (author === \"system\" && index !== 0) {\n throw new Error(\"System message should be the first one\");\n }\n const role = convertAuthorToRole(author);\n\n const prevContent = acc.content[acc.content.length];\n if (\n !acc.mergeWithPreviousContent &&\n prevContent &&\n prevContent.role === role\n ) {\n throw new Error(\n \"Google Generative AI requires alternate messages between authors\"\n );\n }\n\n const parts = convertMessageContentToParts(\n message,\n isMultimodalModel,\n messages.slice(0, index),\n model\n );\n\n if (acc.mergeWithPreviousContent) {\n const prevContent = acc.content[acc.content.length - 1];\n if (!prevContent) {\n throw new Error(\n \"There was a problem parsing your system message. Please try a prompt without one.\"\n );\n }\n prevContent.parts.push(...parts);\n\n return {\n mergeWithPreviousContent: false,\n content: acc.content,\n };\n }\n let actualRole = role;\n if (\n actualRole === \"function\" ||\n (actualRole === \"system\" && !convertSystemMessageToHumanContent)\n ) {\n // GenerativeAI API will throw an error if the role is not \"user\" or \"model.\"\n actualRole = \"user\";\n }\n const content: Content = {\n role: actualRole,\n parts,\n };\n return {\n mergeWithPreviousContent:\n author === \"system\" && !convertSystemMessageToHumanContent,\n content: [...acc.content, content],\n };\n },\n { content: [], mergeWithPreviousContent: false }\n ).content;\n}\n\nexport function mapGenerateContentResultToChatResult(\n response: EnhancedGenerateContentResponse,\n extra?: {\n usageMetadata: UsageMetadata | undefined;\n }\n): ChatResult {\n // if rejected or error, return empty generations with reason in filters\n if (\n !response.candidates ||\n response.candidates.length === 0 ||\n !response.candidates[0]\n ) {\n return {\n generations: [],\n llmOutput: {\n filters: response.promptFeedback,\n },\n };\n }\n const [candidate] = response.candidates;\n const { content: candidateContent, ...generationInfo } = candidate;\n const functionCalls = candidateContent?.parts?.reduce(\n (acc, p) => {\n if (\"functionCall\" in p && p.functionCall) {\n acc.push({\n ...p,\n id:\n \"id\" in p.functionCall && typeof p.functionCall.id === \"string\"\n ? p.functionCall.id\n : uuidv4(),\n });\n }\n return acc;\n },\n [] as (FunctionCallPart & { id: string })[]\n );\n let content: MessageContent | undefined;\n\n const parts = candidateContent?.parts as GoogleGenerativeAIPart[] | undefined;\n\n if (\n Array.isArray(parts) &&\n parts.length === 1 &&\n \"text\" in parts[0] &&\n parts[0].text &&\n !parts[0].thought\n ) {\n content = parts[0].text;\n } else if (Array.isArray(parts) && parts.length > 0) {\n content = parts.map((p) => {\n if (p.thought && \"text\" in p && p.text) {\n return {\n type: \"thinking\",\n thinking: p.text,\n ...(p.thoughtSignature ? { signature: p.thoughtSignature } : {}),\n };\n } else if (\"text\" in p) {\n return {\n type: \"text\",\n text: p.text,\n };\n } else if (\"inlineData\" in p) {\n return {\n type: \"inlineData\",\n inlineData: p.inlineData,\n };\n } else if (\"functionCall\" in p) {\n return {\n type: \"functionCall\",\n functionCall: p.functionCall,\n };\n } else if (\"functionResponse\" in p) {\n return {\n type: \"functionResponse\",\n functionResponse: p.functionResponse,\n };\n } else if (\"fileData\" in p) {\n return {\n type: \"fileData\",\n fileData: p.fileData,\n };\n } else if (\"executableCode\" in p) {\n return {\n type: \"executableCode\",\n executableCode: p.executableCode,\n };\n } else if (\"codeExecutionResult\" in p) {\n return {\n type: \"codeExecutionResult\",\n codeExecutionResult: p.codeExecutionResult,\n };\n }\n return p;\n });\n } else {\n // no content returned - likely due to abnormal stop reason, e.g. malformed function call\n content = [];\n }\n\n const functionThoughtSignatures = functionCalls?.reduce(\n (acc, fc) => {\n if (\"thoughtSignature\" in fc && typeof fc.thoughtSignature === \"string\") {\n acc[fc.id] = fc.thoughtSignature;\n }\n return acc;\n },\n {} as Record<string, string>\n );\n\n let text = \"\";\n if (typeof content === \"string\") {\n text = content;\n } else if (Array.isArray(content) && content.length > 0) {\n const block = content.find((b) => \"text\" in b) as\n | { text: string }\n | undefined;\n text = block?.text ?? text;\n }\n\n const generation: ChatGeneration = {\n text,\n message: new AIMessage({\n content: content ?? \"\",\n tool_calls: functionCalls?.map((fc) => ({\n type: \"tool_call\",\n id: fc.id,\n name: fc.functionCall.name,\n args: fc.functionCall.args,\n })),\n additional_kwargs: {\n ...generationInfo,\n [_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY]: functionThoughtSignatures,\n },\n usage_metadata: extra?.usageMetadata,\n }),\n generationInfo,\n };\n\n return {\n generations: [generation],\n llmOutput: {\n tokenUsage: {\n promptTokens: extra?.usageMetadata?.input_tokens,\n completionTokens: extra?.usageMetadata?.output_tokens,\n totalTokens: extra?.usageMetadata?.total_tokens,\n },\n },\n };\n}\n\nexport function convertResponseContentToChatGenerationChunk(\n response: EnhancedGenerateContentResponse,\n extra: {\n usageMetadata?: UsageMetadata | undefined;\n index: number;\n }\n): ChatGenerationChunk | null {\n if (!response.candidates || response.candidates.length === 0) {\n return null;\n }\n const [candidate] = response.candidates;\n const { content: candidateContent, ...generationInfo } = candidate;\n const functionCalls = candidateContent.parts?.reduce(\n (acc, p) => {\n if (\"functionCall\" in p && p.functionCall) {\n acc.push({\n ...p,\n id:\n \"id\" in p.functionCall && typeof p.functionCall.id === \"string\"\n ? p.functionCall.id\n : uuidv4(),\n });\n }\n return acc;\n },\n [] as (FunctionCallPart & { id: string })[]\n );\n let content: MessageContent | undefined;\n const streamParts = candidateContent?.parts as\n | GoogleGenerativeAIPart[]\n | undefined;\n\n // Checks if all parts are plain text (no thought flags). If so, join as string.\n if (\n Array.isArray(streamParts) &&\n streamParts.every((p) => \"text\" in p && !p.thought)\n ) {\n content = streamParts.map((p) => p.text).join(\"\");\n } else if (Array.isArray(streamParts)) {\n content = streamParts.map((p) => {\n if (p.thought && \"text\" in p && p.text) {\n return {\n type: \"thinking\",\n thinking: p.text,\n ...(p.thoughtSignature ? { signature: p.thoughtSignature } : {}),\n };\n } else if (\"text\" in p) {\n return {\n type: \"text\",\n text: p.text,\n };\n } else if (\"inlineData\" in p) {\n return {\n type: \"inlineData\",\n inlineData: p.inlineData,\n };\n } else if (\"functionCall\" in p) {\n return {\n type: \"functionCall\",\n functionCall: p.functionCall,\n };\n } else if (\"functionResponse\" in p) {\n return {\n type: \"functionResponse\",\n functionResponse: p.functionResponse,\n };\n } else if (\"fileData\" in p) {\n return {\n type: \"fileData\",\n fileData: p.fileData,\n };\n } else if (\"executableCode\" in p) {\n return {\n type: \"executableCode\",\n executableCode: p.executableCode,\n };\n } else if (\"codeExecutionResult\" in p) {\n return {\n type: \"codeExecutionResult\",\n codeExecutionResult: p.codeExecutionResult,\n };\n }\n return p;\n });\n } else {\n // no content returned - likely due to abnormal stop reason, e.g. malformed function call\n content = [];\n }\n\n let text = \"\";\n if (content && typeof content === \"string\") {\n text = content;\n } else if (Array.isArray(content)) {\n const block = content.find((b) => \"text\" in b) as\n | { text: string }\n | undefined;\n text = block?.text ?? \"\";\n }\n\n const toolCallChunks: ToolCallChunk[] = [];\n if (functionCalls) {\n toolCallChunks.push(\n ...functionCalls.map((fc) => ({\n type: \"tool_call_chunk\" as const,\n id: fc.id,\n name: fc.functionCall.name,\n args: JSON.stringify(fc.functionCall.args),\n }))\n );\n }\n\n const functionThoughtSignatures = functionCalls?.reduce(\n (acc, fc) => {\n if (\"thoughtSignature\" in fc && typeof fc.thoughtSignature === \"string\") {\n acc[fc.id] = fc.thoughtSignature;\n }\n return acc;\n },\n {} as Record<string, string>\n );\n\n return new ChatGenerationChunk({\n text,\n message: new AIMessageChunk({\n content: content || \"\",\n name: !candidateContent ? undefined : candidateContent.role,\n tool_call_chunks: toolCallChunks,\n // Each chunk can have unique \"generationInfo\", and merging strategy is unclear,\n // so leave blank for now.\n additional_kwargs: {\n [_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY]: functionThoughtSignatures,\n },\n response_metadata: {\n model_provider: \"google-genai\",\n },\n usage_metadata: extra.usageMetadata,\n }),\n generationInfo,\n });\n}\n\nexport function convertToGenerativeAITools(\n tools: GoogleGenerativeAIToolType[]\n): GoogleGenerativeAIFunctionDeclarationsTool[] {\n if (\n tools.every(\n (tool) =>\n \"functionDeclarations\" in tool &&\n Array.isArray(tool.functionDeclarations)\n )\n ) {\n return tools as GoogleGenerativeAIFunctionDeclarationsTool[];\n }\n return [\n {\n functionDeclarations: tools.map(\n (tool): GenerativeAIFunctionDeclaration => {\n if (isLangChainTool(tool)) {\n const jsonSchema = schemaToGenerativeAIParameters(tool.schema);\n if (\n jsonSchema.type === \"object\" &&\n \"properties\" in jsonSchema &&\n Object.keys(jsonSchema.properties).length === 0\n ) {\n return {\n name: tool.name,\n description: tool.description,\n };\n }\n assertNoEmptyStringEnums(jsonSchema, tool.name);\n return {\n name: tool.name,\n description: tool.description,\n parameters: jsonSchema,\n };\n }\n if (isOpenAITool(tool)) {\n const params = jsonSchemaToGeminiParameters(\n tool.function.parameters\n );\n assertNoEmptyStringEnums(params, tool.function.name);\n return {\n name: tool.function.name,\n description:\n tool.function.description ?? `A function available to call.`,\n parameters: params,\n };\n }\n return tool as unknown as GenerativeAIFunctionDeclaration;\n }\n ),\n },\n ];\n}\n\nexport function convertUsageMetadata(\n usageMetadata: GenerateContentResponse[\"usageMetadata\"],\n model: string\n): UsageMetadata {\n const output: UsageMetadata = {\n input_tokens: usageMetadata?.promptTokenCount ?? 0,\n output_tokens: usageMetadata?.candidatesTokenCount ?? 0,\n total_tokens: usageMetadata?.totalTokenCount ?? 0,\n };\n if (usageMetadata?.cachedContentTokenCount) {\n output.input_token_details ??= {};\n output.input_token_details.cache_read =\n usageMetadata.cachedContentTokenCount;\n }\n // gemini-3-pro-preview has bracket based tracking of tokens per request\n // FIXME(hntrl): move this usageMetadata calculation elsewhere\n if (model === \"gemini-3-pro-preview\") {\n const over200k = Math.max(0, usageMetadata?.promptTokenCount ?? 0 - 200000);\n const cachedOver200k = Math.max(\n 0,\n usageMetadata?.cachedContentTokenCount ?? 0 - 200000\n );\n if (over200k) {\n output.input_token_details = {\n ...output.input_token_details,\n over_200k: over200k,\n } as InputTokenDetails;\n }\n if (cachedOver200k) {\n output.input_token_details = {\n ...output.input_token_details,\n cache_read_over_200k: cachedOver200k,\n } as InputTokenDetails;\n }\n }\n return output;\n}\n"],"mappings":"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"}