@harperfast/harper 5.3.0-beta.3 → 5.3.0-beta.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/bin/cliOperations.ts +25 -3
- package/bin/run.ts +18 -0
- package/components/Application.ts +52 -78
- package/components/DESIGN.md +76 -3
- package/components/Scope.ts +10 -4
- package/components/anthropic/index.ts +10 -1
- package/components/bedrock/index.ts +10 -1
- package/components/componentLoader.ts +23 -14
- package/components/mcp/tools/operations.ts +3 -1
- package/components/ollama/index.ts +10 -1
- package/components/openai/index.ts +265 -18
- package/components/operations.js +40 -1
- package/config/configUtils.ts +3 -19
- package/dataLayer/DESIGN.md +29 -5
- package/dataLayer/harperBridge/ResourceBridge.ts +39 -3
- package/dataLayer/restoreMarker.ts +250 -14
- package/dataLayer/schema.ts +2 -7
- package/dataLayer/schemaDescribe.ts +10 -0
- package/dist/bin/cliOperations.js +28 -3
- package/dist/bin/cliOperations.js.map +1 -1
- package/dist/bin/run.js +19 -0
- package/dist/bin/run.js.map +1 -1
- package/dist/components/Application.d.ts +8 -2
- package/dist/components/Application.js +43 -69
- package/dist/components/Application.js.map +1 -1
- package/dist/components/Scope.d.ts +1 -1
- package/dist/components/Scope.js +9 -4
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/anthropic/index.d.ts +0 -10
- package/dist/components/anthropic/index.js +9 -1
- package/dist/components/anthropic/index.js.map +1 -1
- package/dist/components/bedrock/index.d.ts +0 -12
- package/dist/components/bedrock/index.js +9 -1
- package/dist/components/bedrock/index.js.map +1 -1
- package/dist/components/componentLoader.js +23 -14
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/mcp/tools/operations.js +1 -1
- package/dist/components/mcp/tools/operations.js.map +1 -1
- package/dist/components/ollama/index.d.ts +0 -13
- package/dist/components/ollama/index.js +9 -1
- package/dist/components/ollama/index.js.map +1 -1
- package/dist/components/openai/index.d.ts +11 -15
- package/dist/components/openai/index.js +224 -12
- package/dist/components/openai/index.js.map +1 -1
- package/dist/components/operations.d.ts +9 -0
- package/dist/components/operations.js +32 -2
- package/dist/components/operations.js.map +1 -1
- package/dist/config/configUtils.d.ts +1 -2
- package/dist/config/configUtils.js +7 -22
- package/dist/config/configUtils.js.map +1 -1
- package/dist/dataLayer/harperBridge/ResourceBridge.js +29 -2
- package/dist/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
- package/dist/dataLayer/restoreMarker.d.ts +25 -3
- package/dist/dataLayer/restoreMarker.js +213 -13
- package/dist/dataLayer/restoreMarker.js.map +1 -1
- package/dist/dataLayer/schema.js +1 -4
- package/dist/dataLayer/schema.js.map +1 -1
- package/dist/dataLayer/schemaDescribe.js +10 -0
- package/dist/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/json/systemSchema.json +28 -0
- package/dist/resources/DatabaseTransaction.d.ts +21 -1
- package/dist/resources/DatabaseTransaction.js +147 -8
- package/dist/resources/DatabaseTransaction.js.map +1 -1
- package/dist/resources/PrimaryRocksDatabase.js +1 -1
- package/dist/resources/PrimaryRocksDatabase.js.map +1 -1
- package/dist/resources/Table.d.ts +31 -3
- package/dist/resources/Table.js +397 -79
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/auditStore.js +16 -10
- package/dist/resources/auditStore.js.map +1 -1
- package/dist/resources/blob.d.ts +1 -0
- package/dist/resources/blob.js +14 -5
- package/dist/resources/blob.js.map +1 -1
- package/dist/resources/branchDatabase.js +3 -3
- package/dist/resources/branchDatabase.js.map +1 -1
- package/dist/resources/databaseDropPreparation.d.ts +20 -0
- package/dist/resources/databaseDropPreparation.js +106 -0
- package/dist/resources/databaseDropPreparation.js.map +1 -0
- package/dist/resources/databases.d.ts +26 -21
- package/dist/resources/databases.js +1040 -204
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/derivedIndexRegistry.d.ts +23 -0
- package/dist/resources/derivedIndexRegistry.js +92 -0
- package/dist/resources/derivedIndexRegistry.js.map +1 -1
- package/dist/resources/derivedIndexRuntime.d.ts +10 -0
- package/dist/resources/derivedIndexRuntime.js +136 -25
- package/dist/resources/derivedIndexRuntime.js.map +1 -1
- package/dist/resources/derivedIndexes.d.ts +39 -0
- package/dist/resources/derivedIndexes.js +733 -0
- package/dist/resources/derivedIndexes.js.map +1 -0
- package/dist/resources/fullTextSchema.d.ts +8 -0
- package/dist/resources/fullTextSchema.js +42 -0
- package/dist/resources/fullTextSchema.js.map +1 -1
- package/dist/resources/fullTextSchemaLifecycle.d.ts +0 -5
- package/dist/resources/fullTextSchemaLifecycle.js +0 -9
- package/dist/resources/fullTextSchemaLifecycle.js.map +1 -1
- package/dist/resources/graphql.js +101 -9
- package/dist/resources/graphql.js.map +1 -1
- package/dist/resources/indexes/hnswDerivedIndex.d.ts +0 -10
- package/dist/resources/indexes/hnswDerivedIndex.js +0 -230
- package/dist/resources/indexes/hnswDerivedIndex.js.map +1 -1
- package/dist/resources/indexes/nativeFullTextDerivedIndexLifecycle.d.ts +3 -0
- package/dist/resources/indexes/nativeFullTextDerivedIndexLifecycle.js +57 -8
- package/dist/resources/indexes/nativeFullTextDerivedIndexLifecycle.js.map +1 -1
- package/dist/resources/models/Models.d.ts +26 -3
- package/dist/resources/models/Models.js +256 -13
- package/dist/resources/models/Models.js.map +1 -1
- package/dist/resources/models/TestBackend.d.ts +3 -1
- package/dist/resources/models/TestBackend.js +35 -1
- package/dist/resources/models/TestBackend.js.map +1 -1
- package/dist/resources/models/analyticsTable.d.ts +2 -2
- package/dist/resources/models/analyticsTable.js +4 -2
- package/dist/resources/models/analyticsTable.js.map +1 -1
- package/dist/resources/models/backendHelpers.d.ts +24 -0
- package/dist/resources/models/backendHelpers.js +18 -1
- package/dist/resources/models/backendHelpers.js.map +1 -1
- package/dist/resources/models/backendRegistry.d.ts +10 -21
- package/dist/resources/models/backendRegistry.js +74 -18
- package/dist/resources/models/backendRegistry.js.map +1 -1
- package/dist/resources/models/bootstrap.d.ts +7 -0
- package/dist/resources/models/bootstrap.js +36 -4
- package/dist/resources/models/bootstrap.js.map +1 -1
- package/dist/resources/models/decideHook.d.ts +33 -0
- package/dist/resources/models/decideHook.js +105 -0
- package/dist/resources/models/decideHook.js.map +1 -0
- package/dist/resources/models/decision.d.ts +64 -0
- package/dist/resources/models/decision.js +507 -0
- package/dist/resources/models/decision.js.map +1 -0
- package/dist/resources/models/decisionStore.d.ts +134 -0
- package/dist/resources/models/decisionStore.js +350 -0
- package/dist/resources/models/decisionStore.js.map +1 -0
- package/dist/resources/models/embedHook.d.ts +66 -8
- package/dist/resources/models/embedHook.js +228 -61
- package/dist/resources/models/embedHook.js.map +1 -1
- package/dist/resources/models/generativeDecision.d.ts +58 -0
- package/dist/resources/models/generativeDecision.js +315 -0
- package/dist/resources/models/generativeDecision.js.map +1 -0
- package/dist/resources/models/types.d.ts +232 -4
- package/dist/security/authn/oidc/tokenExchange.js +3 -33
- package/dist/security/authn/oidc/tokenExchange.js.map +1 -1
- package/dist/security/authn/oidc/tokenUseTable.d.ts +9 -0
- package/dist/security/authn/oidc/tokenUseTable.js +28 -0
- package/dist/security/authn/oidc/tokenUseTable.js.map +1 -0
- package/dist/security/certificateVerification/certificateVerificationSource.d.ts +0 -1
- package/dist/security/certificateVerification/certificateVerificationSource.js +3 -3
- package/dist/security/certificateVerification/certificateVerificationSource.js.map +1 -1
- package/dist/security/certificateVerification/crlVerification.js +77 -165
- package/dist/security/certificateVerification/crlVerification.js.map +1 -1
- package/dist/security/certificateVerification/types.d.ts +0 -3
- package/dist/security/certificateVerification/verificationTables.d.ts +19 -0
- package/dist/security/certificateVerification/verificationTables.js +125 -0
- package/dist/security/certificateVerification/verificationTables.js.map +1 -0
- package/dist/security/certificateVerification/verificationUtils.d.ts +1 -1
- package/dist/security/certificateVerification/verificationUtils.js +6 -31
- package/dist/security/certificateVerification/verificationUtils.js.map +1 -1
- package/dist/security/jsLoader.d.ts +5 -0
- package/dist/security/jsLoader.js +8 -0
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/server/Server.d.ts +1 -0
- package/dist/server/Server.js.map +1 -1
- package/dist/server/http.js +2 -2
- package/dist/server/http.js.map +1 -1
- package/dist/server/itc/serverHandlers.js +21 -2
- package/dist/server/itc/serverHandlers.js.map +1 -1
- package/dist/server/jobs/jobOwnership.d.ts +25 -0
- package/dist/server/jobs/jobOwnership.js +127 -0
- package/dist/server/jobs/jobOwnership.js.map +1 -0
- package/dist/server/jobs/jobProcess.js +9 -2
- package/dist/server/jobs/jobProcess.js.map +1 -1
- package/dist/server/jobs/jobs.js +18 -5
- package/dist/server/jobs/jobs.js.map +1 -1
- package/dist/server/loadRootComponents.js +10 -0
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/serverHelpers/contentTypes.js +11 -1
- package/dist/server/serverHelpers/contentTypes.js.map +1 -1
- package/dist/server/serverHelpers/serverHandlers.js +12 -2
- package/dist/server/serverHelpers/serverHandlers.js.map +1 -1
- package/dist/server/threads/itc.d.ts +4 -1
- package/dist/server/threads/itc.js +29 -6
- package/dist/server/threads/itc.js.map +1 -1
- package/dist/server/threads/manageThreads.d.ts +12 -4
- package/dist/server/threads/manageThreads.js +241 -119
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/threadServer.d.ts +1 -0
- package/dist/server/threads/threadServer.js +15 -1
- package/dist/server/threads/threadServer.js.map +1 -1
- package/dist/server/threads/windowsProcessTree.d.ts +91 -0
- package/dist/server/threads/windowsProcessTree.js +361 -0
- package/dist/server/threads/windowsProcessTree.js.map +1 -0
- package/dist/server/throttle.d.ts +1 -1
- package/dist/server/throttle.js +8 -1
- package/dist/server/throttle.js.map +1 -1
- package/dist/upgrade/directives/5-3-0.js +53 -46
- package/dist/upgrade/directives/5-3-0.js.map +1 -1
- package/dist/utility/errors/hdbError.d.ts +10 -1
- package/dist/utility/errors/hdbError.js +55 -11
- package/dist/utility/errors/hdbError.js.map +1 -1
- package/dist/utility/fsync.d.ts +2 -0
- package/dist/utility/fsync.js +20 -0
- package/dist/utility/fsync.js.map +1 -0
- package/dist/utility/globalSchema.d.ts +18 -0
- package/dist/utility/hdbTerms.d.ts +3 -0
- package/dist/utility/hdbTerms.js +3 -0
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/signalling.d.ts +7 -1
- package/dist/utility/signalling.js +27 -3
- package/dist/utility/signalling.js.map +1 -1
- package/dist/utility/when.d.ts +1 -0
- package/dist/utility/when.js +21 -0
- package/dist/utility/when.js.map +1 -1
- package/dist/validation/configValidator.js +30 -3
- package/dist/validation/configValidator.js.map +1 -1
- package/index.ts +13 -0
- package/json/systemSchema.json +28 -0
- package/npm-shrinkwrap.json +151 -55
- package/package.json +14 -13
- package/resources/DESIGN.md +80 -100
- package/resources/DatabaseTransaction.ts +157 -10
- package/resources/PrimaryRocksDatabase.ts +2 -2
- package/resources/Table.ts +494 -101
- package/resources/auditStore.ts +18 -10
- package/resources/blob.ts +13 -6
- package/resources/branchDatabase.ts +3 -3
- package/resources/databaseDropPreparation.ts +120 -0
- package/resources/databases.ts +1155 -205
- package/resources/derivedIndexRegistry.ts +122 -0
- package/resources/derivedIndexRuntime.ts +157 -30
- package/resources/derivedIndexes.ts +856 -0
- package/resources/fullTextSchema.ts +55 -0
- package/resources/fullTextSchemaLifecycle.ts +0 -15
- package/resources/graphql.ts +107 -12
- package/resources/indexes/DESIGN.md +7 -0
- package/resources/indexes/hnswDerivedIndex.ts +0 -260
- package/resources/indexes/nativeFullTextDerivedIndexLifecycle.ts +72 -9
- package/resources/models/DESIGN.md +39 -0
- package/resources/models/Models.ts +361 -18
- package/resources/models/TestBackend.ts +56 -1
- package/resources/models/analyticsTable.ts +6 -4
- package/resources/models/backendHelpers.ts +17 -0
- package/resources/models/backendRegistry.ts +76 -21
- package/resources/models/bootstrap.ts +57 -7
- package/resources/models/decideHook.ts +135 -0
- package/resources/models/decision.ts +505 -0
- package/resources/models/decisionStore.ts +419 -0
- package/resources/models/embedHook.ts +272 -55
- package/resources/models/generativeDecision.ts +459 -0
- package/resources/models/types.ts +231 -4
- package/security/DESIGN.md +22 -2
- package/security/authn/oidc/tokenExchange.ts +6 -34
- package/security/authn/oidc/tokenUseTable.ts +27 -0
- package/security/certificateVerification/certificateVerificationSource.ts +2 -3
- package/security/certificateVerification/crlVerification.ts +96 -174
- package/security/certificateVerification/types.ts +0 -3
- package/security/certificateVerification/verificationTables.ts +124 -0
- package/security/certificateVerification/verificationUtils.ts +8 -32
- package/security/jsLoader.ts +9 -1
- package/server/DESIGN.md +27 -1
- package/server/Server.ts +2 -1
- package/server/http.ts +4 -2
- package/server/itc/serverHandlers.js +29 -1
- package/server/jobs/jobOwnership.ts +89 -0
- package/server/jobs/jobProcess.ts +8 -2
- package/server/jobs/jobs.ts +15 -4
- package/server/loadRootComponents.js +11 -0
- package/server/serverHelpers/contentTypes.ts +13 -1
- package/server/serverHelpers/serverHandlers.js +11 -2
- package/server/threads/itc.js +32 -6
- package/server/threads/manageThreads.js +268 -122
- package/server/threads/threadServer.js +13 -1
- package/server/threads/windowsProcessTree.ts +409 -0
- package/server/throttle.ts +11 -1
- package/studio/web/assets/{Chat-CveGbxe6.js → Chat-Bq60AO-g.js} +1 -1
- package/studio/web/assets/{FloatingChat-IpCFgYWL.js → FloatingChat-D4560T0p.js} +3 -3
- package/studio/web/assets/{apiToken-CS8fFTgL.js → apiToken-BEvbFPMc.js} +1 -1
- package/studio/web/assets/{applications-D7F4Jopl.js → applications-CSUVTH4E.js} +1 -1
- package/studio/web/assets/{cssMode-Daw_oLPq.js → cssMode-DJyc9mHj.js} +1 -1
- package/studio/web/assets/{editor-B3Bs1zWX.js → editor-DDIsQfj6.js} +1 -1
- package/studio/web/assets/{html-CDaQwWiE.js → html-g1BJHxLy.js} +1 -1
- package/studio/web/assets/{htmlMode-Cb6emO4U.js → htmlMode-Vh5IglCQ.js} +1 -1
- package/studio/web/assets/{index-B4g2Fu_2.js → index-DGRAzvO4.js} +5 -5
- package/studio/web/assets/{index.lazy-NwhvF1q1.js → index.lazy-vgSic7et.js} +1 -1
- package/studio/web/assets/{javascript-2_86gB9Q.js → javascript-5VIolqf7.js} +1 -1
- package/studio/web/assets/{jsonMode-DX-i86uQ.js → jsonMode-DG4zQraI.js} +1 -1
- package/studio/web/assets/{languageServices-B85WN-Ej.js → languageServices-t5FBpX-i.js} +1 -1
- package/studio/web/assets/{lspLanguageFeatures-JCWHIsKg.js → lspLanguageFeatures-DgVnNPh-.js} +1 -1
- package/studio/web/assets/{notifications-D9ejzt52.js → notifications-BeWcX04m.js} +1 -1
- package/studio/web/assets/{notifications-B7hjKhai.js → notifications-DUGWrWoO.js} +1 -1
- package/studio/web/assets/{profile-D8B6No3F.js → profile-BvUEDBzW.js} +1 -1
- package/studio/web/assets/{regions-DFazIfTK.js → regions-CB-_2m7M.js} +1 -1
- package/studio/web/assets/{register-CwFLviLF.js → register-1w1Zr3b2.js} +2 -2
- package/studio/web/assets/{setComponentFile-VnJ80SSJ.js → setComponentFile-z4-qJCbA.js} +1 -1
- package/studio/web/assets/{setup-BYQxFy-C.js → setup-CS50uJ4x.js} +2 -2
- package/studio/web/assets/{status-Cn5XjmsL.js → status-CI0wOdOE.js} +1 -1
- package/studio/web/assets/{toggleHighContrast-g9xIh6TX.js → toggleHighContrast-BsAE4jPe.js} +1 -1
- package/studio/web/assets/{tsMode-EC-n0Wqc.js → tsMode-D83Gg3cq.js} +1 -1
- package/studio/web/assets/{typescript-DHmM9JCO.js → typescript-Dfp-GrNq.js} +1 -1
- package/studio/web/assets/{useEntityRestURL-BUdnVSVv.js → useEntityRestURL-BKetlINf.js} +1 -1
- package/studio/web/assets/{workers-BVl9bBB-.js → workers-CCvmDLH3.js} +1 -1
- package/studio/web/assets/{xml-C4_sqOkX.js → xml-06pZp00U.js} +1 -1
- package/studio/web/assets/{yaml-CVkbDqtW.js → yaml-iSnWMVlV.js} +1 -1
- package/studio/web/index.html +1 -1
- package/upgrade/directives/5-3-0.ts +61 -54
- package/utility/DESIGN.md +5 -1
- package/utility/errors/hdbError.ts +56 -8
- package/utility/fsync.ts +16 -0
- package/utility/hdbTerms.ts +3 -0
- package/utility/signalling.ts +33 -4
- package/utility/when.ts +22 -0
- package/validation/configValidator.ts +36 -7
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* `@embed` directive write-time hook. `createDefaultEmbedder` builds the embedder
|
|
4
|
-
* a table registers for an `@embed` attribute; `buildEmbedBefore` produces the
|
|
5
|
-
* pre-commit callback that runs registered embedders and writes their vectors onto
|
|
6
|
-
* the record before it commits.
|
|
7
|
-
*/
|
|
8
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
3
|
exports.__setEmbedFnForTest = __setEmbedFnForTest;
|
|
4
|
+
exports.writeHookApplies = writeHookApplies;
|
|
5
|
+
exports.sourceState = sourceState;
|
|
6
|
+
exports.runWriteJobs = runWriteJobs;
|
|
7
|
+
exports.combineWriteHooks = combineWriteHooks;
|
|
8
|
+
exports.sanitizedHookError = sanitizedHookError;
|
|
9
|
+
exports.assertDerivedFieldOwnership = assertDerivedFieldOwnership;
|
|
10
10
|
exports.createDefaultEmbedder = createDefaultEmbedder;
|
|
11
11
|
exports.buildEmbedBefore = buildEmbedBefore;
|
|
12
|
+
const hdbError_ts_1 = require("../../utility/errors/hdbError.js");
|
|
13
|
+
const decision_ts_1 = require("./decision.js");
|
|
12
14
|
// Lazily resolved to avoid a require cycle on the unit-test load path; only needed on failure.
|
|
13
15
|
function getLogger() {
|
|
14
16
|
try {
|
|
@@ -34,15 +36,208 @@ function resolveEmbedFn() {
|
|
|
34
36
|
function __setEmbedFnForTest(fn) {
|
|
35
37
|
_embedFn = fn;
|
|
36
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Whether a write-time model hook runs for this write at all. Skip when the write already
|
|
41
|
+
* carries the derived attributes: a cluster-replication receiver (isNotification), REST
|
|
42
|
+
* x-replicate-from:none, or audit-log replay. Proactive source-subscribe pushes also set
|
|
43
|
+
* isNotification and so skip. One predicate for `@embed` and `@decide` so their trigger rules
|
|
44
|
+
* cannot drift.
|
|
45
|
+
*/
|
|
46
|
+
function writeHookApplies(record, context, options) {
|
|
47
|
+
if (options?.isNotification === true || context?.replicateFrom === false || context?.alreadyLogged === true)
|
|
48
|
+
return false;
|
|
49
|
+
return Boolean(record) && typeof record === 'object';
|
|
50
|
+
}
|
|
51
|
+
function sourceState(record, sourceKey) {
|
|
52
|
+
if (!sourceKey || !(sourceKey in record))
|
|
53
|
+
return 'absent';
|
|
54
|
+
const value = record[sourceKey];
|
|
55
|
+
if (value == null)
|
|
56
|
+
return 'null';
|
|
57
|
+
if (typeof value === 'object' && value.__op__)
|
|
58
|
+
return 'op';
|
|
59
|
+
return 'value';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Run the jobs of one write. The first failure aborts the others, and every job settles before
|
|
63
|
+
* that failure is reported: a rejected write neither waits on a sibling that honors the signal
|
|
64
|
+
* nor keeps being mutated by one that has not finished. A job that ignores the signal is
|
|
65
|
+
* awaited regardless, so the model calls behind the built-in hooks forward it.
|
|
66
|
+
*/
|
|
67
|
+
async function runWriteJobs(jobs, signal) {
|
|
68
|
+
const controller = new AbortController();
|
|
69
|
+
const onAbort = () => controller.abort(signal?.reason);
|
|
70
|
+
if (signal?.aborted)
|
|
71
|
+
onAbort();
|
|
72
|
+
else
|
|
73
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
74
|
+
let failed = false;
|
|
75
|
+
let failure;
|
|
76
|
+
try {
|
|
77
|
+
await Promise.all(jobs.map((job) => job(controller.signal).catch((err) => {
|
|
78
|
+
if (!failed) {
|
|
79
|
+
failed = true;
|
|
80
|
+
failure = err;
|
|
81
|
+
}
|
|
82
|
+
controller.abort(err);
|
|
83
|
+
})));
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
signal?.removeEventListener('abort', onAbort);
|
|
87
|
+
}
|
|
88
|
+
if (failed)
|
|
89
|
+
throw failure;
|
|
90
|
+
}
|
|
91
|
+
function combineWriteHooks(a, b) {
|
|
92
|
+
if (!a)
|
|
93
|
+
return b;
|
|
94
|
+
if (!b)
|
|
95
|
+
return a;
|
|
96
|
+
return (signal) => runWriteJobs([a, b], signal);
|
|
97
|
+
}
|
|
98
|
+
const SAFE_ERROR_NAME = /^[A-Za-z][A-Za-z0-9_]{0,63}$/;
|
|
99
|
+
/**
|
|
100
|
+
* Backend errors can carry URLs / key tails; log raw, return a sanitized error to throw. Only
|
|
101
|
+
* safe identifiers are included (an identifier-shaped error class name, a finite upstream HTTP
|
|
102
|
+
* status) so the failure is diagnosable without hunting through server logs (#1593).
|
|
103
|
+
* `upstreamStatus` is the provider's status — NOT ServerError's statusCode, which is Harper's
|
|
104
|
+
* own response status and would misleadingly read 500 here.
|
|
105
|
+
*/
|
|
106
|
+
function sanitizedHookError(actor, product, attributeName, err, log = true) {
|
|
107
|
+
if (log)
|
|
108
|
+
getLogger().error?.(`${actor} for attribute "${attributeName}" failed:`, err);
|
|
109
|
+
const status = err?.upstreamStatus;
|
|
110
|
+
const errName = err?.name;
|
|
111
|
+
const detail = (typeof errName === 'string' && errName !== 'Error' && SAFE_ERROR_NAME.test(errName) ? ` [${errName}]` : '') +
|
|
112
|
+
(Number.isInteger(status) && status >= 100 && status <= 599 ? ` (backend HTTP ${status})` : '');
|
|
113
|
+
const error = new Error(`Failed to compute ${product} for attribute "${attributeName}"${detail} — see server log for details`);
|
|
114
|
+
if (errName === 'AbortError')
|
|
115
|
+
error.name = 'AbortError';
|
|
116
|
+
return error;
|
|
117
|
+
}
|
|
118
|
+
const INT32_MIN = -2147483648;
|
|
119
|
+
const INT32_MAX = 2147483647;
|
|
120
|
+
// Table validation holds a String to strings and an Int to 32 bits, so a leaf outside either would
|
|
121
|
+
// load and then fail every write.
|
|
122
|
+
const LEAF_KIND_BY_TYPE = {
|
|
123
|
+
String: (schema) => Array.isArray(schema?.enum) && schema.enum.every((value) => typeof value === 'string'),
|
|
124
|
+
Boolean: (schema) => schema?.type === 'boolean' && !Array.isArray(schema.enum),
|
|
125
|
+
Int: (schema) => schema?.type === 'integer' &&
|
|
126
|
+
!Array.isArray(schema.enum) &&
|
|
127
|
+
schema.minimum >= INT32_MIN &&
|
|
128
|
+
schema.maximum <= INT32_MAX,
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Every derived field (an `@embed` target, a `@decide` target or confidence) has exactly one
|
|
132
|
+
* writer, and no directive derives from another directive's output: the hooks run concurrently
|
|
133
|
+
* within one write, so the stored pair would otherwise depend on scheduling. A source and a
|
|
134
|
+
* confidence field must be declared; a decided field and its confidence field are nullable,
|
|
135
|
+
* neither the primary key nor computed, the decided field's type matches its leaf and the leaf
|
|
136
|
+
* is a valid decision schema; and none of those fields may be named after an `Object.prototype`
|
|
137
|
+
* key, because `sourceState` tests presence with `in`. Run on the complete attribute list.
|
|
138
|
+
*/
|
|
139
|
+
function assertDerivedFieldOwnership(attributes) {
|
|
140
|
+
const declared = new Map();
|
|
141
|
+
for (const attribute of attributes)
|
|
142
|
+
if (attribute)
|
|
143
|
+
declared.set(attribute.name, attribute);
|
|
144
|
+
const writers = new Map();
|
|
145
|
+
const claim = (field, writer) => {
|
|
146
|
+
const prior = writers.get(field);
|
|
147
|
+
if (prior)
|
|
148
|
+
throw new hdbError_ts_1.ClientError(`${writer} and ${prior} both write "${field}"`, 400);
|
|
149
|
+
writers.set(field, writer);
|
|
150
|
+
};
|
|
151
|
+
const directives = (attribute) => {
|
|
152
|
+
const out = [];
|
|
153
|
+
if (attribute.embed)
|
|
154
|
+
out.push(['@embed', attribute.embed]);
|
|
155
|
+
if (attribute.decide)
|
|
156
|
+
out.push(['@decide', attribute.decide]);
|
|
157
|
+
return out;
|
|
158
|
+
};
|
|
159
|
+
for (const attribute of attributes) {
|
|
160
|
+
if (!attribute)
|
|
161
|
+
continue;
|
|
162
|
+
for (const [directive, config] of directives(attribute)) {
|
|
163
|
+
const writer = `${directive} on "${attribute.name}"`;
|
|
164
|
+
for (const [name, field] of [
|
|
165
|
+
['confidence', config.confidence],
|
|
166
|
+
['decision', config.decision],
|
|
167
|
+
])
|
|
168
|
+
if (field !== undefined && (typeof field !== 'string' || field === ''))
|
|
169
|
+
throw new hdbError_ts_1.ClientError(`${writer}: "${name}" must name a field`, 400);
|
|
170
|
+
for (const field of [attribute.name, config.source, config.confidence, config.decision])
|
|
171
|
+
if (field && Object.hasOwn(Object.prototype, field))
|
|
172
|
+
throw new hdbError_ts_1.ClientError(`${writer}: "${field}" is an Object.prototype key and cannot be a derived, source, confidence or decision field`, 400);
|
|
173
|
+
if (!declared.has(config.source))
|
|
174
|
+
throw new hdbError_ts_1.ClientError(`${writer} references unknown source field "${config.source}"`, 400);
|
|
175
|
+
if (directive === '@decide') {
|
|
176
|
+
if (attribute.isPrimaryKey || attribute.computed)
|
|
177
|
+
throw new hdbError_ts_1.ClientError(`${writer} cannot combine with @primaryKey or @computed`, 400);
|
|
178
|
+
if (attribute.nullable === false)
|
|
179
|
+
throw new hdbError_ts_1.ClientError(`${writer} cannot be declared non-null: a null source clears the attribute`, 400);
|
|
180
|
+
try {
|
|
181
|
+
(0, decision_ts_1.validateDecisionSchema)(config.schema);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
throw new hdbError_ts_1.ClientError(`${writer}: ${err.message}`, 400);
|
|
185
|
+
}
|
|
186
|
+
if (attribute.type !== undefined) {
|
|
187
|
+
const matches = LEAF_KIND_BY_TYPE[attribute.type];
|
|
188
|
+
if (!matches)
|
|
189
|
+
throw new hdbError_ts_1.ClientError(`${writer} requires a String, Boolean or Int attribute type; got "${attribute.type === 'array' ? '[...]' : attribute.type}"`, 400);
|
|
190
|
+
if (!matches(config.schema))
|
|
191
|
+
throw new hdbError_ts_1.ClientError(`${writer}: the decision schema does not fit a ${attribute.type} attribute`, 400);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
claim(attribute.name, writer);
|
|
195
|
+
if (config.confidence) {
|
|
196
|
+
const confidence = declared.get(config.confidence);
|
|
197
|
+
if (!confidence)
|
|
198
|
+
throw new hdbError_ts_1.ClientError(`${writer} references unknown confidence field "${config.confidence}"`, 400);
|
|
199
|
+
if (confidence.type !== undefined && confidence.type !== 'Float')
|
|
200
|
+
throw new hdbError_ts_1.ClientError(`${writer} requires a Float confidence attribute; "${config.confidence}" is ${confidence.type === 'array' ? '[...]' : confidence.type}`, 400);
|
|
201
|
+
if (confidence.nullable === false)
|
|
202
|
+
throw new hdbError_ts_1.ClientError(`${writer}: confidence attribute "${config.confidence}" cannot be declared non-null: a null source clears it`, 400);
|
|
203
|
+
if (confidence.isPrimaryKey || confidence.computed)
|
|
204
|
+
throw new hdbError_ts_1.ClientError(`${writer}: confidence attribute "${config.confidence}" cannot be @primaryKey or @computed`, 400);
|
|
205
|
+
claim(config.confidence, writer);
|
|
206
|
+
}
|
|
207
|
+
if (config.decision) {
|
|
208
|
+
const decisionField = declared.get(config.decision);
|
|
209
|
+
if (!decisionField)
|
|
210
|
+
throw new hdbError_ts_1.ClientError(`${writer} references unknown decision field "${config.decision}"`, 400);
|
|
211
|
+
if (decisionField.type !== undefined && decisionField.type !== 'String')
|
|
212
|
+
throw new hdbError_ts_1.ClientError(`${writer} requires a String decision attribute; "${config.decision}" is ${decisionField.type === 'array' ? '[...]' : decisionField.type}`, 400);
|
|
213
|
+
if (decisionField.nullable === false)
|
|
214
|
+
throw new hdbError_ts_1.ClientError(`${writer}: decision attribute "${config.decision}" cannot be declared non-null: a null source clears it`, 400);
|
|
215
|
+
if (decisionField.isPrimaryKey || decisionField.computed)
|
|
216
|
+
throw new hdbError_ts_1.ClientError(`${writer}: decision attribute "${config.decision}" cannot be @primaryKey or @computed`, 400);
|
|
217
|
+
claim(config.decision, writer);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
for (const attribute of attributes) {
|
|
222
|
+
if (!attribute)
|
|
223
|
+
continue;
|
|
224
|
+
for (const [directive, config] of directives(attribute)) {
|
|
225
|
+
const sourceWriter = writers.get(config.source);
|
|
226
|
+
if (sourceWriter)
|
|
227
|
+
throw new hdbError_ts_1.ClientError(`${directive} on "${attribute.name}" derives from "${config.source}", which ${sourceWriter} writes`, 400);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
37
231
|
function createDefaultEmbedder(embedConfig) {
|
|
38
232
|
const { source, model } = embedConfig;
|
|
39
|
-
return async (record) => {
|
|
233
|
+
return async (record, hook) => {
|
|
40
234
|
const sourceValue = record?.[source];
|
|
41
235
|
if (sourceValue == null)
|
|
42
236
|
return null;
|
|
43
237
|
const vectors = await resolveEmbedFn()(String(sourceValue), {
|
|
44
238
|
model,
|
|
45
239
|
inputType: 'document',
|
|
240
|
+
signal: hook?.signal,
|
|
46
241
|
});
|
|
47
242
|
const v = vectors?.[0];
|
|
48
243
|
if (v == null)
|
|
@@ -63,63 +258,35 @@ function createDefaultEmbedder(embedConfig) {
|
|
|
63
258
|
function buildEmbedBefore(record, context, options, embedAttributes, userEmbedders) {
|
|
64
259
|
if (!embedAttributes || embedAttributes.length === 0)
|
|
65
260
|
return undefined;
|
|
66
|
-
|
|
67
|
-
// (isNotification), REST x-replicate-from:none, or audit-log replay. Note that
|
|
68
|
-
// proactive source-subscribe pushes also set isNotification and so skip embedding.
|
|
69
|
-
if (options?.isNotification === true || context?.replicateFrom === false || context?.alreadyLogged === true) {
|
|
261
|
+
if (!writeHookApplies(record, context, options))
|
|
70
262
|
return undefined;
|
|
71
|
-
|
|
72
|
-
|
|
263
|
+
let present = false;
|
|
264
|
+
for (const attr of embedAttributes)
|
|
265
|
+
if (sourceState(record, attr.embed?.source) !== 'absent')
|
|
266
|
+
present = true;
|
|
267
|
+
if (!present)
|
|
73
268
|
return undefined;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
269
|
+
return (signal) => runWriteJobs(embedAttributes.map((attr) => async (jobSignal) => {
|
|
270
|
+
const state = sourceState(record, attr.embed?.source);
|
|
271
|
+
if (state === 'absent' || state === 'op')
|
|
272
|
+
return;
|
|
273
|
+
if (state === 'null') {
|
|
274
|
+
record[attr.name] = null;
|
|
275
|
+
return;
|
|
80
276
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
record[attr.name] = null;
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
// CRDT op payloads (`{__op__, value}`) aren't a meaningful embed source; skip.
|
|
98
|
-
if (sourceValue && typeof sourceValue === 'object' && sourceValue.__op__)
|
|
99
|
-
return;
|
|
100
|
-
const embedder = userEmbedders[attr.name];
|
|
101
|
-
if (!embedder)
|
|
102
|
-
return;
|
|
103
|
-
let vector;
|
|
104
|
-
try {
|
|
105
|
-
vector = await embedder(record);
|
|
106
|
-
}
|
|
107
|
-
catch (err) {
|
|
108
|
-
// Backend errors can carry URLs / key tails; log raw, rethrow sanitized. Include
|
|
109
|
-
// only safe identifiers (error class name, upstream HTTP status) so the failure is
|
|
110
|
-
// diagnosable without hunting through server logs (#1593). upstreamStatus is the
|
|
111
|
-
// provider's status — NOT ServerError's statusCode, which is Harper's own response
|
|
112
|
-
// status and would misleadingly read 500 here.
|
|
113
|
-
getLogger().error?.(`Embedder for attribute "${attr.name}" failed:`, err);
|
|
114
|
-
const status = err?.upstreamStatus;
|
|
115
|
-
const errName = err?.name;
|
|
116
|
-
const detail = (errName && errName !== 'Error' ? ` [${errName}]` : '') +
|
|
117
|
-
(typeof status === 'number' ? ` (backend HTTP ${status})` : '');
|
|
118
|
-
throw new Error(`Failed to compute embedding for attribute "${attr.name}"${detail} — see server log for details`);
|
|
119
|
-
}
|
|
120
|
-
record[attr.name] = normalizeVector(vector);
|
|
121
|
-
}));
|
|
122
|
-
};
|
|
277
|
+
const embedder = userEmbedders[attr.name];
|
|
278
|
+
if (!embedder)
|
|
279
|
+
return;
|
|
280
|
+
let vector;
|
|
281
|
+
try {
|
|
282
|
+
vector = await embedder(record, { signal: jobSignal });
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
// An aborted job failed because a sibling did; only that failure is worth a log line.
|
|
286
|
+
throw sanitizedHookError('Embedder', 'embedding', attr.name, err, !jobSignal.aborted);
|
|
287
|
+
}
|
|
288
|
+
record[attr.name] = normalizeVector(vector);
|
|
289
|
+
}), signal);
|
|
123
290
|
}
|
|
124
291
|
// Custom embedders may return any typed array; flatten to a plain array so it round-trips
|
|
125
292
|
// through the record encoder. NaN is left for HNSW to reject at index time.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedHook.js","sourceRoot":"","sources":["../../../resources/models/embedHook.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embedHook.js","sourceRoot":"","sources":["../../../resources/models/embedHook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in `decision` backend over a configured generative logical name (#2779). A call either
|
|
3
|
+
* scores every allowed value from the generative model's own likelihoods (#2838), when that name
|
|
4
|
+
* routes to a backend implementing `scoreChoices`, or asks the model for `samples`
|
|
5
|
+
* structured-output completions and reports the vote frequencies as the distribution. Configured
|
|
6
|
+
* as `models.decision.<name>: { backend: generative, scoring: auto | vote | score }`.
|
|
7
|
+
*
|
|
8
|
+
* Every sample and every scoring call flows through the `models` facade, so each one writes its
|
|
9
|
+
* own `hdb_model_calls` row and token metrics; the decide row itself reports no usage, or the
|
|
10
|
+
* tokens would be counted twice (the same reason the agent loop's outer call writes no row).
|
|
11
|
+
*/
|
|
12
|
+
import { ServerError } from '../../utility/errors/hdbError.ts';
|
|
13
|
+
import type { ChoiceScores, GenerateInput, GenerateOpts, GenerateResult, ModelBackend, ModelKind, ScoreChoicesOpts } from './types.ts';
|
|
14
|
+
export type ScoringMode = 'auto' | 'vote' | 'score';
|
|
15
|
+
export interface GenerativeDecisionConfig {
|
|
16
|
+
/** Logical name of the generative model to sample or score; default `'default'`. */
|
|
17
|
+
generative?: string;
|
|
18
|
+
/** Completions per voted decision (1..25); default 5. */
|
|
19
|
+
samples?: number;
|
|
20
|
+
/** Completions or scoring calls in flight at once (1..25); default 5. */
|
|
21
|
+
concurrency?: number;
|
|
22
|
+
temperature?: number;
|
|
23
|
+
/** Budget for the whole decision, composed with the caller's signal. */
|
|
24
|
+
requestTimeoutMs?: number;
|
|
25
|
+
/**
|
|
26
|
+
* `auto` (default) scores when the generative name routes to a backend that implements
|
|
27
|
+
* `scoreChoices` and votes otherwise, also when scoring proves unsupported for a call; `score`
|
|
28
|
+
* never votes; `vote` never scores, which makes it the rollback setting.
|
|
29
|
+
*/
|
|
30
|
+
scoring?: ScoringMode;
|
|
31
|
+
/**
|
|
32
|
+
* Route each sample only to a generative candidate that sends the response schema as a
|
|
33
|
+
* decoding constraint (`structuredOutput`); default `true`. `false` samples prompt-only
|
|
34
|
+
* backends, whose replies are parsed leniently and fail the decision when no in-schema
|
|
35
|
+
* answer is found.
|
|
36
|
+
*/
|
|
37
|
+
requireStructuredOutput?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare const DEFAULT_SAMPLES = 5;
|
|
40
|
+
export declare const MAX_SAMPLES = 25;
|
|
41
|
+
export type GenerateFn = (input: GenerateInput, opts: GenerateOpts) => Promise<GenerateResult>;
|
|
42
|
+
export type ScoreFn = (input: GenerateInput, choices: readonly string[], opts: ScoreChoicesOpts) => Promise<ChoiceScores>;
|
|
43
|
+
/** The facade calls the adapter makes; injectable for tests. */
|
|
44
|
+
export interface GenerativeDecisionDeps {
|
|
45
|
+
generate?: GenerateFn;
|
|
46
|
+
score?: ScoreFn;
|
|
47
|
+
/** Whether the generative name currently routes to a backend that scores; `auto` asks before every decision. */
|
|
48
|
+
canScore?: (logicalName: string, largestLeaf: number) => boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare class GenerativeDecisionError extends ServerError {
|
|
51
|
+
constructor(message: string);
|
|
52
|
+
}
|
|
53
|
+
export declare function registerGenerativeDecisionBackend(args: {
|
|
54
|
+
logicalName: string;
|
|
55
|
+
kind: ModelKind;
|
|
56
|
+
config: GenerativeDecisionConfig;
|
|
57
|
+
}): void;
|
|
58
|
+
export declare function createGenerativeDecisionBackend(config?: GenerativeDecisionConfig, deps?: GenerativeDecisionDeps): ModelBackend;
|