@langchain/google 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/chat_models/base.cjs +61 -2
  3. package/dist/chat_models/base.cjs.map +1 -1
  4. package/dist/chat_models/base.js +61 -3
  5. package/dist/chat_models/base.js.map +1 -1
  6. package/dist/chat_models/index.cjs +2 -1
  7. package/dist/chat_models/index.cjs.map +1 -1
  8. package/dist/chat_models/index.js +3 -2
  9. package/dist/chat_models/index.js.map +1 -1
  10. package/dist/chat_models/node.cjs +7 -3
  11. package/dist/chat_models/node.cjs.map +1 -1
  12. package/dist/chat_models/node.js +8 -4
  13. package/dist/chat_models/node.js.map +1 -1
  14. package/dist/clients/index.cjs.map +1 -1
  15. package/dist/clients/node.cjs.map +1 -1
  16. package/dist/converters/messages.cjs +75 -29
  17. package/dist/converters/messages.cjs.map +1 -1
  18. package/dist/converters/messages.js +75 -29
  19. package/dist/converters/messages.js.map +1 -1
  20. package/dist/converters/params.cjs +14 -10
  21. package/dist/converters/params.cjs.map +1 -1
  22. package/dist/converters/params.js +14 -10
  23. package/dist/converters/params.js.map +1 -1
  24. package/dist/converters/tools.cjs +8 -5
  25. package/dist/converters/tools.cjs.map +1 -1
  26. package/dist/converters/tools.js +8 -5
  27. package/dist/converters/tools.js.map +1 -1
  28. package/dist/utils/gcp-auth.cjs +13 -11
  29. package/dist/utils/gcp-auth.cjs.map +1 -1
  30. package/dist/utils/gcp-auth.js +13 -11
  31. package/dist/utils/gcp-auth.js.map +1 -1
  32. package/dist/utils/stream_events.cjs +45 -44
  33. package/dist/utils/stream_events.cjs.map +1 -1
  34. package/dist/utils/stream_events.js +45 -44
  35. package/dist/utils/stream_events.js.map +1 -1
  36. package/package.json +6 -5
@@ -51,54 +51,55 @@ async function* convertGoogleGeminiStream(source, options = {}) {
51
51
  const parts = candidate?.content?.parts;
52
52
  if (!parts) continue;
53
53
  let toolIdx = 0;
54
- for (const part of parts) if (part.text) if (part.thought) {
55
- const { index, isNew } = getOrCreateBlockIndex("reasoning", {
56
- type: "reasoning",
57
- reasoning: ""
58
- });
59
- if (isNew) yield {
60
- event: "content-block-start",
61
- index,
62
- content: {
54
+ for (const part of parts) if (part.text) {
55
+ if (part.thought) {
56
+ const { index, isNew } = getOrCreateBlockIndex("reasoning", {
63
57
  type: "reasoning",
64
58
  reasoning: ""
65
- }
66
- };
67
- const acc = blockAccumulators.get(index);
68
- acc.reasoning = (acc.reasoning ?? "") + part.text;
69
- yield {
70
- event: "content-block-delta",
71
- index,
72
- delta: {
73
- type: "reasoning-delta",
74
- reasoning: part.text
75
- }
76
- };
77
- } else {
78
- const { index, isNew } = getOrCreateBlockIndex("text", {
79
- type: "text",
80
- text: ""
81
- });
82
- if (isNew) yield {
83
- event: "content-block-start",
84
- index,
85
- content: {
59
+ });
60
+ if (isNew) yield {
61
+ event: "content-block-start",
62
+ index,
63
+ content: {
64
+ type: "reasoning",
65
+ reasoning: ""
66
+ }
67
+ };
68
+ const acc = blockAccumulators.get(index);
69
+ acc.reasoning = (acc.reasoning ?? "") + part.text;
70
+ yield {
71
+ event: "content-block-delta",
72
+ index,
73
+ delta: {
74
+ type: "reasoning-delta",
75
+ reasoning: part.text
76
+ }
77
+ };
78
+ } else {
79
+ const { index, isNew } = getOrCreateBlockIndex("text", {
86
80
  type: "text",
87
81
  text: ""
88
- }
89
- };
90
- const acc = blockAccumulators.get(index);
91
- acc.text = (acc.text ?? "") + part.text;
92
- yield {
93
- event: "content-block-delta",
94
- index,
95
- delta: {
96
- type: "text-delta",
97
- text: part.text
98
- }
99
- };
100
- }
101
- else if (part.functionCall) {
82
+ });
83
+ if (isNew) yield {
84
+ event: "content-block-start",
85
+ index,
86
+ content: {
87
+ type: "text",
88
+ text: ""
89
+ }
90
+ };
91
+ const acc = blockAccumulators.get(index);
92
+ acc.text = (acc.text ?? "") + part.text;
93
+ yield {
94
+ event: "content-block-delta",
95
+ index,
96
+ delta: {
97
+ type: "text-delta",
98
+ text: part.text
99
+ }
100
+ };
101
+ }
102
+ } else if (part.functionCall) {
102
103
  const key = `tool:${toolIdx}`;
103
104
  const args = JSON.stringify(part.functionCall.args ?? {});
104
105
  const { index, isNew } = getOrCreateBlockIndex(key, {
@@ -1 +1 @@
1
- {"version":3,"file":"stream_events.js","names":[],"sources":["../../src/utils/stream_events.ts"],"sourcesContent":["/**\n * Converts Gemini stream responses into LangChain ChatModelStreamEvents.\n *\n * @module\n */\n\nimport { finalizeContentBlock } from \"@langchain/core/language_models/compat\";\nimport type {\n ChatModelStreamEvent,\n FinishReason,\n} from \"@langchain/core/language_models/event\";\nimport type { ContentBlock, UsageMetadata } from \"@langchain/core/messages\";\nimport type { Gemini } from \"../chat_models/api-types.js\";\n\nexport type GeminiStreamResponse = Gemini.GenerateContentResponse;\n\nexport interface ConvertGoogleGeminiStreamOptions {\n streamUsage?: boolean;\n}\n\ntype BlockKey = \"text\" | \"reasoning\" | `tool:${number}`;\n\nexport async function* convertGoogleGeminiStream(\n source: AsyncIterable<GeminiStreamResponse>,\n options: ConvertGoogleGeminiStreamOptions = {}\n): AsyncGenerator<ChatModelStreamEvent> {\n const shouldStreamUsage = options.streamUsage ?? true;\n const blockAccumulators = new Map<\n number,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n Record<string, any>\n >();\n const blockKeyToIndex = new Map<BlockKey, number>();\n let nextBlockIndex = 0;\n let messageStarted = false;\n let usageSnapshot: UsageMetadata | undefined;\n let finishReason: FinishReason = \"stop\";\n\n const getOrCreateBlockIndex = (\n key: BlockKey,\n initial: Record<string, unknown>\n ): { index: number; isNew: boolean } => {\n const existing = blockKeyToIndex.get(key);\n if (existing !== undefined) {\n return { index: existing, isNew: false };\n }\n const index = nextBlockIndex++;\n blockKeyToIndex.set(key, index);\n blockAccumulators.set(index, { ...initial });\n return { index, isNew: true };\n };\n\n for await (const response of source) {\n if (!messageStarted) {\n messageStarted = true;\n yield { event: \"message-start\" as const };\n }\n\n const usageMetadata = response.usageMetadata ?? response.usage_metadata;\n if (shouldStreamUsage && usageMetadata) {\n const input = usageMetadata.promptTokenCount ?? 0;\n const output = usageMetadata.candidatesTokenCount ?? 0;\n usageSnapshot = {\n input_tokens: input,\n output_tokens: output,\n total_tokens: usageMetadata.totalTokenCount ?? input + output,\n };\n yield { event: \"usage\" as const, usage: usageSnapshot };\n }\n\n const candidate = response.candidates?.[0];\n if (candidate?.finishReason) {\n finishReason = mapGeminiFinishReason(candidate.finishReason);\n }\n\n const parts = candidate?.content?.parts;\n if (!parts) continue;\n\n let toolIdx = 0;\n for (const part of parts) {\n if (part.text) {\n if (part.thought) {\n const key: BlockKey = \"reasoning\";\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"reasoning\",\n reasoning: \"\",\n });\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: { type: \"reasoning\", reasoning: \"\" } as ContentBlock,\n };\n }\n const acc = blockAccumulators.get(index)!;\n acc.reasoning = (acc.reasoning ?? \"\") + part.text;\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: { type: \"reasoning-delta\" as const, reasoning: part.text },\n };\n } else {\n const key: BlockKey = \"text\";\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"text\",\n text: \"\",\n });\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: { type: \"text\", text: \"\" } as ContentBlock,\n };\n }\n const acc = blockAccumulators.get(index)!;\n acc.text = (acc.text ?? \"\") + part.text;\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: { type: \"text-delta\" as const, text: part.text },\n };\n }\n } else if (part.functionCall) {\n const key: BlockKey = `tool:${toolIdx}`;\n const args = JSON.stringify(part.functionCall.args ?? {});\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"tool_call_chunk\",\n name: part.functionCall.name,\n args: \"\",\n index: toolIdx,\n });\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: {\n type: \"tool_call_chunk\",\n name: part.functionCall.name,\n args: \"\",\n index: toolIdx,\n } as ContentBlock,\n };\n }\n const acc = blockAccumulators.get(index)!;\n acc.args = args;\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: {\n type: \"block-delta\" as const,\n fields: {\n type: \"tool_call_chunk\",\n name: acc.name,\n args: acc.args,\n },\n },\n };\n toolIdx += 1;\n }\n }\n }\n\n for (const [index, acc] of blockAccumulators) {\n yield {\n event: \"content-block-finish\" as const,\n index,\n content: finalizeContentBlock(acc as ContentBlock),\n };\n }\n\n yield {\n event: \"message-finish\" as const,\n reason: finishReason,\n ...(usageSnapshot ? { usage: usageSnapshot } : {}),\n responseMetadata: { model_provider: \"google\" },\n };\n}\n\nfunction mapGeminiFinishReason(reason: string): FinishReason {\n switch (reason.toLowerCase()) {\n case \"max_tokens\":\n case \"max-token\":\n case \"max_token\":\n return \"length\";\n case \"safety\":\n case \"recitation\":\n case \"language\":\n case \"blocklist\":\n case \"prohibited_content\":\n case \"prohibited-content\":\n case \"spii\":\n case \"image_safety\":\n case \"image-safety\":\n case \"image_prohibited_content\":\n case \"image-prohibited-content\":\n case \"image_recitation\":\n case \"image-recitation\":\n return \"content_filter\";\n default:\n return \"stop\";\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"stream_events.js","names":[],"sources":["../../src/utils/stream_events.ts"],"sourcesContent":["/**\n * Converts Gemini stream responses into LangChain ChatModelStreamEvents.\n *\n * @module\n */\n\nimport { finalizeContentBlock } from \"@langchain/core/language_models/compat\";\nimport type {\n ChatModelStreamEvent,\n FinishReason,\n} from \"@langchain/core/language_models/event\";\nimport type { ContentBlock, UsageMetadata } from \"@langchain/core/messages\";\nimport type { Gemini } from \"../chat_models/api-types.js\";\n\nexport type GeminiStreamResponse = Gemini.GenerateContentResponse;\n\nexport interface ConvertGoogleGeminiStreamOptions {\n streamUsage?: boolean;\n}\n\ntype BlockKey = \"text\" | \"reasoning\" | `tool:${number}`;\n\nexport async function* convertGoogleGeminiStream(\n source: AsyncIterable<GeminiStreamResponse>,\n options: ConvertGoogleGeminiStreamOptions = {}\n): AsyncGenerator<ChatModelStreamEvent> {\n const shouldStreamUsage = options.streamUsage ?? true;\n const blockAccumulators = new Map<\n number,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n Record<string, any>\n >();\n const blockKeyToIndex = new Map<BlockKey, number>();\n let nextBlockIndex = 0;\n let messageStarted = false;\n let usageSnapshot: UsageMetadata | undefined;\n let finishReason: FinishReason = \"stop\";\n\n const getOrCreateBlockIndex = (\n key: BlockKey,\n initial: Record<string, unknown>\n ): { index: number; isNew: boolean } => {\n const existing = blockKeyToIndex.get(key);\n if (existing !== undefined) {\n return { index: existing, isNew: false };\n }\n const index = nextBlockIndex++;\n blockKeyToIndex.set(key, index);\n blockAccumulators.set(index, { ...initial });\n return { index, isNew: true };\n };\n\n for await (const response of source) {\n if (!messageStarted) {\n messageStarted = true;\n yield { event: \"message-start\" as const };\n }\n\n const usageMetadata = response.usageMetadata ?? response.usage_metadata;\n if (shouldStreamUsage && usageMetadata) {\n const input = usageMetadata.promptTokenCount ?? 0;\n const output = usageMetadata.candidatesTokenCount ?? 0;\n usageSnapshot = {\n input_tokens: input,\n output_tokens: output,\n total_tokens: usageMetadata.totalTokenCount ?? input + output,\n };\n yield { event: \"usage\" as const, usage: usageSnapshot };\n }\n\n const candidate = response.candidates?.[0];\n if (candidate?.finishReason) {\n finishReason = mapGeminiFinishReason(candidate.finishReason);\n }\n\n const parts = candidate?.content?.parts;\n if (!parts) continue;\n\n let toolIdx = 0;\n for (const part of parts) {\n if (part.text) {\n if (part.thought) {\n const key: BlockKey = \"reasoning\";\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"reasoning\",\n reasoning: \"\",\n });\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: { type: \"reasoning\", reasoning: \"\" } as ContentBlock,\n };\n }\n const acc = blockAccumulators.get(index)!;\n acc.reasoning = (acc.reasoning ?? \"\") + part.text;\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: { type: \"reasoning-delta\" as const, reasoning: part.text },\n };\n } else {\n const key: BlockKey = \"text\";\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"text\",\n text: \"\",\n });\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: { type: \"text\", text: \"\" } as ContentBlock,\n };\n }\n const acc = blockAccumulators.get(index)!;\n acc.text = (acc.text ?? \"\") + part.text;\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: { type: \"text-delta\" as const, text: part.text },\n };\n }\n } else if (part.functionCall) {\n const key: BlockKey = `tool:${toolIdx}`;\n const args = JSON.stringify(part.functionCall.args ?? {});\n const { index, isNew } = getOrCreateBlockIndex(key, {\n type: \"tool_call_chunk\",\n name: part.functionCall.name,\n args: \"\",\n index: toolIdx,\n });\n if (isNew) {\n yield {\n event: \"content-block-start\" as const,\n index,\n content: {\n type: \"tool_call_chunk\",\n name: part.functionCall.name,\n args: \"\",\n index: toolIdx,\n } as ContentBlock,\n };\n }\n const acc = blockAccumulators.get(index)!;\n acc.args = args;\n yield {\n event: \"content-block-delta\" as const,\n index,\n delta: {\n type: \"block-delta\" as const,\n fields: {\n type: \"tool_call_chunk\",\n name: acc.name,\n args: acc.args,\n },\n },\n };\n toolIdx += 1;\n }\n }\n }\n\n for (const [index, acc] of blockAccumulators) {\n yield {\n event: \"content-block-finish\" as const,\n index,\n content: finalizeContentBlock(acc as ContentBlock),\n };\n }\n\n yield {\n event: \"message-finish\" as const,\n reason: finishReason,\n ...(usageSnapshot ? { usage: usageSnapshot } : {}),\n responseMetadata: { model_provider: \"google\" },\n };\n}\n\nfunction mapGeminiFinishReason(reason: string): FinishReason {\n switch (reason.toLowerCase()) {\n case \"max_tokens\":\n case \"max-token\":\n case \"max_token\":\n return \"length\";\n case \"safety\":\n case \"recitation\":\n case \"language\":\n case \"blocklist\":\n case \"prohibited_content\":\n case \"prohibited-content\":\n case \"spii\":\n case \"image_safety\":\n case \"image-safety\":\n case \"image_prohibited_content\":\n case \"image-prohibited-content\":\n case \"image_recitation\":\n case \"image-recitation\":\n return \"content_filter\";\n default:\n return \"stop\";\n }\n}\n"],"mappings":";;;;;;;AAsBA,gBAAuB,0BACrB,QACA,UAA4C,CAAC,GACP;CACtC,MAAM,oBAAoB,QAAQ,eAAe;CACjD,MAAM,oCAAoB,IAAI,IAI5B;CACF,MAAM,kCAAkB,IAAI,IAAsB;CAClD,IAAI,iBAAiB;CACrB,IAAI,iBAAiB;CACrB,IAAI;CACJ,IAAI,eAA6B;CAEjC,MAAM,yBACJ,KACA,YACsC;EACtC,MAAM,WAAW,gBAAgB,IAAI,GAAG;EACxC,IAAI,aAAa,KAAA,GACf,OAAO;GAAE,OAAO;GAAU,OAAO;EAAM;EAEzC,MAAM,QAAQ;EACd,gBAAgB,IAAI,KAAK,KAAK;EAC9B,kBAAkB,IAAI,OAAO,EAAE,GAAG,QAAQ,CAAC;EAC3C,OAAO;GAAE;GAAO,OAAO;EAAK;CAC9B;CAEA,WAAW,MAAM,YAAY,QAAQ;EACnC,IAAI,CAAC,gBAAgB;GACnB,iBAAiB;GACjB,MAAM,EAAE,OAAO,gBAAyB;EAC1C;EAEA,MAAM,gBAAgB,SAAS,iBAAiB,SAAS;EACzD,IAAI,qBAAqB,eAAe;GACtC,MAAM,QAAQ,cAAc,oBAAoB;GAChD,MAAM,SAAS,cAAc,wBAAwB;GACrD,gBAAgB;IACd,cAAc;IACd,eAAe;IACf,cAAc,cAAc,mBAAmB,QAAQ;GACzD;GACA,MAAM;IAAE,OAAO;IAAkB,OAAO;GAAc;EACxD;EAEA,MAAM,YAAY,SAAS,aAAa;EACxC,IAAI,WAAW,cACb,eAAe,sBAAsB,UAAU,YAAY;EAG7D,MAAM,QAAQ,WAAW,SAAS;EAClC,IAAI,CAAC,OAAO;EAEZ,IAAI,UAAU;EACd,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,MAAM;GACb,IAAI,KAAK,SAAS;IAEhB,MAAM,EAAE,OAAO,UAAU,sBAAsB,aAAK;KAClD,MAAM;KACN,WAAW;IACb,CAAC;IACD,IAAI,OACF,MAAM;KACJ,OAAO;KACP;KACA,SAAS;MAAE,MAAM;MAAa,WAAW;KAAG;IAC9C;IAEF,MAAM,MAAM,kBAAkB,IAAI,KAAK;IACvC,IAAI,aAAa,IAAI,aAAa,MAAM,KAAK;IAC7C,MAAM;KACJ,OAAO;KACP;KACA,OAAO;MAAE,MAAM;MAA4B,WAAW,KAAK;KAAK;IAClE;GACF,OAAO;IAEL,MAAM,EAAE,OAAO,UAAU,sBAAsB,QAAK;KAClD,MAAM;KACN,MAAM;IACR,CAAC;IACD,IAAI,OACF,MAAM;KACJ,OAAO;KACP;KACA,SAAS;MAAE,MAAM;MAAQ,MAAM;KAAG;IACpC;IAEF,MAAM,MAAM,kBAAkB,IAAI,KAAK;IACvC,IAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK;IACnC,MAAM;KACJ,OAAO;KACP;KACA,OAAO;MAAE,MAAM;MAAuB,MAAM,KAAK;KAAK;IACxD;GACF;EACF,OAAO,IAAI,KAAK,cAAc;GAC5B,MAAM,MAAgB,QAAQ;GAC9B,MAAM,OAAO,KAAK,UAAU,KAAK,aAAa,QAAQ,CAAC,CAAC;GACxD,MAAM,EAAE,OAAO,UAAU,sBAAsB,KAAK;IAClD,MAAM;IACN,MAAM,KAAK,aAAa;IACxB,MAAM;IACN,OAAO;GACT,CAAC;GACD,IAAI,OACF,MAAM;IACJ,OAAO;IACP;IACA,SAAS;KACP,MAAM;KACN,MAAM,KAAK,aAAa;KACxB,MAAM;KACN,OAAO;IACT;GACF;GAEF,MAAM,MAAM,kBAAkB,IAAI,KAAK;GACvC,IAAI,OAAO;GACX,MAAM;IACJ,OAAO;IACP;IACA,OAAO;KACL,MAAM;KACN,QAAQ;MACN,MAAM;MACN,MAAM,IAAI;MACV,MAAM,IAAI;KACZ;IACF;GACF;GACA,WAAW;EACb;CAEJ;CAEA,KAAK,MAAM,CAAC,OAAO,QAAQ,mBACzB,MAAM;EACJ,OAAO;EACP;EACA,SAAS,qBAAqB,GAAmB;CACnD;CAGF,MAAM;EACJ,OAAO;EACP,QAAQ;EACR,GAAI,gBAAgB,EAAE,OAAO,cAAc,IAAI,CAAC;EAChD,kBAAkB,EAAE,gBAAgB,SAAS;CAC/C;AACF;AAEA,SAAS,sBAAsB,QAA8B;CAC3D,QAAQ,OAAO,YAAY,GAA3B;EACE,KAAK;EACL,KAAK;EACL,KAAK,aACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,oBACH,OAAO;EACT,SACE,OAAO;CACX;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/google",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Google integrations for LangChain.js",
5
5
  "author": "LangChain",
6
6
  "license": "MIT",
@@ -15,21 +15,22 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "eventsource-parser": "^3.1.0",
18
- "google-auth-library": "^10.9.1",
19
- "jose": "^6.2.4"
18
+ "google-auth-library": "^11.0.2",
19
+ "jose": "^6.2.10"
20
20
  },
21
21
  "peerDependencies": {
22
- "@langchain/core": "^1.2.8"
22
+ "@langchain/core": "^1.2.9"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@tsconfig/recommended": "^1.0.10",
26
+ "@types/node": "^26.2.0",
26
27
  "dpdm": "^3.14.0",
27
28
  "sparktype": "^0.1.3",
28
29
  "typescript": "~7.0.2",
29
30
  "vitest": "^4.1.8",
30
31
  "zod": "^3.25.76 || ^4",
31
32
  "zod-to-json-schema": "^3.25.2",
32
- "@langchain/core": "^1.2.8",
33
+ "@langchain/core": "^1.2.9",
33
34
  "@langchain/standard-tests": "0.0.23"
34
35
  },
35
36
  "publishConfig": {