@molecule/api-ai-decisions-kev 0.0.0-stage → 1.0.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/LICENSE +202 -0
- package/README.md +396 -2
- package/dist/browser-guard.d.ts +2 -0
- package/dist/browser-guard.d.ts.map +1 -0
- package/dist/browser-guard.js +19 -0
- package/dist/browser-guard.js.map +1 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/provider.d.ts +32 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +126 -0
- package/dist/provider.js.map +1 -0
- package/dist/secrets.d.ts +11 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +27 -0
- package/dist/secrets.js.map +1 -0
- package/dist/types.d.ts +40 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/wire.d.ts +94 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +205 -0
- package/dist/wire.js.map +1 -0
- package/package.json +52 -4
package/dist/wire.js
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/v1/systemone` wire protocol (TypeSafe Jev, spoken verbatim by Kev's
|
|
3
|
+
* `kev.serve`) ↔ the `@molecule/api-ai-decisions` types.
|
|
4
|
+
*
|
|
5
|
+
* Wire facts (github.com/jaredpalmer/kev `kev/api.py`, `kev/serve.py`):
|
|
6
|
+
* request `{ model?, state, questions: { <id>: { type: 'choice'|'score'|'noul', instructions?, criteria } } }`
|
|
7
|
+
* — `model` is optional, any string is accepted and echoed back, and it never
|
|
8
|
+
* selects a checkpoint; `choice` criteria is `{ label: description }` (1–255
|
|
9
|
+
* options), `score` criteria a list of 1–255 levels, lowest first, `noul`
|
|
10
|
+
* criteria optional `{ true, false }`. There is no `images` field. Answers
|
|
11
|
+
* carry `choice` + `probabilities` keyed by label, `score` (expected level) +
|
|
12
|
+
* `probabilities` keyed `"0".."k-1"`, or `noul` (P(true), no
|
|
13
|
+
* `probabilities`). The wire `confidence` is TypeSafe's dispersion statistic,
|
|
14
|
+
* not an accuracy rate, and is ignored: the core defines `confidence` as the
|
|
15
|
+
* probability of the reported answer, computed here from the distribution.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Converts the core's questions into wire questions (`yesNo` → `noul`).
|
|
21
|
+
*
|
|
22
|
+
* @param questions - The questions keyed by id.
|
|
23
|
+
* @returns The wire `questions` object.
|
|
24
|
+
*/
|
|
25
|
+
export function toWireQuestions(questions) {
|
|
26
|
+
const out = {};
|
|
27
|
+
for (const [id, q] of Object.entries(questions)) {
|
|
28
|
+
if (q.type === 'choice') {
|
|
29
|
+
out[id] = { type: 'choice', instructions: q.instructions, criteria: q.criteria };
|
|
30
|
+
}
|
|
31
|
+
else if (q.type === 'score') {
|
|
32
|
+
out[id] = { type: 'score', instructions: q.instructions, criteria: q.criteria };
|
|
33
|
+
}
|
|
34
|
+
else if (q.type === 'yesNo') {
|
|
35
|
+
const criteria = {};
|
|
36
|
+
if (q.criteria?.yes)
|
|
37
|
+
criteria.true = q.criteria.yes;
|
|
38
|
+
if (q.criteria?.no)
|
|
39
|
+
criteria.false = q.criteria.no;
|
|
40
|
+
out[id] = {
|
|
41
|
+
type: 'noul',
|
|
42
|
+
instructions: q.instructions,
|
|
43
|
+
...(Object.keys(criteria).length ? { criteria } : {}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw new Error(`ai-decisions: question "${id}" has unknown type "${q.type}"`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
const num = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : 0);
|
|
53
|
+
const clamp01 = (v) => Math.max(0, Math.min(1, v));
|
|
54
|
+
/**
|
|
55
|
+
* Converts one wire answer into the core's answer for `question`.
|
|
56
|
+
*
|
|
57
|
+
* @param id - The question id (for error messages).
|
|
58
|
+
* @param question - The question that was asked.
|
|
59
|
+
* @param wire - The wire answer.
|
|
60
|
+
* @param minConfidence - Optional low-confidence threshold.
|
|
61
|
+
* @returns The typed answer.
|
|
62
|
+
*/
|
|
63
|
+
export function fromWireAnswer(id, question, wire, minConfidence) {
|
|
64
|
+
if (!wire || typeof wire !== 'object') {
|
|
65
|
+
throw new Error(`ai-decisions: the provider returned no answer for question "${id}"`);
|
|
66
|
+
}
|
|
67
|
+
let answer;
|
|
68
|
+
if (question.type === 'choice') {
|
|
69
|
+
const labels = Object.keys(question.criteria);
|
|
70
|
+
const probabilities = {};
|
|
71
|
+
for (const label of labels)
|
|
72
|
+
probabilities[label] = clamp01(num(wire.probabilities?.[label]));
|
|
73
|
+
let top = labels[0] ?? '';
|
|
74
|
+
for (const label of labels)
|
|
75
|
+
if (probabilities[label] > probabilities[top])
|
|
76
|
+
top = label;
|
|
77
|
+
const choice = typeof wire.choice === 'string' && labels.includes(wire.choice) ? wire.choice : top;
|
|
78
|
+
answer = {
|
|
79
|
+
type: 'choice',
|
|
80
|
+
choice,
|
|
81
|
+
probabilities,
|
|
82
|
+
confidence: probabilities[choice] ?? 0,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
else if (question.type === 'score') {
|
|
86
|
+
const probabilities = question.criteria.map((_, i) => clamp01(num(wire.probabilities?.[String(i)])));
|
|
87
|
+
let level = 0;
|
|
88
|
+
probabilities.forEach((p, i) => {
|
|
89
|
+
if (p > probabilities[level])
|
|
90
|
+
level = i;
|
|
91
|
+
});
|
|
92
|
+
const expected = probabilities.reduce((sum, p, i) => sum + p * i, 0);
|
|
93
|
+
answer = {
|
|
94
|
+
type: 'score',
|
|
95
|
+
score: typeof wire.score === 'number' && Number.isFinite(wire.score) ? wire.score : expected,
|
|
96
|
+
level,
|
|
97
|
+
probabilities,
|
|
98
|
+
confidence: probabilities[level] ?? 0,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
if (typeof wire.noul !== 'number' || !Number.isFinite(wire.noul)) {
|
|
103
|
+
throw new Error(`ai-decisions: the provider's answer to "${id}" has no noul probability`);
|
|
104
|
+
}
|
|
105
|
+
const probability = clamp01(wire.noul);
|
|
106
|
+
answer = {
|
|
107
|
+
type: 'yesNo',
|
|
108
|
+
probability,
|
|
109
|
+
answer: probability >= 0.5,
|
|
110
|
+
confidence: Math.max(probability, 1 - probability),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (typeof minConfidence === 'number')
|
|
114
|
+
answer.lowConfidence = answer.confidence < minConfidence;
|
|
115
|
+
return answer;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Converts a whole wire response into the core's result.
|
|
119
|
+
*
|
|
120
|
+
* @param questions - The questions that were asked.
|
|
121
|
+
* @param body - The parsed response body.
|
|
122
|
+
* @param minConfidence - Optional low-confidence threshold.
|
|
123
|
+
* @returns The typed result.
|
|
124
|
+
*/
|
|
125
|
+
export function fromWireResponse(questions, body, minConfidence) {
|
|
126
|
+
const answers = {};
|
|
127
|
+
for (const [id, q] of Object.entries(questions)) {
|
|
128
|
+
answers[id] = fromWireAnswer(id, q, body.answers?.[id], minConfidence);
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
answers: answers,
|
|
132
|
+
...(typeof body.model === 'string' ? { model: body.model } : {}),
|
|
133
|
+
...(body.usage
|
|
134
|
+
? {
|
|
135
|
+
usage: {
|
|
136
|
+
inputTokens: num(body.usage.input_tokens),
|
|
137
|
+
outputTokens: num(body.usage.output_tokens),
|
|
138
|
+
},
|
|
139
|
+
}
|
|
140
|
+
: {}),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Statuses worth retrying: a proxy or platform in front of `kev.serve` (Modal's
|
|
145
|
+
* cold start, a load balancer). `kev.serve` itself never answers these, and a
|
|
146
|
+
* 422 (invalid request, or a state over 65,536 tokens) is never retried.
|
|
147
|
+
*/
|
|
148
|
+
const RETRYABLE = new Set([429, 502, 503, 504, 529]);
|
|
149
|
+
/**
|
|
150
|
+
* POSTs a `/v1/systemone` request with retry on 429/5xx-busy, honouring
|
|
151
|
+
* `Retry-After`. Throws an Error carrying `status` on a non-2xx response.
|
|
152
|
+
*
|
|
153
|
+
* @param opts - Request options.
|
|
154
|
+
* @returns The parsed response body.
|
|
155
|
+
*/
|
|
156
|
+
export async function postSystemOne(opts) {
|
|
157
|
+
const { url, apiKey, body, signal, label, maxRetries = 3 } = opts;
|
|
158
|
+
const headers = { 'content-type': 'application/json' };
|
|
159
|
+
if (apiKey)
|
|
160
|
+
headers.authorization = `Bearer ${apiKey}`;
|
|
161
|
+
if (opts.headers)
|
|
162
|
+
Object.assign(headers, await opts.headers());
|
|
163
|
+
for (let attempt = 0;; attempt++) {
|
|
164
|
+
const response = await fetch(url, {
|
|
165
|
+
method: 'POST',
|
|
166
|
+
headers,
|
|
167
|
+
body: JSON.stringify(body),
|
|
168
|
+
signal,
|
|
169
|
+
});
|
|
170
|
+
if (response.ok)
|
|
171
|
+
return (await response.json());
|
|
172
|
+
if (RETRYABLE.has(response.status) && attempt < maxRetries) {
|
|
173
|
+
const retryAfter = Number(response.headers.get('retry-after'));
|
|
174
|
+
const waitMs = Number.isFinite(retryAfter) && retryAfter > 0
|
|
175
|
+
? Math.min(retryAfter * 1000, 10_000)
|
|
176
|
+
: 250 * 2 ** attempt;
|
|
177
|
+
await new Promise((r) => setTimeout(r, waitMs));
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
const text = await response.text().catch(() => '');
|
|
181
|
+
let detail = text.length > 0 && text.length < 300 ? text : `HTTP ${response.status}`;
|
|
182
|
+
try {
|
|
183
|
+
const parsed = JSON.parse(text);
|
|
184
|
+
if (typeof parsed.detail === 'string')
|
|
185
|
+
detail = parsed.detail;
|
|
186
|
+
else if (Array.isArray(parsed.detail)) {
|
|
187
|
+
// FastAPI request validation: [{ loc, msg, type }, …]
|
|
188
|
+
detail = parsed.detail
|
|
189
|
+
.map((item) => [Array.isArray(item.loc) ? item.loc.join('.') : '', item.msg]
|
|
190
|
+
.filter(Boolean)
|
|
191
|
+
.join(': '))
|
|
192
|
+
.join('; ');
|
|
193
|
+
}
|
|
194
|
+
else if (typeof parsed.error?.message === 'string')
|
|
195
|
+
detail = parsed.error.message;
|
|
196
|
+
}
|
|
197
|
+
catch (_error) {
|
|
198
|
+
// Not JSON — keep the raw text (or the status) as the detail.
|
|
199
|
+
}
|
|
200
|
+
throw Object.assign(new Error(`${label} decision request failed (${response.status}): ${detail}`), {
|
|
201
|
+
status: response.status,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=wire.js.map
|
package/dist/wire.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,54 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@molecule/api-ai-decisions-kev",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Kev decisions provider for molecule.dev — typed choice/score/yes-no answers from the open-weights Kev models (Qwen-based, 0.8B–27B) on your own kev.serve host",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc",
|
|
10
|
+
"test": "vitest run",
|
|
11
|
+
"test:watch": "vitest"
|
|
12
|
+
},
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"keywords": [
|
|
24
|
+
"molecule",
|
|
25
|
+
"ai",
|
|
26
|
+
"decisions",
|
|
27
|
+
"kev",
|
|
28
|
+
"self-hosted",
|
|
29
|
+
"open-weights"
|
|
30
|
+
],
|
|
31
|
+
"license": "Apache-2.0",
|
|
32
|
+
"author": "Molecule Dev, Inc. (https://molecule.dev)",
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@molecule/api-ai-decisions": "^1.1.0",
|
|
35
|
+
"@molecule/api-secrets": "^1.0.1"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@molecule/api-ai-decisions": "1.1.1",
|
|
39
|
+
"@molecule/api-secrets": "1.0.2",
|
|
40
|
+
"@types/node": "26.1.2",
|
|
41
|
+
"typescript": "6.0.3",
|
|
42
|
+
"vitest": "4.1.11"
|
|
43
|
+
},
|
|
44
|
+
"repository": {
|
|
45
|
+
"type": "git",
|
|
46
|
+
"url": "https://github.com/molecule-dev/molecule.git",
|
|
47
|
+
"directory": "packages/api/bonds/ai-decisions/kev"
|
|
48
|
+
},
|
|
49
|
+
"homepage": "https://www.molecule.dev/packages/api-ai-decisions-kev",
|
|
50
|
+
"bugs": "https://github.com/molecule-dev/molecule/issues",
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
}
|
|
54
|
+
}
|