@tradejs/infra 3.1.29-beta.260 → 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 +17 -6
- package/dist/jev.mjs +16 -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")
|
|
@@ -101,6 +103,12 @@ var requestJev = async (provider, apiKey, state, questions, options = {}) => {
|
|
|
101
103
|
body: JSON.stringify({ model: provider.model, state, questions })
|
|
102
104
|
});
|
|
103
105
|
} catch {
|
|
106
|
+
if (!controller.signal.aborted && attempt < (options.retries ?? 2)) {
|
|
107
|
+
await new Promise(
|
|
108
|
+
(resolve) => setTimeout(resolve, 250 * 2 ** attempt)
|
|
109
|
+
);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
104
112
|
throw new Error(
|
|
105
113
|
controller.signal.aborted ? "Jev request timed out" : "Jev provider connection failed"
|
|
106
114
|
);
|
|
@@ -148,26 +156,28 @@ var validateJevResponse = (body, expected) => {
|
|
|
148
156
|
const result = body;
|
|
149
157
|
if (!result || typeof result.model !== "string" || !result.model || !result.answers)
|
|
150
158
|
throw new Error("Invalid Jev response");
|
|
151
|
-
if (!expected.length || expected.length >
|
|
159
|
+
if (!expected.length || expected.length > 9 || Object.keys(result.answers).sort().join(",") !== [...expected].sort().join(","))
|
|
152
160
|
throw new Error("Invalid Jev answer set");
|
|
153
161
|
for (const key of expected) {
|
|
154
162
|
const answer = result.answers[key];
|
|
155
|
-
|
|
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)
|
|
156
166
|
throw new Error(`Invalid Jev ${key} answer`);
|
|
157
167
|
const probabilities = answer.probabilities;
|
|
158
|
-
if (!probabilities || Object.keys(probabilities).length !==
|
|
168
|
+
if (!probabilities || Object.keys(probabilities).length !== levels.length || levels.some(
|
|
159
169
|
(level) => !Number.isFinite(probabilities[level]) || probabilities[level] < 0 || probabilities[level] > 1
|
|
160
170
|
))
|
|
161
171
|
throw new Error(`Invalid Jev ${key} probabilities`);
|
|
162
172
|
const roundingHalfUnit = 5e-3;
|
|
163
173
|
const epsilon = 1e-9;
|
|
164
|
-
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)
|
|
165
175
|
throw new Error("Jev probabilities must sum to one");
|
|
166
|
-
const mean =
|
|
176
|
+
const mean = levels.reduce(
|
|
167
177
|
(sum, level) => sum + level * probabilities[level],
|
|
168
178
|
0
|
|
169
179
|
);
|
|
170
|
-
if (Math.abs(mean - answer.score) > (
|
|
180
|
+
if (Math.abs(mean - answer.score) > levels.reduce((sum, level) => sum + level, 1) * roundingHalfUnit + epsilon)
|
|
171
181
|
throw new Error("Jev score disagrees with probabilities");
|
|
172
182
|
}
|
|
173
183
|
return result;
|
|
@@ -176,6 +186,7 @@ var validateJevResponse = (body, expected) => {
|
|
|
176
186
|
0 && (module.exports = {
|
|
177
187
|
jevFileHash,
|
|
178
188
|
jevHash,
|
|
189
|
+
jevScoreMaximum,
|
|
179
190
|
jevStableJson,
|
|
180
191
|
readJevArtifact,
|
|
181
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")
|
|
@@ -61,6 +62,12 @@ var requestJev = async (provider, apiKey, state, questions, options = {}) => {
|
|
|
61
62
|
body: JSON.stringify({ model: provider.model, state, questions })
|
|
62
63
|
});
|
|
63
64
|
} catch {
|
|
65
|
+
if (!controller.signal.aborted && attempt < (options.retries ?? 2)) {
|
|
66
|
+
await new Promise(
|
|
67
|
+
(resolve) => setTimeout(resolve, 250 * 2 ** attempt)
|
|
68
|
+
);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
64
71
|
throw new Error(
|
|
65
72
|
controller.signal.aborted ? "Jev request timed out" : "Jev provider connection failed"
|
|
66
73
|
);
|
|
@@ -108,26 +115,28 @@ var validateJevResponse = (body, expected) => {
|
|
|
108
115
|
const result = body;
|
|
109
116
|
if (!result || typeof result.model !== "string" || !result.model || !result.answers)
|
|
110
117
|
throw new Error("Invalid Jev response");
|
|
111
|
-
if (!expected.length || expected.length >
|
|
118
|
+
if (!expected.length || expected.length > 9 || Object.keys(result.answers).sort().join(",") !== [...expected].sort().join(","))
|
|
112
119
|
throw new Error("Invalid Jev answer set");
|
|
113
120
|
for (const key of expected) {
|
|
114
121
|
const answer = result.answers[key];
|
|
115
|
-
|
|
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)
|
|
116
125
|
throw new Error(`Invalid Jev ${key} answer`);
|
|
117
126
|
const probabilities = answer.probabilities;
|
|
118
|
-
if (!probabilities || Object.keys(probabilities).length !==
|
|
127
|
+
if (!probabilities || Object.keys(probabilities).length !== levels.length || levels.some(
|
|
119
128
|
(level) => !Number.isFinite(probabilities[level]) || probabilities[level] < 0 || probabilities[level] > 1
|
|
120
129
|
))
|
|
121
130
|
throw new Error(`Invalid Jev ${key} probabilities`);
|
|
122
131
|
const roundingHalfUnit = 5e-3;
|
|
123
132
|
const epsilon = 1e-9;
|
|
124
|
-
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)
|
|
125
134
|
throw new Error("Jev probabilities must sum to one");
|
|
126
|
-
const mean =
|
|
135
|
+
const mean = levels.reduce(
|
|
127
136
|
(sum, level) => sum + level * probabilities[level],
|
|
128
137
|
0
|
|
129
138
|
);
|
|
130
|
-
if (Math.abs(mean - answer.score) > (
|
|
139
|
+
if (Math.abs(mean - answer.score) > levels.reduce((sum, level) => sum + level, 1) * roundingHalfUnit + epsilon)
|
|
131
140
|
throw new Error("Jev score disagrees with probabilities");
|
|
132
141
|
}
|
|
133
142
|
return result;
|
|
@@ -135,6 +144,7 @@ var validateJevResponse = (body, expected) => {
|
|
|
135
144
|
export {
|
|
136
145
|
jevFileHash,
|
|
137
146
|
jevHash,
|
|
147
|
+
jevScoreMaximum,
|
|
138
148
|
jevStableJson,
|
|
139
149
|
readJevArtifact,
|
|
140
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",
|