@langchain/google 0.1.2 → 0.1.3

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.
@@ -0,0 +1,57 @@
1
+
2
+ //#region src/utils/metadata.ts
3
+ /**
4
+ * Computes the delta between two token detail objects by subtracting
5
+ * each field in `previous` from the corresponding field in `current`.
6
+ *
7
+ * This is used to convert cumulative token detail counts (as reported
8
+ * by the Gemini streaming API) into per-chunk deltas that can be
9
+ * correctly summed by {@link mergeUsageMetadata} during chunk
10
+ * concatenation.
11
+ *
12
+ * @param current - The cumulative token details from the current chunk.
13
+ * @param previous - The cumulative token details from the previous chunk.
14
+ * @returns The per-chunk delta, or `undefined` if `current` is undefined.
15
+ */
16
+ function subtractTokenDetails(current, previous) {
17
+ if (!current) return void 0;
18
+ if (!previous) return current;
19
+ const result = {};
20
+ for (const key of Object.keys(current)) {
21
+ const cur = current[key];
22
+ const prev = previous[key];
23
+ if (cur !== void 0) result[key] = cur - (prev ?? 0);
24
+ }
25
+ return result;
26
+ }
27
+ /**
28
+ * Computes the delta between two {@link UsageMetadata} objects by
29
+ * subtracting each field in `previous` from the corresponding field in
30
+ * `current`.
31
+ *
32
+ * The Gemini streaming API reports **cumulative** token counts on every
33
+ * SSE chunk, but `@langchain/core`'s `mergeUsageMetadata` combines
34
+ * values via addition. Emitting raw cumulative values on each
35
+ * `AIMessageChunk` would therefore inflate the totals when chunks are
36
+ * concatenated. This function converts cumulative values into per-chunk
37
+ * deltas so that additive merging produces the correct final totals.
38
+ *
39
+ * @param current - The cumulative usage metadata from the current chunk.
40
+ * @param previous - The cumulative usage metadata from the previous
41
+ * chunk, or `undefined` for the first chunk in the stream.
42
+ * @returns The per-chunk delta usage metadata.
43
+ */
44
+ function subtractUsageMetadata(current, previous) {
45
+ if (!previous) return current;
46
+ return {
47
+ input_tokens: current.input_tokens - previous.input_tokens,
48
+ output_tokens: current.output_tokens - previous.output_tokens,
49
+ total_tokens: current.total_tokens - previous.total_tokens,
50
+ input_token_details: subtractTokenDetails(current.input_token_details, previous.input_token_details),
51
+ output_token_details: subtractTokenDetails(current.output_token_details, previous.output_token_details)
52
+ };
53
+ }
54
+
55
+ //#endregion
56
+ exports.subtractUsageMetadata = subtractUsageMetadata;
57
+ //# sourceMappingURL=metadata.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.cjs","names":[],"sources":["../../src/utils/metadata.ts"],"sourcesContent":["import type {\n UsageMetadata,\n InputTokenDetails,\n OutputTokenDetails,\n} from \"@langchain/core/messages\";\n\n/**\n * Computes the delta between two token detail objects by subtracting\n * each field in `previous` from the corresponding field in `current`.\n *\n * This is used to convert cumulative token detail counts (as reported\n * by the Gemini streaming API) into per-chunk deltas that can be\n * correctly summed by {@link mergeUsageMetadata} during chunk\n * concatenation.\n *\n * @param current - The cumulative token details from the current chunk.\n * @param previous - The cumulative token details from the previous chunk.\n * @returns The per-chunk delta, or `undefined` if `current` is undefined.\n */\nfunction subtractTokenDetails<T extends InputTokenDetails | OutputTokenDetails>(\n current?: T,\n previous?: T\n): T | undefined {\n if (!current) return undefined;\n if (!previous) return current;\n const result = {} as Record<string, number>;\n for (const key of Object.keys(current) as (keyof T)[]) {\n const cur = current[key] as number | undefined;\n const prev = previous[key] as number | undefined;\n if (cur !== undefined) {\n result[key as string] = cur - (prev ?? 0);\n }\n }\n return result as T;\n}\n\n/**\n * Computes the delta between two {@link UsageMetadata} objects by\n * subtracting each field in `previous` from the corresponding field in\n * `current`.\n *\n * The Gemini streaming API reports **cumulative** token counts on every\n * SSE chunk, but `@langchain/core`'s `mergeUsageMetadata` combines\n * values via addition. Emitting raw cumulative values on each\n * `AIMessageChunk` would therefore inflate the totals when chunks are\n * concatenated. This function converts cumulative values into per-chunk\n * deltas so that additive merging produces the correct final totals.\n *\n * @param current - The cumulative usage metadata from the current chunk.\n * @param previous - The cumulative usage metadata from the previous\n * chunk, or `undefined` for the first chunk in the stream.\n * @returns The per-chunk delta usage metadata.\n */\nexport function subtractUsageMetadata(\n current: UsageMetadata,\n previous?: UsageMetadata\n): UsageMetadata {\n if (!previous) return current;\n return {\n input_tokens: current.input_tokens - previous.input_tokens,\n output_tokens: current.output_tokens - previous.output_tokens,\n total_tokens: current.total_tokens - previous.total_tokens,\n input_token_details: subtractTokenDetails(\n current.input_token_details,\n previous.input_token_details\n ),\n output_token_details: subtractTokenDetails(\n current.output_token_details,\n previous.output_token_details\n ),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,SAAS,qBACP,SACA,UACe;AACf,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI,CAAC,SAAU,QAAO;CACtB,MAAM,SAAS,EAAE;AACjB,MAAK,MAAM,OAAO,OAAO,KAAK,QAAQ,EAAiB;EACrD,MAAM,MAAM,QAAQ;EACpB,MAAM,OAAO,SAAS;AACtB,MAAI,QAAQ,OACV,QAAO,OAAiB,OAAO,QAAQ;;AAG3C,QAAO;;;;;;;;;;;;;;;;;;;AAoBT,SAAgB,sBACd,SACA,UACe;AACf,KAAI,CAAC,SAAU,QAAO;AACtB,QAAO;EACL,cAAc,QAAQ,eAAe,SAAS;EAC9C,eAAe,QAAQ,gBAAgB,SAAS;EAChD,cAAc,QAAQ,eAAe,SAAS;EAC9C,qBAAqB,qBACnB,QAAQ,qBACR,SAAS,oBACV;EACD,sBAAsB,qBACpB,QAAQ,sBACR,SAAS,qBACV;EACF"}
@@ -0,0 +1,56 @@
1
+ //#region src/utils/metadata.ts
2
+ /**
3
+ * Computes the delta between two token detail objects by subtracting
4
+ * each field in `previous` from the corresponding field in `current`.
5
+ *
6
+ * This is used to convert cumulative token detail counts (as reported
7
+ * by the Gemini streaming API) into per-chunk deltas that can be
8
+ * correctly summed by {@link mergeUsageMetadata} during chunk
9
+ * concatenation.
10
+ *
11
+ * @param current - The cumulative token details from the current chunk.
12
+ * @param previous - The cumulative token details from the previous chunk.
13
+ * @returns The per-chunk delta, or `undefined` if `current` is undefined.
14
+ */
15
+ function subtractTokenDetails(current, previous) {
16
+ if (!current) return void 0;
17
+ if (!previous) return current;
18
+ const result = {};
19
+ for (const key of Object.keys(current)) {
20
+ const cur = current[key];
21
+ const prev = previous[key];
22
+ if (cur !== void 0) result[key] = cur - (prev ?? 0);
23
+ }
24
+ return result;
25
+ }
26
+ /**
27
+ * Computes the delta between two {@link UsageMetadata} objects by
28
+ * subtracting each field in `previous` from the corresponding field in
29
+ * `current`.
30
+ *
31
+ * The Gemini streaming API reports **cumulative** token counts on every
32
+ * SSE chunk, but `@langchain/core`'s `mergeUsageMetadata` combines
33
+ * values via addition. Emitting raw cumulative values on each
34
+ * `AIMessageChunk` would therefore inflate the totals when chunks are
35
+ * concatenated. This function converts cumulative values into per-chunk
36
+ * deltas so that additive merging produces the correct final totals.
37
+ *
38
+ * @param current - The cumulative usage metadata from the current chunk.
39
+ * @param previous - The cumulative usage metadata from the previous
40
+ * chunk, or `undefined` for the first chunk in the stream.
41
+ * @returns The per-chunk delta usage metadata.
42
+ */
43
+ function subtractUsageMetadata(current, previous) {
44
+ if (!previous) return current;
45
+ return {
46
+ input_tokens: current.input_tokens - previous.input_tokens,
47
+ output_tokens: current.output_tokens - previous.output_tokens,
48
+ total_tokens: current.total_tokens - previous.total_tokens,
49
+ input_token_details: subtractTokenDetails(current.input_token_details, previous.input_token_details),
50
+ output_token_details: subtractTokenDetails(current.output_token_details, previous.output_token_details)
51
+ };
52
+ }
53
+
54
+ //#endregion
55
+ export { subtractUsageMetadata };
56
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","names":[],"sources":["../../src/utils/metadata.ts"],"sourcesContent":["import type {\n UsageMetadata,\n InputTokenDetails,\n OutputTokenDetails,\n} from \"@langchain/core/messages\";\n\n/**\n * Computes the delta between two token detail objects by subtracting\n * each field in `previous` from the corresponding field in `current`.\n *\n * This is used to convert cumulative token detail counts (as reported\n * by the Gemini streaming API) into per-chunk deltas that can be\n * correctly summed by {@link mergeUsageMetadata} during chunk\n * concatenation.\n *\n * @param current - The cumulative token details from the current chunk.\n * @param previous - The cumulative token details from the previous chunk.\n * @returns The per-chunk delta, or `undefined` if `current` is undefined.\n */\nfunction subtractTokenDetails<T extends InputTokenDetails | OutputTokenDetails>(\n current?: T,\n previous?: T\n): T | undefined {\n if (!current) return undefined;\n if (!previous) return current;\n const result = {} as Record<string, number>;\n for (const key of Object.keys(current) as (keyof T)[]) {\n const cur = current[key] as number | undefined;\n const prev = previous[key] as number | undefined;\n if (cur !== undefined) {\n result[key as string] = cur - (prev ?? 0);\n }\n }\n return result as T;\n}\n\n/**\n * Computes the delta between two {@link UsageMetadata} objects by\n * subtracting each field in `previous` from the corresponding field in\n * `current`.\n *\n * The Gemini streaming API reports **cumulative** token counts on every\n * SSE chunk, but `@langchain/core`'s `mergeUsageMetadata` combines\n * values via addition. Emitting raw cumulative values on each\n * `AIMessageChunk` would therefore inflate the totals when chunks are\n * concatenated. This function converts cumulative values into per-chunk\n * deltas so that additive merging produces the correct final totals.\n *\n * @param current - The cumulative usage metadata from the current chunk.\n * @param previous - The cumulative usage metadata from the previous\n * chunk, or `undefined` for the first chunk in the stream.\n * @returns The per-chunk delta usage metadata.\n */\nexport function subtractUsageMetadata(\n current: UsageMetadata,\n previous?: UsageMetadata\n): UsageMetadata {\n if (!previous) return current;\n return {\n input_tokens: current.input_tokens - previous.input_tokens,\n output_tokens: current.output_tokens - previous.output_tokens,\n total_tokens: current.total_tokens - previous.total_tokens,\n input_token_details: subtractTokenDetails(\n current.input_token_details,\n previous.input_token_details\n ),\n output_token_details: subtractTokenDetails(\n current.output_token_details,\n previous.output_token_details\n ),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAmBA,SAAS,qBACP,SACA,UACe;AACf,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI,CAAC,SAAU,QAAO;CACtB,MAAM,SAAS,EAAE;AACjB,MAAK,MAAM,OAAO,OAAO,KAAK,QAAQ,EAAiB;EACrD,MAAM,MAAM,QAAQ;EACpB,MAAM,OAAO,SAAS;AACtB,MAAI,QAAQ,OACV,QAAO,OAAiB,OAAO,QAAQ;;AAG3C,QAAO;;;;;;;;;;;;;;;;;;;AAoBT,SAAgB,sBACd,SACA,UACe;AACf,KAAI,CAAC,SAAU,QAAO;AACtB,QAAO;EACL,cAAc,QAAQ,eAAe,SAAS;EAC9C,eAAe,QAAQ,gBAAgB,SAAS;EAChD,cAAc,QAAQ,eAAe,SAAS;EAC9C,qBAAqB,qBACnB,QAAQ,qBACR,SAAS,oBACV;EACD,sBAAsB,qBACpB,QAAQ,sBACR,SAAS,qBACV;EACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/google",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Google integrations for LangChain.js",
5
5
  "author": "LangChain",
6
6
  "license": "MIT",
@@ -16,7 +16,8 @@
16
16
  "dependencies": {
17
17
  "eventsource-parser": "^3.0.6",
18
18
  "google-auth-library": "^10.5.0",
19
- "jose": "^6.1.3"
19
+ "jose": "^6.1.3",
20
+ "uuid": "^10.0.0"
20
21
  },
21
22
  "peerDependencies": {
22
23
  "@langchain/core": "^1.0.0"
@@ -31,7 +32,7 @@
31
32
  "vitest": "^3.2.4",
32
33
  "zod": "^3.25.76 || ^4",
33
34
  "zod-to-json-schema": "^3.24.6",
34
- "@langchain/core": "^1.1.27",
35
+ "@langchain/core": "^1.1.29",
35
36
  "@langchain/eslint": "0.1.1",
36
37
  "@langchain/standard-tests": "0.0.23"
37
38
  },