@felan-ai/agent-core 0.9.5 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -13
- package/dist/classifier/error.d.ts +5 -0
- package/dist/classifier/error.d.ts.map +1 -0
- package/dist/classifier/error.js +9 -0
- package/dist/classifier/error.js.map +1 -0
- package/dist/classifier/index.d.ts +2 -2
- package/dist/classifier/index.d.ts.map +1 -1
- package/dist/classifier/index.js +1 -1
- package/dist/classifier/index.js.map +1 -1
- package/dist/classifier/pi-classifier.d.ts +12 -0
- package/dist/classifier/pi-classifier.d.ts.map +1 -0
- package/dist/classifier/pi-classifier.js +69 -0
- package/dist/classifier/pi-classifier.js.map +1 -0
- package/dist/classifier/preflight.d.ts +8 -0
- package/dist/classifier/preflight.d.ts.map +1 -0
- package/dist/classifier/{jev/preflight.js → preflight.js} +4 -4
- package/dist/classifier/preflight.js.map +1 -0
- package/dist/classifier/types.d.ts +26 -14
- package/dist/classifier/types.d.ts.map +1 -1
- package/dist/classifier/validation.d.ts +8 -0
- package/dist/classifier/validation.d.ts.map +1 -0
- package/dist/classifier/validation.js +122 -0
- package/dist/classifier/validation.js.map +1 -0
- package/dist/dynamic-thinking/selection.js +2 -2
- package/dist/dynamic-thinking/selection.js.map +1 -1
- package/dist/session.js +2 -2
- package/dist/session.js.map +1 -1
- package/package.json +4 -4
- package/dist/classifier/jev/classifier.d.ts +0 -12
- package/dist/classifier/jev/classifier.d.ts.map +0 -1
- package/dist/classifier/jev/classifier.js +0 -79
- package/dist/classifier/jev/classifier.js.map +0 -1
- package/dist/classifier/jev/client.d.ts +0 -62
- package/dist/classifier/jev/client.d.ts.map +0 -1
- package/dist/classifier/jev/client.js +0 -321
- package/dist/classifier/jev/client.js.map +0 -1
- package/dist/classifier/jev/credentials.d.ts +0 -20
- package/dist/classifier/jev/credentials.d.ts.map +0 -1
- package/dist/classifier/jev/credentials.js +0 -53
- package/dist/classifier/jev/credentials.js.map +0 -1
- package/dist/classifier/jev/preflight.d.ts +0 -8
- package/dist/classifier/jev/preflight.d.ts.map +0 -1
- package/dist/classifier/jev/preflight.js.map +0 -1
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { JevClientError, createJevClient, } from './client.js';
|
|
2
|
-
import { createJevPreflight } from './preflight.js';
|
|
3
|
-
const preflights = new WeakMap();
|
|
4
|
-
const jevClassifiers = new WeakSet();
|
|
5
|
-
export function attachJevPreflight(classifier, logger) {
|
|
6
|
-
if (!jevClassifiers.has(classifier))
|
|
7
|
-
return undefined;
|
|
8
|
-
const preflight = createJevPreflight(logger);
|
|
9
|
-
preflights.set(classifier, preflight);
|
|
10
|
-
return preflight;
|
|
11
|
-
}
|
|
12
|
-
export function createJevClassifier() {
|
|
13
|
-
return createJevClassifierWithOptions({});
|
|
14
|
-
}
|
|
15
|
-
export function createJevClassifierWithOptions(options) {
|
|
16
|
-
const client = createJevClient(options);
|
|
17
|
-
if (!client.resolveTransport())
|
|
18
|
-
return undefined;
|
|
19
|
-
const classifier = {
|
|
20
|
-
canEvaluate(state, questions) {
|
|
21
|
-
return client.canEvaluate(state, questions);
|
|
22
|
-
},
|
|
23
|
-
async evaluate(state, questions, signal) {
|
|
24
|
-
const started = Date.now();
|
|
25
|
-
const run = (activeSignal) => client.evaluate(state, questions, activeSignal === undefined ? {} : { signal: activeSignal });
|
|
26
|
-
const preflight = preflights.get(classifier);
|
|
27
|
-
const result = preflight
|
|
28
|
-
? await preflight.evaluate(Object.keys(questions).join(','), run, signal)
|
|
29
|
-
: await run(signal);
|
|
30
|
-
return { answers: classifierAnswers(result.answers), metadata: evaluationMetadata(result, started) };
|
|
31
|
-
},
|
|
32
|
-
async evaluateProbabilities(state, questions, signal) {
|
|
33
|
-
const started = Date.now();
|
|
34
|
-
const run = (activeSignal) => client.evaluate(state, Object.fromEntries(Object.entries(questions).map(([id, question]) => [id, {
|
|
35
|
-
type: 'noul',
|
|
36
|
-
instructions: question.instructions,
|
|
37
|
-
}])), activeSignal === undefined ? {} : { signal: activeSignal });
|
|
38
|
-
const preflight = preflights.get(classifier);
|
|
39
|
-
const result = preflight
|
|
40
|
-
? await preflight.evaluate(Object.keys(questions).join(','), run, signal)
|
|
41
|
-
: await run(signal);
|
|
42
|
-
return {
|
|
43
|
-
answers: classifierProbabilityAnswers(result.answers),
|
|
44
|
-
metadata: evaluationMetadata(result, started),
|
|
45
|
-
};
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
jevClassifiers.add(classifier);
|
|
49
|
-
return classifier;
|
|
50
|
-
}
|
|
51
|
-
function evaluationMetadata(result, started) {
|
|
52
|
-
return {
|
|
53
|
-
provider: result.provider,
|
|
54
|
-
model: result.model,
|
|
55
|
-
elapsedMs: Date.now() - started,
|
|
56
|
-
...(result.usage === undefined ? {} : { usage: { ...result.usage } }),
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
function classifierAnswers(answers) {
|
|
60
|
-
const choices = {};
|
|
61
|
-
for (const [name, answer] of Object.entries(answers)) {
|
|
62
|
-
if (answer.type !== 'choice') {
|
|
63
|
-
throw new JevClientError('response_invalid', `Jev returned a non-choice answer for ${name}`);
|
|
64
|
-
}
|
|
65
|
-
choices[name] = answer;
|
|
66
|
-
}
|
|
67
|
-
return choices;
|
|
68
|
-
}
|
|
69
|
-
function classifierProbabilityAnswers(answers) {
|
|
70
|
-
const probabilities = {};
|
|
71
|
-
for (const [name, answer] of Object.entries(answers)) {
|
|
72
|
-
if (answer.type !== 'noul') {
|
|
73
|
-
throw new JevClientError('response_invalid', `Jev returned a non-noul answer for ${name}`);
|
|
74
|
-
}
|
|
75
|
-
probabilities[name] = { probability: answer.noul };
|
|
76
|
-
}
|
|
77
|
-
return probabilities;
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=classifier.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../../src/classifier/jev/classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { resolveJevTransport, type JevCredentialSources } from './credentials.js';
|
|
2
|
-
export type JevFetch = (input: URL, init: RequestInit) => Promise<Response>;
|
|
3
|
-
export type JevQuestion = {
|
|
4
|
-
readonly type: 'noul';
|
|
5
|
-
readonly instructions: string;
|
|
6
|
-
} | {
|
|
7
|
-
readonly type: 'choice';
|
|
8
|
-
readonly instructions: string;
|
|
9
|
-
readonly criteria: Readonly<Record<string, string>>;
|
|
10
|
-
} | {
|
|
11
|
-
readonly type: 'score';
|
|
12
|
-
readonly instructions: string;
|
|
13
|
-
readonly criteria: readonly string[];
|
|
14
|
-
};
|
|
15
|
-
export type JevQuestions = Readonly<Record<string, JevQuestion>>;
|
|
16
|
-
export type JevAnswer = {
|
|
17
|
-
readonly type: 'noul';
|
|
18
|
-
readonly noul: number;
|
|
19
|
-
readonly confidence?: number;
|
|
20
|
-
} | {
|
|
21
|
-
readonly type: 'choice';
|
|
22
|
-
readonly choice: string;
|
|
23
|
-
readonly probabilities?: Readonly<Record<string, number>>;
|
|
24
|
-
readonly confidence?: number;
|
|
25
|
-
} | {
|
|
26
|
-
readonly type: 'score';
|
|
27
|
-
readonly score: number;
|
|
28
|
-
readonly probabilities?: readonly number[];
|
|
29
|
-
readonly confidence?: number;
|
|
30
|
-
};
|
|
31
|
-
export type JevAnswers = Readonly<Record<string, JevAnswer>>;
|
|
32
|
-
export interface JevEvaluation {
|
|
33
|
-
readonly provider: 'typesafe' | 'openrouter';
|
|
34
|
-
readonly model: string;
|
|
35
|
-
readonly answers: JevAnswers;
|
|
36
|
-
readonly usage?: JevUsage;
|
|
37
|
-
}
|
|
38
|
-
export interface JevUsage {
|
|
39
|
-
readonly requests: number;
|
|
40
|
-
readonly inputTokens?: number;
|
|
41
|
-
readonly outputTokens?: number;
|
|
42
|
-
readonly costUsd?: number;
|
|
43
|
-
}
|
|
44
|
-
export type JevClientFailureCode = 'unavailable' | 'invalid_request' | 'timeout' | 'aborted' | 'network_error' | 'http_error' | 'response_invalid';
|
|
45
|
-
export declare class JevClientError extends Error {
|
|
46
|
-
readonly code: JevClientFailureCode;
|
|
47
|
-
constructor(code: JevClientFailureCode, message: string);
|
|
48
|
-
}
|
|
49
|
-
export interface CreateJevClientOptions extends JevCredentialSources {
|
|
50
|
-
readonly fetch?: JevFetch;
|
|
51
|
-
readonly timeoutMs?: number;
|
|
52
|
-
readonly maxQuestionsPerRequest?: number;
|
|
53
|
-
}
|
|
54
|
-
export interface JevEvaluateOptions {
|
|
55
|
-
readonly signal?: AbortSignal;
|
|
56
|
-
}
|
|
57
|
-
export declare function createJevClient(options?: CreateJevClientOptions): {
|
|
58
|
-
resolveTransport(): ReturnType<typeof resolveJevTransport>;
|
|
59
|
-
canEvaluate(state: unknown, questions: JevQuestions): boolean;
|
|
60
|
-
evaluate(state: unknown, questions: JevQuestions, evaluateOptions?: JevEvaluateOptions): Promise<JevEvaluation>;
|
|
61
|
-
};
|
|
62
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/classifier/jev/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
import { redactCredential, resolveJevTransport, } from './credentials.js';
|
|
2
|
-
export class JevClientError extends Error {
|
|
3
|
-
code;
|
|
4
|
-
constructor(code, message) {
|
|
5
|
-
super(message);
|
|
6
|
-
this.name = 'JevClientError';
|
|
7
|
-
this.code = code;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
const DEFAULT_TIMEOUT_MS = 20_000;
|
|
11
|
-
const MAX_TIMEOUT_MS = 60_000;
|
|
12
|
-
const MAX_COMBINED_INPUT_BYTES = 64_000;
|
|
13
|
-
const MAX_STATE_AND_QUESTION_BYTES = 32_000;
|
|
14
|
-
const MAX_RESPONSE_BYTES = 256 * 1_024;
|
|
15
|
-
const MAX_INSTRUCTIONS_BYTES = 4_096;
|
|
16
|
-
const PINNED_HOSTS = new Set(['api.typesafe.ai', 'openrouter.ai']);
|
|
17
|
-
export function createJevClient(options = {}) {
|
|
18
|
-
const timeoutMs = normalizeTimeout(options.timeoutMs);
|
|
19
|
-
const maxQuestionsPerRequest = options.maxQuestionsPerRequest;
|
|
20
|
-
if (maxQuestionsPerRequest !== undefined && (!Number.isSafeInteger(maxQuestionsPerRequest) || maxQuestionsPerRequest < 1)) {
|
|
21
|
-
throw new JevClientError('invalid_request', 'Jev max questions per request must be a positive safe integer');
|
|
22
|
-
}
|
|
23
|
-
const fetcher = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
24
|
-
return {
|
|
25
|
-
resolveTransport() {
|
|
26
|
-
return resolveTransport(options);
|
|
27
|
-
},
|
|
28
|
-
canEvaluate(state, questions) {
|
|
29
|
-
try {
|
|
30
|
-
const transport = resolveTransport(options);
|
|
31
|
-
if (!transport)
|
|
32
|
-
return false;
|
|
33
|
-
partitionQuestions(transport.model, state, questionEntries(questions), maxQuestionsPerRequest);
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
async evaluate(state, questions, evaluateOptions = {}) {
|
|
41
|
-
const transport = resolveTransport(options);
|
|
42
|
-
if (!transport)
|
|
43
|
-
throw new JevClientError('unavailable', 'Jev credentials are unavailable');
|
|
44
|
-
const entries = questionEntries(questions);
|
|
45
|
-
const batches = partitionQuestions(transport.model, state, entries, maxQuestionsPerRequest);
|
|
46
|
-
const answers = {};
|
|
47
|
-
let requests = 0;
|
|
48
|
-
let usage;
|
|
49
|
-
for (const batch of batches) {
|
|
50
|
-
const response = await requestAnswers(transport, fetcher, timeoutMs, state, batch, evaluateOptions.signal);
|
|
51
|
-
requests += 1;
|
|
52
|
-
Object.assign(answers, response.answers);
|
|
53
|
-
usage = mergeUsage(usage, response.usage);
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
provider: transport.provider,
|
|
57
|
-
model: transport.model,
|
|
58
|
-
answers,
|
|
59
|
-
...(usage === undefined ? {} : { usage: { requests, ...usage } }),
|
|
60
|
-
};
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
function resolveTransport(options) {
|
|
65
|
-
return resolveJevTransport({
|
|
66
|
-
provider: options.provider ?? 'auto',
|
|
67
|
-
...(options.typesafeApiKey === undefined ? {} : { typesafeApiKey: options.typesafeApiKey }),
|
|
68
|
-
...(options.openrouterApiKey === undefined ? {} : { openrouterApiKey: options.openrouterApiKey }),
|
|
69
|
-
...(options.environment === undefined ? {} : { environment: options.environment }),
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
async function requestAnswers(transport, fetcher, timeoutMs, state, questions, signal) {
|
|
73
|
-
if (!PINNED_HOSTS.has(transport.url.hostname) || transport.url.protocol !== 'https:') {
|
|
74
|
-
throw new JevClientError('invalid_request', 'Jev endpoint is not pinned');
|
|
75
|
-
}
|
|
76
|
-
const body = JSON.stringify({ model: transport.model, state, questions });
|
|
77
|
-
if (Buffer.byteLength(body, 'utf8') > MAX_COMBINED_INPUT_BYTES) {
|
|
78
|
-
throw new JevClientError('invalid_request', 'Jev request exceeds the size budget');
|
|
79
|
-
}
|
|
80
|
-
const controller = createTimeout(signal, timeoutMs);
|
|
81
|
-
let response;
|
|
82
|
-
try {
|
|
83
|
-
response = await fetcher(transport.url, {
|
|
84
|
-
method: 'POST',
|
|
85
|
-
headers: {
|
|
86
|
-
Accept: 'application/json',
|
|
87
|
-
Authorization: `Bearer ${transport.apiKey}`,
|
|
88
|
-
'Content-Type': 'application/json',
|
|
89
|
-
},
|
|
90
|
-
body,
|
|
91
|
-
signal: controller.signal,
|
|
92
|
-
redirect: 'error',
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
controller.dispose();
|
|
97
|
-
if (signal?.aborted)
|
|
98
|
-
throw new JevClientError('aborted', 'Jev request was aborted');
|
|
99
|
-
if (controller.timedOut)
|
|
100
|
-
throw new JevClientError('timeout', 'Jev request timed out');
|
|
101
|
-
throw new JevClientError('network_error', sanitizeError('Jev request failed before a response', error, transport.apiKey));
|
|
102
|
-
}
|
|
103
|
-
let text;
|
|
104
|
-
try {
|
|
105
|
-
text = await readBoundedText(response);
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
if (signal?.aborted)
|
|
109
|
-
throw new JevClientError('aborted', 'Jev request was aborted');
|
|
110
|
-
if (controller.timedOut)
|
|
111
|
-
throw new JevClientError('timeout', 'Jev request timed out');
|
|
112
|
-
throw new JevClientError('response_invalid', sanitizeError('Jev response could not be read', error, transport.apiKey));
|
|
113
|
-
}
|
|
114
|
-
finally {
|
|
115
|
-
controller.dispose();
|
|
116
|
-
}
|
|
117
|
-
if (!response.ok) {
|
|
118
|
-
throw new JevClientError('http_error', sanitizeError(`Jev request failed (${response.status})`, text.slice(0, 200), transport.apiKey));
|
|
119
|
-
}
|
|
120
|
-
return parseAnswers(text, questions, transport.apiKey);
|
|
121
|
-
}
|
|
122
|
-
function questionEntries(questions) {
|
|
123
|
-
const entries = Object.entries(questions);
|
|
124
|
-
if (entries.length === 0)
|
|
125
|
-
throw new JevClientError('invalid_request', 'Jev questions are required');
|
|
126
|
-
for (const [name, question] of entries) {
|
|
127
|
-
if (!name.trim() || name.length > 128)
|
|
128
|
-
throw new JevClientError('invalid_request', 'Jev question id is invalid');
|
|
129
|
-
validateQuestion(question);
|
|
130
|
-
}
|
|
131
|
-
return entries;
|
|
132
|
-
}
|
|
133
|
-
function validateQuestion(question) {
|
|
134
|
-
if (Buffer.byteLength(question.instructions, 'utf8') === 0
|
|
135
|
-
|| Buffer.byteLength(question.instructions, 'utf8') > MAX_INSTRUCTIONS_BYTES) {
|
|
136
|
-
throw new JevClientError('invalid_request', 'Jev question instructions are invalid');
|
|
137
|
-
}
|
|
138
|
-
if (question.type === 'choice') {
|
|
139
|
-
const options = Object.keys(question.criteria);
|
|
140
|
-
if (options.length < 2 || options.length > 16)
|
|
141
|
-
throw new JevClientError('invalid_request', 'Jev choice criteria are invalid');
|
|
142
|
-
}
|
|
143
|
-
if (question.type === 'score' && (question.criteria.length < 2 || question.criteria.length > 16)) {
|
|
144
|
-
throw new JevClientError('invalid_request', 'Jev score criteria are invalid');
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
function partitionQuestions(model, state, entries, maxQuestionsPerRequest) {
|
|
148
|
-
const stateBytes = Buffer.byteLength(JSON.stringify(state), 'utf8');
|
|
149
|
-
if (stateBytes === 0 || stateBytes > MAX_STATE_AND_QUESTION_BYTES) {
|
|
150
|
-
throw new JevClientError('invalid_request', 'Jev state exceeds the size budget');
|
|
151
|
-
}
|
|
152
|
-
const overhead = Buffer.byteLength(JSON.stringify({ model, state, questions: {} }), 'utf8');
|
|
153
|
-
const batches = [];
|
|
154
|
-
let current = {};
|
|
155
|
-
let currentBytes = overhead;
|
|
156
|
-
let currentCount = 0;
|
|
157
|
-
for (const [name, question] of entries) {
|
|
158
|
-
const added = Buffer.byteLength(JSON.stringify({ [name]: question }), 'utf8') + 1;
|
|
159
|
-
if (overhead + added > MAX_STATE_AND_QUESTION_BYTES) {
|
|
160
|
-
throw new JevClientError('invalid_request', 'Jev question exceeds the size budget');
|
|
161
|
-
}
|
|
162
|
-
if (currentCount > 0 && (currentBytes + added > MAX_COMBINED_INPUT_BYTES
|
|
163
|
-
|| (maxQuestionsPerRequest !== undefined && currentCount >= maxQuestionsPerRequest))) {
|
|
164
|
-
batches.push(current);
|
|
165
|
-
current = {};
|
|
166
|
-
currentBytes = overhead;
|
|
167
|
-
currentCount = 0;
|
|
168
|
-
}
|
|
169
|
-
current[name] = question;
|
|
170
|
-
currentBytes += added;
|
|
171
|
-
currentCount += 1;
|
|
172
|
-
}
|
|
173
|
-
batches.push(current);
|
|
174
|
-
return batches;
|
|
175
|
-
}
|
|
176
|
-
function parseAnswers(text, questions, apiKey) {
|
|
177
|
-
let parsed;
|
|
178
|
-
try {
|
|
179
|
-
parsed = JSON.parse(text);
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
throw new JevClientError('response_invalid', 'Jev returned malformed JSON');
|
|
183
|
-
}
|
|
184
|
-
if (!isRecord(parsed) || !isRecord(parsed.answers)) {
|
|
185
|
-
throw new JevClientError('response_invalid', 'Jev response is missing answers');
|
|
186
|
-
}
|
|
187
|
-
const answers = {};
|
|
188
|
-
for (const [name, question] of Object.entries(questions)) {
|
|
189
|
-
const raw = parsed.answers[name];
|
|
190
|
-
const answer = parseAnswer(question, raw);
|
|
191
|
-
if (!answer) {
|
|
192
|
-
throw new JevClientError('response_invalid', sanitizeError(`Jev answer for ${name} is invalid`, raw, apiKey));
|
|
193
|
-
}
|
|
194
|
-
answers[name] = answer;
|
|
195
|
-
}
|
|
196
|
-
const usage = parseUsage(parsed.usage);
|
|
197
|
-
return { answers, ...(usage === undefined ? {} : { usage }) };
|
|
198
|
-
}
|
|
199
|
-
function parseUsage(value) {
|
|
200
|
-
if (!isRecord(value))
|
|
201
|
-
return undefined;
|
|
202
|
-
const inputTokens = nonNegativeInteger(value.input_tokens);
|
|
203
|
-
const outputTokens = nonNegativeInteger(value.output_tokens);
|
|
204
|
-
const costUsd = finiteNumber(value.cost);
|
|
205
|
-
if (inputTokens === undefined && outputTokens === undefined && costUsd === undefined)
|
|
206
|
-
return undefined;
|
|
207
|
-
return {
|
|
208
|
-
...(inputTokens === undefined ? {} : { inputTokens }),
|
|
209
|
-
...(outputTokens === undefined ? {} : { outputTokens }),
|
|
210
|
-
...(costUsd === undefined ? {} : { costUsd }),
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
function mergeUsage(current, next) {
|
|
214
|
-
if (current === undefined && next === undefined)
|
|
215
|
-
return undefined;
|
|
216
|
-
return {
|
|
217
|
-
...sumOptional(current?.inputTokens, next?.inputTokens, 'inputTokens'),
|
|
218
|
-
...sumOptional(current?.outputTokens, next?.outputTokens, 'outputTokens'),
|
|
219
|
-
...sumOptional(current?.costUsd, next?.costUsd, 'costUsd'),
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
function sumOptional(current, next, key) {
|
|
223
|
-
if (current === undefined && next === undefined)
|
|
224
|
-
return {};
|
|
225
|
-
return { [key]: (current ?? 0) + (next ?? 0) };
|
|
226
|
-
}
|
|
227
|
-
function parseAnswer(question, value) {
|
|
228
|
-
if (!isRecord(value))
|
|
229
|
-
return undefined;
|
|
230
|
-
const confidence = optionalUnit(value.confidence);
|
|
231
|
-
if (question.type === 'noul') {
|
|
232
|
-
const noul = unitNumber(value.noul);
|
|
233
|
-
return noul === undefined ? undefined : {
|
|
234
|
-
type: 'noul',
|
|
235
|
-
noul,
|
|
236
|
-
...(confidence === undefined ? {} : { confidence }),
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
if (question.type === 'choice') {
|
|
240
|
-
if (typeof value.choice !== 'string' || !Object.hasOwn(question.criteria, value.choice))
|
|
241
|
-
return undefined;
|
|
242
|
-
return {
|
|
243
|
-
type: 'choice',
|
|
244
|
-
choice: value.choice,
|
|
245
|
-
...(isStringNumberRecord(value.probabilities) ? { probabilities: value.probabilities } : {}),
|
|
246
|
-
...(confidence === undefined ? {} : { confidence }),
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
const score = finiteNumber(value.score);
|
|
250
|
-
if (score === undefined)
|
|
251
|
-
return undefined;
|
|
252
|
-
return {
|
|
253
|
-
type: 'score',
|
|
254
|
-
score,
|
|
255
|
-
...(isNumberArray(value.probabilities) ? { probabilities: value.probabilities } : {}),
|
|
256
|
-
...(confidence === undefined ? {} : { confidence }),
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
async function readBoundedText(response) {
|
|
260
|
-
const buffer = new Uint8Array(await response.arrayBuffer());
|
|
261
|
-
if (buffer.byteLength > MAX_RESPONSE_BYTES)
|
|
262
|
-
throw new JevClientError('response_invalid', 'Jev response exceeds the size budget');
|
|
263
|
-
return new TextDecoder().decode(buffer);
|
|
264
|
-
}
|
|
265
|
-
function createTimeout(signal, timeoutMs) {
|
|
266
|
-
const controller = new AbortController();
|
|
267
|
-
let timedOut = false;
|
|
268
|
-
const onAbort = () => controller.abort(signal?.reason);
|
|
269
|
-
signal?.addEventListener('abort', onAbort, { once: true });
|
|
270
|
-
const timer = setTimeout(() => {
|
|
271
|
-
timedOut = true;
|
|
272
|
-
controller.abort();
|
|
273
|
-
}, timeoutMs);
|
|
274
|
-
if (signal?.aborted)
|
|
275
|
-
controller.abort(signal.reason);
|
|
276
|
-
return {
|
|
277
|
-
signal: controller.signal,
|
|
278
|
-
get timedOut() { return timedOut; },
|
|
279
|
-
dispose() {
|
|
280
|
-
clearTimeout(timer);
|
|
281
|
-
signal?.removeEventListener('abort', onAbort);
|
|
282
|
-
},
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
function normalizeTimeout(value) {
|
|
286
|
-
if (value === undefined)
|
|
287
|
-
return DEFAULT_TIMEOUT_MS;
|
|
288
|
-
if (!Number.isFinite(value) || value < 1 || value > MAX_TIMEOUT_MS) {
|
|
289
|
-
throw new JevClientError('invalid_request', 'Jev timeout is invalid');
|
|
290
|
-
}
|
|
291
|
-
return Math.floor(value);
|
|
292
|
-
}
|
|
293
|
-
function sanitizeError(prefix, detail, credential) {
|
|
294
|
-
const raw = detail instanceof Error ? detail.message : typeof detail === 'string' ? detail : '';
|
|
295
|
-
const redacted = redactCredential(`${prefix}${raw ? `: ${raw}` : ''}`, credential)
|
|
296
|
-
.replace(/Bearer\s+\S+/giu, 'Bearer [redacted]');
|
|
297
|
-
return redacted.slice(0, 300);
|
|
298
|
-
}
|
|
299
|
-
function isRecord(value) {
|
|
300
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
301
|
-
}
|
|
302
|
-
function finiteNumber(value) {
|
|
303
|
-
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
304
|
-
}
|
|
305
|
-
function nonNegativeInteger(value) {
|
|
306
|
-
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
|
|
307
|
-
}
|
|
308
|
-
function unitNumber(value) {
|
|
309
|
-
const number = finiteNumber(value);
|
|
310
|
-
return number === undefined || number < 0 || number > 1 ? undefined : number;
|
|
311
|
-
}
|
|
312
|
-
function optionalUnit(value) {
|
|
313
|
-
return value === undefined ? undefined : unitNumber(value);
|
|
314
|
-
}
|
|
315
|
-
function isStringNumberRecord(value) {
|
|
316
|
-
return isRecord(value) && Object.values(value).every((entry) => typeof entry === 'number' && Number.isFinite(entry));
|
|
317
|
-
}
|
|
318
|
-
function isNumberArray(value) {
|
|
319
|
-
return Array.isArray(value) && value.every((entry) => typeof entry === 'number' && Number.isFinite(entry));
|
|
320
|
-
}
|
|
321
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/classifier/jev/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export type JevProvider = 'auto' | 'typesafe' | 'openrouter';
|
|
2
|
-
export interface JevCredentialSources {
|
|
3
|
-
readonly provider?: JevProvider;
|
|
4
|
-
readonly typesafeApiKey?: string;
|
|
5
|
-
readonly openrouterApiKey?: string;
|
|
6
|
-
readonly environment?: NodeJS.ProcessEnv;
|
|
7
|
-
}
|
|
8
|
-
export interface ResolvedJevTransport {
|
|
9
|
-
readonly provider: 'typesafe' | 'openrouter';
|
|
10
|
-
readonly apiKey: string;
|
|
11
|
-
readonly url: URL;
|
|
12
|
-
readonly model: string;
|
|
13
|
-
}
|
|
14
|
-
export declare const TYPESAFE_SYSTEMONE_URL = "https://api.typesafe.ai/v1/systemone";
|
|
15
|
-
export declare const OPENROUTER_DECISIONS_URL = "https://openrouter.ai/api/alpha/decisions";
|
|
16
|
-
export declare const TYPESAFE_MODEL = "jev-latest";
|
|
17
|
-
export declare const OPENROUTER_MODEL = "typesafe/jev-1.13";
|
|
18
|
-
export declare function resolveJevTransport(sources: JevCredentialSources): ResolvedJevTransport | undefined;
|
|
19
|
-
export declare function redactCredential(value: string, credential: string | undefined): string;
|
|
20
|
-
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/classifier/jev/credentials.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,YAAY,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,sBAAsB,yCAAyC,CAAC;AAC7E,eAAO,MAAM,wBAAwB,8CAA8C,CAAC;AACpF,eAAO,MAAM,cAAc,eAAe,CAAC;AAC3C,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAEpD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,SAAS,CAYnG;AAoBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEtF"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
const MAX_CREDENTIAL_BYTES = 16_384;
|
|
2
|
-
const INVALID_CREDENTIAL = /[\0-\x1f\x7f]/u;
|
|
3
|
-
export const TYPESAFE_SYSTEMONE_URL = 'https://api.typesafe.ai/v1/systemone';
|
|
4
|
-
export const OPENROUTER_DECISIONS_URL = 'https://openrouter.ai/api/alpha/decisions';
|
|
5
|
-
export const TYPESAFE_MODEL = 'jev-latest';
|
|
6
|
-
export const OPENROUTER_MODEL = 'typesafe/jev-1.13';
|
|
7
|
-
export function resolveJevTransport(sources) {
|
|
8
|
-
const environment = sources.environment ?? process.env;
|
|
9
|
-
const typesafeKey = normalizeCredential(sources.typesafeApiKey) ?? normalizeCredential(environment.TYPESAFE_API_KEY);
|
|
10
|
-
const openrouterKey = normalizeCredential(sources.openrouterApiKey)
|
|
11
|
-
?? normalizeCredential(environment.OPENROUTER_API_KEY);
|
|
12
|
-
const provider = sources.provider ?? 'auto';
|
|
13
|
-
if (provider === 'typesafe')
|
|
14
|
-
return typesafeKey ? typesafeTransport(typesafeKey) : undefined;
|
|
15
|
-
if (provider === 'openrouter')
|
|
16
|
-
return openrouterKey ? openrouterTransport(openrouterKey) : undefined;
|
|
17
|
-
if (typesafeKey)
|
|
18
|
-
return typesafeTransport(typesafeKey);
|
|
19
|
-
if (openrouterKey)
|
|
20
|
-
return openrouterTransport(openrouterKey);
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
function typesafeTransport(apiKey) {
|
|
24
|
-
return {
|
|
25
|
-
provider: 'typesafe',
|
|
26
|
-
apiKey,
|
|
27
|
-
url: new URL(TYPESAFE_SYSTEMONE_URL),
|
|
28
|
-
model: TYPESAFE_MODEL,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function openrouterTransport(apiKey) {
|
|
32
|
-
return {
|
|
33
|
-
provider: 'openrouter',
|
|
34
|
-
apiKey,
|
|
35
|
-
url: new URL(OPENROUTER_DECISIONS_URL),
|
|
36
|
-
model: OPENROUTER_MODEL,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
export function redactCredential(value, credential) {
|
|
40
|
-
return credential ? value.split(credential).join('[redacted]') : value;
|
|
41
|
-
}
|
|
42
|
-
function normalizeCredential(value) {
|
|
43
|
-
if (typeof value !== 'string')
|
|
44
|
-
return undefined;
|
|
45
|
-
const trimmed = value.trim();
|
|
46
|
-
if (!trimmed)
|
|
47
|
-
return undefined;
|
|
48
|
-
if (Buffer.byteLength(trimmed, 'utf8') > MAX_CREDENTIAL_BYTES || INVALID_CREDENTIAL.test(trimmed)) {
|
|
49
|
-
throw new Error('Jev API key is invalid');
|
|
50
|
-
}
|
|
51
|
-
return trimmed;
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=credentials.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/classifier/jev/credentials.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAkB5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,sCAAsC,CAAC;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,2CAA2C,CAAC;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEpD,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IACvD,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,mBAAmB,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACrH,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC;WAC9D,mBAAmB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,IAAI,WAAW;QAAE,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,aAAa;QAAE,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,MAAM;QACN,GAAG,EAAE,IAAI,GAAG,CAAC,sBAAsB,CAAC;QACpC,KAAK,EAAE,cAAc;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,MAAM;QACN,GAAG,EAAE,IAAI,GAAG,CAAC,wBAAwB,CAAC;QACtC,KAAK,EAAE,gBAAgB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,UAA8B;IAC5E,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,oBAAoB,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClG,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Logger } from '../../logger.js';
|
|
2
|
-
export declare function createJevPreflight(logger: Logger): {
|
|
3
|
-
startNextTurn(): void;
|
|
4
|
-
finishPreflight(): void;
|
|
5
|
-
dispose(): void;
|
|
6
|
-
evaluate<T>(decision: string, work: (signal: AbortSignal) => Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../../src/classifier/jev/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM;;;;aA4B9B,CAAC,YAAY,MAAM,QAAQ,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;EA8BnH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../src/classifier/jev/preflight.ts"],"names":[],"mappings":"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"}
|