@sentropic/h2a-runtime 0.91.1 → 0.92.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/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -3
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +76 -58
- package/dist/index.js.map +1 -1
- package/dist/llm-gateway-runtime/index.d.ts +6 -0
- package/dist/llm-gateway-runtime/index.d.ts.map +1 -1
- package/dist/llm-gateway-runtime/index.js +134 -60
- package/dist/llm-gateway-runtime/index.js.map +1 -1
- package/dist/llm-gateway-runtime/session-ledger.d.ts +38 -55
- package/dist/llm-gateway-runtime/session-ledger.d.ts.map +1 -1
- package/dist/llm-gateway-runtime/session-ledger.js +102 -250
- package/dist/llm-gateway-runtime/session-ledger.js.map +1 -1
- package/dist/llm-gateway-runtime/sticky.d.ts +25 -52
- package/dist/llm-gateway-runtime/sticky.d.ts.map +1 -1
- package/dist/llm-gateway-runtime/sticky.js +36 -605
- package/dist/llm-gateway-runtime/sticky.js.map +1 -1
- package/dist/llm-mesh.d.ts +19 -72
- package/dist/llm-mesh.d.ts.map +1 -1
- package/dist/llm-mesh.js +42 -399
- package/dist/llm-mesh.js.map +1 -1
- package/dist/llm-routing-config.d.ts +28 -0
- package/dist/llm-routing-config.d.ts.map +1 -0
- package/dist/llm-routing-config.js +100 -0
- package/dist/llm-routing-config.js.map +1 -0
- package/dist/registry.d.ts +7 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +37 -1
- package/dist/registry.js.map +1 -1
- package/dist/status-projection.d.ts.map +1 -1
- package/dist/tmux.d.ts +7 -5
- package/dist/tmux.d.ts.map +1 -1
- package/dist/tmux.js +33 -7
- package/dist/tmux.js.map +1 -1
- package/package.json +3 -3
- package/dist/llm-gateway-runtime/accounts.d.ts +0 -62
- package/dist/llm-gateway-runtime/accounts.d.ts.map +0 -1
- package/dist/llm-gateway-runtime/accounts.js +0 -323
- package/dist/llm-gateway-runtime/accounts.js.map +0 -1
- package/dist/llm-gateway-runtime/model-catalog.d.ts +0 -44
- package/dist/llm-gateway-runtime/model-catalog.d.ts.map +0 -1
- package/dist/llm-gateway-runtime/model-catalog.js +0 -191
- package/dist/llm-gateway-runtime/model-catalog.js.map +0 -1
- package/dist/llm-gateway-runtime/proxy-anthropic.d.ts +0 -3
- package/dist/llm-gateway-runtime/proxy-anthropic.d.ts.map +0 -1
- package/dist/llm-gateway-runtime/proxy-anthropic.js +0 -318
- package/dist/llm-gateway-runtime/proxy-anthropic.js.map +0 -1
- package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts +0 -11
- package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts.map +0 -1
- package/dist/llm-gateway-runtime/proxy-cloud-code.js +0 -215
- package/dist/llm-gateway-runtime/proxy-cloud-code.js.map +0 -1
- package/dist/llm-gateway-runtime/proxy-openai.d.ts +0 -118
- package/dist/llm-gateway-runtime/proxy-openai.d.ts.map +0 -1
- package/dist/llm-gateway-runtime/proxy-openai.js +0 -1305
- package/dist/llm-gateway-runtime/proxy-openai.js.map +0 -1
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
import { accountPoolForProvider, listModelCatalog, resolveModelRoute, } from "./model-catalog.js";
|
|
2
|
-
/** True when the credential has the shape used by the Codex OAuth transport. */
|
|
3
|
-
export function isCodexOAuthToken(token) {
|
|
4
|
-
return !token.startsWith("sk-") && token.split(".").length === 3;
|
|
5
|
-
}
|
|
6
|
-
export function effectiveAccountAuthType(account) {
|
|
7
|
-
return account.authType ?? (account.token.startsWith("sk-") ? "api-key" : "bearer");
|
|
8
|
-
}
|
|
9
|
-
/** Keep preflight attestation coupled to the transport chosen by the proxy. */
|
|
10
|
-
export function upstreamTransportForAccount(account) {
|
|
11
|
-
if (account.provider === "cloud-code")
|
|
12
|
-
return "cloud-code";
|
|
13
|
-
switch (providerFamily(account.provider)) {
|
|
14
|
-
case "openai":
|
|
15
|
-
return isCodexOAuthToken(account.token)
|
|
16
|
-
? "codex-responses"
|
|
17
|
-
: "openai-chat-completions";
|
|
18
|
-
case "anthropic":
|
|
19
|
-
case "google":
|
|
20
|
-
return "anthropic-messages";
|
|
21
|
-
default:
|
|
22
|
-
return "unknown";
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
function isUnsupportedClaudeOAuthAccount(account) {
|
|
26
|
-
return (account.provider === "anthropic" &&
|
|
27
|
-
(account.authType === "bearer" ||
|
|
28
|
-
account.id === "claude-oauth" ||
|
|
29
|
-
account.token.startsWith("sk-ant-oat")));
|
|
30
|
-
}
|
|
31
|
-
function parse() {
|
|
32
|
-
const raw = process.env.GATEWAY_ACCOUNTS;
|
|
33
|
-
if (!raw)
|
|
34
|
-
throw new Error("GATEWAY_ACCOUNTS env var is required");
|
|
35
|
-
const list = JSON.parse(raw);
|
|
36
|
-
if (!Array.isArray(list) || list.length === 0)
|
|
37
|
-
throw new Error("GATEWAY_ACCOUNTS must be a non-empty JSON array");
|
|
38
|
-
const accounts = list.filter((account) => !isUnsupportedClaudeOAuthAccount(account));
|
|
39
|
-
if (accounts.length === 0) {
|
|
40
|
-
throw new Error("GATEWAY_ACCOUNTS has no supported accounts: Claude Code OAuth is not a supported upstream transport");
|
|
41
|
-
}
|
|
42
|
-
return accounts;
|
|
43
|
-
}
|
|
44
|
-
let _accounts = null;
|
|
45
|
-
export function getAccounts() {
|
|
46
|
-
if (!_accounts)
|
|
47
|
-
_accounts = parse();
|
|
48
|
-
return _accounts;
|
|
49
|
-
}
|
|
50
|
-
function accountStatus(account) {
|
|
51
|
-
return account.status ?? "active";
|
|
52
|
-
}
|
|
53
|
-
function explicitModelIds(account) {
|
|
54
|
-
return [...new Set([...(account.modelIds ?? []), ...(account.models ?? [])])];
|
|
55
|
-
}
|
|
56
|
-
export function publicAccountDescriptor(account) {
|
|
57
|
-
return {
|
|
58
|
-
id: account.id,
|
|
59
|
-
provider: account.provider,
|
|
60
|
-
label: account.label,
|
|
61
|
-
...(account.authType ? { authType: account.authType } : {}),
|
|
62
|
-
...(account.expiresAt ? { expiresAt: account.expiresAt } : {}),
|
|
63
|
-
modelIds: explicitModelIds(account),
|
|
64
|
-
status: accountStatus(account),
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
export function listAccountDescriptors() {
|
|
68
|
-
return getAccounts().map(publicAccountDescriptor);
|
|
69
|
-
}
|
|
70
|
-
export function providerFamily(provider) {
|
|
71
|
-
if (provider === "openai" || provider === "codex")
|
|
72
|
-
return "openai";
|
|
73
|
-
if (provider === "anthropic" || provider === "claude-code")
|
|
74
|
-
return "anthropic";
|
|
75
|
-
if (provider === "google" ||
|
|
76
|
-
provider === "gemini" ||
|
|
77
|
-
provider === "gcp" ||
|
|
78
|
-
provider === "cloud-code")
|
|
79
|
-
return "google";
|
|
80
|
-
return "other";
|
|
81
|
-
}
|
|
82
|
-
export const DEFAULT_QUOTA_EXHAUSTION_MS = 5 * 60 * 60 * 1000;
|
|
83
|
-
const _exhausted = new Map();
|
|
84
|
-
function quotaExhaustionWindowMs() {
|
|
85
|
-
const configured = Number.parseInt(process.env.LLM_GATEWAY_QUOTA_EXHAUSTION_MS ?? "", 10);
|
|
86
|
-
return Number.isFinite(configured) && configured > 0
|
|
87
|
-
? configured
|
|
88
|
-
: DEFAULT_QUOTA_EXHAUSTION_MS;
|
|
89
|
-
}
|
|
90
|
-
export function markAccountExhausted(accountId, reason, windowMs = quotaExhaustionWindowMs(), nowMs = Date.now()) {
|
|
91
|
-
_exhausted.set(accountId, {
|
|
92
|
-
exhaustedAtMs: nowMs,
|
|
93
|
-
windowMs,
|
|
94
|
-
...(reason !== undefined ? { reason } : {}),
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
export function isAccountExhausted(accountId, nowMs = Date.now()) {
|
|
98
|
-
const rec = _exhausted.get(accountId);
|
|
99
|
-
if (!rec)
|
|
100
|
-
return false;
|
|
101
|
-
if (nowMs >= rec.exhaustedAtMs + rec.windowMs) {
|
|
102
|
-
_exhausted.delete(accountId);
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
export function accountExhaustionReason(accountId) {
|
|
108
|
-
return _exhausted.get(accountId)?.reason;
|
|
109
|
-
}
|
|
110
|
-
// Visible for testing
|
|
111
|
-
export function resetAccountsCache() {
|
|
112
|
-
_accounts = null;
|
|
113
|
-
_rrIdx = 0;
|
|
114
|
-
_routeRrIdx.clear();
|
|
115
|
-
_exhausted.clear();
|
|
116
|
-
}
|
|
117
|
-
let _rrIdx = 0;
|
|
118
|
-
const _routeRrIdx = new Map();
|
|
119
|
-
export function accountSupportsRoute(account, route) {
|
|
120
|
-
if (accountStatus(account) !== "active")
|
|
121
|
-
return false;
|
|
122
|
-
if (isAccountExhausted(account.id))
|
|
123
|
-
return false;
|
|
124
|
-
const pool = accountPoolForProvider(account.provider);
|
|
125
|
-
if (pool !== route.accountPool)
|
|
126
|
-
return false;
|
|
127
|
-
const modelIds = explicitModelIds(account);
|
|
128
|
-
if (modelIds.length === 0)
|
|
129
|
-
return true;
|
|
130
|
-
const accepted = [
|
|
131
|
-
route.requestedModel,
|
|
132
|
-
route.catalogModelId,
|
|
133
|
-
route.upstreamModel,
|
|
134
|
-
].filter((value) => typeof value === "string" && value.length > 0);
|
|
135
|
-
return accepted.some((modelId) => modelIds.includes(modelId));
|
|
136
|
-
}
|
|
137
|
-
export function eligibleAccountsForRoute(route, options = {}) {
|
|
138
|
-
const accounts = getAccounts().filter((account) => accountStatus(account) === "active" &&
|
|
139
|
-
!isAccountExhausted(account.id) &&
|
|
140
|
-
(!options.requiredTransport ||
|
|
141
|
-
upstreamTransportForAccount(account) === options.requiredTransport));
|
|
142
|
-
if (!route)
|
|
143
|
-
return accounts;
|
|
144
|
-
return accounts.filter((account) => accountSupportsRoute(account, route));
|
|
145
|
-
}
|
|
146
|
-
export function selectAccount() {
|
|
147
|
-
const accounts = getAccounts();
|
|
148
|
-
const usable = eligibleAccountsForRoute();
|
|
149
|
-
const pool = usable.length > 0 ? usable : accounts;
|
|
150
|
-
const acct = pool[_rrIdx % pool.length];
|
|
151
|
-
_rrIdx++;
|
|
152
|
-
return acct;
|
|
153
|
-
}
|
|
154
|
-
export function selectAccountForRoute(route, options = {}) {
|
|
155
|
-
const accounts = eligibleAccountsForRoute(route, options);
|
|
156
|
-
if (accounts.length === 0) {
|
|
157
|
-
throw new Error(`no eligible ${route.accountPool} account for ${route.requestedModel ?? route.upstreamModel ?? "route"}` +
|
|
158
|
-
(options.requiredTransport
|
|
159
|
-
? ` using ${options.requiredTransport} transport`
|
|
160
|
-
: ""));
|
|
161
|
-
}
|
|
162
|
-
const key = `${route.accountPool}:${route.upstreamModel ?? route.catalogModelId ?? ""}`;
|
|
163
|
-
const idx = _routeRrIdx.get(key) ?? 0;
|
|
164
|
-
const acct = accounts[idx % accounts.length];
|
|
165
|
-
_routeRrIdx.set(key, idx + 1);
|
|
166
|
-
return acct;
|
|
167
|
-
}
|
|
168
|
-
export function findAccount(accountId) {
|
|
169
|
-
return getAccounts().find((a) => a.id === accountId);
|
|
170
|
-
}
|
|
171
|
-
export function listRoutableModels() {
|
|
172
|
-
let accounts;
|
|
173
|
-
try {
|
|
174
|
-
accounts = getAccounts();
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
// Facade-backed Cloud Code accounts never enter GATEWAY_ACCOUNTS.
|
|
178
|
-
return listModelCatalog().filter((entry) => entry.transportProviderId === "cloud-code");
|
|
179
|
-
}
|
|
180
|
-
return listModelCatalog().filter((entry) => {
|
|
181
|
-
const route = resolveModelRoute(entry.id);
|
|
182
|
-
return (route !== undefined &&
|
|
183
|
-
accounts.some((account) => accountSupportsRoute(account, route)));
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
export function selectFallbackAccount(exhaustedAccountId, nowMs = Date.now(), options = {}) {
|
|
187
|
-
let accounts;
|
|
188
|
-
try {
|
|
189
|
-
accounts = getAccounts();
|
|
190
|
-
}
|
|
191
|
-
catch {
|
|
192
|
-
return undefined;
|
|
193
|
-
}
|
|
194
|
-
const exhausted = accounts.find((a) => a.id === exhaustedAccountId);
|
|
195
|
-
const isActive = (a) => a.id !== exhaustedAccountId &&
|
|
196
|
-
accountStatus(a) === "active" &&
|
|
197
|
-
!isAccountExhausted(a.id, nowMs);
|
|
198
|
-
// 1. Same-pool candidates matching requiredTransport & route
|
|
199
|
-
const samePoolTransport = accounts.filter((a) => isActive(a) &&
|
|
200
|
-
(!options.requiredTransport ||
|
|
201
|
-
upstreamTransportForAccount(a) === options.requiredTransport) &&
|
|
202
|
-
(!options.route || accountSupportsRoute(a, options.route)));
|
|
203
|
-
if (samePoolTransport.length > 0) {
|
|
204
|
-
const family = exhausted ? providerFamily(exhausted.provider) : undefined;
|
|
205
|
-
const sameFamily = family
|
|
206
|
-
? samePoolTransport.filter((a) => providerFamily(a.provider) === family)
|
|
207
|
-
: [];
|
|
208
|
-
return sameFamily[0] ?? samePoolTransport[0];
|
|
209
|
-
}
|
|
210
|
-
// An attested session must refuse rather than downgrade its transport.
|
|
211
|
-
if (options.requiredTransport)
|
|
212
|
-
return undefined;
|
|
213
|
-
// 2. Same-pool candidates relaxing requiredTransport
|
|
214
|
-
const samePoolAnyTransport = accounts.filter((a) => isActive(a) &&
|
|
215
|
-
(!options.route || accountSupportsRoute(a, options.route)));
|
|
216
|
-
if (samePoolAnyTransport.length > 0) {
|
|
217
|
-
return samePoolAnyTransport[0];
|
|
218
|
-
}
|
|
219
|
-
// 3. Cross-pool fallback disabled when a route is specified — returning
|
|
220
|
-
// an account from an incompatible pool would send the wrong model
|
|
221
|
-
// name to the upstream (e.g. "gemini-3.1-pro" to Codex → 400).
|
|
222
|
-
// When no route is specified (generic fallback), allow cross-pool.
|
|
223
|
-
if (!options.route) {
|
|
224
|
-
const crossPool = accounts.filter(isActive);
|
|
225
|
-
return crossPool[0];
|
|
226
|
-
}
|
|
227
|
-
return undefined;
|
|
228
|
-
}
|
|
229
|
-
/** Update the in-memory token for an account (after OAuth refresh). */
|
|
230
|
-
export function updateAccountToken(accountId, newToken, expiresAt) {
|
|
231
|
-
const accounts = getAccounts();
|
|
232
|
-
const acc = accounts.find((a) => a.id === accountId);
|
|
233
|
-
if (!acc)
|
|
234
|
-
return;
|
|
235
|
-
acc.token = newToken;
|
|
236
|
-
if (expiresAt !== undefined)
|
|
237
|
-
acc.expiresAt = expiresAt;
|
|
238
|
-
}
|
|
239
|
-
function jwtExpiry(token) {
|
|
240
|
-
try {
|
|
241
|
-
const parts = token.split(".");
|
|
242
|
-
const payload = JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8"));
|
|
243
|
-
if (typeof payload.exp === "number")
|
|
244
|
-
return new Date(payload.exp * 1000).toISOString();
|
|
245
|
-
}
|
|
246
|
-
catch {
|
|
247
|
-
/* ignore */
|
|
248
|
-
}
|
|
249
|
-
return undefined;
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Refresh the OAuth access token for an account using its refresh_token.
|
|
253
|
-
* Updates the in-memory account on success. No-op if no refresh_token.
|
|
254
|
-
* Returns the new token, or null if refresh is not applicable.
|
|
255
|
-
*/
|
|
256
|
-
export async function refreshOAuthToken(accountId) {
|
|
257
|
-
const acc = findAccount(accountId);
|
|
258
|
-
if (!acc)
|
|
259
|
-
return null;
|
|
260
|
-
if (!acc.refreshToken &&
|
|
261
|
-
(acc.provider === "google" ||
|
|
262
|
-
acc.provider === "gemini" ||
|
|
263
|
-
acc.provider === "gcp")) {
|
|
264
|
-
try {
|
|
265
|
-
const { homedir } = await import("node:os");
|
|
266
|
-
const { join } = await import("node:path");
|
|
267
|
-
const { readFileSync } = await import("node:fs");
|
|
268
|
-
const agyPath = join(homedir(), ".gemini", "antigravity-cli", "antigravity-oauth-token");
|
|
269
|
-
const agyRaw = JSON.parse(readFileSync(agyPath, "utf8"));
|
|
270
|
-
const agyToken = agyRaw?.token?.access_token?.trim();
|
|
271
|
-
if (agyToken && agyToken !== acc.token) {
|
|
272
|
-
const agyExpiry = agyRaw?.token?.expiry ? Date.parse(agyRaw.token.expiry) : NaN;
|
|
273
|
-
updateAccountToken(accountId, agyToken, Number.isFinite(agyExpiry) ? new Date(agyExpiry).toISOString() : undefined);
|
|
274
|
-
return agyToken;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
catch {
|
|
278
|
-
// Ignore disk read errors
|
|
279
|
-
}
|
|
280
|
-
return null;
|
|
281
|
-
}
|
|
282
|
-
if (!acc.refreshToken)
|
|
283
|
-
return null;
|
|
284
|
-
let resp;
|
|
285
|
-
try {
|
|
286
|
-
resp = await fetch("https://auth.openai.com/oauth/token", {
|
|
287
|
-
method: "POST",
|
|
288
|
-
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
289
|
-
body: new URLSearchParams({
|
|
290
|
-
grant_type: "refresh_token",
|
|
291
|
-
refresh_token: acc.refreshToken,
|
|
292
|
-
client_id: "app_EMoamEEZ73f0CkXaXp7hrann",
|
|
293
|
-
}),
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
catch (err) {
|
|
297
|
-
console.error(`[llm-gateway] OAuth refresh network error for ${accountId}:`, err);
|
|
298
|
-
return null;
|
|
299
|
-
}
|
|
300
|
-
if (!resp.ok) {
|
|
301
|
-
const body = await resp.text().catch(() => "");
|
|
302
|
-
console.error(`[llm-gateway] OAuth refresh failed (${resp.status}) for ${accountId}: ${body}`);
|
|
303
|
-
return null;
|
|
304
|
-
}
|
|
305
|
-
const data = (await resp.json());
|
|
306
|
-
if (!data.access_token) {
|
|
307
|
-
console.error(`[llm-gateway] OAuth refresh: no access_token in response for ${accountId}`);
|
|
308
|
-
return null;
|
|
309
|
-
}
|
|
310
|
-
const refreshedTransport = upstreamTransportForAccount({
|
|
311
|
-
...acc,
|
|
312
|
-
token: data.access_token,
|
|
313
|
-
});
|
|
314
|
-
if (refreshedTransport !== upstreamTransportForAccount(acc)) {
|
|
315
|
-
console.error(`[llm-gateway] OAuth refresh rejected for ${accountId}: credential transport changed`);
|
|
316
|
-
return null;
|
|
317
|
-
}
|
|
318
|
-
const expiresAt = jwtExpiry(data.access_token);
|
|
319
|
-
updateAccountToken(accountId, data.access_token, expiresAt);
|
|
320
|
-
console.log(`[llm-gateway] OAuth token refreshed for ${accountId}${expiresAt ? `, expires ${expiresAt}` : ""}`);
|
|
321
|
-
return data.access_token;
|
|
322
|
-
}
|
|
323
|
-
//# sourceMappingURL=accounts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/llm-gateway-runtime/accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
export type AccountPool = "anthropic" | "codex" | "google";
|
|
2
|
-
export type GatewayProtocol = "anthropic.messages";
|
|
3
|
-
export type RoutingPolicy = "round-robin";
|
|
4
|
-
export interface ModelCatalogEntry {
|
|
5
|
-
id: string;
|
|
6
|
-
provider: AccountPool;
|
|
7
|
-
targetProviderId: string;
|
|
8
|
-
transportProviderId: string;
|
|
9
|
-
upstreamModel: string;
|
|
10
|
-
accountPool: AccountPool;
|
|
11
|
-
inputProtocol: GatewayProtocol;
|
|
12
|
-
outputProtocol: GatewayProtocol;
|
|
13
|
-
capabilities: string[];
|
|
14
|
-
defaultPolicy: RoutingPolicy;
|
|
15
|
-
effort?: string;
|
|
16
|
-
routeKind: "faithful" | "alias";
|
|
17
|
-
}
|
|
18
|
-
export interface RoutingTarget {
|
|
19
|
-
requestedModel?: string;
|
|
20
|
-
catalogModelId?: string;
|
|
21
|
-
upstreamModel?: string;
|
|
22
|
-
accountPool: AccountPool;
|
|
23
|
-
routingPolicy: RoutingPolicy;
|
|
24
|
-
routeReason: "env-model-map" | "provider-request" | "canonical-route";
|
|
25
|
-
providerId?: string;
|
|
26
|
-
transportProviderId?: string;
|
|
27
|
-
effort?: string;
|
|
28
|
-
routeKind?: "faithful" | "alias";
|
|
29
|
-
}
|
|
30
|
-
export declare function listModelCatalog(): ModelCatalogEntry[];
|
|
31
|
-
export declare function resetModelCatalogCache(): void;
|
|
32
|
-
export declare function accountPoolForProvider(provider: string): AccountPool | undefined;
|
|
33
|
-
export declare function routeForProvider(provider: string): RoutingTarget | undefined;
|
|
34
|
-
export declare function resolveModelRoute(model: string): RoutingTarget | undefined;
|
|
35
|
-
export declare function routeModelOrThrow(model: string): RoutingTarget;
|
|
36
|
-
export declare function modelCatalogResponse(entries?: ModelCatalogEntry[]): {
|
|
37
|
-
object: "list";
|
|
38
|
-
data: Array<Record<string, unknown> & {
|
|
39
|
-
id: string;
|
|
40
|
-
object: "model";
|
|
41
|
-
owned_by: string;
|
|
42
|
-
}>;
|
|
43
|
-
};
|
|
44
|
-
//# sourceMappingURL=model-catalog.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/llm-gateway-runtime/model-catalog.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACnD,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,WAAW,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,eAAe,CAAC;IAC/B,cAAc,EAAE,eAAe,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EACP,eAAe,GACf,kBAAkB,GAClB,iBAAiB,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;CAClC;AA+ED,wBAAgB,gBAAgB,IAAI,iBAAiB,EAAE,CAoCtD;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GACf,WAAW,GAAG,SAAS,CAgBzB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAQ5E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAqC1E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAI9D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,sBAAqB,GAAG;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1F,CAmBA"}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { describeCanonicalTargetRoutes } from "@sentropic/llm-gateway";
|
|
2
|
-
const CODEX_CAPABILITIES = ["streaming", "tools", "reasoning_effort"];
|
|
3
|
-
const GOOGLE_CAPABILITIES = ["streaming", "tools"];
|
|
4
|
-
const CLOUD_CODE_CATALOG = [
|
|
5
|
-
{
|
|
6
|
-
id: "gemini-2.5-pro",
|
|
7
|
-
provider: "google",
|
|
8
|
-
targetProviderId: "google",
|
|
9
|
-
transportProviderId: "cloud-code",
|
|
10
|
-
upstreamModel: "gemini-2.5-pro",
|
|
11
|
-
accountPool: "google",
|
|
12
|
-
inputProtocol: "anthropic.messages",
|
|
13
|
-
outputProtocol: "anthropic.messages",
|
|
14
|
-
capabilities: [...GOOGLE_CAPABILITIES],
|
|
15
|
-
defaultPolicy: "round-robin",
|
|
16
|
-
routeKind: "faithful",
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
id: "gemini-2.5-flash",
|
|
20
|
-
provider: "google",
|
|
21
|
-
targetProviderId: "google",
|
|
22
|
-
transportProviderId: "cloud-code",
|
|
23
|
-
upstreamModel: "gemini-2.5-flash",
|
|
24
|
-
accountPool: "google",
|
|
25
|
-
inputProtocol: "anthropic.messages",
|
|
26
|
-
outputProtocol: "anthropic.messages",
|
|
27
|
-
capabilities: [...GOOGLE_CAPABILITIES],
|
|
28
|
-
defaultPolicy: "round-robin",
|
|
29
|
-
routeKind: "faithful",
|
|
30
|
-
},
|
|
31
|
-
];
|
|
32
|
-
let _catalog = null;
|
|
33
|
-
let _envModelMap = null;
|
|
34
|
-
function parseEnvModelMap() {
|
|
35
|
-
if (_envModelMap)
|
|
36
|
-
return _envModelMap;
|
|
37
|
-
if (!process.env.OPENAI_MODEL_MAP) {
|
|
38
|
-
_envModelMap = {};
|
|
39
|
-
return _envModelMap;
|
|
40
|
-
}
|
|
41
|
-
_envModelMap = JSON.parse(process.env.OPENAI_MODEL_MAP);
|
|
42
|
-
return _envModelMap;
|
|
43
|
-
}
|
|
44
|
-
function envCatalogEntries() {
|
|
45
|
-
return Object.entries(parseEnvModelMap()).map(([id, upstreamModel]) => {
|
|
46
|
-
const isGoogle = upstreamModel.toLowerCase().includes("gemini");
|
|
47
|
-
const isAnthropic = upstreamModel.toLowerCase().includes("claude");
|
|
48
|
-
return {
|
|
49
|
-
id,
|
|
50
|
-
provider: isGoogle ? "google" : (isAnthropic ? "anthropic" : "codex"),
|
|
51
|
-
targetProviderId: isGoogle
|
|
52
|
-
? "google"
|
|
53
|
-
: isAnthropic
|
|
54
|
-
? "anthropic"
|
|
55
|
-
: "openai",
|
|
56
|
-
transportProviderId: isGoogle
|
|
57
|
-
? "cloud-code"
|
|
58
|
-
: isAnthropic
|
|
59
|
-
? "claude-code"
|
|
60
|
-
: "codex",
|
|
61
|
-
upstreamModel,
|
|
62
|
-
accountPool: isGoogle ? "google" : (isAnthropic ? "anthropic" : "codex"),
|
|
63
|
-
inputProtocol: "anthropic.messages",
|
|
64
|
-
outputProtocol: "anthropic.messages",
|
|
65
|
-
capabilities: isGoogle ? [...GOOGLE_CAPABILITIES] : [...CODEX_CAPABILITIES],
|
|
66
|
-
defaultPolicy: "round-robin",
|
|
67
|
-
routeKind: upstreamModel === id ? "faithful" : "alias",
|
|
68
|
-
};
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
export function listModelCatalog() {
|
|
72
|
-
if (!_catalog) {
|
|
73
|
-
const canonical = describeCanonicalTargetRoutes().map((route) => {
|
|
74
|
-
const accountPool = accountPoolForProvider(route.transportProviderId) ??
|
|
75
|
-
accountPoolForProvider(route.providerId);
|
|
76
|
-
if (!accountPool) {
|
|
77
|
-
throw new Error(`canonical route ${route.requestedId} has unsupported transport ${route.transportProviderId}`);
|
|
78
|
-
}
|
|
79
|
-
return {
|
|
80
|
-
id: route.requestedId,
|
|
81
|
-
provider: accountPool,
|
|
82
|
-
targetProviderId: route.providerId,
|
|
83
|
-
transportProviderId: route.transportProviderId,
|
|
84
|
-
upstreamModel: route.model,
|
|
85
|
-
accountPool,
|
|
86
|
-
inputProtocol: "anthropic.messages",
|
|
87
|
-
outputProtocol: "anthropic.messages",
|
|
88
|
-
capabilities: accountPool === "google"
|
|
89
|
-
? [...GOOGLE_CAPABILITIES]
|
|
90
|
-
: [...CODEX_CAPABILITIES],
|
|
91
|
-
defaultPolicy: "round-robin",
|
|
92
|
-
...(route.effort ? { effort: route.effort } : {}),
|
|
93
|
-
routeKind: route.kind,
|
|
94
|
-
};
|
|
95
|
-
});
|
|
96
|
-
const byId = new Map(canonical.map((entry) => [entry.id, entry]));
|
|
97
|
-
for (const entry of CLOUD_CODE_CATALOG)
|
|
98
|
-
byId.set(entry.id, entry);
|
|
99
|
-
for (const entry of envCatalogEntries())
|
|
100
|
-
byId.set(entry.id, entry);
|
|
101
|
-
_catalog = [...byId.values()];
|
|
102
|
-
}
|
|
103
|
-
return _catalog;
|
|
104
|
-
}
|
|
105
|
-
export function resetModelCatalogCache() {
|
|
106
|
-
_catalog = null;
|
|
107
|
-
_envModelMap = null;
|
|
108
|
-
}
|
|
109
|
-
export function accountPoolForProvider(provider) {
|
|
110
|
-
const normalized = provider.toLowerCase();
|
|
111
|
-
if (normalized === "openai" || normalized === "codex") {
|
|
112
|
-
return "codex";
|
|
113
|
-
}
|
|
114
|
-
if (normalized === "google" ||
|
|
115
|
-
normalized === "gemini" ||
|
|
116
|
-
normalized === "gcp" ||
|
|
117
|
-
normalized === "cloud-code") {
|
|
118
|
-
return "google";
|
|
119
|
-
}
|
|
120
|
-
if (normalized === "anthropic" || normalized === "claude-code")
|
|
121
|
-
return "anthropic";
|
|
122
|
-
return undefined;
|
|
123
|
-
}
|
|
124
|
-
export function routeForProvider(provider) {
|
|
125
|
-
const accountPool = accountPoolForProvider(provider);
|
|
126
|
-
if (!accountPool)
|
|
127
|
-
return undefined;
|
|
128
|
-
return {
|
|
129
|
-
accountPool,
|
|
130
|
-
routingPolicy: "round-robin",
|
|
131
|
-
routeReason: "provider-request",
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
export function resolveModelRoute(model) {
|
|
135
|
-
const envMap = parseEnvModelMap();
|
|
136
|
-
const envUpstream = envMap[model];
|
|
137
|
-
if (envUpstream) {
|
|
138
|
-
const isGoogle = envUpstream.toLowerCase().includes("gemini") || envUpstream.toLowerCase().includes("google");
|
|
139
|
-
const isAnthropic = envUpstream.toLowerCase().includes("claude");
|
|
140
|
-
return {
|
|
141
|
-
requestedModel: model,
|
|
142
|
-
catalogModelId: model,
|
|
143
|
-
upstreamModel: envUpstream,
|
|
144
|
-
accountPool: isGoogle ? "google" : (isAnthropic ? "anthropic" : "codex"),
|
|
145
|
-
routingPolicy: "round-robin",
|
|
146
|
-
routeReason: "env-model-map",
|
|
147
|
-
providerId: isGoogle ? "google" : (isAnthropic ? "anthropic" : "openai"),
|
|
148
|
-
transportProviderId: isGoogle ? "cloud-code" : (isAnthropic ? "claude-code" : "codex"),
|
|
149
|
-
routeKind: envUpstream === model ? "faithful" : "alias",
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
for (const entry of listModelCatalog()) {
|
|
153
|
-
if (entry.id === model) {
|
|
154
|
-
return {
|
|
155
|
-
requestedModel: model,
|
|
156
|
-
catalogModelId: entry.id,
|
|
157
|
-
upstreamModel: entry.upstreamModel,
|
|
158
|
-
accountPool: entry.accountPool,
|
|
159
|
-
routingPolicy: entry.defaultPolicy,
|
|
160
|
-
routeReason: "canonical-route",
|
|
161
|
-
providerId: entry.targetProviderId,
|
|
162
|
-
transportProviderId: entry.transportProviderId,
|
|
163
|
-
...(entry.effort ? { effort: entry.effort } : {}),
|
|
164
|
-
routeKind: entry.routeKind,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return undefined;
|
|
169
|
-
}
|
|
170
|
-
export function routeModelOrThrow(model) {
|
|
171
|
-
const route = resolveModelRoute(model);
|
|
172
|
-
if (!route)
|
|
173
|
-
throw new Error(`unsupported model: ${model}`);
|
|
174
|
-
return route;
|
|
175
|
-
}
|
|
176
|
-
export function modelCatalogResponse(entries = listModelCatalog()) {
|
|
177
|
-
const modelMap = new Map();
|
|
178
|
-
for (const entry of entries) {
|
|
179
|
-
modelMap.set(entry.id, {
|
|
180
|
-
...entry,
|
|
181
|
-
id: entry.id,
|
|
182
|
-
object: "model",
|
|
183
|
-
owned_by: entry.provider,
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
return {
|
|
187
|
-
object: "list",
|
|
188
|
-
data: Array.from(modelMap.values()),
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=model-catalog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../../src/llm-gateway-runtime/model-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-anthropic.d.ts","sourceRoot":"","sources":["../../src/llm-gateway-runtime/proxy-anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AA+SpC,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+FlE"}
|