@langchain/google 0.1.11 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/chat_models/api-types.d.cts +257 -102
- package/dist/chat_models/api-types.d.ts +257 -102
- package/dist/chat_models/base.cjs +76 -9
- package/dist/chat_models/base.cjs.map +1 -1
- package/dist/chat_models/base.d.cts +5 -0
- package/dist/chat_models/base.d.ts +5 -0
- package/dist/chat_models/base.js +77 -10
- package/dist/chat_models/base.js.map +1 -1
- package/dist/chat_models/node.cjs.map +1 -1
- package/dist/chat_models/node.js.map +1 -1
- package/dist/chat_models/types.cjs +6 -0
- package/dist/chat_models/types.cjs.map +1 -0
- package/dist/chat_models/types.d.cts +13 -0
- package/dist/chat_models/types.d.ts +13 -0
- package/dist/chat_models/types.js +6 -0
- package/dist/chat_models/types.js.map +1 -0
- package/dist/clients/node.cjs.map +1 -1
- package/dist/clients/node.js.map +1 -1
- package/dist/converters/messages.cjs +12 -0
- package/dist/converters/messages.cjs.map +1 -1
- package/dist/converters/messages.js +12 -0
- package/dist/converters/messages.js.map +1 -1
- package/dist/converters/params.cjs +12 -0
- package/dist/converters/params.cjs.map +1 -1
- package/dist/converters/params.js +12 -1
- package/dist/converters/params.js.map +1 -1
- package/dist/converters/tools.cjs.map +1 -1
- package/dist/converters/tools.js.map +1 -1
- package/dist/utils/gcp-auth.cjs.map +1 -1
- package/dist/utils/gcp-auth.js.map +1 -1
- package/dist/utils/stream_events.cjs +173 -0
- package/dist/utils/stream_events.cjs.map +1 -0
- package/dist/utils/stream_events.js +173 -0
- package/dist/utils/stream_events.js.map +1 -0
- package/node.cjs +1 -0
- package/node.d.cts +1 -0
- package/node.d.ts +1 -0
- package/node.js +1 -0
- package/package.json +13 -8
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { finalizeContentBlock } from "@langchain/core/language_models/compat";
|
|
2
|
+
//#region src/utils/stream_events.ts
|
|
3
|
+
/**
|
|
4
|
+
* Converts Gemini stream responses into LangChain ChatModelStreamEvents.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
async function* convertGoogleGeminiStream(source, options = {}) {
|
|
9
|
+
const shouldStreamUsage = options.streamUsage ?? true;
|
|
10
|
+
const blockAccumulators = /* @__PURE__ */ new Map();
|
|
11
|
+
const blockKeyToIndex = /* @__PURE__ */ new Map();
|
|
12
|
+
let nextBlockIndex = 0;
|
|
13
|
+
let messageStarted = false;
|
|
14
|
+
let usageSnapshot;
|
|
15
|
+
let finishReason = "stop";
|
|
16
|
+
const getOrCreateBlockIndex = (key, initial) => {
|
|
17
|
+
const existing = blockKeyToIndex.get(key);
|
|
18
|
+
if (existing !== void 0) return {
|
|
19
|
+
index: existing,
|
|
20
|
+
isNew: false
|
|
21
|
+
};
|
|
22
|
+
const index = nextBlockIndex++;
|
|
23
|
+
blockKeyToIndex.set(key, index);
|
|
24
|
+
blockAccumulators.set(index, { ...initial });
|
|
25
|
+
return {
|
|
26
|
+
index,
|
|
27
|
+
isNew: true
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
for await (const response of source) {
|
|
31
|
+
if (!messageStarted) {
|
|
32
|
+
messageStarted = true;
|
|
33
|
+
yield { event: "message-start" };
|
|
34
|
+
}
|
|
35
|
+
const usageMetadata = response.usageMetadata ?? response.usage_metadata;
|
|
36
|
+
if (shouldStreamUsage && usageMetadata) {
|
|
37
|
+
const input = usageMetadata.promptTokenCount ?? 0;
|
|
38
|
+
const output = usageMetadata.candidatesTokenCount ?? 0;
|
|
39
|
+
usageSnapshot = {
|
|
40
|
+
input_tokens: input,
|
|
41
|
+
output_tokens: output,
|
|
42
|
+
total_tokens: usageMetadata.totalTokenCount ?? input + output
|
|
43
|
+
};
|
|
44
|
+
yield {
|
|
45
|
+
event: "usage",
|
|
46
|
+
usage: usageSnapshot
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const candidate = response.candidates?.[0];
|
|
50
|
+
if (candidate?.finishReason) finishReason = mapGeminiFinishReason(candidate.finishReason);
|
|
51
|
+
const parts = candidate?.content?.parts;
|
|
52
|
+
if (!parts) continue;
|
|
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: {
|
|
63
|
+
type: "reasoning",
|
|
64
|
+
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: {
|
|
86
|
+
type: "text",
|
|
87
|
+
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) {
|
|
102
|
+
const key = `tool:${toolIdx}`;
|
|
103
|
+
const args = JSON.stringify(part.functionCall.args ?? {});
|
|
104
|
+
const { index, isNew } = getOrCreateBlockIndex(key, {
|
|
105
|
+
type: "tool_call_chunk",
|
|
106
|
+
name: part.functionCall.name,
|
|
107
|
+
args: "",
|
|
108
|
+
index: toolIdx
|
|
109
|
+
});
|
|
110
|
+
if (isNew) yield {
|
|
111
|
+
event: "content-block-start",
|
|
112
|
+
index,
|
|
113
|
+
content: {
|
|
114
|
+
type: "tool_call_chunk",
|
|
115
|
+
name: part.functionCall.name,
|
|
116
|
+
args: "",
|
|
117
|
+
index: toolIdx
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const acc = blockAccumulators.get(index);
|
|
121
|
+
acc.args = args;
|
|
122
|
+
yield {
|
|
123
|
+
event: "content-block-delta",
|
|
124
|
+
index,
|
|
125
|
+
delta: {
|
|
126
|
+
type: "block-delta",
|
|
127
|
+
fields: {
|
|
128
|
+
type: "tool_call_chunk",
|
|
129
|
+
name: acc.name,
|
|
130
|
+
args: acc.args
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
toolIdx += 1;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for (const [index, acc] of blockAccumulators) yield {
|
|
138
|
+
event: "content-block-finish",
|
|
139
|
+
index,
|
|
140
|
+
content: finalizeContentBlock(acc)
|
|
141
|
+
};
|
|
142
|
+
yield {
|
|
143
|
+
event: "message-finish",
|
|
144
|
+
reason: finishReason,
|
|
145
|
+
...usageSnapshot ? { usage: usageSnapshot } : {},
|
|
146
|
+
responseMetadata: { model_provider: "google" }
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function mapGeminiFinishReason(reason) {
|
|
150
|
+
switch (reason.toLowerCase()) {
|
|
151
|
+
case "max_tokens":
|
|
152
|
+
case "max-token":
|
|
153
|
+
case "max_token": return "length";
|
|
154
|
+
case "safety":
|
|
155
|
+
case "recitation":
|
|
156
|
+
case "language":
|
|
157
|
+
case "blocklist":
|
|
158
|
+
case "prohibited_content":
|
|
159
|
+
case "prohibited-content":
|
|
160
|
+
case "spii":
|
|
161
|
+
case "image_safety":
|
|
162
|
+
case "image-safety":
|
|
163
|
+
case "image_prohibited_content":
|
|
164
|
+
case "image-prohibited-content":
|
|
165
|
+
case "image_recitation":
|
|
166
|
+
case "image-recitation": return "content_filter";
|
|
167
|
+
default: return "stop";
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//#endregion
|
|
171
|
+
export { convertGoogleGeminiStream };
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=stream_events.js.map
|
|
@@ -0,0 +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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"}
|
package/node.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require("./dist/node.cjs");
|
package/node.d.cts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./dist/node.js";
|
package/node.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./dist/node.js";
|
package/node.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./dist/node.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@langchain/google",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Google integrations for LangChain.js",
|
|
5
5
|
"author": "LangChain",
|
|
6
6
|
"license": "MIT",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"directory": "libs/providers/langchain-google"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"eventsource-parser": "^3.0
|
|
17
|
+
"eventsource-parser": "^3.1.0",
|
|
18
18
|
"google-auth-library": "^10.6.2",
|
|
19
|
-
"jose": "^6.
|
|
19
|
+
"jose": "^6.2.3"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"@langchain/core": "^1.0.0"
|
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
"@tsconfig/recommended": "^1.0.10",
|
|
26
26
|
"dpdm": "^3.14.0",
|
|
27
27
|
"sparktype": "^0.1.3",
|
|
28
|
-
"typescript": "~
|
|
29
|
-
"vitest": "^4.1.
|
|
28
|
+
"typescript": "~6.0.3",
|
|
29
|
+
"vitest": "^4.1.8",
|
|
30
30
|
"zod": "^3.25.76 || ^4",
|
|
31
31
|
"zod-to-json-schema": "^3.25.2",
|
|
32
|
-
"@langchain/core": "^1.
|
|
32
|
+
"@langchain/core": "^1.2.0",
|
|
33
33
|
"@langchain/standard-tests": "0.0.23"
|
|
34
34
|
},
|
|
35
35
|
"publishConfig": {
|
|
@@ -64,7 +64,11 @@
|
|
|
64
64
|
"dist/",
|
|
65
65
|
"CHANGELOG.md",
|
|
66
66
|
"README.md",
|
|
67
|
-
"LICENSE"
|
|
67
|
+
"LICENSE",
|
|
68
|
+
"node.d.cts",
|
|
69
|
+
"node.cjs",
|
|
70
|
+
"node.d.ts",
|
|
71
|
+
"node.js"
|
|
68
72
|
],
|
|
69
73
|
"main": "./dist/index.cjs",
|
|
70
74
|
"module": "./dist/index.js",
|
|
@@ -82,6 +86,7 @@
|
|
|
82
86
|
"typegen": "pnpm run typegen:sparktype && pnpm run typegen:profiles",
|
|
83
87
|
"typegen:sparktype": "sparktype generate",
|
|
84
88
|
"typegen:profiles": "pnpm --filter @langchain/model-profiles make --config profiles.toml",
|
|
85
|
-
"typegen:check": "sparktype check"
|
|
89
|
+
"typegen:check": "sparktype check",
|
|
90
|
+
"typegen:fetch": "curl -o src/openapi/gemini-openapi.json 'https://generativelanguage.googleapis.com/$discovery/OPENAPI3_0?version=v1beta'"
|
|
86
91
|
}
|
|
87
92
|
}
|