llm-relay 0.46.2 → 0.47.1
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/accounting-store-io.js +1 -9
- package/dist/accounting-store-io.js.map +1 -1
- package/dist/accounting-store-schema.d.ts +0 -35
- package/dist/accounting-store-schema.js +4 -77
- package/dist/accounting-store-schema.js.map +1 -1
- package/dist/accounting-store.d.ts +7 -0
- package/dist/accounting-store.js +3 -1
- package/dist/accounting-store.js.map +1 -1
- package/dist/availability-snapshot.js +12 -33
- package/dist/availability-snapshot.js.map +1 -1
- package/dist/availability.d.ts +31 -4
- package/dist/availability.js +36 -0
- package/dist/availability.js.map +1 -1
- package/dist/backend.js +1 -3
- package/dist/backend.js.map +1 -1
- package/dist/candidates.js +10 -34
- package/dist/candidates.js.map +1 -1
- package/dist/cli.d.ts +28 -0
- package/dist/cli.js +140 -133
- package/dist/cli.js.map +1 -1
- package/dist/cooldown-clear.d.ts +3 -0
- package/dist/cooldown-clear.js +158 -2
- package/dist/cooldown-clear.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/{index-u-Ez_oE6.js → index-BA4GdK4p.js} +1 -1
- package/dist/dashboard/index.html +1 -1
- package/dist/dashboard-contract.js +1 -5
- package/dist/dashboard-contract.js.map +1 -1
- package/dist/dashboard-routes.js +1 -9
- package/dist/dashboard-routes.js.map +1 -1
- package/dist/dashboard-static.js +1 -3
- package/dist/dashboard-static.js.map +1 -1
- package/dist/dialect-stream.js +13 -21
- package/dist/dialect-stream.js.map +1 -1
- package/dist/json-shape.d.ts +22 -0
- package/dist/json-shape.js +40 -0
- package/dist/json-shape.js.map +1 -0
- package/dist/keys-cli.js +4 -60
- package/dist/keys-cli.js.map +1 -1
- package/dist/keystore.js +11 -18
- package/dist/keystore.js.map +1 -1
- package/dist/openai-dialect.js +46 -40
- package/dist/openai-dialect.js.map +1 -1
- package/dist/openai-request.d.ts +0 -26
- package/dist/openai-request.js +1 -3
- package/dist/openai-request.js.map +1 -1
- package/dist/quota-demotion.js +9 -34
- package/dist/quota-demotion.js.map +1 -1
- package/dist/refusal-interpretation.js +1 -4
- package/dist/refusal-interpretation.js.map +1 -1
- package/dist/responses-request.d.ts +0 -76
- package/dist/responses-request.js +1 -3
- package/dist/responses-request.js.map +1 -1
- package/dist/server.js +120 -137
- package/dist/server.js.map +1 -1
- package/dist/sse-frames.d.ts +39 -0
- package/dist/sse-frames.js +65 -0
- package/dist/sse-frames.js.map +1 -0
- package/dist/stream-commit.js +14 -24
- package/dist/stream-commit.js.map +1 -1
- package/dist/target-facts.d.ts +6 -0
- package/dist/target-facts.js +8 -5
- package/dist/target-facts.js.map +1 -1
- package/dist/think-tags.js +11 -30
- package/dist/think-tags.js.map +1 -1
- package/dist/tool-use-ids.d.ts +0 -31
- package/dist/tool-use-ids.js +11 -63
- package/dist/tool-use-ids.js.map +1 -1
- package/package.json +1 -1
package/dist/cooldown-clear.js
CHANGED
|
@@ -1,5 +1,161 @@
|
|
|
1
|
-
import { makeCredentialId, parseCredentialId } from "./credential-id.js";
|
|
2
|
-
import {
|
|
1
|
+
import { CREDENTIAL_LABEL_PATTERN, makeCredentialId, parseCredentialId, } from "./credential-id.js";
|
|
2
|
+
import { hasExactKeys, isRecord } from "./json-shape.js";
|
|
3
|
+
import { clearCooldownFacts, clearCredentialInvalidFacts, COOLING_FACT_KINDS, } from "./target-facts.js";
|
|
4
|
+
function nonEmptyString(value) {
|
|
5
|
+
return typeof value === "string" && value.length > 0;
|
|
6
|
+
}
|
|
7
|
+
function credentialIdBelongsTo(provider, value) {
|
|
8
|
+
if (typeof value !== "string")
|
|
9
|
+
return false;
|
|
10
|
+
return parseCredentialId(value)?.provider === provider;
|
|
11
|
+
}
|
|
12
|
+
function targetMatches(value, expected, acceptedKeys) {
|
|
13
|
+
if (!hasExactKeys(value, acceptedKeys))
|
|
14
|
+
return false;
|
|
15
|
+
return acceptedKeys.every((key) => {
|
|
16
|
+
if (key !== "kinds")
|
|
17
|
+
return value[key] === expected[key];
|
|
18
|
+
return Array.isArray(value.kinds) && expected.kinds !== undefined &&
|
|
19
|
+
value.kinds.length === expected.kinds.length &&
|
|
20
|
+
value.kinds.every((kind, index) => kind === expected.kinds[index]);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function isCooldownFactScope(value) {
|
|
24
|
+
if (!isRecord(value))
|
|
25
|
+
return false;
|
|
26
|
+
switch (value.kind) {
|
|
27
|
+
case "attempt":
|
|
28
|
+
return hasExactKeys(value, ["kind", "provider", "credentialId", "model"]) &&
|
|
29
|
+
nonEmptyString(value.provider) &&
|
|
30
|
+
credentialIdBelongsTo(value.provider, value.credentialId) &&
|
|
31
|
+
nonEmptyString(value.model);
|
|
32
|
+
case "group": {
|
|
33
|
+
const keys = Object.hasOwn(value, "credentialId")
|
|
34
|
+
? ["kind", "provider", "credentialId", "members"]
|
|
35
|
+
: ["kind", "provider", "members"];
|
|
36
|
+
return hasExactKeys(value, keys) &&
|
|
37
|
+
nonEmptyString(value.provider) &&
|
|
38
|
+
Array.isArray(value.members) &&
|
|
39
|
+
value.members.length > 0 &&
|
|
40
|
+
value.members.every(nonEmptyString) &&
|
|
41
|
+
(!Object.hasOwn(value, "credentialId") || credentialIdBelongsTo(value.provider, value.credentialId));
|
|
42
|
+
}
|
|
43
|
+
case "deployment":
|
|
44
|
+
return hasExactKeys(value, ["kind", "provider", "model"]) &&
|
|
45
|
+
nonEmptyString(value.provider) && nonEmptyString(value.model);
|
|
46
|
+
case "credential":
|
|
47
|
+
return hasExactKeys(value, ["kind", "provider", "credentialId"]) &&
|
|
48
|
+
nonEmptyString(value.provider) && credentialIdBelongsTo(value.provider, value.credentialId);
|
|
49
|
+
case "provider":
|
|
50
|
+
return hasExactKeys(value, ["kind", "provider"]) && nonEmptyString(value.provider);
|
|
51
|
+
case "model":
|
|
52
|
+
return hasExactKeys(value, ["kind", "model"]) && nonEmptyString(value.model);
|
|
53
|
+
default:
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function scopeIsContainedByTarget(scope, target) {
|
|
58
|
+
const credentialId = target.credential === undefined
|
|
59
|
+
? undefined
|
|
60
|
+
: makeCredentialId(target.provider, target.credential);
|
|
61
|
+
switch (scope.kind) {
|
|
62
|
+
case "attempt":
|
|
63
|
+
return scope.provider === target.provider &&
|
|
64
|
+
(target.model === undefined || scope.model === target.model) &&
|
|
65
|
+
(credentialId === undefined || scope.credentialId === credentialId);
|
|
66
|
+
case "group":
|
|
67
|
+
return scope.provider === target.provider &&
|
|
68
|
+
(target.model === undefined || scope.members.every((member) => member === target.model)) &&
|
|
69
|
+
(credentialId === undefined || scope.credentialId === credentialId);
|
|
70
|
+
case "deployment":
|
|
71
|
+
return scope.provider === target.provider && credentialId === undefined &&
|
|
72
|
+
(target.model === undefined || scope.model === target.model);
|
|
73
|
+
case "credential":
|
|
74
|
+
return scope.provider === target.provider && target.model === undefined &&
|
|
75
|
+
(credentialId === undefined || scope.credentialId === credentialId);
|
|
76
|
+
case "provider":
|
|
77
|
+
return scope.provider === target.provider && target.model === undefined && credentialId === undefined;
|
|
78
|
+
case "model":
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function isNarrowedScope(value, target) {
|
|
83
|
+
if (!isRecord(value) || typeof value.kind !== "string")
|
|
84
|
+
return false;
|
|
85
|
+
const credentialId = target.credential === undefined
|
|
86
|
+
? undefined
|
|
87
|
+
: makeCredentialId(target.provider, target.credential);
|
|
88
|
+
switch (value.kind) {
|
|
89
|
+
case "attempt":
|
|
90
|
+
return hasExactKeys(value, ["kind", "provider", "credentialId", "model"]) &&
|
|
91
|
+
value.provider === target.provider && value.credentialId === credentialId &&
|
|
92
|
+
typeof value.model === "string";
|
|
93
|
+
case "group":
|
|
94
|
+
return hasExactKeys(value, ["kind", "provider", "credentialId", "members"]) &&
|
|
95
|
+
value.provider === target.provider && value.credentialId === credentialId &&
|
|
96
|
+
Array.isArray(value.members) && value.members.length > 0 &&
|
|
97
|
+
value.members.every(nonEmptyString);
|
|
98
|
+
case "credential":
|
|
99
|
+
return hasExactKeys(value, ["kind", "provider", "credentialId"]) &&
|
|
100
|
+
value.provider === target.provider && value.credentialId === credentialId;
|
|
101
|
+
default:
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function isCooldownCell(value, target, narrowed) {
|
|
106
|
+
if (!isRecord(value) || !hasExactKeys(value, ["provider", "model", "credential"]))
|
|
107
|
+
return false;
|
|
108
|
+
if (value.provider !== target.provider || (!narrowed && !nonEmptyString(value.provider)))
|
|
109
|
+
return false;
|
|
110
|
+
if (!(value.model === null || (narrowed ? typeof value.model === "string" : nonEmptyString(value.model)))) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
if (narrowed) {
|
|
114
|
+
if (value.credential !== target.credential)
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
else if (!nonEmptyString(value.credential) || !CREDENTIAL_LABEL_PATTERN.test(value.credential)) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return (target.model === undefined || value.model === target.model) &&
|
|
121
|
+
(target.credential === undefined || value.credential === target.credential);
|
|
122
|
+
}
|
|
123
|
+
function isCooldownFact(value, target, narrowed) {
|
|
124
|
+
if (!isRecord(value) || !hasExactKeys(value, ["kind", "scope"]))
|
|
125
|
+
return false;
|
|
126
|
+
if (narrowed) {
|
|
127
|
+
return value.kind === "credential-invalid" && isNarrowedScope(value.scope, target);
|
|
128
|
+
}
|
|
129
|
+
return typeof value.kind === "string" &&
|
|
130
|
+
COOLING_FACT_KINDS.has(value.kind) &&
|
|
131
|
+
isCooldownFactScope(value.scope) &&
|
|
132
|
+
scopeIsContainedByTarget(value.scope, target);
|
|
133
|
+
}
|
|
134
|
+
function isClearedGroup(value, isItem) {
|
|
135
|
+
if (!isRecord(value) || !hasExactKeys(value, ["count", "items"]) ||
|
|
136
|
+
typeof value.count !== "number" || !Number.isSafeInteger(value.count) ||
|
|
137
|
+
value.count < 0 || !Array.isArray(value.items)) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
return value.count === value.items.length && value.items.every(isItem);
|
|
141
|
+
}
|
|
142
|
+
/** Validate the cooldown-clear wire envelope under a caller-owned exact target-key policy. */
|
|
143
|
+
export function isCooldownClearResult(value, expectedTarget, acceptedTargetKeys) {
|
|
144
|
+
if (!isRecord(value) || !hasExactKeys(value, ["target", "cleared"]) ||
|
|
145
|
+
!targetMatches(value.target, expectedTarget, acceptedTargetKeys) ||
|
|
146
|
+
!isRecord(value.cleared) ||
|
|
147
|
+
!hasExactKeys(value.cleared, ["breakerCells", "credentialFaults", "facts"])) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
// Derived from the semantic condition the PRODUCER uses (`target.kinds !== undefined` in
|
|
151
|
+
// clearCooldowns), not from the key-policy array — one definition of "narrowed" per file.
|
|
152
|
+
const narrowed = expectedTarget.kinds !== undefined;
|
|
153
|
+
return isClearedGroup(value.cleared.breakerCells, narrowed
|
|
154
|
+
? (_item) => false
|
|
155
|
+
: (item) => isCooldownCell(item, expectedTarget, false)) &&
|
|
156
|
+
isClearedGroup(value.cleared.credentialFaults, (item) => isCooldownCell(item, expectedTarget, narrowed)) &&
|
|
157
|
+
isClearedGroup(value.cleared.facts, (item) => isCooldownFact(item, expectedTarget, narrowed));
|
|
158
|
+
}
|
|
3
159
|
function publicCell(cell) {
|
|
4
160
|
return {
|
|
5
161
|
provider: cell.provider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cooldown-clear.js","sourceRoot":"","sources":["../src/cooldown-clear.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"cooldown-clear.js","sourceRoot":"","sources":["../src/cooldown-clear.ts"],"names":[],"mappings":"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"}
|