@teith/openclaw-runware-provider 0.4.2 → 0.4.4
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/catalog.d.ts.map +1 -1
- package/dist/catalog.js +11 -71
- package/dist/catalog.js.map +1 -1
- package/dist/cost-metric.d.ts.map +1 -1
- package/dist/cost-metric.js +251 -18
- package/dist/cost-metric.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -44
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +0 -1
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +5 -69
- package/dist/models.js.map +1 -1
- package/dist/provider-discovery.d.ts.map +1 -1
- package/dist/provider-discovery.js +3 -42
- package/dist/provider-discovery.js.map +1 -1
- package/package.json +1 -1
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAcD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,EAAE,CAAC,CA2BzB;AAyFD,wBAAgB,UAAU,IAAI,IAAI,CAGjC"}
|
package/dist/catalog.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
console.log(`[runware-diag] catalog.ts module loaded at ${new Date().toISOString()}`);
|
|
2
1
|
const CACHE_TTL_MS = 5 * 60 * 1000;
|
|
3
|
-
const FETCH_TIMEOUT_MS =
|
|
2
|
+
const FETCH_TIMEOUT_MS = 5000;
|
|
4
3
|
const FIRST_FETCH_MAX_ATTEMPTS = 3;
|
|
5
4
|
const RETRY_BACKOFF_BASE_MS = 500;
|
|
6
5
|
let cache = null;
|
|
@@ -8,34 +7,23 @@ let inflight = null;
|
|
|
8
7
|
export async function fetchModels(baseUrl, apiKey) {
|
|
9
8
|
const now = Date.now();
|
|
10
9
|
if (cache && now - cache.fetchedAt < CACHE_TTL_MS) {
|
|
11
|
-
console.log(`[runware-diag] fetchModels: CACHE HIT, age=${((now - cache.fetchedAt) / 1000).toFixed(1)}s, count=${cache.models.length}`);
|
|
12
10
|
return cache.models;
|
|
13
11
|
}
|
|
14
|
-
if (inflight)
|
|
15
|
-
console.log(`[runware-diag] fetchModels: INFLIGHT, returning shared promise`);
|
|
12
|
+
if (inflight)
|
|
16
13
|
return inflight;
|
|
17
|
-
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
// would just delay that fallback. The first call is the one that matters:
|
|
21
|
-
// it's on openclaw's startup critical path, and a single 5s timeout against
|
|
22
|
-
// a cold TLS handshake to Runware is the proximate cause of the "Runware
|
|
23
|
-
// models missing after gateway restart" bug.
|
|
14
|
+
// Retry only on the first fetch (no cache). Once we have any cache, the
|
|
15
|
+
// catch path returns stale data on failure, so retrying would just delay
|
|
16
|
+
// the fallback.
|
|
24
17
|
const maxAttempts = cache ? 1 : FIRST_FETCH_MAX_ATTEMPTS;
|
|
25
|
-
console.log(`[runware-diag] fetchModels: cache=${cache ? `stale (age ${((now - cache.fetchedAt) / 1000).toFixed(1)}s)` : "empty"}, starting fetch with maxAttempts=${maxAttempts}, baseUrl=${baseUrl}`);
|
|
26
18
|
inflight = (async () => {
|
|
27
19
|
try {
|
|
28
20
|
const models = await fetchWithRetries(baseUrl, apiKey, maxAttempts);
|
|
29
21
|
cache = { models, fetchedAt: Date.now() };
|
|
30
|
-
console.log(`[runware-diag] fetchModels: fetch SUCCESS, cached ${models.length} models`);
|
|
31
22
|
return models;
|
|
32
23
|
}
|
|
33
24
|
catch (err) {
|
|
34
|
-
if (cache)
|
|
35
|
-
console.warn(`[runware-diag] fetchModels: fetch FAILED, returning stale cache of ${cache.models.length} models: ${err instanceof Error ? err.message : err}`);
|
|
25
|
+
if (cache)
|
|
36
26
|
return cache.models;
|
|
37
|
-
}
|
|
38
|
-
console.error(`[runware-diag] fetchModels: fetch FAILED and NO CACHE — propagating error: ${err instanceof Error ? err.message : err}`);
|
|
39
27
|
throw err;
|
|
40
28
|
}
|
|
41
29
|
finally {
|
|
@@ -48,20 +36,12 @@ async function fetchWithRetries(baseUrl, apiKey, maxAttempts) {
|
|
|
48
36
|
let lastErr;
|
|
49
37
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
50
38
|
try {
|
|
51
|
-
|
|
52
|
-
if (attempt > 1) {
|
|
53
|
-
console.log(`[runware-catalog] /v1/models succeeded on attempt ${attempt}/${maxAttempts}`);
|
|
54
|
-
}
|
|
55
|
-
return models;
|
|
39
|
+
return await fetchFromUpstream(baseUrl, apiKey);
|
|
56
40
|
}
|
|
57
41
|
catch (err) {
|
|
58
42
|
lastErr = err;
|
|
59
|
-
|
|
60
|
-
if (attempt === maxAttempts) {
|
|
61
|
-
console.warn(`[runware-catalog] /v1/models failed on attempt ${attempt}/${maxAttempts} (giving up): ${msg}`);
|
|
43
|
+
if (attempt === maxAttempts)
|
|
62
44
|
break;
|
|
63
|
-
}
|
|
64
|
-
console.warn(`[runware-catalog] /v1/models failed on attempt ${attempt}/${maxAttempts}, retrying: ${msg}`);
|
|
65
45
|
// Exponential backoff: 500ms, 1500ms, 3500ms, ...
|
|
66
46
|
const delay = RETRY_BACKOFF_BASE_MS * (2 ** attempt - 1);
|
|
67
47
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
@@ -75,59 +55,19 @@ async function fetchFromUpstream(baseUrl, apiKey) {
|
|
|
75
55
|
const url = `${baseUrl.replace(/\/+$/, "")}/models`;
|
|
76
56
|
const controller = new AbortController();
|
|
77
57
|
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
78
|
-
const startedAt = Date.now();
|
|
79
|
-
console.log(`[runware-diag] fetchFromUpstream: GET ${url} (apiKey length=${apiKey.length}, timeout=${FETCH_TIMEOUT_MS}ms)`);
|
|
80
58
|
try {
|
|
81
59
|
const res = await fetch(url, {
|
|
82
60
|
headers: { Authorization: `Bearer ${apiKey}`, Accept: "application/json" },
|
|
83
61
|
signal: controller.signal,
|
|
84
62
|
});
|
|
85
|
-
const elapsed = Date.now() - startedAt;
|
|
86
|
-
console.log(`[runware-diag] fetchFromUpstream: response in ${elapsed}ms, status=${res.status} ${res.statusText}`);
|
|
87
63
|
if (!res.ok) {
|
|
88
|
-
// res.text() can throw synchronously (test mocks without a text()
|
|
89
|
-
// method, body already consumed elsewhere) — that TypeError isn't
|
|
90
|
-
// caught by .catch() because no promise was returned. Wrap in
|
|
91
|
-
// try/catch so we still throw the status-based error below
|
|
92
|
-
// instead of shadowing it with "res.text is not a function".
|
|
93
|
-
let errBody = "";
|
|
94
|
-
try {
|
|
95
|
-
errBody = await res.text();
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
// body unreadable; status-based error below still surfaces
|
|
99
|
-
}
|
|
100
|
-
if (errBody) {
|
|
101
|
-
console.warn(`[runware-diag] fetchFromUpstream: non-OK body (first 200 chars): ${errBody.slice(0, 200)}`);
|
|
102
|
-
}
|
|
103
64
|
throw new Error(`Runware /models returned ${res.status} ${res.statusText}`);
|
|
104
65
|
}
|
|
105
66
|
const body = (await res.json());
|
|
106
|
-
const bodyKeys = Object.keys(body).join(",");
|
|
107
67
|
const data = Array.isArray(body.data) ? body.data : [];
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
console.log(`[runware-diag] fetchFromUpstream: body keys=[${bodyKeys}], data.length=${data.length}, first item keys=[${firstItemKeys}]`);
|
|
112
|
-
if (data.length === 0) {
|
|
113
|
-
// Surface what came back so we can see if Runware sent {data: null},
|
|
114
|
-
// {models: [...]} (wrong key), an error envelope, etc.
|
|
115
|
-
const bodyStr = JSON.stringify(body).slice(0, 500);
|
|
116
|
-
console.warn(`[runware-diag] fetchFromUpstream: data array is EMPTY. Body snippet: ${bodyStr}`);
|
|
117
|
-
}
|
|
118
|
-
const parsed = data.map(parseRunwareModel);
|
|
119
|
-
const valid = parsed.filter((m) => m !== null);
|
|
120
|
-
if (parsed.length !== valid.length) {
|
|
121
|
-
console.warn(`[runware-diag] fetchFromUpstream: dropped ${parsed.length - valid.length}/${parsed.length} models in parse (missing/invalid id)`);
|
|
122
|
-
}
|
|
123
|
-
if (valid.length > 0) {
|
|
124
|
-
const sample = valid
|
|
125
|
-
.slice(0, 5)
|
|
126
|
-
.map((m) => m.id)
|
|
127
|
-
.join(", ");
|
|
128
|
-
console.log(`[runware-diag] fetchFromUpstream: parsed ${valid.length} models, sample ids: ${sample}`);
|
|
129
|
-
}
|
|
130
|
-
return valid;
|
|
68
|
+
return data
|
|
69
|
+
.map(parseRunwareModel)
|
|
70
|
+
.filter((m) => m !== null);
|
|
131
71
|
}
|
|
132
72
|
finally {
|
|
133
73
|
clearTimeout(timeout);
|
package/dist/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-metric.d.ts","sourceRoot":"","sources":["../src/cost-metric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;
|
|
1
|
+
{"version":3,"file":"cost-metric.d.ts","sourceRoot":"","sources":["../src/cost-metric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAgHH,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CA6CP"}
|
package/dist/cost-metric.js
CHANGED
|
@@ -51,10 +51,10 @@
|
|
|
51
51
|
* openclaw.json — i.e. the manager. The trajectory file is written
|
|
52
52
|
* unconditionally and is plugin-readable, so no config flag needed.
|
|
53
53
|
*/
|
|
54
|
-
import { createReadStream } from "node:fs";
|
|
55
|
-
import { readdir, stat } from "node:fs/promises";
|
|
54
|
+
import { createReadStream, writeFileSync } from "node:fs";
|
|
55
|
+
import { mkdir, readdir, readFile, rename, stat, writeFile } from "node:fs/promises";
|
|
56
56
|
import { homedir } from "node:os";
|
|
57
|
-
import { join } from "node:path";
|
|
57
|
+
import { dirname, join } from "node:path";
|
|
58
58
|
import { fetchModels } from "./catalog.js";
|
|
59
59
|
import { resolveApiKey, resolveBaseUrl } from "./models.js";
|
|
60
60
|
const GLOBAL_KEY = "__runware_openclaw_cost_metric__";
|
|
@@ -64,6 +64,9 @@ const RUNWARE_PROVIDER = "runware";
|
|
|
64
64
|
const METER_NAME = "runware-openclaw-provider";
|
|
65
65
|
const METRIC_NAME = "openclaw.cost.usd";
|
|
66
66
|
const TARGET_ENTRY_TYPE = "model.completed";
|
|
67
|
+
const STATE_FILE_NAME = "runware-cost-state.json";
|
|
68
|
+
const STATE_SCHEMA_VERSION = 1;
|
|
69
|
+
const SAVE_DEBOUNCE_MS = 1000;
|
|
67
70
|
function loadState() {
|
|
68
71
|
const g = globalThis;
|
|
69
72
|
const existing = g[GLOBAL_KEY];
|
|
@@ -83,6 +86,13 @@ function loadState() {
|
|
|
83
86
|
warnedMissingPricing: new Set(),
|
|
84
87
|
warnedNoApiKey: false,
|
|
85
88
|
warnedPricingFetchFailed: false,
|
|
89
|
+
cumulativeByAttrs: new Map(),
|
|
90
|
+
stateFilePath: "",
|
|
91
|
+
saveTimer: null,
|
|
92
|
+
provider: null,
|
|
93
|
+
shutdownHandlersRegistered: false,
|
|
94
|
+
warnedSaveFailed: false,
|
|
95
|
+
persistedLoadedLogged: false,
|
|
86
96
|
};
|
|
87
97
|
g[GLOBAL_KEY] = fresh;
|
|
88
98
|
return fresh;
|
|
@@ -96,12 +106,25 @@ export function startCostMetricPoller(opts) {
|
|
|
96
106
|
process.env.OPENCLAW_HOME ??
|
|
97
107
|
join(homedir(), ".openclaw");
|
|
98
108
|
const intervalMs = opts?.intervalMs ?? POLL_INTERVAL_MS;
|
|
99
|
-
state.
|
|
100
|
-
|
|
109
|
+
state.stateFilePath = join(openclawHome, STATE_FILE_NAME);
|
|
110
|
+
// Bring-up sequence:
|
|
111
|
+
// 1. stand up the OTel meter + counter (provider handle stored in state)
|
|
112
|
+
// 2. load persisted cumulative + per-file offsets from PVC
|
|
113
|
+
// 3. replay cumulative into the fresh counter and force-flush, so the
|
|
114
|
+
// next OTLP export carries the restored value; without this the
|
|
115
|
+
// first scrape after restart sees the counter at 0 and Prometheus
|
|
116
|
+
// counter-reset detection mis-attributes the jump
|
|
117
|
+
// 4. arm shutdown handlers so state survives SIGTERM
|
|
118
|
+
state.counterInit = (async () => {
|
|
119
|
+
const counter = await initCounter(state);
|
|
101
120
|
state.counter = counter;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
121
|
+
if (!counter)
|
|
122
|
+
return;
|
|
123
|
+
await restoreFromDisk(state);
|
|
124
|
+
await replayPersistedCumulative(state);
|
|
125
|
+
registerShutdownHandlers(state);
|
|
126
|
+
})().catch((err) => {
|
|
127
|
+
console.warn("[runware-cost-metric] init failed:", err);
|
|
105
128
|
state.counter = null;
|
|
106
129
|
});
|
|
107
130
|
const tick = () => {
|
|
@@ -113,7 +136,7 @@ export function startCostMetricPoller(opts) {
|
|
|
113
136
|
state.intervalHandle = handle;
|
|
114
137
|
if (typeof handle.unref === "function")
|
|
115
138
|
handle.unref();
|
|
116
|
-
console.log(`[runware-cost-metric] started, intervalMs=${intervalMs} openclawHome=${openclawHome}`);
|
|
139
|
+
console.log(`[runware-cost-metric] started, intervalMs=${intervalMs} openclawHome=${openclawHome} stateFile=${state.stateFilePath}`);
|
|
117
140
|
}
|
|
118
141
|
async function loadSharedOtelApi() {
|
|
119
142
|
const { createRequire } = await import("node:module");
|
|
@@ -179,9 +202,9 @@ async function loadSharedOtelApi() {
|
|
|
179
202
|
* already live in /app/node_modules (diagnostics-otel uses them) — we load
|
|
180
203
|
* by absolute path, same trick as @opentelemetry/api.
|
|
181
204
|
*/
|
|
182
|
-
async function initCounter() {
|
|
205
|
+
async function initCounter(state) {
|
|
183
206
|
try {
|
|
184
|
-
return await initOwnMeterProvider();
|
|
207
|
+
return await initOwnMeterProvider(state);
|
|
185
208
|
}
|
|
186
209
|
catch (err) {
|
|
187
210
|
console.warn("[runware-cost-metric] own MeterProvider setup failed:", err instanceof Error ? err.message : err);
|
|
@@ -189,7 +212,7 @@ async function initCounter() {
|
|
|
189
212
|
return await initGlobalMeterFallback();
|
|
190
213
|
}
|
|
191
214
|
}
|
|
192
|
-
async function initOwnMeterProvider() {
|
|
215
|
+
async function initOwnMeterProvider(state) {
|
|
193
216
|
const { createRequire } = await import("node:module");
|
|
194
217
|
const requireFn = createRequire(import.meta.url);
|
|
195
218
|
const sdkMetrics = requireFn("/app/node_modules/@opentelemetry/sdk-metrics");
|
|
@@ -211,12 +234,11 @@ async function initOwnMeterProvider() {
|
|
|
211
234
|
readers: [reader],
|
|
212
235
|
resource,
|
|
213
236
|
});
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
process.
|
|
218
|
-
|
|
219
|
-
process.once("SIGINT", shutdown);
|
|
237
|
+
// Store handle for forceFlush() right after persistence replay and for
|
|
238
|
+
// graceful shutdown. Lifecycle hooks (SIGTERM/SIGINT/beforeExit) are
|
|
239
|
+
// attached centrally in registerShutdownHandlers() so they also save
|
|
240
|
+
// cost-state.json before the process exits.
|
|
241
|
+
state.provider = provider;
|
|
220
242
|
console.log(`[runware-cost-metric] own MeterProvider initialized, OTLP -> ${endpoint}`);
|
|
221
243
|
// No `unit` here: the OTLP→Prometheus translation appends the unit suffix
|
|
222
244
|
// to the metric name (`openclaw_cost_usd_USD_total`), which we don't want.
|
|
@@ -316,6 +338,10 @@ async function pollOnce(openclawHome, state) {
|
|
|
316
338
|
for (const agent of agents) {
|
|
317
339
|
await pollSessionsDir(join(agentsDir, agent, "sessions"), state);
|
|
318
340
|
}
|
|
341
|
+
// File offsets may have advanced this tick; debounced save persists them
|
|
342
|
+
// so a pod restart resumes from the same byte and doesn't re-emit cost
|
|
343
|
+
// for entries already counted.
|
|
344
|
+
scheduleSave(state);
|
|
319
345
|
}
|
|
320
346
|
async function pollSessionsDir(sessionsDir, state) {
|
|
321
347
|
let entries;
|
|
@@ -473,6 +499,8 @@ function emitFromEntry(entry, state) {
|
|
|
473
499
|
attrs["openclaw.channel"] = channel;
|
|
474
500
|
try {
|
|
475
501
|
state.counter.add(costUsd, attrs);
|
|
502
|
+
accumulateCumulative(state, attrs, costUsd);
|
|
503
|
+
scheduleSave(state);
|
|
476
504
|
if (!state.emittedAny) {
|
|
477
505
|
state.emittedAny = true;
|
|
478
506
|
console.log(`[runware-cost-metric] first emit: ${costUsd.toFixed(6)} USD attrs=${JSON.stringify(attrs)} tokens=${JSON.stringify({ input, output, cacheRead, cacheWrite })}`);
|
|
@@ -508,4 +536,209 @@ function isRecord(v) {
|
|
|
508
536
|
function nonNegNumber(v) {
|
|
509
537
|
return typeof v === "number" && Number.isFinite(v) && v >= 0 ? v : 0;
|
|
510
538
|
}
|
|
539
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
540
|
+
// Persistence
|
|
541
|
+
//
|
|
542
|
+
// Counter state survives pod restarts via a single JSON file on the same
|
|
543
|
+
// PVC that holds trajectory.jsonl. Without this, a counter restart looks
|
|
544
|
+
// like a counter reset to Prometheus, and `increase()` over windows that
|
|
545
|
+
// span a restart silently double-counts. Two pieces of state are saved:
|
|
546
|
+
//
|
|
547
|
+
// 1. cumulativeByAttrs — cumulative USD per (provider, model, channel)
|
|
548
|
+
// label combination, replayed into the new counter at startup via
|
|
549
|
+
// counter.add(persisted) so the next scrape sees the full value
|
|
550
|
+
// immediately (forceFlush minimizes the export-interval gap).
|
|
551
|
+
//
|
|
552
|
+
// 2. fileOffsets — last-consumed byte per trajectory.jsonl file plus
|
|
553
|
+
// the leading-bytes fingerprint that pollSessionFile uses for
|
|
554
|
+
// rotation detection. Restoring these prevents re-reading entries
|
|
555
|
+
// that were already counted before the restart.
|
|
556
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
557
|
+
/**
|
|
558
|
+
* Deterministic key for a label set. Sorting before stringify guarantees
|
|
559
|
+
* the same attrs always produce the same key across processes.
|
|
560
|
+
*/
|
|
561
|
+
function attrsKey(attrs) {
|
|
562
|
+
const keys = Object.keys(attrs).sort();
|
|
563
|
+
const ordered = {};
|
|
564
|
+
for (const k of keys)
|
|
565
|
+
ordered[k] = attrs[k];
|
|
566
|
+
return JSON.stringify(ordered);
|
|
567
|
+
}
|
|
568
|
+
function accumulateCumulative(state, attrs, delta) {
|
|
569
|
+
const key = attrsKey(attrs);
|
|
570
|
+
const prev = state.cumulativeByAttrs.get(key);
|
|
571
|
+
if (prev) {
|
|
572
|
+
prev.costUsd += delta;
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
state.cumulativeByAttrs.set(key, { attrs: { ...attrs }, costUsd: delta });
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
async function restoreFromDisk(state) {
|
|
579
|
+
let raw;
|
|
580
|
+
try {
|
|
581
|
+
raw = await readFile(state.stateFilePath, "utf8");
|
|
582
|
+
}
|
|
583
|
+
catch (err) {
|
|
584
|
+
if (err.code !== "ENOENT") {
|
|
585
|
+
console.warn(`[runware-cost-metric] could not read state file ${state.stateFilePath}:`, err instanceof Error ? err.message : err);
|
|
586
|
+
}
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
let parsed;
|
|
590
|
+
try {
|
|
591
|
+
parsed = JSON.parse(raw);
|
|
592
|
+
}
|
|
593
|
+
catch (err) {
|
|
594
|
+
console.warn(`[runware-cost-metric] state file ${state.stateFilePath} is corrupted, ignoring:`, err instanceof Error ? err.message : err);
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
if (parsed.schemaVersion !== STATE_SCHEMA_VERSION) {
|
|
598
|
+
console.warn(`[runware-cost-metric] state schema mismatch (got ${parsed.schemaVersion}, expected ${STATE_SCHEMA_VERSION}), ignoring`);
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
if (Array.isArray(parsed.cumulativeByAttrs)) {
|
|
602
|
+
for (const entry of parsed.cumulativeByAttrs) {
|
|
603
|
+
if (!entry || typeof entry !== "object")
|
|
604
|
+
continue;
|
|
605
|
+
if (!entry.attrs || typeof entry.attrs !== "object")
|
|
606
|
+
continue;
|
|
607
|
+
if (typeof entry.costUsd !== "number" || !Number.isFinite(entry.costUsd))
|
|
608
|
+
continue;
|
|
609
|
+
if (entry.costUsd <= 0)
|
|
610
|
+
continue;
|
|
611
|
+
const key = attrsKey(entry.attrs);
|
|
612
|
+
state.cumulativeByAttrs.set(key, {
|
|
613
|
+
attrs: { ...entry.attrs },
|
|
614
|
+
costUsd: entry.costUsd,
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
if (Array.isArray(parsed.fileOffsets)) {
|
|
619
|
+
for (const entry of parsed.fileOffsets) {
|
|
620
|
+
if (!entry || typeof entry !== "object")
|
|
621
|
+
continue;
|
|
622
|
+
if (typeof entry.path !== "string" || entry.path.length === 0)
|
|
623
|
+
continue;
|
|
624
|
+
if (typeof entry.offset !== "number" || entry.offset < 0)
|
|
625
|
+
continue;
|
|
626
|
+
if (typeof entry.size !== "number" || entry.size < 0)
|
|
627
|
+
continue;
|
|
628
|
+
if (typeof entry.fingerprint !== "string")
|
|
629
|
+
continue;
|
|
630
|
+
state.fileStates.set(entry.path, {
|
|
631
|
+
offset: entry.offset,
|
|
632
|
+
size: entry.size,
|
|
633
|
+
fingerprint: entry.fingerprint,
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
if (!state.persistedLoadedLogged) {
|
|
638
|
+
state.persistedLoadedLogged = true;
|
|
639
|
+
console.log(`[runware-cost-metric] restored from ${state.stateFilePath}: ${state.cumulativeByAttrs.size} cumulative entries, ${state.fileStates.size} file offsets`);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
async function replayPersistedCumulative(state) {
|
|
643
|
+
if (!state.counter)
|
|
644
|
+
return;
|
|
645
|
+
if (state.cumulativeByAttrs.size === 0)
|
|
646
|
+
return;
|
|
647
|
+
let replayed = 0;
|
|
648
|
+
let total = 0;
|
|
649
|
+
for (const { attrs, costUsd } of state.cumulativeByAttrs.values()) {
|
|
650
|
+
if (costUsd <= 0)
|
|
651
|
+
continue;
|
|
652
|
+
try {
|
|
653
|
+
state.counter.add(costUsd, attrs);
|
|
654
|
+
replayed++;
|
|
655
|
+
total += costUsd;
|
|
656
|
+
}
|
|
657
|
+
catch (err) {
|
|
658
|
+
console.error("[runware-cost-metric] replay counter.add failed for attrs", attrs, err);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
// forceFlush so the first OTLP export carries the restored cumulative
|
|
662
|
+
// value immediately. Without this the first Prometheus scrape after
|
|
663
|
+
// restart sees 0, then 5s later sees the restored value — counter-reset
|
|
664
|
+
// detection downstream treats the jump as a fresh run from 0 and skews
|
|
665
|
+
// rate()/increase().
|
|
666
|
+
if (state.provider) {
|
|
667
|
+
try {
|
|
668
|
+
await state.provider.forceFlush();
|
|
669
|
+
}
|
|
670
|
+
catch (err) {
|
|
671
|
+
console.warn("[runware-cost-metric] forceFlush after replay failed:", err instanceof Error ? err.message : err);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
console.log(`[runware-cost-metric] replayed ${replayed} cumulative entries totalling $${total.toFixed(6)} into counter`);
|
|
675
|
+
}
|
|
676
|
+
function buildSnapshot(state) {
|
|
677
|
+
return {
|
|
678
|
+
schemaVersion: STATE_SCHEMA_VERSION,
|
|
679
|
+
lastSavedAt: Date.now(),
|
|
680
|
+
cumulativeByAttrs: Array.from(state.cumulativeByAttrs.values()).map((entry) => ({ attrs: { ...entry.attrs }, costUsd: entry.costUsd })),
|
|
681
|
+
fileOffsets: Array.from(state.fileStates.entries()).map(([path, fs]) => ({
|
|
682
|
+
path,
|
|
683
|
+
offset: fs.offset,
|
|
684
|
+
size: fs.size,
|
|
685
|
+
fingerprint: fs.fingerprint,
|
|
686
|
+
})),
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
function scheduleSave(state) {
|
|
690
|
+
if (state.saveTimer)
|
|
691
|
+
return;
|
|
692
|
+
state.saveTimer = setTimeout(() => {
|
|
693
|
+
state.saveTimer = null;
|
|
694
|
+
saveStateNow(state).catch((err) => {
|
|
695
|
+
if (!state.warnedSaveFailed) {
|
|
696
|
+
state.warnedSaveFailed = true;
|
|
697
|
+
console.warn(`[runware-cost-metric] save failed (${state.stateFilePath}):`, err instanceof Error ? err.message : err);
|
|
698
|
+
}
|
|
699
|
+
});
|
|
700
|
+
}, SAVE_DEBOUNCE_MS);
|
|
701
|
+
if (typeof state.saveTimer.unref === "function")
|
|
702
|
+
state.saveTimer.unref();
|
|
703
|
+
}
|
|
704
|
+
async function saveStateNow(state) {
|
|
705
|
+
if (!state.stateFilePath)
|
|
706
|
+
return;
|
|
707
|
+
const snapshot = buildSnapshot(state);
|
|
708
|
+
// Atomic write: tmp → rename. Guarantees readers never see a truncated
|
|
709
|
+
// file if the process is killed mid-write.
|
|
710
|
+
const tmpPath = `${state.stateFilePath}.tmp`;
|
|
711
|
+
await mkdir(dirname(state.stateFilePath), { recursive: true });
|
|
712
|
+
await writeFile(tmpPath, JSON.stringify(snapshot), { encoding: "utf8" });
|
|
713
|
+
await rename(tmpPath, state.stateFilePath);
|
|
714
|
+
state.warnedSaveFailed = false;
|
|
715
|
+
}
|
|
716
|
+
function registerShutdownHandlers(state) {
|
|
717
|
+
if (state.shutdownHandlersRegistered)
|
|
718
|
+
return;
|
|
719
|
+
state.shutdownHandlersRegistered = true;
|
|
720
|
+
const flushAndShutdown = () => {
|
|
721
|
+
if (state.saveTimer) {
|
|
722
|
+
clearTimeout(state.saveTimer);
|
|
723
|
+
state.saveTimer = null;
|
|
724
|
+
}
|
|
725
|
+
// Sync best-effort save on shutdown. No atomic rename because async
|
|
726
|
+
// ops in shutdown handlers race against process exit; dataset is small
|
|
727
|
+
// (<100KB) so a single writeFileSync is fast enough. If it ever ends
|
|
728
|
+
// up partially written, restoreFromDisk catches the parse error and
|
|
729
|
+
// ignores the file on next startup — better than losing exit handler.
|
|
730
|
+
try {
|
|
731
|
+
writeFileSync(state.stateFilePath, JSON.stringify(buildSnapshot(state)), { encoding: "utf8" });
|
|
732
|
+
}
|
|
733
|
+
catch (err) {
|
|
734
|
+
console.warn("[runware-cost-metric] sync save on shutdown failed:", err instanceof Error ? err.message : err);
|
|
735
|
+
}
|
|
736
|
+
if (state.provider) {
|
|
737
|
+
state.provider.shutdown().catch(() => undefined);
|
|
738
|
+
}
|
|
739
|
+
};
|
|
740
|
+
process.once("beforeExit", flushAndShutdown);
|
|
741
|
+
process.once("SIGTERM", flushAndShutdown);
|
|
742
|
+
process.once("SIGINT", flushAndShutdown);
|
|
743
|
+
}
|
|
511
744
|
//# sourceMappingURL=cost-metric.js.map
|
package/dist/cost-metric.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-metric.js","sourceRoot":"","sources":["../src/cost-metric.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cost-metric.js","sourceRoot":"","sources":["../src/cost-metric.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AASrE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,KAAK,EAAE,WAkCZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
` Runware OpenClaw Provider v0.4.2 (debug build)\n` +
|
|
3
|
-
` index.ts loaded at: ${new Date().toISOString()}\n` +
|
|
4
|
-
"═══════════════════════════════════════════════════");
|
|
5
|
-
import { API_KEY_ENV_VAR, BASE_URL_ENV_VAR, PROVIDER_ID, PROVIDER_LABEL, buildCatalogRows, buildProvider, prewarmCatalog, resolveApiKey, resolveBaseUrl, } from "./models.js";
|
|
1
|
+
import { API_KEY_ENV_VAR, BASE_URL_ENV_VAR, PROVIDER_ID, PROVIDER_LABEL, buildCatalogRows, buildProvider, resolveApiKey, resolveBaseUrl, } from "./models.js";
|
|
6
2
|
import { startCostMetricPoller } from "./cost-metric.js";
|
|
7
3
|
// See cost-metric.ts. Idempotent across both entry files via
|
|
8
4
|
// globalThis-stored state — whichever module openclaw loads first wins.
|
|
9
5
|
startCostMetricPoller();
|
|
10
|
-
// Pre-fetch /v1/models in the background so the catalog cache is populated
|
|
11
|
-
// (or in flight) by the time openclaw calls catalog.run. Without this, the
|
|
12
|
-
// first model-list request sits on the gateway-startup critical path and
|
|
13
|
-
// frequently times out on a cold TLS handshake to Runware, leaving openclaw
|
|
14
|
-
// with an empty catalog. See models.ts → prewarmCatalog() for rationale.
|
|
15
|
-
prewarmCatalog();
|
|
16
6
|
const PLUGIN_ID = "runware-openclaw-provider";
|
|
17
7
|
/**
|
|
18
8
|
* Plugin entry that openclaw's plugin loader invokes after `npm install`-ing
|
|
@@ -40,7 +30,6 @@ const entry = {
|
|
|
40
30
|
name: PROVIDER_LABEL,
|
|
41
31
|
description: "Runware — unified OpenAI-compatible access to Claude, GPT, Gemini, Qwen, GLM, MiniMax, Kimi, and Gemma.",
|
|
42
32
|
register(api) {
|
|
43
|
-
console.log(`[runware-diag] index.ts register(api) CALLED by openclaw at ${new Date().toISOString()} — registering provider + catalog provider hooks`);
|
|
44
33
|
api.registerProvider({
|
|
45
34
|
id: PROVIDER_ID,
|
|
46
35
|
label: PROVIDER_LABEL,
|
|
@@ -50,25 +39,11 @@ const entry = {
|
|
|
50
39
|
catalog: {
|
|
51
40
|
order: "simple",
|
|
52
41
|
run: async (ctx) => {
|
|
53
|
-
const cid = Math.random().toString(36).slice(2, 8);
|
|
54
|
-
console.log(`[runware-diag] registerProvider.catalog.run[${cid}] called, ctx.env keys=[${Object.keys(ctx.env ?? {}).join(",") || "(none)"}], has resolveProviderApiKey=${typeof ctx.resolveProviderApiKey === "function"}`);
|
|
55
42
|
const apiKey = resolveApiKey(ctx);
|
|
56
|
-
if (!apiKey)
|
|
57
|
-
console.warn(`[runware-diag] registerProvider.catalog.run[${cid}]: no apiKey, returning null`);
|
|
43
|
+
if (!apiKey)
|
|
58
44
|
return null;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const provider = await buildProvider(apiKey, resolveBaseUrl(ctx.env));
|
|
62
|
-
console.log(`[runware-diag] registerProvider.catalog.run[${cid}]: SUCCESS, returning provider with ${provider.models.length} models`);
|
|
63
|
-
return { provider };
|
|
64
|
-
}
|
|
65
|
-
catch (err) {
|
|
66
|
-
// fetchModels already retried with backoff. If we still failed
|
|
67
|
-
// every attempt, return null so openclaw treats the catalog as
|
|
68
|
-
// unpopulated rather than letting the throw bubble up.
|
|
69
|
-
console.error(`[runware-diag] registerProvider.catalog.run[${cid}]: FAILED after retries: ${err instanceof Error ? err.message : err}`);
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
45
|
+
const provider = await buildProvider(apiKey, resolveBaseUrl(ctx.env));
|
|
46
|
+
return { provider };
|
|
72
47
|
},
|
|
73
48
|
},
|
|
74
49
|
});
|
|
@@ -76,25 +51,12 @@ const entry = {
|
|
|
76
51
|
provider: PROVIDER_ID,
|
|
77
52
|
kinds: ["text"],
|
|
78
53
|
liveCatalog: async (ctx) => {
|
|
79
|
-
const cid = Math.random().toString(36).slice(2, 8);
|
|
80
|
-
console.log(`[runware-diag] liveCatalog[${cid}] called, ctx.env keys=[${Object.keys(ctx.env ?? {}).join(",") || "(none)"}]`);
|
|
81
54
|
const apiKey = resolveApiKey(ctx);
|
|
82
|
-
if (!apiKey)
|
|
83
|
-
console.warn(`[runware-diag] liveCatalog[${cid}]: no apiKey, returning null`);
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
try {
|
|
87
|
-
const rows = await buildCatalogRows(apiKey, resolveBaseUrl(ctx.env));
|
|
88
|
-
console.log(`[runware-diag] liveCatalog[${cid}]: SUCCESS, returning ${rows.length} rows`);
|
|
89
|
-
return rows;
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
console.error(`[runware-diag] liveCatalog[${cid}]: FAILED after retries: ${err instanceof Error ? err.message : err}`);
|
|
55
|
+
if (!apiKey)
|
|
93
56
|
return null;
|
|
94
|
-
|
|
57
|
+
return buildCatalogRows(apiKey, resolveBaseUrl(ctx.env));
|
|
95
58
|
},
|
|
96
59
|
});
|
|
97
|
-
console.log(`[runware-diag] index.ts register(api): all hooks registered`);
|
|
98
60
|
},
|
|
99
61
|
};
|
|
100
62
|
export default entry;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,6DAA6D;AAC7D,wEAAwE;AACxE,qBAAqB,EAAE,CAAC;AAExB,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,KAAK,GAAgB;IACzB,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,yGAAyG;IAE3G,QAAQ,CAAC,GAAG;QACV,GAAG,CAAC,gBAAgB,CAAC;YACnB,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,yBAAyB;YACnC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;YAC5C,IAAI,EAAE,EAAE;YACR,OAAO,EAAE;gBACP,KAAK,EAAE,QAAQ;gBACf,GAAG,EAAE,KAAK,EAAE,GAAmB,EAAE,EAAE;oBACjC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,CAAC,MAAM;wBAAE,OAAO,IAAI,CAAC;oBACzB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtE,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,CAAC;aACF;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,4BAA4B,CAAC;YAC/B,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,WAAW,EAAE,KAAK,EAAE,GAAmB,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACzB,OAAO,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
package/dist/models.d.ts
CHANGED
|
@@ -107,6 +107,5 @@ export declare function buildProvider(apiKey: string, baseUrl: string): Promise<
|
|
|
107
107
|
* response.
|
|
108
108
|
*/
|
|
109
109
|
export declare function buildCatalogRows(apiKey: string, baseUrl: string): Promise<ModelCatalogRow[]>;
|
|
110
|
-
export declare function prewarmCatalog(): void;
|
|
111
110
|
export {};
|
|
112
111
|
//# sourceMappingURL=models.d.ts.map
|
package/dist/models.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,eAAO,MAAM,WAAW,YAAY,CAAC;AACrC,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAC5D,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAGnD,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAC9C,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,QAAA,MAAM,YAAY;;;;CAAwD,CAAC;AAG3E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,OAAO,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,oBAAoB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQlD;AAMD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAI/E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE;IACjC,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,GAAG,MAAM,GAAG,SAAS,CAKrB;AA2CD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CASxB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAG5B"}
|
package/dist/models.js
CHANGED
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* Runware hasn't published those limits fall back to conservative
|
|
10
10
|
* provider defaults so OpenClaw never sees a missing value.
|
|
11
11
|
*/
|
|
12
|
-
console.log(`[runware-diag] models.ts module loaded`);
|
|
13
12
|
import { fetchModels } from "./catalog.js";
|
|
14
13
|
export const PROVIDER_ID = "runware";
|
|
15
14
|
export const PROVIDER_LABEL = "Runware";
|
|
@@ -67,20 +66,11 @@ export function resolveBaseUrl(env) {
|
|
|
67
66
|
* managed deployment, where the user configured the key via the wizard).
|
|
68
67
|
*/
|
|
69
68
|
export function resolveApiKey(ctx) {
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
const fromEnv = fromCtx ?? fromProc;
|
|
73
|
-
if (typeof fromEnv === "string" && fromEnv.length > 0) {
|
|
74
|
-
console.log(`[runware-diag] resolveApiKey: from ${fromCtx ? "ctx.env" : "process.env"} (length=${fromEnv.length})`);
|
|
69
|
+
const fromEnv = ctx.env?.[API_KEY_ENV_VAR] ?? process.env[API_KEY_ENV_VAR];
|
|
70
|
+
if (typeof fromEnv === "string" && fromEnv.length > 0)
|
|
75
71
|
return fromEnv;
|
|
76
|
-
}
|
|
77
72
|
const fromAuth = ctx.resolveProviderApiKey?.(PROVIDER_ID).apiKey;
|
|
78
|
-
|
|
79
|
-
console.log(`[runware-diag] resolveApiKey: from ctx.resolveProviderApiKey (length=${fromAuth.length})`);
|
|
80
|
-
return fromAuth;
|
|
81
|
-
}
|
|
82
|
-
console.warn(`[runware-diag] resolveApiKey: NOT FOUND. ctx.env has key=${ctx.env !== undefined && API_KEY_ENV_VAR in ctx.env}, process.env has key=${process.env[API_KEY_ENV_VAR] !== undefined}, ctx.resolveProviderApiKey=${typeof ctx.resolveProviderApiKey === "function"}`);
|
|
83
|
-
return undefined;
|
|
73
|
+
return typeof fromAuth === "string" && fromAuth.length > 0 ? fromAuth : undefined;
|
|
84
74
|
}
|
|
85
75
|
function buildModelInput(model) {
|
|
86
76
|
return model.inputModalities?.includes("image") ? ["text", "image"] : ["text"];
|
|
@@ -126,21 +116,13 @@ function buildCatalogRow(model) {
|
|
|
126
116
|
* `/v1/models` from Runware via the TTL cache in `catalog.ts`.
|
|
127
117
|
*/
|
|
128
118
|
export async function buildProvider(apiKey, baseUrl) {
|
|
129
|
-
console.log(`[runware-diag] buildProvider: invoked with baseUrl=${baseUrl}, apiKey length=${apiKey.length}`);
|
|
130
119
|
const models = await fetchModels(baseUrl, apiKey);
|
|
131
|
-
const entries = models.map(buildModelEntry);
|
|
132
|
-
console.log(`[runware-diag] buildProvider: returning ProviderShape with ${entries.length} models${entries.length > 0
|
|
133
|
-
? ` (sample: ${entries
|
|
134
|
-
.slice(0, 5)
|
|
135
|
-
.map((m) => m.id)
|
|
136
|
-
.join(", ")})`
|
|
137
|
-
: ""}`);
|
|
138
120
|
return {
|
|
139
121
|
baseUrl,
|
|
140
122
|
apiKey,
|
|
141
123
|
api: "openai-completions",
|
|
142
124
|
timeoutSeconds: REQUEST_TIMEOUT_SECONDS,
|
|
143
|
-
models:
|
|
125
|
+
models: models.map(buildModelEntry),
|
|
144
126
|
};
|
|
145
127
|
}
|
|
146
128
|
/**
|
|
@@ -150,53 +132,7 @@ export async function buildProvider(apiKey, baseUrl) {
|
|
|
150
132
|
* response.
|
|
151
133
|
*/
|
|
152
134
|
export async function buildCatalogRows(apiKey, baseUrl) {
|
|
153
|
-
console.log(`[runware-diag] buildCatalogRows: invoked with baseUrl=${baseUrl}`);
|
|
154
135
|
const models = await fetchModels(baseUrl, apiKey);
|
|
155
|
-
|
|
156
|
-
console.log(`[runware-diag] buildCatalogRows: returning ${rows.length} rows`);
|
|
157
|
-
return rows;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Kick off a background `/v1/models` fetch at module load so the catalog
|
|
161
|
-
* cache is populated (or in-flight) by the time openclaw calls
|
|
162
|
-
* `catalog.run`. Idempotent — `fetchModels` deduplicates concurrent calls
|
|
163
|
-
* via its inflight promise, and a populated cache short-circuits
|
|
164
|
-
* subsequent calls — so it's safe to invoke from multiple entry files
|
|
165
|
-
* (index.ts and provider-discovery.ts).
|
|
166
|
-
*
|
|
167
|
-
* This is the main mitigation for "openclaw starts up and Runware's
|
|
168
|
-
* model list is missing": the first /v1/models call is the slow one
|
|
169
|
-
* (cold DNS, TLS handshake) and is the one most likely to time out
|
|
170
|
-
* before openclaw's catalog resolution window closes. Pre-warming
|
|
171
|
-
* moves that latency off the critical path — by the time openclaw asks
|
|
172
|
-
* for the catalog the fetch is either complete (cache hit) or in flight
|
|
173
|
-
* (inflight dedup), so the worst case is now "wait for one in-flight
|
|
174
|
-
* request" instead of "start a new request from cold under whatever
|
|
175
|
-
* deadline openclaw has".
|
|
176
|
-
*
|
|
177
|
-
* If RUNWARE_API_KEY isn't in env yet (out-of-cluster dev, unusually
|
|
178
|
-
* early module load), the prewarm silently skips and the next
|
|
179
|
-
* `catalog.run` invocation resolves the key from its `ctx` argument
|
|
180
|
-
* — fetchWithRetries still gives us 3 attempts at that point.
|
|
181
|
-
*/
|
|
182
|
-
let prewarmStarted = false;
|
|
183
|
-
export function prewarmCatalog() {
|
|
184
|
-
if (prewarmStarted)
|
|
185
|
-
return;
|
|
186
|
-
const apiKey = resolveApiKey({ env: process.env });
|
|
187
|
-
if (!apiKey) {
|
|
188
|
-
console.log("[runware-catalog] prewarm skipped — RUNWARE_API_KEY not in env yet");
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
prewarmStarted = true;
|
|
192
|
-
const baseUrl = resolveBaseUrl(process.env);
|
|
193
|
-
fetchModels(baseUrl, apiKey).then((models) => console.log(`[runware-catalog] prewarm loaded ${models.length} models`), (err) => {
|
|
194
|
-
// Reset the flag so the next entry-point's prewarmCatalog() call
|
|
195
|
-
// (or the catalog.run hook) re-attempts the fetch. fetchModels'
|
|
196
|
-
// own retry loop already burned its attempts; on persistent failure
|
|
197
|
-
// we let catalog.run fall through to its empty-provider path.
|
|
198
|
-
prewarmStarted = false;
|
|
199
|
-
console.warn(`[runware-catalog] prewarm failed (will retry on catalog.run): ${err instanceof Error ? err.message : err}`);
|
|
200
|
-
});
|
|
136
|
+
return models.map(buildCatalogRow);
|
|
201
137
|
}
|
|
202
138
|
//# sourceMappingURL=models.js.map
|
package/dist/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-discovery.d.ts","sourceRoot":"","sources":["../src/provider-discovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider-discovery.d.ts","sourceRoot":"","sources":["../src/provider-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUjD;;;;;;;;;;;;;;GAcG;AAEH,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,qBAAqB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAYD,iBAAe,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,aAAa,CAAA;CAAE,CAAC,CAUxF;AAED,QAAA,MAAM,wBAAwB;;;;;;;;;;CAU7B,CAAC;AAEF,eAAe,wBAAwB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
` Runware OpenClaw Provider v0.4.2 (debug build)\n` +
|
|
3
|
-
` provider-discovery.ts loaded at: ${new Date().toISOString()}\n` +
|
|
4
|
-
"═══════════════════════════════════════════════════");
|
|
5
|
-
import { API_KEY_ENV_VAR, BASE_URL_ENV_VAR, DEFAULT_BASE_URL, PROVIDER_ID, PROVIDER_LABEL, buildProvider, prewarmCatalog, resolveApiKey, resolveBaseUrl, } from "./models.js";
|
|
1
|
+
import { API_KEY_ENV_VAR, BASE_URL_ENV_VAR, DEFAULT_BASE_URL, PROVIDER_ID, PROVIDER_LABEL, buildProvider, resolveApiKey, resolveBaseUrl, } from "./models.js";
|
|
6
2
|
import { startCostMetricPoller } from "./cost-metric.js";
|
|
7
3
|
// Emit `openclaw.cost.usd` OpenTelemetry counter from runware transcript
|
|
8
4
|
// entries. Compensates for openclaw's broken diagnostic-path pricing
|
|
@@ -10,14 +6,6 @@ import { startCostMetricPoller } from "./cost-metric.js";
|
|
|
10
6
|
// cost-metric.ts for the full rationale. Idempotent: also called from
|
|
11
7
|
// index.ts, second call is a no-op.
|
|
12
8
|
startCostMetricPoller();
|
|
13
|
-
// Pre-fetch /v1/models in the background so the catalog cache is populated
|
|
14
|
-
// (or in flight) by the time openclaw calls catalog.run. Without this the
|
|
15
|
-
// first /v1/models request sits on the gateway-startup critical path and
|
|
16
|
-
// frequently times out on a cold TLS handshake to Runware, leaving openclaw
|
|
17
|
-
// with an empty Runware catalog until a fresh restart succeeds. See
|
|
18
|
-
// models.ts → prewarmCatalog() for rationale. Idempotent: also called from
|
|
19
|
-
// index.ts, second call short-circuits on the prewarmStarted flag.
|
|
20
|
-
prewarmCatalog();
|
|
21
9
|
function emptyProvider(baseUrl) {
|
|
22
10
|
return {
|
|
23
11
|
baseUrl,
|
|
@@ -28,8 +16,6 @@ function emptyProvider(baseUrl) {
|
|
|
28
16
|
};
|
|
29
17
|
}
|
|
30
18
|
async function runwareCatalogRun(ctx) {
|
|
31
|
-
const cid = Math.random().toString(36).slice(2, 8);
|
|
32
|
-
console.log(`[runware-diag] runwareCatalogRun[${cid}] CALLED at ${new Date().toISOString()}, ctx.env keys=[${Object.keys(ctx.env ?? {}).join(",") || "(none)"}], has resolveProviderApiKey=${typeof ctx.resolveProviderApiKey === "function"}`);
|
|
33
19
|
const baseUrl = resolveBaseUrl(ctx.env);
|
|
34
20
|
const apiKey = resolveApiKey(ctx);
|
|
35
21
|
// No API key reachable yet (e.g. the gateway is starting up before the
|
|
@@ -37,33 +23,9 @@ async function runwareCatalogRun(ctx) {
|
|
|
37
23
|
// an empty provider shape so openclaw treats the catalog as "known but
|
|
38
24
|
// currently unpopulated" rather than crashing. The next invocation will
|
|
39
25
|
// re-resolve and fill in models once the key is present.
|
|
40
|
-
if (!apiKey)
|
|
41
|
-
console.warn(`[runware-diag] runwareCatalogRun[${cid}]: NO API KEY, returning EMPTY provider — openclaw will see 0 models`);
|
|
26
|
+
if (!apiKey)
|
|
42
27
|
return { provider: emptyProvider(baseUrl) };
|
|
43
|
-
}
|
|
44
|
-
try {
|
|
45
|
-
const provider = await buildProvider(apiKey, baseUrl);
|
|
46
|
-
console.log(`[runware-diag] runwareCatalogRun[${cid}]: RETURNING provider with ${provider.models.length} models${provider.models.length > 0
|
|
47
|
-
? `, sample: ${provider.models
|
|
48
|
-
.slice(0, 5)
|
|
49
|
-
.map((m) => m.id)
|
|
50
|
-
.join(", ")}`
|
|
51
|
-
: " — openclaw will see EMPTY DROPDOWN"}`);
|
|
52
|
-
return { provider };
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
// fetchModels already retried with exponential backoff (catalog.ts).
|
|
56
|
-
// If we still failed every attempt, return an empty provider so
|
|
57
|
-
// openclaw treats the catalog as "unpopulated, will retry" rather
|
|
58
|
-
// than letting the throw bubble up — historically that bubble was
|
|
59
|
-
// the proximate cause of "Runware models missing" after a gateway
|
|
60
|
-
// restart, because the first cold-start /v1/models call timed out
|
|
61
|
-
// and there was no recovery path. The next catalog.run invocation
|
|
62
|
-
// will retry; if a concurrent retry is already in flight the
|
|
63
|
-
// inflight dedup in fetchModels makes both share one upstream call.
|
|
64
|
-
console.error(`[runware-diag] runwareCatalogRun[${cid}]: FAILED after retries, returning EMPTY provider: ${err instanceof Error ? err.message : err}`);
|
|
65
|
-
return { provider: emptyProvider(baseUrl) };
|
|
66
|
-
}
|
|
28
|
+
return { provider: await buildProvider(apiKey, baseUrl) };
|
|
67
29
|
}
|
|
68
30
|
const runwareProviderDiscovery = {
|
|
69
31
|
id: PROVIDER_ID,
|
|
@@ -76,7 +38,6 @@ const runwareProviderDiscovery = {
|
|
|
76
38
|
run: runwareCatalogRun,
|
|
77
39
|
},
|
|
78
40
|
};
|
|
79
|
-
console.log(`[runware-diag] provider-discovery.ts default export READY: id=${runwareProviderDiscovery.id}, label=${runwareProviderDiscovery.label}, catalog.order=${runwareProviderDiscovery.catalog.order}, envVars=[${runwareProviderDiscovery.envVars.join(",")}]`);
|
|
80
41
|
export default runwareProviderDiscovery;
|
|
81
42
|
export { DEFAULT_BASE_URL };
|
|
82
43
|
//# sourceMappingURL=provider-discovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-discovery.js","sourceRoot":"","sources":["../src/provider-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"provider-discovery.js","sourceRoot":"","sources":["../src/provider-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,yEAAyE;AACzE,qEAAqE;AACrE,+DAA+D;AAC/D,sEAAsE;AACtE,oCAAoC;AACpC,qBAAqB,EAAE,CAAC;AAuBxB,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO;QACL,OAAO;QACP,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,oBAAoB;QACzB,cAAc,EAAE,GAAG;QACnB,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAiB;IAChD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,uEAAuE;IACvE,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,yDAAyD;IACzD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,yBAAyB;IACnC,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC5C,IAAI,EAAE,EAAE;IACR,OAAO,EAAE;QACP,KAAK,EAAE,MAAe;QACtB,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC;AAEF,eAAe,wBAAwB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teith/openclaw-runware-provider",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "OpenClaw provider plugin for Runware — unified OpenAI-compatible access to Claude, GPT, Gemini, Qwen, GLM, MiniMax, Kimi, and Gemma.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|