@tradejs/infra 3.1.29-beta.261 → 3.1.29-beta.262
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/dist/jev.d.mts +3 -1
- package/dist/jev.d.ts +3 -1
- package/dist/jev.js +11 -6
- package/dist/jev.mjs +10 -6
- package/package.json +4 -3
package/dist/jev.d.mts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { JevProviderConfig, JevResponse } from '@tradejs/types';
|
|
2
2
|
|
|
3
|
+
/** Provider criteria are zero-based: ten strength levels use raw scores 0–9. */
|
|
4
|
+
declare const jevScoreMaximum: (dimension: string) => 4 | 9;
|
|
3
5
|
declare const jevStableJson: (value: unknown) => string;
|
|
4
6
|
declare const jevHash: (value: unknown) => string;
|
|
5
7
|
declare const jevFileHash: (contents: string) => string;
|
|
@@ -13,4 +15,4 @@ declare const requestJev: (provider: JevProviderConfig, apiKey: string, state: u
|
|
|
13
15
|
}) => Promise<JevResponse>;
|
|
14
16
|
declare const validateJevResponse: (body: unknown, expected: string[]) => JevResponse;
|
|
15
17
|
|
|
16
|
-
export { jevFileHash, jevHash, jevStableJson, readJevArtifact, requestJev, validateJevResponse, writeJevArtifact };
|
|
18
|
+
export { jevFileHash, jevHash, jevScoreMaximum, jevStableJson, readJevArtifact, requestJev, validateJevResponse, writeJevArtifact };
|
package/dist/jev.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { JevProviderConfig, JevResponse } from '@tradejs/types';
|
|
2
2
|
|
|
3
|
+
/** Provider criteria are zero-based: ten strength levels use raw scores 0–9. */
|
|
4
|
+
declare const jevScoreMaximum: (dimension: string) => 4 | 9;
|
|
3
5
|
declare const jevStableJson: (value: unknown) => string;
|
|
4
6
|
declare const jevHash: (value: unknown) => string;
|
|
5
7
|
declare const jevFileHash: (contents: string) => string;
|
|
@@ -13,4 +15,4 @@ declare const requestJev: (provider: JevProviderConfig, apiKey: string, state: u
|
|
|
13
15
|
}) => Promise<JevResponse>;
|
|
14
16
|
declare const validateJevResponse: (body: unknown, expected: string[]) => JevResponse;
|
|
15
17
|
|
|
16
|
-
export { jevFileHash, jevHash, jevStableJson, readJevArtifact, requestJev, validateJevResponse, writeJevArtifact };
|
|
18
|
+
export { jevFileHash, jevHash, jevScoreMaximum, jevStableJson, readJevArtifact, requestJev, validateJevResponse, writeJevArtifact };
|
package/dist/jev.js
CHANGED
|
@@ -32,6 +32,7 @@ var jev_exports = {};
|
|
|
32
32
|
__export(jev_exports, {
|
|
33
33
|
jevFileHash: () => jevFileHash,
|
|
34
34
|
jevHash: () => jevHash,
|
|
35
|
+
jevScoreMaximum: () => jevScoreMaximum,
|
|
35
36
|
jevStableJson: () => jevStableJson,
|
|
36
37
|
readJevArtifact: () => readJevArtifact,
|
|
37
38
|
requestJev: () => requestJev,
|
|
@@ -42,6 +43,7 @@ module.exports = __toCommonJS(jev_exports);
|
|
|
42
43
|
var import_node_crypto = require("crypto");
|
|
43
44
|
var import_promises = __toESM(require("fs/promises"));
|
|
44
45
|
var import_node_path = __toESM(require("path"));
|
|
46
|
+
var jevScoreMaximum = (dimension) => dimension === "signalStrength" ? 9 : 4;
|
|
45
47
|
var jevStableJson = (value) => {
|
|
46
48
|
if (Array.isArray(value)) return `[${value.map(jevStableJson).join(",")}]`;
|
|
47
49
|
if (value && typeof value === "object")
|
|
@@ -154,26 +156,28 @@ var validateJevResponse = (body, expected) => {
|
|
|
154
156
|
const result = body;
|
|
155
157
|
if (!result || typeof result.model !== "string" || !result.model || !result.answers)
|
|
156
158
|
throw new Error("Invalid Jev response");
|
|
157
|
-
if (!expected.length || expected.length >
|
|
159
|
+
if (!expected.length || expected.length > 9 || Object.keys(result.answers).sort().join(",") !== [...expected].sort().join(","))
|
|
158
160
|
throw new Error("Invalid Jev answer set");
|
|
159
161
|
for (const key of expected) {
|
|
160
162
|
const answer = result.answers[key];
|
|
161
|
-
|
|
163
|
+
const maximum = jevScoreMaximum(key);
|
|
164
|
+
const levels = Array.from({ length: maximum + 1 }, (_, index) => index);
|
|
165
|
+
if (!answer || answer.type !== "score" || !Number.isFinite(answer.score) || answer.score < 0 || answer.score > maximum || !Number.isFinite(answer.confidence) || answer.confidence < 0 || answer.confidence > 1)
|
|
162
166
|
throw new Error(`Invalid Jev ${key} answer`);
|
|
163
167
|
const probabilities = answer.probabilities;
|
|
164
|
-
if (!probabilities || Object.keys(probabilities).length !==
|
|
168
|
+
if (!probabilities || Object.keys(probabilities).length !== levels.length || levels.some(
|
|
165
169
|
(level) => !Number.isFinite(probabilities[level]) || probabilities[level] < 0 || probabilities[level] > 1
|
|
166
170
|
))
|
|
167
171
|
throw new Error(`Invalid Jev ${key} probabilities`);
|
|
168
172
|
const roundingHalfUnit = 5e-3;
|
|
169
173
|
const epsilon = 1e-9;
|
|
170
|
-
if (Math.abs(Object.values(probabilities).reduce((a, b) => a + b, 0) - 1) >
|
|
174
|
+
if (Math.abs(Object.values(probabilities).reduce((a, b) => a + b, 0) - 1) > levels.length * roundingHalfUnit + epsilon)
|
|
171
175
|
throw new Error("Jev probabilities must sum to one");
|
|
172
|
-
const mean =
|
|
176
|
+
const mean = levels.reduce(
|
|
173
177
|
(sum, level) => sum + level * probabilities[level],
|
|
174
178
|
0
|
|
175
179
|
);
|
|
176
|
-
if (Math.abs(mean - answer.score) > (
|
|
180
|
+
if (Math.abs(mean - answer.score) > levels.reduce((sum, level) => sum + level, 1) * roundingHalfUnit + epsilon)
|
|
177
181
|
throw new Error("Jev score disagrees with probabilities");
|
|
178
182
|
}
|
|
179
183
|
return result;
|
|
@@ -182,6 +186,7 @@ var validateJevResponse = (body, expected) => {
|
|
|
182
186
|
0 && (module.exports = {
|
|
183
187
|
jevFileHash,
|
|
184
188
|
jevHash,
|
|
189
|
+
jevScoreMaximum,
|
|
185
190
|
jevStableJson,
|
|
186
191
|
readJevArtifact,
|
|
187
192
|
requestJev,
|
package/dist/jev.mjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { createHash, randomUUID } from "crypto";
|
|
3
3
|
import fs from "fs/promises";
|
|
4
4
|
import path from "path";
|
|
5
|
+
var jevScoreMaximum = (dimension) => dimension === "signalStrength" ? 9 : 4;
|
|
5
6
|
var jevStableJson = (value) => {
|
|
6
7
|
if (Array.isArray(value)) return `[${value.map(jevStableJson).join(",")}]`;
|
|
7
8
|
if (value && typeof value === "object")
|
|
@@ -114,26 +115,28 @@ var validateJevResponse = (body, expected) => {
|
|
|
114
115
|
const result = body;
|
|
115
116
|
if (!result || typeof result.model !== "string" || !result.model || !result.answers)
|
|
116
117
|
throw new Error("Invalid Jev response");
|
|
117
|
-
if (!expected.length || expected.length >
|
|
118
|
+
if (!expected.length || expected.length > 9 || Object.keys(result.answers).sort().join(",") !== [...expected].sort().join(","))
|
|
118
119
|
throw new Error("Invalid Jev answer set");
|
|
119
120
|
for (const key of expected) {
|
|
120
121
|
const answer = result.answers[key];
|
|
121
|
-
|
|
122
|
+
const maximum = jevScoreMaximum(key);
|
|
123
|
+
const levels = Array.from({ length: maximum + 1 }, (_, index) => index);
|
|
124
|
+
if (!answer || answer.type !== "score" || !Number.isFinite(answer.score) || answer.score < 0 || answer.score > maximum || !Number.isFinite(answer.confidence) || answer.confidence < 0 || answer.confidence > 1)
|
|
122
125
|
throw new Error(`Invalid Jev ${key} answer`);
|
|
123
126
|
const probabilities = answer.probabilities;
|
|
124
|
-
if (!probabilities || Object.keys(probabilities).length !==
|
|
127
|
+
if (!probabilities || Object.keys(probabilities).length !== levels.length || levels.some(
|
|
125
128
|
(level) => !Number.isFinite(probabilities[level]) || probabilities[level] < 0 || probabilities[level] > 1
|
|
126
129
|
))
|
|
127
130
|
throw new Error(`Invalid Jev ${key} probabilities`);
|
|
128
131
|
const roundingHalfUnit = 5e-3;
|
|
129
132
|
const epsilon = 1e-9;
|
|
130
|
-
if (Math.abs(Object.values(probabilities).reduce((a, b) => a + b, 0) - 1) >
|
|
133
|
+
if (Math.abs(Object.values(probabilities).reduce((a, b) => a + b, 0) - 1) > levels.length * roundingHalfUnit + epsilon)
|
|
131
134
|
throw new Error("Jev probabilities must sum to one");
|
|
132
|
-
const mean =
|
|
135
|
+
const mean = levels.reduce(
|
|
133
136
|
(sum, level) => sum + level * probabilities[level],
|
|
134
137
|
0
|
|
135
138
|
);
|
|
136
|
-
if (Math.abs(mean - answer.score) > (
|
|
139
|
+
if (Math.abs(mean - answer.score) > levels.reduce((sum, level) => sum + level, 1) * roundingHalfUnit + epsilon)
|
|
137
140
|
throw new Error("Jev score disagrees with probabilities");
|
|
138
141
|
}
|
|
139
142
|
return result;
|
|
@@ -141,6 +144,7 @@ var validateJevResponse = (body, expected) => {
|
|
|
141
144
|
export {
|
|
142
145
|
jevFileHash,
|
|
143
146
|
jevHash,
|
|
147
|
+
jevScoreMaximum,
|
|
144
148
|
jevStableJson,
|
|
145
149
|
readJevArtifact,
|
|
146
150
|
requestJev,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tradejs/infra",
|
|
3
|
-
"version": "3.1.29-beta.
|
|
3
|
+
"version": "3.1.29-beta.262",
|
|
4
4
|
"description": "MIT-licensed server infrastructure adapters for TradeJS: Redis, Timescale, ML, logging, and IO.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"tradejs",
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"coinbase",
|
|
17
17
|
"ai",
|
|
18
18
|
"claude",
|
|
19
|
-
"codex"
|
|
19
|
+
"codex",
|
|
20
|
+
"jev"
|
|
20
21
|
],
|
|
21
22
|
"repository": {
|
|
22
23
|
"type": "git",
|
|
@@ -140,7 +141,7 @@
|
|
|
140
141
|
"dependencies": {
|
|
141
142
|
"@grpc/grpc-js": "^1.14.4",
|
|
142
143
|
"@grpc/proto-loader": "^0.8.1",
|
|
143
|
-
"@tradejs/types": "^3.1.29-beta.
|
|
144
|
+
"@tradejs/types": "^3.1.29-beta.262",
|
|
144
145
|
"chalk": "4.1.2",
|
|
145
146
|
"date-fns": "^3.6.0",
|
|
146
147
|
"ioredis": "5.11.1",
|