@blockrun/clawrouter 0.11.10 → 0.11.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +13 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/update.sh +33 -23
package/README.md
CHANGED
|
@@ -139,7 +139,7 @@ Request → Weighted Scorer (15 dimensions) → Tier → Cheapest Model → Resp
|
|
|
139
139
|
| o3 | $2.00 | $8.00 | 200K | \* |
|
|
140
140
|
| o4-mini | $1.10 | $4.40 | 128K | \* |
|
|
141
141
|
| **Anthropic** | | | | |
|
|
142
|
-
| claude-opus-4.
|
|
142
|
+
| claude-opus-4.6 | $5.00 | $25.00 | 200K | \* |
|
|
143
143
|
| claude-sonnet-4.6 | $3.00 | $15.00 | 200K | \* |
|
|
144
144
|
| claude-haiku-4.5 | $1.00 | $5.00 | 200K | |
|
|
145
145
|
| **Google** | | | | |
|
package/dist/cli.js
CHANGED
|
@@ -5185,6 +5185,7 @@ async function proxyRequest(req, res, apiBase, payFetch, options, routerOpts, de
|
|
|
5185
5185
|
let maxTokens = 4096;
|
|
5186
5186
|
let routingProfile = null;
|
|
5187
5187
|
let accumulatedContent = "";
|
|
5188
|
+
let responseInputTokens;
|
|
5188
5189
|
const isChatCompletion = req.url?.includes("/chat/completions");
|
|
5189
5190
|
const sessionId = getSessionId(req.headers);
|
|
5190
5191
|
let effectiveSessionId = sessionId;
|
|
@@ -5620,7 +5621,8 @@ async function proxyRequest(req, res, apiBase, payFetch, options, routerOpts, de
|
|
|
5620
5621
|
};
|
|
5621
5622
|
}
|
|
5622
5623
|
const lastAssistantMsg = [...parsedMessages].reverse().find((m) => m.role === "assistant");
|
|
5623
|
-
const
|
|
5624
|
+
const assistantToolCalls = lastAssistantMsg?.tool_calls;
|
|
5625
|
+
const toolCallNames = Array.isArray(assistantToolCalls) ? assistantToolCalls.map((tc) => tc.function?.name).filter((n) => Boolean(n)) : void 0;
|
|
5624
5626
|
const contentHash = hashRequestContent(prompt, toolCallNames);
|
|
5625
5627
|
const shouldEscalate = sessionStore.recordRequestHash(effectiveSessionId, contentHash);
|
|
5626
5628
|
if (shouldEscalate) {
|
|
@@ -6039,6 +6041,10 @@ async function proxyRequest(req, res, apiBase, payFetch, options, routerOpts, de
|
|
|
6039
6041
|
const jsonStr = jsonBody.toString();
|
|
6040
6042
|
try {
|
|
6041
6043
|
const rsp = JSON.parse(jsonStr);
|
|
6044
|
+
if (rsp.usage && typeof rsp.usage === "object") {
|
|
6045
|
+
const u = rsp.usage;
|
|
6046
|
+
if (typeof u.prompt_tokens === "number") responseInputTokens = u.prompt_tokens;
|
|
6047
|
+
}
|
|
6042
6048
|
const baseChunk = {
|
|
6043
6049
|
id: rsp.id ?? `chatcmpl-${Date.now()}`,
|
|
6044
6050
|
object: "chat.completion.chunk",
|
|
@@ -6187,6 +6193,10 @@ async function proxyRequest(req, res, apiBase, payFetch, options, routerOpts, de
|
|
|
6187
6193
|
if (rspJson.choices?.[0]?.message?.content) {
|
|
6188
6194
|
accumulatedContent = rspJson.choices[0].message.content;
|
|
6189
6195
|
}
|
|
6196
|
+
if (rspJson.usage && typeof rspJson.usage === "object") {
|
|
6197
|
+
if (typeof rspJson.usage.prompt_tokens === "number")
|
|
6198
|
+
responseInputTokens = rspJson.usage.prompt_tokens;
|
|
6199
|
+
}
|
|
6190
6200
|
} catch {
|
|
6191
6201
|
}
|
|
6192
6202
|
}
|
|
@@ -6235,7 +6245,8 @@ async function proxyRequest(req, res, apiBase, payFetch, options, routerOpts, de
|
|
|
6235
6245
|
cost: costWithBuffer,
|
|
6236
6246
|
baselineCost: baselineWithBuffer,
|
|
6237
6247
|
savings: accurateCosts.savings,
|
|
6238
|
-
latencyMs: Date.now() - startTime
|
|
6248
|
+
latencyMs: Date.now() - startTime,
|
|
6249
|
+
...responseInputTokens !== void 0 && { inputTokens: responseInputTokens }
|
|
6239
6250
|
};
|
|
6240
6251
|
logUsage(entry).catch(() => {
|
|
6241
6252
|
});
|