veryfront 0.1.1241 → 0.1.1242
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/esm/cli/commands/build/handler.d.ts +31 -0
- package/esm/cli/commands/build/handler.d.ts.map +1 -1
- package/esm/cli/commands/build/handler.js +24 -18
- package/esm/deno.js +2 -2
- package/esm/extensions/ext-llm-google/src/google-provider.d.ts.map +1 -1
- package/esm/extensions/ext-llm-google/src/google-provider.js +4 -1
- package/esm/extensions/ext-llm-google/src/google-request-builder.d.ts.map +1 -1
- package/esm/extensions/ext-llm-google/src/google-request-builder.js +9 -9
- package/esm/extensions/ext-llm-google/src/google-thought-signatures.d.ts +14 -1
- package/esm/extensions/ext-llm-google/src/google-thought-signatures.d.ts.map +1 -1
- package/esm/extensions/ext-llm-google/src/google-thought-signatures.js +128 -9
- package/esm/extensions/ext-llm-openai/src/openai-chat-stream.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-chat-stream.js +6 -3
- package/esm/extensions/ext-llm-openai/src/openai-provider.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-provider.js +35 -2
- package/esm/src/agent/hosted/durable-chat-run-start.d.ts +2 -1
- package/esm/src/agent/hosted/durable-chat-run-start.d.ts.map +1 -1
- package/esm/src/agent/hosted/durable-chat-run-start.js +29 -4
- package/esm/src/agent/runtime/chat-stream-handler.d.ts +1 -0
- package/esm/src/agent/runtime/chat-stream-handler.d.ts.map +1 -1
- package/esm/src/agent/runtime/chat-stream-handler.js +1 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +29 -2
- package/esm/src/agent/runtime/provider-metadata.d.ts +6 -0
- package/esm/src/agent/runtime/provider-metadata.d.ts.map +1 -0
- package/esm/src/agent/runtime/provider-metadata.js +12 -0
- package/esm/src/agent/runtime/runtime-tool-types.d.ts +2 -0
- package/esm/src/agent/runtime/runtime-tool-types.d.ts.map +1 -1
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.d.ts.map +1 -1
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.js +19 -0
- package/esm/src/agent/runtime/text-generation-runtime-message-types.d.ts +1 -0
- package/esm/src/agent/runtime/text-generation-runtime-message-types.d.ts.map +1 -1
- package/esm/src/agent/service/routes.d.ts +1 -0
- package/esm/src/agent/service/routes.d.ts.map +1 -1
- package/esm/src/agent/streaming/lifecycle/live-adapter.d.ts.map +1 -1
- package/esm/src/agent/streaming/lifecycle/live-adapter.js +1 -0
- package/esm/src/agent/streaming/lifecycle/reducer.d.ts.map +1 -1
- package/esm/src/agent/streaming/lifecycle/reducer.js +3 -0
- package/esm/src/agent/streaming/lifecycle/runtime-provider-adapter.d.ts.map +1 -1
- package/esm/src/agent/streaming/lifecycle/runtime-provider-adapter.js +3 -0
- package/esm/src/agent/streaming/lifecycle/types.d.ts +2 -0
- package/esm/src/agent/streaming/lifecycle/types.d.ts.map +1 -1
- package/esm/src/build/embedded/preset.d.ts +4 -0
- package/esm/src/build/embedded/preset.d.ts.map +1 -1
- package/esm/src/build/embedded/preset.js +84 -15
- package/esm/src/html/hydration-script-builder/hydration-runtime.generated.js +1 -1
- package/esm/src/platform/compat/http/pinned-fetch.d.ts +1 -1
- package/esm/src/provider/veryfront-cloud/model-catalog.d.ts +2 -0
- package/esm/src/provider/veryfront-cloud/model-catalog.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/model-catalog.js +6 -0
- package/esm/src/provider/veryfront-cloud/openai.d.ts +1 -0
- package/esm/src/provider/veryfront-cloud/openai.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/openai.js +1 -0
- package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/provider.js +7 -1
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +2 -0
- package/esm/src/proxy/project-metadata-client.d.ts +6 -1
- package/esm/src/proxy/project-metadata-client.d.ts.map +1 -1
- package/esm/src/proxy/project-metadata-client.js +8 -3
- package/esm/src/runtime/runtime-bridge.d.ts.map +1 -1
- package/esm/src/runtime/runtime-bridge.js +13 -0
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +8 -8
|
@@ -70,4 +70,35 @@ export declare const parseBuildArgs: (args: ParsedArgs) => import("../../shared/
|
|
|
70
70
|
*/
|
|
71
71
|
export declare function assertEmbeddedPresetFlags(args: ParsedArgs, preset: string | undefined): void;
|
|
72
72
|
export declare function handleBuildCommand(args: ParsedArgs): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Total bytes of the artifacts the embedded manifest declares.
|
|
75
|
+
*
|
|
76
|
+
* The production build reports the size of what it emitted, so the embedded
|
|
77
|
+
* preset reports the same thing rather than leaving the field at zero. The
|
|
78
|
+
* manifest is the artifact list, so it cannot drift from what was written.
|
|
79
|
+
* A missing file is skipped because `buildEmbeddedPreset` only warns when an
|
|
80
|
+
* RSC bundle or route fails. Other filesystem errors still fail the build so
|
|
81
|
+
* JSON output cannot report a partial size as a successful result.
|
|
82
|
+
*
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
export declare function sumEmbeddedOutputSize(outDir: string, manifest: {
|
|
86
|
+
routes: ReadonlyArray<{
|
|
87
|
+
file: string;
|
|
88
|
+
}>;
|
|
89
|
+
assets: ReadonlyArray<{
|
|
90
|
+
file: string;
|
|
91
|
+
}>;
|
|
92
|
+
}, fileSystem?: {
|
|
93
|
+
stat(path: string): Promise<{
|
|
94
|
+
size: number;
|
|
95
|
+
}>;
|
|
96
|
+
}): Promise<number>;
|
|
97
|
+
/** @internal */
|
|
98
|
+
export declare function countEmbeddedPages(manifest: {
|
|
99
|
+
routes: ReadonlyArray<{
|
|
100
|
+
type: string;
|
|
101
|
+
file: string;
|
|
102
|
+
}>;
|
|
103
|
+
}, pagesIndexIsShell: boolean): number;
|
|
73
104
|
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAO3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;GAe9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;GAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;GAaA,CAAC;AA6B5B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,IAAI,CAYN;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCxE"}
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAO3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;GAe9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;GAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;GAaA,CAAC;AA6B5B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,IAAI,CAYN;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EAC9F,UAAU,CAAC,EAAE;IAAE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC7D,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,EACnE,iBAAiB,EAAE,OAAO,GACzB,MAAM,CAKR"}
|
|
@@ -125,22 +125,22 @@ export async function handleBuildCommand(args) {
|
|
|
125
125
|
dryRun: opts.dryRun,
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
|
-
/** The synthetic shell route `buildEmbeddedPreset` prepends to every manifest. */
|
|
129
|
-
const EMBEDDED_APP_SHELL_FILE = "embedded/app.js";
|
|
130
128
|
/**
|
|
131
129
|
* Total bytes of the artifacts the embedded manifest declares.
|
|
132
130
|
*
|
|
133
131
|
* The production build reports the size of what it emitted, so the embedded
|
|
134
132
|
* preset reports the same thing rather than leaving the field at zero. The
|
|
135
133
|
* manifest is the artifact list, so it cannot drift from what was written.
|
|
136
|
-
* A file
|
|
137
|
-
*
|
|
138
|
-
*
|
|
134
|
+
* A missing file is skipped because `buildEmbeddedPreset` only warns when an
|
|
135
|
+
* RSC bundle or route fails. Other filesystem errors still fail the build so
|
|
136
|
+
* JSON output cannot report a partial size as a successful result.
|
|
137
|
+
*
|
|
138
|
+
* @internal
|
|
139
139
|
*/
|
|
140
|
-
async function sumEmbeddedOutputSize(outDir, manifest) {
|
|
140
|
+
export async function sumEmbeddedOutputSize(outDir, manifest, fileSystem) {
|
|
141
141
|
const { join } = await import("../../../src/platform/compat/path/index.js");
|
|
142
|
-
const { createFileSystem } = await import("../../../src/platform/index.js");
|
|
143
|
-
const fs = createFileSystem();
|
|
142
|
+
const { createFileSystem, isNotFoundError } = await import("../../../src/platform/index.js");
|
|
143
|
+
const fs = fileSystem ?? createFileSystem();
|
|
144
144
|
const files = new Set(["embedded/manifest.json"]);
|
|
145
145
|
for (const route of manifest.routes)
|
|
146
146
|
files.add(route.file);
|
|
@@ -151,12 +151,19 @@ async function sumEmbeddedOutputSize(outDir, manifest) {
|
|
|
151
151
|
try {
|
|
152
152
|
total += (await fs.stat(join(outDir, file))).size;
|
|
153
153
|
}
|
|
154
|
-
catch {
|
|
155
|
-
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (!isNotFoundError(error))
|
|
156
|
+
throw error;
|
|
157
|
+
// Not emitted, already reported by the preset as a warning.
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
160
|
return total;
|
|
159
161
|
}
|
|
162
|
+
/** @internal */
|
|
163
|
+
export function countEmbeddedPages(manifest, pagesIndexIsShell) {
|
|
164
|
+
return manifest.routes.filter((route) => route.type === "page" &&
|
|
165
|
+
(!pagesIndexIsShell || route.file !== "embedded/pages/index.js")).length;
|
|
166
|
+
}
|
|
160
167
|
/**
|
|
161
168
|
* Run the embedded build, terminating the NDJSON stream ourselves in JSON mode.
|
|
162
169
|
*
|
|
@@ -220,13 +227,14 @@ async function runEmbeddedBuild(projectDir, outputDir) {
|
|
|
220
227
|
cliLogger.info(` ${dim("Output:")} ${finalOutput}`);
|
|
221
228
|
}
|
|
222
229
|
}
|
|
223
|
-
const { manifest } = await buildEmbeddedPreset({
|
|
230
|
+
const { manifest, pagesIndexIsShell } = await buildEmbeddedPreset({
|
|
224
231
|
projectDir,
|
|
225
232
|
outDir: finalOutput,
|
|
226
233
|
runtime: "deno",
|
|
227
234
|
config,
|
|
228
235
|
});
|
|
229
236
|
if (json) {
|
|
237
|
+
const totalSize = await sumEmbeddedOutputSize(finalOutput, manifest);
|
|
230
238
|
const elapsed = Date.now() - startTime;
|
|
231
239
|
streamJsonLine({
|
|
232
240
|
type: "step",
|
|
@@ -240,19 +248,17 @@ async function runEmbeddedBuild(projectDir, outputDir) {
|
|
|
240
248
|
type: "result",
|
|
241
249
|
success: true,
|
|
242
250
|
data: {
|
|
243
|
-
//
|
|
244
|
-
//
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
// the naive count says 3.
|
|
248
|
-
pages: manifest.routes.filter((route) => route.type === "page" && route.file !== EMBEDDED_APP_SHELL_FILE).length,
|
|
251
|
+
// The shell serves `/` and is itself a page. Exclude a discovered Pages
|
|
252
|
+
// index only when that same source supplied the shell. If the App Router
|
|
253
|
+
// supplied the shell, `/index` is a distinct emitted page and still counts.
|
|
254
|
+
pages: countEmbeddedPages(manifest, pagesIndexIsShell),
|
|
249
255
|
// The default path reports 0 for a build with no splitting stage, and
|
|
250
256
|
// the embedded preset has none — which is why `--split` is rejected for
|
|
251
257
|
// it above. Reporting 1 here would answer the same field differently
|
|
252
258
|
// from the command this is supposed to match.
|
|
253
259
|
chunks: 0,
|
|
254
260
|
assets: manifest.assets.length,
|
|
255
|
-
totalSize
|
|
261
|
+
totalSize,
|
|
256
262
|
duration_ms: elapsed,
|
|
257
263
|
outputDir: finalOutput,
|
|
258
264
|
// `--dry-run` is rejected for this preset, so a build that got here ran.
|
package/esm/deno.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
"name": "veryfront",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1242",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"nodeModulesDir": "auto",
|
|
6
6
|
"minimumDependencyAge": {
|
|
@@ -553,7 +553,7 @@ export default {
|
|
|
553
553
|
"lint:cwd-relative-test-reads": "deno run --allow-read scripts/lint/audit-cwd-relative-test-reads.ts",
|
|
554
554
|
"lint:anti-slop": "deno run --allow-read scripts/lint/audit-anti-slop.ts",
|
|
555
555
|
"lint:dnt-meta-properties": "deno run --config=scripts/test.deno.json --frozen --allow-read scripts/build/dnt-meta-property-safety.ts",
|
|
556
|
-
"test:scripts": "deno test --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run scripts/ci/prepare-rc-build.test.ts scripts/ci/publish-npm-packages.test.ts scripts/ci/setup-deno-workflow.test.ts scripts/build/compile-binary.test.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.test.ts scripts/build/generate-sbom.test.ts scripts/build/generated-artifact-checks.test.ts scripts/build/npm-dependency-sources.test.ts scripts/build/npm-extension-package-metadata.test.ts scripts/build/npm-package-metadata.test.ts scripts/build/npm-react-shims.test.ts scripts/build/npm-runtime-helper-contract.test.ts scripts/build/prepare-framework-sources.test.ts scripts/build/report-artifact-sizes.test.ts scripts/build/run-generate.test.ts scripts/docs/docs-coverage.test.ts scripts/docs/generate-api-reference.test.ts scripts/docs/guide-validation.test.ts scripts/lint/audit-chat-composability.test.ts scripts/lint/audit-rfc-status.test.ts scripts/lint/audit-core-deps.test.ts scripts/lint/audit-cwd-relative-test-reads.test.ts scripts/lint/audit-cross-runtime-jsr.test.ts scripts/lint/audit-dependency-boundaries.test.ts scripts/lint/audit-extension-capabilities.test.ts scripts/lint/audit-extension-contracts.test.ts scripts/lint/audit-deps.test.ts scripts/lint/check-module-boundaries.test.ts scripts/lint/lint-config.test.ts scripts/lint/ban-test-only.test.ts scripts/lint/check-sanitizer-baseline.test.ts scripts/lint/check-skipped-tests-baseline.test.ts scripts/lint/audit-anti-slop.test.ts scripts/lint/check-test-typecheck-baseline.test.ts scripts/lint/check-coverage.test.ts scripts/security/audit-npm.test.ts scripts/security/secret-scanning-config.test.ts scripts/security/submit-dependency-snapshot.test.ts scripts/test/template-runtime-e2e.test.ts && deno task test:tool-search-live",
|
|
556
|
+
"test:scripts": "deno test --config=scripts/test.deno.json --no-check --allow-read --allow-write --allow-run scripts/build/feature-files-detection.test.ts scripts/ci/prepare-rc-build.test.ts scripts/ci/publish-npm-packages.test.ts scripts/ci/setup-deno-workflow.test.ts scripts/build/compile-binary.test.ts scripts/build/dnt-meta-property-safety.test.ts scripts/build/dnt-polyfill.test.ts scripts/build/generate-sbom.test.ts scripts/build/generated-artifact-checks.test.ts scripts/build/npm-dependency-sources.test.ts scripts/build/npm-extension-package-metadata.test.ts scripts/build/npm-package-metadata.test.ts scripts/build/npm-react-shims.test.ts scripts/build/npm-runtime-helper-contract.test.ts scripts/build/prepare-framework-sources.test.ts scripts/build/report-artifact-sizes.test.ts scripts/build/run-generate.test.ts scripts/docs/docs-coverage.test.ts scripts/docs/generate-api-reference.test.ts scripts/docs/guide-validation.test.ts scripts/lint/audit-chat-composability.test.ts scripts/lint/audit-rfc-status.test.ts scripts/lint/audit-core-deps.test.ts scripts/lint/audit-cwd-relative-test-reads.test.ts scripts/lint/audit-cross-runtime-jsr.test.ts scripts/lint/audit-dependency-boundaries.test.ts scripts/lint/audit-extension-capabilities.test.ts scripts/lint/audit-extension-contracts.test.ts scripts/lint/audit-deps.test.ts scripts/lint/check-module-boundaries.test.ts scripts/lint/lint-config.test.ts scripts/lint/ban-test-only.test.ts scripts/lint/check-sanitizer-baseline.test.ts scripts/lint/check-skipped-tests-baseline.test.ts scripts/lint/audit-anti-slop.test.ts scripts/lint/check-test-typecheck-baseline.test.ts scripts/lint/check-coverage.test.ts scripts/security/audit-npm.test.ts scripts/security/secret-scanning-config.test.ts scripts/security/submit-dependency-snapshot.test.ts scripts/test/template-runtime-e2e.test.ts && deno task test:tool-search-live",
|
|
557
557
|
"test:sentry-runtime-packages": "deno test --config=scripts/test.deno.json --no-check --no-lock --allow-read --allow-write --allow-run --allow-env=DENO_DIR,HOME,XDG_CACHE_HOME,LOCALAPPDATA,USERPROFILE scripts/build/sentry-runtime-packages.test.ts",
|
|
558
558
|
"test:tool-search-live": "VF_DISABLE_LRU_INTERVAL=1 deno test --no-check -A tests/agent/verify-tool-search-live.test.ts",
|
|
559
559
|
"test:cross-runtime": "deno run --allow-all src/platform/compat/cross-runtime.test.ts",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAKpB,+BAA+B,EAC/B,qBAAqB,EACtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"google-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAKpB,+BAA+B,EAC/B,qBAAqB,EACtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,6BAA6B,CAAC;AAyBrC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,EAC/B,qBAAqB,GACtB,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAmdD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAsF5E;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CAiFlB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IAY7E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;CAW9E"}
|
|
@@ -10,7 +10,7 @@ import { buildProviderError, createGoogleRequestInit, createWarningCollector, ge
|
|
|
10
10
|
import { buildGoogleGenerateContentRequest, } from "./google-request-builder.js";
|
|
11
11
|
import { createGoogleToolCallCorrelationRegistry, GOOGLE_CODE_EXECUTION_TOOL_NAME, googleCodeExecutionInput, googleCodeExecutionOutput, readGoogleCodeExecutionResult, readGoogleExecutableCode, readGooglePartDataField, } from "./google-content-parts.js";
|
|
12
12
|
import { readGoogleGroundingMetadata } from "./google-grounding-metadata.js";
|
|
13
|
-
import { createGoogleProviderMetadata, readGoogleThoughtSignature, } from "./google-thought-signatures.js";
|
|
13
|
+
import { createGoogleProviderMetadata, readGoogleThoughtSignature, reconcileGoogleProviderMetadata, } from "./google-thought-signatures.js";
|
|
14
14
|
import { extractGoogleCandidateParts, extractGoogleUsage, normalizeGoogleFinishReason, streamGoogleCompatibleParts, } from "./google-stream.js";
|
|
15
15
|
// Re-export error classes so extension tests can import them from this module
|
|
16
16
|
// and from `veryfront/provider/shared` interchangeably.
|
|
@@ -371,6 +371,9 @@ export function createGoogleModelRuntime(config, modelId) {
|
|
|
371
371
|
modelId,
|
|
372
372
|
specificationVersion: "v3",
|
|
373
373
|
supportedUrls: {},
|
|
374
|
+
_reconcileProviderMetadata(input) {
|
|
375
|
+
return reconcileGoogleProviderMetadata(input.providerMetadata, input.suppressedToolCalls);
|
|
376
|
+
},
|
|
374
377
|
doGenerate(options) {
|
|
375
378
|
const url = getGoogleGenerateContentUrl(config.baseURL, modelId);
|
|
376
379
|
const warnings = createWarningCollector();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAE3B,MAAM,uCAAuC,CAAC;AAY/C,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,aAAa,CAAC;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAE/D,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChC,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE;QACX,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChD,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"google-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,uBAAuB,EAEvB,0BAA0B,EAE3B,MAAM,uCAAuC,CAAC;AAY/C,MAAM,WAAW,+BAAgC,SAAQ,uBAAuB;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,aAAa,CAAC;QACnC,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,gGAAgG;AAChG,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAE/D,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,iBAAiB,CAAC,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChC,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE;QACX,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChD,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAmzBF,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,QAAQ,EAAE,gBAAgB,GACzB,uBAAuB,CAqDzB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsonValuesEqual, readProviderOptions, readRecord, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
|
|
2
2
|
import { createGoogleToolCallCorrelationRegistry, GOOGLE_CODE_EXECUTION_TOOL_NAME, googleCodeExecutionInput, googleCodeExecutionOutput, readGoogleCodeExecutionResult, readGoogleExecutableCode, readGooglePartDataField, } from "./google-content-parts.js";
|
|
3
|
-
import {
|
|
3
|
+
import { readGoogleRawAssistantReplay } from "./google-thought-signatures.js";
|
|
4
4
|
function invalidGoogleProviderHistory() {
|
|
5
5
|
return new TypeError("Google raw assistant metadata did not match canonical provider tool history");
|
|
6
6
|
}
|
|
7
|
-
function readGoogleRawToolHistory(rawAssistantParts) {
|
|
7
|
+
function readGoogleRawToolHistory(rawAssistantParts, rawAssistantPartIndexes) {
|
|
8
8
|
const registry = createGoogleToolCallCorrelationRegistry();
|
|
9
9
|
const ordinaryCalls = [];
|
|
10
10
|
const legacyOrdinaryCalls = [];
|
|
@@ -30,7 +30,7 @@ function readGoogleRawToolHistory(rawAssistantParts) {
|
|
|
30
30
|
throw invalidGoogleProviderHistory();
|
|
31
31
|
}
|
|
32
32
|
const providerId = typeof functionCall.id === "string" ? functionCall.id : undefined;
|
|
33
|
-
const id = registry.registerFunctionCall(partIndex, providerId);
|
|
33
|
+
const id = registry.registerFunctionCall(rawAssistantPartIndexes[partIndex] ?? partIndex, providerId);
|
|
34
34
|
// Histories persisted before raw-position ids used the anonymous-call
|
|
35
35
|
// occurrence instead. Build both complete projections so validation
|
|
36
36
|
// cannot accept a mixture that no implementation ever emitted.
|
|
@@ -125,7 +125,7 @@ function survivingToolEvents(events, activeKinds) {
|
|
|
125
125
|
}
|
|
126
126
|
return surviving;
|
|
127
127
|
}
|
|
128
|
-
function validateGoogleToolReplay(message, rawAssistantParts) {
|
|
128
|
+
function validateGoogleToolReplay(message, rawAssistantParts, rawAssistantPartIndexes) {
|
|
129
129
|
const providerToolCalls = (message.providerToolCalls ?? []).map((call) => ({
|
|
130
130
|
id: call.toolCallId,
|
|
131
131
|
name: call.toolName,
|
|
@@ -189,7 +189,7 @@ function validateGoogleToolReplay(message, rawAssistantParts) {
|
|
|
189
189
|
rejectDuplicateIds([...ordinaryCalls, ...canonicalProviderCalls]);
|
|
190
190
|
let rawHistory;
|
|
191
191
|
try {
|
|
192
|
-
rawHistory = readGoogleRawToolHistory(rawAssistantParts);
|
|
192
|
+
rawHistory = readGoogleRawToolHistory(rawAssistantParts, rawAssistantPartIndexes);
|
|
193
193
|
}
|
|
194
194
|
catch {
|
|
195
195
|
throw invalidGoogleProviderHistory();
|
|
@@ -246,10 +246,10 @@ function toGoogleContents(prompt) {
|
|
|
246
246
|
});
|
|
247
247
|
break;
|
|
248
248
|
case "assistant": {
|
|
249
|
-
const
|
|
250
|
-
if (
|
|
251
|
-
validateGoogleToolReplay(message,
|
|
252
|
-
contents.push({ role: "model", parts:
|
|
249
|
+
const rawAssistantReplay = readGoogleRawAssistantReplay(message.providerMetadata);
|
|
250
|
+
if (rawAssistantReplay) {
|
|
251
|
+
validateGoogleToolReplay(message, rawAssistantReplay.parts, rawAssistantReplay.partIndexes);
|
|
252
|
+
contents.push({ role: "model", parts: rawAssistantReplay.parts });
|
|
253
253
|
break;
|
|
254
254
|
}
|
|
255
255
|
const parts = [];
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
export declare const MAX_GOOGLE_PROVIDER_METADATA_BYTES: number;
|
|
2
2
|
export declare function readGoogleThoughtSignature(part: Record<string, unknown>): string | undefined;
|
|
3
|
-
export declare function createGoogleProviderMetadata(parts: Array<Record<string, unknown>>, groundingMetadata?: Record<string, unknown
|
|
3
|
+
export declare function createGoogleProviderMetadata(parts: Array<Record<string, unknown>>, groundingMetadata?: Record<string, unknown>, rawAssistantPartIndexes?: readonly number[]): Record<string, unknown> | undefined;
|
|
4
|
+
export type GoogleRawAssistantReplay = {
|
|
5
|
+
parts: readonly Record<string, unknown>[];
|
|
6
|
+
partIndexes: readonly number[];
|
|
7
|
+
};
|
|
8
|
+
export declare function readGoogleRawAssistantReplay(providerMetadata: Record<string, unknown> | undefined): GoogleRawAssistantReplay | undefined;
|
|
4
9
|
export declare function readGoogleRawAssistantParts(providerMetadata: Record<string, unknown> | undefined): readonly Record<string, unknown>[] | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Remove provider tool parts that the runtime deliberately suppressed while
|
|
12
|
+
* preserving the exact signed parts for every surviving Google tool call.
|
|
13
|
+
*/
|
|
14
|
+
export declare function reconcileGoogleProviderMetadata(providerMetadata: Record<string, unknown>, suppressedToolCalls: readonly {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
}[]): Record<string, unknown> | undefined;
|
|
5
18
|
//# sourceMappingURL=google-thought-signatures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-thought-signatures.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-thought-signatures.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"google-thought-signatures.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-google/src/google-thought-signatures.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AA6OlE,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,SAAS,CASpB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,uBAAuB,CAAC,EAAE,SAAS,MAAM,EAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA2CrC;AAuGD,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1C,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACpD,wBAAwB,GAAG,SAAS,CAiCtC;AAED,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACpD,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAEhD;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,mBAAmB,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAC3D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAqErC"}
|
|
@@ -2,6 +2,7 @@ import { readRecord, snapshotProviderJsonValue, } from "../../../src/provider/sh
|
|
|
2
2
|
import { createGoogleToolCallCorrelationRegistry, readGoogleCodeExecutionResult, readGoogleExecutableCode, readGooglePartDataField, } from "./google-content-parts.js";
|
|
3
3
|
const GOOGLE_METADATA_KEY = "google";
|
|
4
4
|
const RAW_ASSISTANT_PARTS_KEY = "rawAssistantParts";
|
|
5
|
+
const RAW_ASSISTANT_PART_INDEXES_KEY = "rawAssistantPartIndexes";
|
|
5
6
|
const GROUNDING_METADATA_KEY = "groundingMetadata";
|
|
6
7
|
const MAX_GOOGLE_RAW_ASSISTANT_PARTS = 4_096;
|
|
7
8
|
export const MAX_GOOGLE_PROVIDER_METADATA_BYTES = 8 * 1024 * 1024;
|
|
@@ -57,6 +58,28 @@ function readGoogleRawPartsValue(googleMetadata) {
|
|
|
57
58
|
}
|
|
58
59
|
return descriptor.value;
|
|
59
60
|
}
|
|
61
|
+
function readGoogleRawPartIndexesValue(googleMetadata) {
|
|
62
|
+
if (googleMetadata === null ||
|
|
63
|
+
typeof googleMetadata !== "object" ||
|
|
64
|
+
Array.isArray(googleMetadata)) {
|
|
65
|
+
throw new TypeError("Google provider metadata must be an object");
|
|
66
|
+
}
|
|
67
|
+
let descriptor;
|
|
68
|
+
try {
|
|
69
|
+
descriptor = Object.getOwnPropertyDescriptor(googleMetadata, RAW_ASSISTANT_PART_INDEXES_KEY);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new TypeError("Google provider metadata could not be inspected");
|
|
73
|
+
}
|
|
74
|
+
if (descriptor === undefined) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
if (descriptor.enumerable !== true ||
|
|
78
|
+
!Object.hasOwn(descriptor, "value")) {
|
|
79
|
+
throw new TypeError("Google raw assistant part indexes must be an enumerable data property");
|
|
80
|
+
}
|
|
81
|
+
return descriptor.value;
|
|
82
|
+
}
|
|
60
83
|
function hasGoogleReplayTriggerProperty(part, key) {
|
|
61
84
|
let descriptor;
|
|
62
85
|
try {
|
|
@@ -176,7 +199,7 @@ export function readGoogleThoughtSignature(part) {
|
|
|
176
199
|
}
|
|
177
200
|
return signature;
|
|
178
201
|
}
|
|
179
|
-
export function createGoogleProviderMetadata(parts, groundingMetadata) {
|
|
202
|
+
export function createGoogleProviderMetadata(parts, groundingMetadata, rawAssistantPartIndexes) {
|
|
180
203
|
const needsExactReplay = needsGoogleExactReplay(parts);
|
|
181
204
|
if (!needsExactReplay && groundingMetadata === undefined) {
|
|
182
205
|
return undefined;
|
|
@@ -190,11 +213,18 @@ export function createGoogleProviderMetadata(parts, groundingMetadata) {
|
|
|
190
213
|
if (partsSnapshot.length > MAX_GOOGLE_RAW_ASSISTANT_PARTS) {
|
|
191
214
|
throw new TypeError(`Google raw assistant parts exceeded ${MAX_GOOGLE_RAW_ASSISTANT_PARTS} entries`);
|
|
192
215
|
}
|
|
193
|
-
|
|
216
|
+
const ownedPartIndexes = rawAssistantPartIndexes === undefined
|
|
217
|
+
? undefined
|
|
218
|
+
: validateGoogleRawAssistantPartIndexes(snapshotGoogleProviderMetadata(rawAssistantPartIndexes), partsSnapshot.length);
|
|
219
|
+
ownedParts = validateGoogleRawAssistantParts(partsSnapshot, ownedPartIndexes);
|
|
220
|
+
rawAssistantPartIndexes = ownedPartIndexes;
|
|
194
221
|
}
|
|
195
222
|
const metadata = snapshotGoogleProviderMetadata({
|
|
196
223
|
[GOOGLE_METADATA_KEY]: {
|
|
197
224
|
...(needsExactReplay ? { [RAW_ASSISTANT_PARTS_KEY]: ownedParts } : {}),
|
|
225
|
+
...(needsExactReplay && rawAssistantPartIndexes !== undefined
|
|
226
|
+
? { [RAW_ASSISTANT_PART_INDEXES_KEY]: rawAssistantPartIndexes }
|
|
227
|
+
: {}),
|
|
198
228
|
...(groundingMetadata !== undefined ? { [GROUNDING_METADATA_KEY]: groundingMetadata } : {}),
|
|
199
229
|
},
|
|
200
230
|
});
|
|
@@ -204,7 +234,7 @@ export function createGoogleProviderMetadata(parts, groundingMetadata) {
|
|
|
204
234
|
}
|
|
205
235
|
return metadataRecord;
|
|
206
236
|
}
|
|
207
|
-
function validateGoogleRawAssistantParts(rawParts) {
|
|
237
|
+
function validateGoogleRawAssistantParts(rawParts, rawPartIndexes) {
|
|
208
238
|
if (rawParts.length === 0) {
|
|
209
239
|
throw new TypeError("Google raw assistant parts must be a non-empty array");
|
|
210
240
|
}
|
|
@@ -231,7 +261,7 @@ function validateGoogleRawAssistantParts(rawParts) {
|
|
|
231
261
|
const functionCall = readRecord(part.functionCall);
|
|
232
262
|
const functionCallId = typeof functionCall?.id === "string" ? functionCall.id : undefined;
|
|
233
263
|
try {
|
|
234
|
-
toolCallRegistry.registerFunctionCall(partIndex, functionCallId);
|
|
264
|
+
toolCallRegistry.registerFunctionCall(rawPartIndexes?.[partIndex] ?? partIndex, functionCallId);
|
|
235
265
|
}
|
|
236
266
|
catch {
|
|
237
267
|
throw new TypeError("Google raw assistant tool call id was duplicated");
|
|
@@ -273,7 +303,24 @@ function validateGoogleRawAssistantParts(rawParts) {
|
|
|
273
303
|
// a shallow collection whose contents could diverge before serialization.
|
|
274
304
|
return rawParts;
|
|
275
305
|
}
|
|
276
|
-
|
|
306
|
+
function validateGoogleRawAssistantPartIndexes(value, partCount) {
|
|
307
|
+
if (!Array.isArray(value) || value.length !== partCount) {
|
|
308
|
+
throw new TypeError("Google raw assistant part indexes must match the raw parts");
|
|
309
|
+
}
|
|
310
|
+
let previous = -1;
|
|
311
|
+
for (const index of value) {
|
|
312
|
+
if (typeof index !== "number" ||
|
|
313
|
+
!Number.isSafeInteger(index) ||
|
|
314
|
+
index <= previous ||
|
|
315
|
+
index < 0 ||
|
|
316
|
+
index >= MAX_GOOGLE_RAW_ASSISTANT_PARTS) {
|
|
317
|
+
throw new TypeError("Google raw assistant part indexes must be increasing safe integers");
|
|
318
|
+
}
|
|
319
|
+
previous = index;
|
|
320
|
+
}
|
|
321
|
+
return value;
|
|
322
|
+
}
|
|
323
|
+
export function readGoogleRawAssistantReplay(providerMetadata) {
|
|
277
324
|
if (providerMetadata === undefined) {
|
|
278
325
|
return undefined;
|
|
279
326
|
}
|
|
@@ -282,15 +329,87 @@ export function readGoogleRawAssistantParts(providerMetadata) {
|
|
|
282
329
|
return undefined;
|
|
283
330
|
}
|
|
284
331
|
const rawParts = readGoogleRawPartsValue(rawGoogleMetadata);
|
|
332
|
+
const rawPartIndexes = readGoogleRawPartIndexesValue(rawGoogleMetadata);
|
|
285
333
|
if (rawParts === undefined) {
|
|
334
|
+
if (rawPartIndexes !== undefined) {
|
|
335
|
+
throw new TypeError("Google raw assistant part indexes require raw parts");
|
|
336
|
+
}
|
|
286
337
|
return undefined;
|
|
287
338
|
}
|
|
288
|
-
// Grounding and future Google metadata fields are not replayed. Snapshot
|
|
289
|
-
// only the exact wire value that will be validated and transmitted so those
|
|
290
|
-
// independent fields cannot consume replay budgets or invoke accessors.
|
|
291
339
|
const rawPartsSnapshot = snapshotGoogleProviderMetadata(rawParts);
|
|
292
340
|
if (!Array.isArray(rawPartsSnapshot)) {
|
|
293
341
|
throw new TypeError("Google raw assistant parts must be a non-empty array");
|
|
294
342
|
}
|
|
295
|
-
|
|
343
|
+
const partIndexes = rawPartIndexes === undefined
|
|
344
|
+
? rawPartsSnapshot.map((_part, index) => index)
|
|
345
|
+
: validateGoogleRawAssistantPartIndexes(snapshotGoogleProviderMetadata(rawPartIndexes), rawPartsSnapshot.length);
|
|
346
|
+
return {
|
|
347
|
+
parts: validateGoogleRawAssistantParts(rawPartsSnapshot, partIndexes),
|
|
348
|
+
partIndexes,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
export function readGoogleRawAssistantParts(providerMetadata) {
|
|
352
|
+
return readGoogleRawAssistantReplay(providerMetadata)?.parts;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Remove provider tool parts that the runtime deliberately suppressed while
|
|
356
|
+
* preserving the exact signed parts for every surviving Google tool call.
|
|
357
|
+
*/
|
|
358
|
+
export function reconcileGoogleProviderMetadata(providerMetadata, suppressedToolCalls) {
|
|
359
|
+
if (suppressedToolCalls.length === 0) {
|
|
360
|
+
return providerMetadata;
|
|
361
|
+
}
|
|
362
|
+
const replay = readGoogleRawAssistantReplay(providerMetadata);
|
|
363
|
+
if (replay === undefined) {
|
|
364
|
+
return providerMetadata;
|
|
365
|
+
}
|
|
366
|
+
const { partIndexes, parts: rawAssistantParts } = replay;
|
|
367
|
+
const suppressedIds = new Set(suppressedToolCalls.map((toolCall) => toolCall.id));
|
|
368
|
+
const matchedSuppressedIds = new Set();
|
|
369
|
+
const retainedParts = [];
|
|
370
|
+
const retainedPartIndexes = [];
|
|
371
|
+
const registry = createGoogleToolCallCorrelationRegistry();
|
|
372
|
+
let retainedToolPart = false;
|
|
373
|
+
for (let partIndex = 0; partIndex < rawAssistantParts.length; partIndex += 1) {
|
|
374
|
+
const part = rawAssistantParts[partIndex];
|
|
375
|
+
if (part === undefined) {
|
|
376
|
+
throw new TypeError("Google raw assistant parts must be dense");
|
|
377
|
+
}
|
|
378
|
+
const dataField = readGooglePartDataField(part);
|
|
379
|
+
let toolCallId;
|
|
380
|
+
if (dataField === "functionCall") {
|
|
381
|
+
const functionCall = readRecord(part.functionCall);
|
|
382
|
+
const providerId = typeof functionCall?.id === "string" ? functionCall.id : undefined;
|
|
383
|
+
toolCallId = registry.registerFunctionCall(partIndexes[partIndex] ?? partIndex, providerId);
|
|
384
|
+
}
|
|
385
|
+
else if (dataField === "executableCode") {
|
|
386
|
+
const executableCode = readGoogleExecutableCode(part.executableCode);
|
|
387
|
+
toolCallId = registry.registerCodeExecution(executableCode.providerId);
|
|
388
|
+
}
|
|
389
|
+
else if (dataField === "codeExecutionResult") {
|
|
390
|
+
const result = readGoogleCodeExecutionResult(part.codeExecutionResult);
|
|
391
|
+
toolCallId = registry.resolveCodeExecutionResult(result.providerId);
|
|
392
|
+
}
|
|
393
|
+
if (toolCallId !== undefined && suppressedIds.has(toolCallId)) {
|
|
394
|
+
matchedSuppressedIds.add(toolCallId);
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
retainedParts.push(part);
|
|
398
|
+
retainedPartIndexes.push(partIndexes[partIndex] ?? partIndex);
|
|
399
|
+
retainedToolPart ||= dataField === "functionCall" ||
|
|
400
|
+
dataField === "executableCode" ||
|
|
401
|
+
dataField === "codeExecutionResult";
|
|
402
|
+
}
|
|
403
|
+
registry.assertSettled();
|
|
404
|
+
if (matchedSuppressedIds.size === 0) {
|
|
405
|
+
return providerMetadata;
|
|
406
|
+
}
|
|
407
|
+
if (retainedParts.length === 0) {
|
|
408
|
+
return undefined;
|
|
409
|
+
}
|
|
410
|
+
const reconciled = createGoogleProviderMetadata(retainedParts, undefined, retainedPartIndexes);
|
|
411
|
+
if (reconciled === undefined && retainedToolPart) {
|
|
412
|
+
throw new TypeError("Google provider metadata could not preserve a surviving signed tool call");
|
|
413
|
+
}
|
|
414
|
+
return reconciled;
|
|
296
415
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-chat-stream.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-chat-stream.ts"],"names":[],"mappings":"AA2BA,KAAK,4BAA4B,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAExE,KAAK,uBAAuB,GAAG;IAC7B,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AASF,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AA4KlD,wBAAuB,2BAA2B,CAChD,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,OAAO,GAAE,uBAA4B,GACpC,aAAa,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"openai-chat-stream.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-chat-stream.ts"],"names":[],"mappings":"AA2BA,KAAK,4BAA4B,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAExE,KAAK,uBAAuB,GAAG;IAC7B,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AASF,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AA4KlD,wBAAuB,2BAA2B,CAChD,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,OAAO,GAAE,uBAA4B,GACpC,aAAa,CAAC,OAAO,CAAC,CAyVxB"}
|
|
@@ -186,10 +186,13 @@ export async function* streamOpenAICompatibleParts(stream, context = {}) {
|
|
|
186
186
|
if (!Array.isArray(record.choices)) {
|
|
187
187
|
throw invalidOpenAIStream(context, "choices was not an array");
|
|
188
188
|
}
|
|
189
|
+
// An empty `choices` array carries no content. Usage-only frames use this
|
|
190
|
+
// shape, and so does Azure OpenAI's `prompt_filter_results` preamble, which
|
|
191
|
+
// arrives before the first content chunk with neither choices nor usage.
|
|
192
|
+
// Both are informational, so skip the frame instead of failing the stream.
|
|
193
|
+
// The `choices` key being absent entirely is still rejected above — that is
|
|
194
|
+
// a malformed event rather than a content-free one.
|
|
189
195
|
if (record.choices.length === 0) {
|
|
190
|
-
if (!usageRecord) {
|
|
191
|
-
throw invalidOpenAIStream(context, "empty choices event had no usage");
|
|
192
|
-
}
|
|
193
196
|
return;
|
|
194
197
|
}
|
|
195
198
|
if (sawFinishReason) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAOpB,+BAA+B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,kCAAkC,CAAC;AA2B1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,GAChC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAOpB,+BAA+B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,kCAAkC,CAAC;AA2B1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,GAChC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAs7BD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAgF5E;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CA0F5E;AAwDD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CA2ClB;AAED,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IAgC7E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB;IAa7E,eAAe,CACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;CAY9E"}
|
|
@@ -38,6 +38,15 @@ function getRuntimeOpenAIProviderName(config) {
|
|
|
38
38
|
function getLLMOpenAIProviderName(config) {
|
|
39
39
|
return normalizeOpenAIProviderName(config.providerName) ?? "openai";
|
|
40
40
|
}
|
|
41
|
+
function getOpenAIModelTransport(config) {
|
|
42
|
+
const transport = config.openAITransport;
|
|
43
|
+
if (transport === undefined)
|
|
44
|
+
return "auto";
|
|
45
|
+
if (transport === "chat-completions" || transport === "responses") {
|
|
46
|
+
return transport;
|
|
47
|
+
}
|
|
48
|
+
throw new TypeError('OpenAI transport must be "chat-completions" or "responses"');
|
|
49
|
+
}
|
|
41
50
|
function getOpenAICompatibleProviderKind(config) {
|
|
42
51
|
const providerName = getRuntimeOpenAIProviderName(config).trim().toLowerCase();
|
|
43
52
|
return providerName === "mistral" || providerName === "moonshotai" ? providerName : "openai";
|
|
@@ -829,6 +838,24 @@ function requestUsesOpenAIHostedTool(optionsForRuntime) {
|
|
|
829
838
|
}
|
|
830
839
|
return resolveOpenAIWebSearchDescriptor(options.tools) !== undefined;
|
|
831
840
|
}
|
|
841
|
+
function createOpenAIChatCompletionsOnlyRuntime(chatRuntime) {
|
|
842
|
+
function assertHostedToolsSupported(options) {
|
|
843
|
+
if (requestUsesOpenAIHostedTool(options)) {
|
|
844
|
+
throw new TypeError("OpenAI hosted tools require the Responses API and are unavailable with Chat Completions");
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
return {
|
|
848
|
+
...chatRuntime,
|
|
849
|
+
async doGenerate(optionsForRuntime) {
|
|
850
|
+
assertHostedToolsSupported(optionsForRuntime);
|
|
851
|
+
return await chatRuntime.doGenerate(optionsForRuntime);
|
|
852
|
+
},
|
|
853
|
+
async doStream(optionsForRuntime) {
|
|
854
|
+
assertHostedToolsSupported(optionsForRuntime);
|
|
855
|
+
return await chatRuntime.doStream(optionsForRuntime);
|
|
856
|
+
},
|
|
857
|
+
};
|
|
858
|
+
}
|
|
832
859
|
function createOpenAIAdaptiveModelRuntime(chatRuntime, responsesRuntime) {
|
|
833
860
|
return {
|
|
834
861
|
...chatRuntime,
|
|
@@ -900,10 +927,16 @@ export class OpenAIProvider {
|
|
|
900
927
|
fetch: config.fetch,
|
|
901
928
|
};
|
|
902
929
|
const responsesRuntime = createOpenAIResponsesRuntime(runtimeConfig, modelId);
|
|
903
|
-
|
|
930
|
+
const chatRuntime = createOpenAIModelRuntime(runtimeConfig, modelId);
|
|
931
|
+
const transport = getOpenAIModelTransport(config);
|
|
932
|
+
if (transport === "responses" ||
|
|
933
|
+
(transport === "auto" && isOpenAIReasoningModel(modelId, providerName))) {
|
|
904
934
|
return responsesRuntime;
|
|
905
935
|
}
|
|
906
|
-
|
|
936
|
+
if (transport === "chat-completions") {
|
|
937
|
+
return createOpenAIChatCompletionsOnlyRuntime(chatRuntime);
|
|
938
|
+
}
|
|
939
|
+
return createOpenAIAdaptiveModelRuntime(chatRuntime, responsesRuntime);
|
|
907
940
|
}
|
|
908
941
|
createEmbedding(modelId, config) {
|
|
909
942
|
return createOpenAIEmbeddingRuntime({
|
|
@@ -4,7 +4,7 @@ import type { AgUiResumeValue } from "../ag-ui/tool-shared.js";
|
|
|
4
4
|
import type { DetachedRunTracker } from "../service/detached-run-tracker.js";
|
|
5
5
|
import type { ParsedHostedChatRequest } from "./chat-request-parser.js";
|
|
6
6
|
/** Public API contract for hosted durable run setup error status code. */
|
|
7
|
-
export type HostedDurableRunSetupErrorStatusCode = 400 | 402 | 413 | 429 | 500 | 503;
|
|
7
|
+
export type HostedDurableRunSetupErrorStatusCode = 400 | 402 | 403 | 404 | 408 | 413 | 429 | 500 | 501 | 502 | 503;
|
|
8
8
|
/** Public API contract for hosted durable run accepted. */
|
|
9
9
|
export type HostedDurableRunAccepted = {
|
|
10
10
|
accepted: boolean;
|
|
@@ -19,6 +19,7 @@ export type HostedDurableRunAuthErrorResponse = {
|
|
|
19
19
|
/** Public API contract for hosted durable run logger. */
|
|
20
20
|
export type HostedDurableRunLogger = {
|
|
21
21
|
debug?: (message: string, metadata?: Record<string, unknown>) => void;
|
|
22
|
+
warn?: (message: string, metadata?: Record<string, unknown>) => void;
|
|
22
23
|
error(message: string, metadata?: Record<string, unknown>): void;
|
|
23
24
|
};
|
|
24
25
|
/** Input delivered to a hosted durable-run starter after request isolation. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-chat-run-start.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/durable-chat-run-start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"durable-chat-run-start.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/durable-chat-run-start.ts"],"names":[],"mappings":"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"}
|