@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.
- package/CHANGELOG.md +24 -0
- package/dist/chat_models/base.cjs +61 -2
- package/dist/chat_models/base.cjs.map +1 -1
- package/dist/chat_models/base.js +61 -3
- package/dist/chat_models/base.js.map +1 -1
- package/dist/chat_models/index.cjs +2 -1
- package/dist/chat_models/index.cjs.map +1 -1
- package/dist/chat_models/index.js +3 -2
- package/dist/chat_models/index.js.map +1 -1
- package/dist/chat_models/node.cjs +7 -3
- package/dist/chat_models/node.cjs.map +1 -1
- package/dist/chat_models/node.js +8 -4
- package/dist/chat_models/node.js.map +1 -1
- package/dist/clients/index.cjs.map +1 -1
- package/dist/clients/node.cjs.map +1 -1
- package/dist/converters/messages.cjs +75 -29
- package/dist/converters/messages.cjs.map +1 -1
- package/dist/converters/messages.js +75 -29
- package/dist/converters/messages.js.map +1 -1
- package/dist/converters/params.cjs +14 -10
- package/dist/converters/params.cjs.map +1 -1
- package/dist/converters/params.js +14 -10
- package/dist/converters/params.js.map +1 -1
- package/dist/converters/tools.cjs +8 -5
- package/dist/converters/tools.cjs.map +1 -1
- package/dist/converters/tools.js +8 -5
- package/dist/converters/tools.js.map +1 -1
- package/dist/utils/gcp-auth.cjs +13 -11
- package/dist/utils/gcp-auth.cjs.map +1 -1
- package/dist/utils/gcp-auth.js +13 -11
- package/dist/utils/gcp-auth.js.map +1 -1
- package/dist/utils/stream_events.cjs +45 -44
- package/dist/utils/stream_events.cjs.map +1 -1
- package/dist/utils/stream_events.js +45 -44
- package/dist/utils/stream_events.js.map +1 -1
- 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)
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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":";;;;;;;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,
|
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langchain/google",
|
|
3
|
-
"version": "0.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": "^
|
|
19
|
-
"jose": "^6.2.
|
|
18
|
+
"google-auth-library": "^11.0.2",
|
|
19
|
+
"jose": "^6.2.10"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
|
-
"@langchain/core": "^1.2.
|
|
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.
|
|
33
|
+
"@langchain/core": "^1.2.9",
|
|
33
34
|
"@langchain/standard-tests": "0.0.23"
|
|
34
35
|
},
|
|
35
36
|
"publishConfig": {
|