ai-cost-analyzer 1.0.0 → 1.1.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.
Potentially problematic release.
This version of ai-cost-analyzer might be problematic. Click here for more details.
- package/dist/index.js +46 -15
- package/dist/index.js.map +1 -1
- package/dist/license.d.ts +36 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +110 -0
- package/dist/license.js.map +1 -0
- package/dist/tools/compare.js +1 -1
- package/dist/tools/compare.js.map +1 -1
- package/dist/tools/pricing.d.ts.map +1 -1
- package/dist/tools/pricing.js +47 -6
- package/dist/tools/pricing.js.map +1 -1
- package/dist/tools/savings.js +6 -6
- package/dist/tools/savings.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +46 -15
- package/src/license.ts +143 -0
- package/src/tools/compare.ts +1 -1
- package/src/tools/pricing.ts +45 -6
- package/src/tools/savings.ts +6 -6
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { handleEstimateSavings } from "./tools/savings.js";
|
|
|
15
15
|
import { handleOptimizePrompt } from "./tools/optimize.js";
|
|
16
16
|
import { handleCompareModels } from "./tools/compare.js";
|
|
17
17
|
import { handleGetPricing } from "./tools/pricing.js";
|
|
18
|
+
import { checkLicense } from "./license.js";
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
19
20
|
// Zod schemas for tool inputs
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
@@ -40,11 +41,17 @@ const server = new McpServer({
|
|
|
40
41
|
server.tool("analyze_usage", "Analyze AI API usage data and return cost breakdowns by model, average cost per request, token waste estimation, and daily/weekly trends.", {
|
|
41
42
|
usage_data: z.array(UsageRecordSchema).describe("Array of API usage records with model, tokens, and timestamps"),
|
|
42
43
|
}, async ({ usage_data }) => {
|
|
44
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
45
|
+
if (!license.valid) {
|
|
46
|
+
return { content: [{ type: "text", text: license.message ?? "License required" }], isError: true };
|
|
47
|
+
}
|
|
43
48
|
try {
|
|
44
49
|
const result = handleAnalyzeUsage(usage_data);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
const content = [{ type: "text", text: result }];
|
|
51
|
+
if (license.trial && license.message) {
|
|
52
|
+
content.push({ type: "text", text: "\n\n" + license.message });
|
|
53
|
+
}
|
|
54
|
+
return { content };
|
|
48
55
|
}
|
|
49
56
|
catch (err) {
|
|
50
57
|
return {
|
|
@@ -63,11 +70,17 @@ server.tool("estimate_savings", "Estimate potential monthly savings from prompt
|
|
|
63
70
|
usage_data: z.array(UsageRecordSchema).describe("Array of API usage records representing current usage patterns"),
|
|
64
71
|
monthly_multiplier: z.number().min(1).optional().describe("If the usage_data is a sample, multiply costs by this factor to project monthly totals (default: 1)"),
|
|
65
72
|
}, async ({ usage_data, monthly_multiplier }) => {
|
|
73
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
74
|
+
if (!license.valid) {
|
|
75
|
+
return { content: [{ type: "text", text: license.message ?? "License required" }], isError: true };
|
|
76
|
+
}
|
|
66
77
|
try {
|
|
67
78
|
const result = handleEstimateSavings(usage_data, monthly_multiplier);
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
79
|
+
const content = [{ type: "text", text: result }];
|
|
80
|
+
if (license.trial && license.message) {
|
|
81
|
+
content.push({ type: "text", text: "\n\n" + license.message });
|
|
82
|
+
}
|
|
83
|
+
return { content };
|
|
71
84
|
}
|
|
72
85
|
catch (err) {
|
|
73
86
|
return {
|
|
@@ -88,11 +101,17 @@ server.tool("optimize_prompt", "Analyze a system prompt and tool definitions, re
|
|
|
88
101
|
requests_per_month: z.number().int().min(1).optional().describe("Estimated requests per month for cost projection (default: 10,000)"),
|
|
89
102
|
model: z.string().optional().describe("Model name for pricing calculation (default: claude-sonnet)"),
|
|
90
103
|
}, async ({ system_prompt, tool_definitions, requests_per_month, model }) => {
|
|
104
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
105
|
+
if (!license.valid) {
|
|
106
|
+
return { content: [{ type: "text", text: license.message ?? "License required" }], isError: true };
|
|
107
|
+
}
|
|
91
108
|
try {
|
|
92
109
|
const result = handleOptimizePrompt(system_prompt, tool_definitions, requests_per_month, model);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
110
|
+
const content = [{ type: "text", text: result }];
|
|
111
|
+
if (license.trial && license.message) {
|
|
112
|
+
content.push({ type: "text", text: "\n\n" + license.message });
|
|
113
|
+
}
|
|
114
|
+
return { content };
|
|
96
115
|
}
|
|
97
116
|
catch (err) {
|
|
98
117
|
return {
|
|
@@ -112,11 +131,17 @@ server.tool("compare_models", "Compare cost and quality tradeoffs across Claude,
|
|
|
112
131
|
estimated_input_tokens: z.number().int().min(1).optional().describe("Override estimated input tokens per request"),
|
|
113
132
|
estimated_output_tokens: z.number().int().min(1).optional().describe("Override estimated output tokens per request"),
|
|
114
133
|
}, async ({ task_description, estimated_input_tokens, estimated_output_tokens }) => {
|
|
134
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
135
|
+
if (!license.valid) {
|
|
136
|
+
return { content: [{ type: "text", text: license.message ?? "License required" }], isError: true };
|
|
137
|
+
}
|
|
115
138
|
try {
|
|
116
139
|
const result = handleCompareModels(task_description, estimated_input_tokens, estimated_output_tokens);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
140
|
+
const content = [{ type: "text", text: result }];
|
|
141
|
+
if (license.trial && license.message) {
|
|
142
|
+
content.push({ type: "text", text: "\n\n" + license.message });
|
|
143
|
+
}
|
|
144
|
+
return { content };
|
|
120
145
|
}
|
|
121
146
|
catch (err) {
|
|
122
147
|
return {
|
|
@@ -132,11 +157,17 @@ server.tool("compare_models", "Compare cost and quality tradeoffs across Claude,
|
|
|
132
157
|
// Tool: get_pricing
|
|
133
158
|
// ---------------------------------------------------------------------------
|
|
134
159
|
server.tool("get_pricing", "Return current pricing for all major LLM APIs (Claude, OpenAI, Gemini) with input, output, and cached token rates per million tokens.", {}, async () => {
|
|
160
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
161
|
+
if (!license.valid) {
|
|
162
|
+
return { content: [{ type: "text", text: license.message ?? "License required" }], isError: true };
|
|
163
|
+
}
|
|
135
164
|
try {
|
|
136
165
|
const result = handleGetPricing();
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
166
|
+
const content = [{ type: "text", text: result }];
|
|
167
|
+
if (license.trial && license.message) {
|
|
168
|
+
content.push({ type: "text", text: "\n\n" + license.message });
|
|
169
|
+
}
|
|
170
|
+
return { content };
|
|
140
171
|
}
|
|
141
172
|
catch (err) {
|
|
142
173
|
return {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared license validation for AIVP MCP servers.
|
|
3
|
+
*
|
|
4
|
+
* License keys are HMAC-SHA256 signed strings in the format:
|
|
5
|
+
* base64(email:product:expiry):signature
|
|
6
|
+
*
|
|
7
|
+
* The server validates locally — no network call needed.
|
|
8
|
+
*
|
|
9
|
+
* Without a key, users get a free trial (limited calls).
|
|
10
|
+
* With a valid key, usage is unlimited.
|
|
11
|
+
*/
|
|
12
|
+
export interface LicenseResult {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
message?: string;
|
|
15
|
+
trial?: boolean;
|
|
16
|
+
remaining?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a license key for a given email and product.
|
|
20
|
+
* Used by the key generation script, not by the server itself.
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateLicenseKey(email: string, product: string, expiryDays?: number): string;
|
|
23
|
+
/**
|
|
24
|
+
* Validate a license key for a given product.
|
|
25
|
+
* Returns { valid: true } if the key is valid for this product.
|
|
26
|
+
*/
|
|
27
|
+
export declare function validateLicenseKey(key: string, product: string): LicenseResult;
|
|
28
|
+
/**
|
|
29
|
+
* Check if the current call is allowed.
|
|
30
|
+
* Call this at the start of every tool handler.
|
|
31
|
+
*
|
|
32
|
+
* - If LICENSE_KEY env var is set and valid: always allowed
|
|
33
|
+
* - If no key: allowed for FREE_TRIAL_LIMIT calls, then blocked
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkLicense(product: string): LicenseResult;
|
|
36
|
+
//# sourceMappingURL=license.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAY,GACvB,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,aAAa,CAyCf;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAkC3D"}
|
package/dist/license.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared license validation for AIVP MCP servers.
|
|
3
|
+
*
|
|
4
|
+
* License keys are HMAC-SHA256 signed strings in the format:
|
|
5
|
+
* base64(email:product:expiry):signature
|
|
6
|
+
*
|
|
7
|
+
* The server validates locally — no network call needed.
|
|
8
|
+
*
|
|
9
|
+
* Without a key, users get a free trial (limited calls).
|
|
10
|
+
* With a valid key, usage is unlimited.
|
|
11
|
+
*/
|
|
12
|
+
import { createHmac } from "node:crypto";
|
|
13
|
+
// This secret is used to sign/verify license keys.
|
|
14
|
+
// In production, this should be injected via env var, but for local
|
|
15
|
+
// validation of HMAC-signed keys, it must be embedded.
|
|
16
|
+
const LICENSE_SECRET = process.env.AIVP_LICENSE_SECRET ?? "aivp-mcp-2026-s3cr3t-k3y";
|
|
17
|
+
const FREE_TRIAL_LIMIT = 3;
|
|
18
|
+
// In-memory call counter for free trial
|
|
19
|
+
const callCounts = new Map();
|
|
20
|
+
/**
|
|
21
|
+
* Generate a license key for a given email and product.
|
|
22
|
+
* Used by the key generation script, not by the server itself.
|
|
23
|
+
*/
|
|
24
|
+
export function generateLicenseKey(email, product, expiryDays = 365) {
|
|
25
|
+
const expiry = new Date(Date.now() + expiryDays * 24 * 60 * 60 * 1000).toISOString().split("T")[0];
|
|
26
|
+
const payload = `${email}:${product}:${expiry}`;
|
|
27
|
+
const payloadB64 = Buffer.from(payload).toString("base64url");
|
|
28
|
+
const signature = createHmac("sha256", LICENSE_SECRET)
|
|
29
|
+
.update(payload)
|
|
30
|
+
.digest("base64url");
|
|
31
|
+
return `${payloadB64}.${signature}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Validate a license key for a given product.
|
|
35
|
+
* Returns { valid: true } if the key is valid for this product.
|
|
36
|
+
*/
|
|
37
|
+
export function validateLicenseKey(key, product) {
|
|
38
|
+
try {
|
|
39
|
+
const [payloadB64, signature] = key.split(".");
|
|
40
|
+
if (!payloadB64 || !signature) {
|
|
41
|
+
return { valid: false, message: "Invalid key format" };
|
|
42
|
+
}
|
|
43
|
+
const payload = Buffer.from(payloadB64, "base64url").toString("utf-8");
|
|
44
|
+
const [email, keyProduct, expiry] = payload.split(":");
|
|
45
|
+
if (!email || !keyProduct || !expiry) {
|
|
46
|
+
return { valid: false, message: "Invalid key format" };
|
|
47
|
+
}
|
|
48
|
+
// Verify signature
|
|
49
|
+
const expectedSignature = createHmac("sha256", LICENSE_SECRET)
|
|
50
|
+
.update(payload)
|
|
51
|
+
.digest("base64url");
|
|
52
|
+
if (signature !== expectedSignature) {
|
|
53
|
+
return { valid: false, message: "Invalid license key" };
|
|
54
|
+
}
|
|
55
|
+
// Check product match (allow "all" for bundle keys)
|
|
56
|
+
if (keyProduct !== product && keyProduct !== "all") {
|
|
57
|
+
return {
|
|
58
|
+
valid: false,
|
|
59
|
+
message: `This key is for "${keyProduct}", not "${product}"`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// Check expiry
|
|
63
|
+
const expiryDate = new Date(expiry);
|
|
64
|
+
if (isNaN(expiryDate.getTime()) || expiryDate < new Date()) {
|
|
65
|
+
return { valid: false, message: "License key has expired" };
|
|
66
|
+
}
|
|
67
|
+
return { valid: true };
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return { valid: false, message: "Invalid license key" };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if the current call is allowed.
|
|
75
|
+
* Call this at the start of every tool handler.
|
|
76
|
+
*
|
|
77
|
+
* - If LICENSE_KEY env var is set and valid: always allowed
|
|
78
|
+
* - If no key: allowed for FREE_TRIAL_LIMIT calls, then blocked
|
|
79
|
+
*/
|
|
80
|
+
export function checkLicense(product) {
|
|
81
|
+
const key = process.env.LICENSE_KEY ?? process.env.AIVP_LICENSE_KEY;
|
|
82
|
+
if (key) {
|
|
83
|
+
const result = validateLicenseKey(key, product);
|
|
84
|
+
if (result.valid) {
|
|
85
|
+
return { valid: true };
|
|
86
|
+
}
|
|
87
|
+
// Invalid key — still return the error, don't fall through to trial
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
// No key — free trial mode
|
|
91
|
+
const count = (callCounts.get(product) ?? 0) + 1;
|
|
92
|
+
callCounts.set(product, count);
|
|
93
|
+
if (count <= FREE_TRIAL_LIMIT) {
|
|
94
|
+
return {
|
|
95
|
+
valid: true,
|
|
96
|
+
trial: true,
|
|
97
|
+
remaining: FREE_TRIAL_LIMIT - count,
|
|
98
|
+
message: count === FREE_TRIAL_LIMIT
|
|
99
|
+
? `⚠️ Free trial ended. Purchase a license at https://aivp-mcp.vercel.app`
|
|
100
|
+
: `Free trial: ${FREE_TRIAL_LIMIT - count} calls remaining. Get unlimited access at https://aivp-mcp.vercel.app`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
valid: false,
|
|
105
|
+
trial: true,
|
|
106
|
+
remaining: 0,
|
|
107
|
+
message: `🔒 Free trial limit reached (${FREE_TRIAL_LIMIT} calls). Purchase a license at https://aivp-mcp.vercel.app to continue using this tool.`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/compare.js
CHANGED
|
@@ -162,7 +162,7 @@ export function handleCompareModels(taskDescription, estimatedInputTokens, estim
|
|
|
162
162
|
entries.sort((a, b) => a.costPerReq - b.costPerReq);
|
|
163
163
|
const cheapest = entries[0];
|
|
164
164
|
const mostExpensive = entries[entries.length - 1];
|
|
165
|
-
const ratio = mostExpensive.costPerReq / cheapest.costPerReq;
|
|
165
|
+
const ratio = cheapest.costPerReq > 0 ? mostExpensive.costPerReq / cheapest.costPerReq : 0;
|
|
166
166
|
lines.push("## Cost Spread");
|
|
167
167
|
lines.push(`- **Cheapest:** ${MODEL_PRICING[cheapest.id].name} at $${cheapest.costPerReq.toFixed(6)}/request`);
|
|
168
168
|
lines.push(`- **Most Expensive:** ${MODEL_PRICING[mostExpensive.id].name} at $${mostExpensive.costPerReq.toFixed(6)}/request`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/tools/compare.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/tools/compare.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/tools/pricing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMzD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CA6DvD,CAAC;
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/tools/pricing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMzD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CA6DvD,CAAC;AA0DF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAW/D;AAMD,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,YAAY,GAAE,MAAU,GACvB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAepF;AAMD,wBAAgB,gBAAgB,IAAI,MAAM,CAoCzC"}
|
package/dist/tools/pricing.js
CHANGED
|
@@ -72,45 +72,86 @@ export const MODEL_PRICING = {
|
|
|
72
72
|
// Helper: resolve a user-supplied model string to a ModelId
|
|
73
73
|
// ---------------------------------------------------------------------------
|
|
74
74
|
const MODEL_ALIASES = {
|
|
75
|
-
// Claude
|
|
75
|
+
// Claude Opus
|
|
76
76
|
"claude-opus": "claude-opus",
|
|
77
77
|
"claude-4-opus": "claude-opus",
|
|
78
|
+
"claude-opus-4": "claude-opus",
|
|
79
|
+
"claude-opus-4-0": "claude-opus",
|
|
78
80
|
opus: "claude-opus",
|
|
81
|
+
// Claude Sonnet
|
|
79
82
|
"claude-sonnet": "claude-sonnet",
|
|
80
83
|
"claude-4-sonnet": "claude-sonnet",
|
|
84
|
+
"claude-sonnet-4": "claude-sonnet",
|
|
85
|
+
"claude-sonnet-4-5": "claude-sonnet",
|
|
86
|
+
"claude-sonnet-4.5": "claude-sonnet",
|
|
81
87
|
"claude-3.5-sonnet": "claude-sonnet",
|
|
88
|
+
"claude-3-5-sonnet": "claude-sonnet",
|
|
89
|
+
"claude-sonnet-3-5": "claude-sonnet",
|
|
90
|
+
"claude-sonnet-3.5": "claude-sonnet",
|
|
82
91
|
sonnet: "claude-sonnet",
|
|
92
|
+
// Claude Haiku
|
|
83
93
|
"claude-haiku": "claude-haiku",
|
|
84
94
|
"claude-3.5-haiku": "claude-haiku",
|
|
95
|
+
"claude-3-5-haiku": "claude-haiku",
|
|
96
|
+
"claude-haiku-3-5": "claude-haiku",
|
|
97
|
+
"claude-haiku-3.5": "claude-haiku",
|
|
85
98
|
haiku: "claude-haiku",
|
|
86
99
|
// OpenAI
|
|
87
100
|
"gpt-4o": "gpt-4o",
|
|
88
101
|
gpt4o: "gpt-4o",
|
|
89
102
|
"gpt-4o-mini": "gpt-4o-mini",
|
|
90
103
|
gpt4omini: "gpt-4o-mini",
|
|
104
|
+
"gpt-4o-mini-2024-07-18": "gpt-4o-mini",
|
|
105
|
+
"gpt-4o-2024-08-06": "gpt-4o",
|
|
91
106
|
// Google
|
|
92
107
|
"gemini-2.0-flash": "gemini-2.0-flash",
|
|
93
108
|
"gemini-flash": "gemini-2.0-flash",
|
|
109
|
+
"gemini-2.0-flash-001": "gemini-2.0-flash",
|
|
94
110
|
gemini: "gemini-2.0-flash",
|
|
95
111
|
};
|
|
112
|
+
/**
|
|
113
|
+
* Fuzzy-match patterns: if exact alias lookup fails, try substring matching.
|
|
114
|
+
* Order matters -- more specific patterns come first.
|
|
115
|
+
*/
|
|
116
|
+
const FUZZY_PATTERNS = [
|
|
117
|
+
{ pattern: /opus/i, modelId: "claude-opus" },
|
|
118
|
+
{ pattern: /sonnet/i, modelId: "claude-sonnet" },
|
|
119
|
+
{ pattern: /haiku/i, modelId: "claude-haiku" },
|
|
120
|
+
{ pattern: /gpt-?4o-?mini/i, modelId: "gpt-4o-mini" },
|
|
121
|
+
{ pattern: /gpt-?4o/i, modelId: "gpt-4o" },
|
|
122
|
+
{ pattern: /gemini/i, modelId: "gemini-2.0-flash" },
|
|
123
|
+
];
|
|
96
124
|
export function resolveModelId(raw) {
|
|
97
125
|
const key = raw.toLowerCase().trim();
|
|
98
|
-
|
|
126
|
+
// 1. Exact alias match
|
|
127
|
+
if (MODEL_ALIASES[key])
|
|
128
|
+
return MODEL_ALIASES[key];
|
|
129
|
+
// 2. Direct pricing key match
|
|
130
|
+
if (MODEL_PRICING[key])
|
|
131
|
+
return key;
|
|
132
|
+
// 3. Fuzzy pattern match
|
|
133
|
+
for (const { pattern, modelId } of FUZZY_PATTERNS) {
|
|
134
|
+
if (pattern.test(key))
|
|
135
|
+
return modelId;
|
|
136
|
+
}
|
|
137
|
+
return undefined;
|
|
99
138
|
}
|
|
100
139
|
// ---------------------------------------------------------------------------
|
|
101
140
|
// Cost helpers
|
|
102
141
|
// ---------------------------------------------------------------------------
|
|
103
142
|
export function computeCost(modelId, inputTokens, outputTokens, cachedTokens = 0) {
|
|
104
143
|
const p = MODEL_PRICING[modelId];
|
|
105
|
-
|
|
144
|
+
// Guard against cachedTokens exceeding inputTokens (invalid data)
|
|
145
|
+
const safeCached = Math.min(cachedTokens, inputTokens);
|
|
146
|
+
const uncachedInput = inputTokens - safeCached;
|
|
106
147
|
const fullInputCost = (uncachedInput / 1_000_000) * p.inputPerMillion;
|
|
107
148
|
const cachedCost = p.cachedInputPerMillion
|
|
108
|
-
? (
|
|
109
|
-
: (
|
|
149
|
+
? (safeCached / 1_000_000) * p.cachedInputPerMillion
|
|
150
|
+
: (safeCached / 1_000_000) * p.inputPerMillion;
|
|
110
151
|
const inputCost = fullInputCost + cachedCost;
|
|
111
152
|
const outputCost = (outputTokens / 1_000_000) * p.outputPerMillion;
|
|
112
153
|
const cacheSavings = p.cachedInputPerMillion
|
|
113
|
-
? (
|
|
154
|
+
? (safeCached / 1_000_000) * (p.inputPerMillion - p.cachedInputPerMillion)
|
|
114
155
|
: 0;
|
|
115
156
|
return { inputCost, outputCost, cacheSavings, totalCost: inputCost + outputCost };
|
|
116
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/tools/pricing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAkC;IAC1D,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,EAAE;QACnB,gBAAgB,EAAE,EAAE;QACpB,qBAAqB,EAAE,GAAG;QAC1B,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,CAAC;KACf;IACD,eAAe,EAAE;QACf,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,CAAC;QAClB,gBAAgB,EAAE,EAAE;QACpB,qBAAqB,EAAE,GAAG;QAC1B,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,CAAC;KACf;IACD,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;QACtB,qBAAqB,EAAE,KAAK;QAC5B,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,CAAC;KACf;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,QAAQ;QAClB,eAAe,EAAE,GAAG;QACpB,gBAAgB,EAAE,EAAE;QACpB,qBAAqB,EAAE,IAAI;QAC3B,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,CAAC;KACf;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,QAAQ;QAClB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,GAAG;QACrB,qBAAqB,EAAE,KAAK;QAC5B,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,CAAC;KACf;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,QAAQ;QAClB,eAAe,EAAE,GAAG;QACpB,gBAAgB,EAAE,GAAG;QACrB,qBAAqB,EAAE,KAAK;QAC5B,aAAa,EAAE,SAAS;QACxB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,CAAC;KACf;CACF,CAAC;AAEF,8EAA8E;AAC9E,4DAA4D;AAC5D,8EAA8E;AAE9E,MAAM,aAAa,GAA4B;IAC7C,
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/tools/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/savings.js
CHANGED
|
@@ -73,9 +73,9 @@ function computeSavings(records, multiplier) {
|
|
|
73
73
|
const p = MODEL_PRICING[mid];
|
|
74
74
|
if (p.qualityTier === 1) {
|
|
75
75
|
// 40% of Opus calls could go to Sonnet
|
|
76
|
-
const
|
|
77
|
-
const routableInputTokens =
|
|
78
|
-
const routableOutputTokens =
|
|
76
|
+
const routableFraction = 0.4;
|
|
77
|
+
const routableInputTokens = data.input * routableFraction;
|
|
78
|
+
const routableOutputTokens = data.output * routableFraction;
|
|
79
79
|
const currentCost = computeCost(mid, routableInputTokens, routableOutputTokens).totalCost;
|
|
80
80
|
const cheaperCost = computeCost("claude-sonnet", routableInputTokens, routableOutputTokens).totalCost;
|
|
81
81
|
routingSavings += currentCost - cheaperCost;
|
|
@@ -83,9 +83,9 @@ function computeSavings(records, multiplier) {
|
|
|
83
83
|
}
|
|
84
84
|
else if (p.qualityTier === 2) {
|
|
85
85
|
// 25% of Sonnet/4o calls could go to Haiku/mini
|
|
86
|
-
const
|
|
87
|
-
const routableInputTokens =
|
|
88
|
-
const routableOutputTokens =
|
|
86
|
+
const routableFraction = 0.25;
|
|
87
|
+
const routableInputTokens = data.input * routableFraction;
|
|
88
|
+
const routableOutputTokens = data.output * routableFraction;
|
|
89
89
|
const currentCost = computeCost(mid, routableInputTokens, routableOutputTokens).totalCost;
|
|
90
90
|
const cheaperId = mid === "gpt-4o" ? "gpt-4o-mini" : "claude-haiku";
|
|
91
91
|
const cheaperCost = computeCost(cheaperId, routableInputTokens, routableOutputTokens).totalCost;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"savings.js","sourceRoot":"","sources":["../../src/tools/savings.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"savings.js","sourceRoot":"","sources":["../../src/tools/savings.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-cost-analyzer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "MCP server that helps developers understand and reduce their AI API costs through usage analysis, savings estimation, prompt optimization, and model comparison.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/src/index.ts
CHANGED
|
@@ -18,6 +18,7 @@ import { handleEstimateSavings } from "./tools/savings.js";
|
|
|
18
18
|
import { handleOptimizePrompt } from "./tools/optimize.js";
|
|
19
19
|
import { handleCompareModels } from "./tools/compare.js";
|
|
20
20
|
import { handleGetPricing } from "./tools/pricing.js";
|
|
21
|
+
import { checkLicense } from "./license.js";
|
|
21
22
|
|
|
22
23
|
// ---------------------------------------------------------------------------
|
|
23
24
|
// Zod schemas for tool inputs
|
|
@@ -55,11 +56,17 @@ server.tool(
|
|
|
55
56
|
),
|
|
56
57
|
},
|
|
57
58
|
async ({ usage_data }) => {
|
|
59
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
60
|
+
if (!license.valid) {
|
|
61
|
+
return { content: [{ type: "text" as const, text: license.message ?? "License required" }], isError: true };
|
|
62
|
+
}
|
|
58
63
|
try {
|
|
59
64
|
const result = handleAnalyzeUsage(usage_data);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
const content = [{ type: "text" as const, text: result }];
|
|
66
|
+
if (license.trial && license.message) {
|
|
67
|
+
content.push({ type: "text" as const, text: "\n\n" + license.message });
|
|
68
|
+
}
|
|
69
|
+
return { content };
|
|
63
70
|
} catch (err) {
|
|
64
71
|
return {
|
|
65
72
|
content: [{
|
|
@@ -88,11 +95,17 @@ server.tool(
|
|
|
88
95
|
),
|
|
89
96
|
},
|
|
90
97
|
async ({ usage_data, monthly_multiplier }) => {
|
|
98
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
99
|
+
if (!license.valid) {
|
|
100
|
+
return { content: [{ type: "text" as const, text: license.message ?? "License required" }], isError: true };
|
|
101
|
+
}
|
|
91
102
|
try {
|
|
92
103
|
const result = handleEstimateSavings(usage_data, monthly_multiplier);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
const content = [{ type: "text" as const, text: result }];
|
|
105
|
+
if (license.trial && license.message) {
|
|
106
|
+
content.push({ type: "text" as const, text: "\n\n" + license.message });
|
|
107
|
+
}
|
|
108
|
+
return { content };
|
|
96
109
|
} catch (err) {
|
|
97
110
|
return {
|
|
98
111
|
content: [{
|
|
@@ -125,11 +138,17 @@ server.tool(
|
|
|
125
138
|
),
|
|
126
139
|
},
|
|
127
140
|
async ({ system_prompt, tool_definitions, requests_per_month, model }) => {
|
|
141
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
142
|
+
if (!license.valid) {
|
|
143
|
+
return { content: [{ type: "text" as const, text: license.message ?? "License required" }], isError: true };
|
|
144
|
+
}
|
|
128
145
|
try {
|
|
129
146
|
const result = handleOptimizePrompt(system_prompt, tool_definitions, requests_per_month, model);
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
147
|
+
const content = [{ type: "text" as const, text: result }];
|
|
148
|
+
if (license.trial && license.message) {
|
|
149
|
+
content.push({ type: "text" as const, text: "\n\n" + license.message });
|
|
150
|
+
}
|
|
151
|
+
return { content };
|
|
133
152
|
} catch (err) {
|
|
134
153
|
return {
|
|
135
154
|
content: [{
|
|
@@ -161,15 +180,21 @@ server.tool(
|
|
|
161
180
|
),
|
|
162
181
|
},
|
|
163
182
|
async ({ task_description, estimated_input_tokens, estimated_output_tokens }) => {
|
|
183
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
184
|
+
if (!license.valid) {
|
|
185
|
+
return { content: [{ type: "text" as const, text: license.message ?? "License required" }], isError: true };
|
|
186
|
+
}
|
|
164
187
|
try {
|
|
165
188
|
const result = handleCompareModels(
|
|
166
189
|
task_description,
|
|
167
190
|
estimated_input_tokens,
|
|
168
191
|
estimated_output_tokens,
|
|
169
192
|
);
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
193
|
+
const content = [{ type: "text" as const, text: result }];
|
|
194
|
+
if (license.trial && license.message) {
|
|
195
|
+
content.push({ type: "text" as const, text: "\n\n" + license.message });
|
|
196
|
+
}
|
|
197
|
+
return { content };
|
|
173
198
|
} catch (err) {
|
|
174
199
|
return {
|
|
175
200
|
content: [{
|
|
@@ -191,11 +216,17 @@ server.tool(
|
|
|
191
216
|
"Return current pricing for all major LLM APIs (Claude, OpenAI, Gemini) with input, output, and cached token rates per million tokens.",
|
|
192
217
|
{},
|
|
193
218
|
async () => {
|
|
219
|
+
const license = checkLicense("ai-cost-analyzer");
|
|
220
|
+
if (!license.valid) {
|
|
221
|
+
return { content: [{ type: "text" as const, text: license.message ?? "License required" }], isError: true };
|
|
222
|
+
}
|
|
194
223
|
try {
|
|
195
224
|
const result = handleGetPricing();
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
225
|
+
const content = [{ type: "text" as const, text: result }];
|
|
226
|
+
if (license.trial && license.message) {
|
|
227
|
+
content.push({ type: "text" as const, text: "\n\n" + license.message });
|
|
228
|
+
}
|
|
229
|
+
return { content };
|
|
199
230
|
} catch (err) {
|
|
200
231
|
return {
|
|
201
232
|
content: [{
|
package/src/license.ts
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared license validation for AIVP MCP servers.
|
|
3
|
+
*
|
|
4
|
+
* License keys are HMAC-SHA256 signed strings in the format:
|
|
5
|
+
* base64(email:product:expiry):signature
|
|
6
|
+
*
|
|
7
|
+
* The server validates locally — no network call needed.
|
|
8
|
+
*
|
|
9
|
+
* Without a key, users get a free trial (limited calls).
|
|
10
|
+
* With a valid key, usage is unlimited.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { createHmac } from "node:crypto";
|
|
14
|
+
|
|
15
|
+
// This secret is used to sign/verify license keys.
|
|
16
|
+
// In production, this should be injected via env var, but for local
|
|
17
|
+
// validation of HMAC-signed keys, it must be embedded.
|
|
18
|
+
const LICENSE_SECRET = process.env.AIVP_LICENSE_SECRET ?? "aivp-mcp-2026-s3cr3t-k3y";
|
|
19
|
+
|
|
20
|
+
const FREE_TRIAL_LIMIT = 3;
|
|
21
|
+
|
|
22
|
+
// In-memory call counter for free trial
|
|
23
|
+
const callCounts = new Map<string, number>();
|
|
24
|
+
|
|
25
|
+
export interface LicenseResult {
|
|
26
|
+
valid: boolean;
|
|
27
|
+
message?: string;
|
|
28
|
+
trial?: boolean;
|
|
29
|
+
remaining?: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Generate a license key for a given email and product.
|
|
34
|
+
* Used by the key generation script, not by the server itself.
|
|
35
|
+
*/
|
|
36
|
+
export function generateLicenseKey(
|
|
37
|
+
email: string,
|
|
38
|
+
product: string,
|
|
39
|
+
expiryDays: number = 365,
|
|
40
|
+
): string {
|
|
41
|
+
const expiry = new Date(
|
|
42
|
+
Date.now() + expiryDays * 24 * 60 * 60 * 1000,
|
|
43
|
+
).toISOString().split("T")[0];
|
|
44
|
+
const payload = `${email}:${product}:${expiry}`;
|
|
45
|
+
const payloadB64 = Buffer.from(payload).toString("base64url");
|
|
46
|
+
const signature = createHmac("sha256", LICENSE_SECRET)
|
|
47
|
+
.update(payload)
|
|
48
|
+
.digest("base64url");
|
|
49
|
+
return `${payloadB64}.${signature}`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Validate a license key for a given product.
|
|
54
|
+
* Returns { valid: true } if the key is valid for this product.
|
|
55
|
+
*/
|
|
56
|
+
export function validateLicenseKey(
|
|
57
|
+
key: string,
|
|
58
|
+
product: string,
|
|
59
|
+
): LicenseResult {
|
|
60
|
+
try {
|
|
61
|
+
const [payloadB64, signature] = key.split(".");
|
|
62
|
+
if (!payloadB64 || !signature) {
|
|
63
|
+
return { valid: false, message: "Invalid key format" };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const payload = Buffer.from(payloadB64, "base64url").toString("utf-8");
|
|
67
|
+
const [email, keyProduct, expiry] = payload.split(":");
|
|
68
|
+
|
|
69
|
+
if (!email || !keyProduct || !expiry) {
|
|
70
|
+
return { valid: false, message: "Invalid key format" };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Verify signature
|
|
74
|
+
const expectedSignature = createHmac("sha256", LICENSE_SECRET)
|
|
75
|
+
.update(payload)
|
|
76
|
+
.digest("base64url");
|
|
77
|
+
|
|
78
|
+
if (signature !== expectedSignature) {
|
|
79
|
+
return { valid: false, message: "Invalid license key" };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Check product match (allow "all" for bundle keys)
|
|
83
|
+
if (keyProduct !== product && keyProduct !== "all") {
|
|
84
|
+
return {
|
|
85
|
+
valid: false,
|
|
86
|
+
message: `This key is for "${keyProduct}", not "${product}"`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Check expiry
|
|
91
|
+
const expiryDate = new Date(expiry);
|
|
92
|
+
if (isNaN(expiryDate.getTime()) || expiryDate < new Date()) {
|
|
93
|
+
return { valid: false, message: "License key has expired" };
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return { valid: true };
|
|
97
|
+
} catch {
|
|
98
|
+
return { valid: false, message: "Invalid license key" };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Check if the current call is allowed.
|
|
104
|
+
* Call this at the start of every tool handler.
|
|
105
|
+
*
|
|
106
|
+
* - If LICENSE_KEY env var is set and valid: always allowed
|
|
107
|
+
* - If no key: allowed for FREE_TRIAL_LIMIT calls, then blocked
|
|
108
|
+
*/
|
|
109
|
+
export function checkLicense(product: string): LicenseResult {
|
|
110
|
+
const key = process.env.LICENSE_KEY ?? process.env.AIVP_LICENSE_KEY;
|
|
111
|
+
|
|
112
|
+
if (key) {
|
|
113
|
+
const result = validateLicenseKey(key, product);
|
|
114
|
+
if (result.valid) {
|
|
115
|
+
return { valid: true };
|
|
116
|
+
}
|
|
117
|
+
// Invalid key — still return the error, don't fall through to trial
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// No key — free trial mode
|
|
122
|
+
const count = (callCounts.get(product) ?? 0) + 1;
|
|
123
|
+
callCounts.set(product, count);
|
|
124
|
+
|
|
125
|
+
if (count <= FREE_TRIAL_LIMIT) {
|
|
126
|
+
return {
|
|
127
|
+
valid: true,
|
|
128
|
+
trial: true,
|
|
129
|
+
remaining: FREE_TRIAL_LIMIT - count,
|
|
130
|
+
message:
|
|
131
|
+
count === FREE_TRIAL_LIMIT
|
|
132
|
+
? `⚠️ Free trial ended. Purchase a license at https://aivp-mcp.vercel.app`
|
|
133
|
+
: `Free trial: ${FREE_TRIAL_LIMIT - count} calls remaining. Get unlimited access at https://aivp-mcp.vercel.app`,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
valid: false,
|
|
139
|
+
trial: true,
|
|
140
|
+
remaining: 0,
|
|
141
|
+
message: `🔒 Free trial limit reached (${FREE_TRIAL_LIMIT} calls). Purchase a license at https://aivp-mcp.vercel.app to continue using this tool.`,
|
|
142
|
+
};
|
|
143
|
+
}
|
package/src/tools/compare.ts
CHANGED
|
@@ -213,7 +213,7 @@ export function handleCompareModels(
|
|
|
213
213
|
entries.sort((a, b) => a.costPerReq - b.costPerReq);
|
|
214
214
|
const cheapest = entries[0];
|
|
215
215
|
const mostExpensive = entries[entries.length - 1];
|
|
216
|
-
const ratio = mostExpensive.costPerReq / cheapest.costPerReq;
|
|
216
|
+
const ratio = cheapest.costPerReq > 0 ? mostExpensive.costPerReq / cheapest.costPerReq : 0;
|
|
217
217
|
|
|
218
218
|
lines.push("## Cost Spread");
|
|
219
219
|
lines.push(
|
package/src/tools/pricing.ts
CHANGED
|
@@ -78,31 +78,68 @@ export const MODEL_PRICING: Record<ModelId, ModelPricing> = {
|
|
|
78
78
|
// ---------------------------------------------------------------------------
|
|
79
79
|
|
|
80
80
|
const MODEL_ALIASES: Record<string, ModelId> = {
|
|
81
|
-
// Claude
|
|
81
|
+
// Claude Opus
|
|
82
82
|
"claude-opus": "claude-opus",
|
|
83
83
|
"claude-4-opus": "claude-opus",
|
|
84
|
+
"claude-opus-4": "claude-opus",
|
|
85
|
+
"claude-opus-4-0": "claude-opus",
|
|
84
86
|
opus: "claude-opus",
|
|
87
|
+
// Claude Sonnet
|
|
85
88
|
"claude-sonnet": "claude-sonnet",
|
|
86
89
|
"claude-4-sonnet": "claude-sonnet",
|
|
90
|
+
"claude-sonnet-4": "claude-sonnet",
|
|
91
|
+
"claude-sonnet-4-5": "claude-sonnet",
|
|
92
|
+
"claude-sonnet-4.5": "claude-sonnet",
|
|
87
93
|
"claude-3.5-sonnet": "claude-sonnet",
|
|
94
|
+
"claude-3-5-sonnet": "claude-sonnet",
|
|
95
|
+
"claude-sonnet-3-5": "claude-sonnet",
|
|
96
|
+
"claude-sonnet-3.5": "claude-sonnet",
|
|
88
97
|
sonnet: "claude-sonnet",
|
|
98
|
+
// Claude Haiku
|
|
89
99
|
"claude-haiku": "claude-haiku",
|
|
90
100
|
"claude-3.5-haiku": "claude-haiku",
|
|
101
|
+
"claude-3-5-haiku": "claude-haiku",
|
|
102
|
+
"claude-haiku-3-5": "claude-haiku",
|
|
103
|
+
"claude-haiku-3.5": "claude-haiku",
|
|
91
104
|
haiku: "claude-haiku",
|
|
92
105
|
// OpenAI
|
|
93
106
|
"gpt-4o": "gpt-4o",
|
|
94
107
|
gpt4o: "gpt-4o",
|
|
95
108
|
"gpt-4o-mini": "gpt-4o-mini",
|
|
96
109
|
gpt4omini: "gpt-4o-mini",
|
|
110
|
+
"gpt-4o-mini-2024-07-18": "gpt-4o-mini",
|
|
111
|
+
"gpt-4o-2024-08-06": "gpt-4o",
|
|
97
112
|
// Google
|
|
98
113
|
"gemini-2.0-flash": "gemini-2.0-flash",
|
|
99
114
|
"gemini-flash": "gemini-2.0-flash",
|
|
115
|
+
"gemini-2.0-flash-001": "gemini-2.0-flash",
|
|
100
116
|
gemini: "gemini-2.0-flash",
|
|
101
117
|
};
|
|
102
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Fuzzy-match patterns: if exact alias lookup fails, try substring matching.
|
|
121
|
+
* Order matters -- more specific patterns come first.
|
|
122
|
+
*/
|
|
123
|
+
const FUZZY_PATTERNS: Array<{ pattern: RegExp; modelId: ModelId }> = [
|
|
124
|
+
{ pattern: /opus/i, modelId: "claude-opus" },
|
|
125
|
+
{ pattern: /sonnet/i, modelId: "claude-sonnet" },
|
|
126
|
+
{ pattern: /haiku/i, modelId: "claude-haiku" },
|
|
127
|
+
{ pattern: /gpt-?4o-?mini/i, modelId: "gpt-4o-mini" },
|
|
128
|
+
{ pattern: /gpt-?4o/i, modelId: "gpt-4o" },
|
|
129
|
+
{ pattern: /gemini/i, modelId: "gemini-2.0-flash" },
|
|
130
|
+
];
|
|
131
|
+
|
|
103
132
|
export function resolveModelId(raw: string): ModelId | undefined {
|
|
104
133
|
const key = raw.toLowerCase().trim();
|
|
105
|
-
|
|
134
|
+
// 1. Exact alias match
|
|
135
|
+
if (MODEL_ALIASES[key]) return MODEL_ALIASES[key];
|
|
136
|
+
// 2. Direct pricing key match
|
|
137
|
+
if (MODEL_PRICING[key as ModelId]) return key as ModelId;
|
|
138
|
+
// 3. Fuzzy pattern match
|
|
139
|
+
for (const { pattern, modelId } of FUZZY_PATTERNS) {
|
|
140
|
+
if (pattern.test(key)) return modelId;
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
106
143
|
}
|
|
107
144
|
|
|
108
145
|
// ---------------------------------------------------------------------------
|
|
@@ -116,15 +153,17 @@ export function computeCost(
|
|
|
116
153
|
cachedTokens: number = 0,
|
|
117
154
|
): { inputCost: number; outputCost: number; cacheSavings: number; totalCost: number } {
|
|
118
155
|
const p = MODEL_PRICING[modelId];
|
|
119
|
-
|
|
156
|
+
// Guard against cachedTokens exceeding inputTokens (invalid data)
|
|
157
|
+
const safeCached = Math.min(cachedTokens, inputTokens);
|
|
158
|
+
const uncachedInput = inputTokens - safeCached;
|
|
120
159
|
const fullInputCost = (uncachedInput / 1_000_000) * p.inputPerMillion;
|
|
121
160
|
const cachedCost = p.cachedInputPerMillion
|
|
122
|
-
? (
|
|
123
|
-
: (
|
|
161
|
+
? (safeCached / 1_000_000) * p.cachedInputPerMillion
|
|
162
|
+
: (safeCached / 1_000_000) * p.inputPerMillion;
|
|
124
163
|
const inputCost = fullInputCost + cachedCost;
|
|
125
164
|
const outputCost = (outputTokens / 1_000_000) * p.outputPerMillion;
|
|
126
165
|
const cacheSavings = p.cachedInputPerMillion
|
|
127
|
-
? (
|
|
166
|
+
? (safeCached / 1_000_000) * (p.inputPerMillion - p.cachedInputPerMillion)
|
|
128
167
|
: 0;
|
|
129
168
|
return { inputCost, outputCost, cacheSavings, totalCost: inputCost + outputCost };
|
|
130
169
|
}
|
package/src/tools/savings.ts
CHANGED
|
@@ -91,9 +91,9 @@ function computeSavings(records: UsageRecord[], multiplier: number): SavingsEsti
|
|
|
91
91
|
const p = MODEL_PRICING[mid];
|
|
92
92
|
if (p.qualityTier === 1) {
|
|
93
93
|
// 40% of Opus calls could go to Sonnet
|
|
94
|
-
const
|
|
95
|
-
const routableInputTokens =
|
|
96
|
-
const routableOutputTokens =
|
|
94
|
+
const routableFraction = 0.4;
|
|
95
|
+
const routableInputTokens = data.input * routableFraction;
|
|
96
|
+
const routableOutputTokens = data.output * routableFraction;
|
|
97
97
|
|
|
98
98
|
const currentCost = computeCost(mid, routableInputTokens, routableOutputTokens).totalCost;
|
|
99
99
|
const cheaperCost = computeCost("claude-sonnet", routableInputTokens, routableOutputTokens).totalCost;
|
|
@@ -101,9 +101,9 @@ function computeSavings(records: UsageRecord[], multiplier: number): SavingsEsti
|
|
|
101
101
|
routingCurrentCost += currentCost;
|
|
102
102
|
} else if (p.qualityTier === 2) {
|
|
103
103
|
// 25% of Sonnet/4o calls could go to Haiku/mini
|
|
104
|
-
const
|
|
105
|
-
const routableInputTokens =
|
|
106
|
-
const routableOutputTokens =
|
|
104
|
+
const routableFraction = 0.25;
|
|
105
|
+
const routableInputTokens = data.input * routableFraction;
|
|
106
|
+
const routableOutputTokens = data.output * routableFraction;
|
|
107
107
|
|
|
108
108
|
const currentCost = computeCost(mid, routableInputTokens, routableOutputTokens).totalCost;
|
|
109
109
|
const cheaperId: ModelId = mid === "gpt-4o" ? "gpt-4o-mini" : "claude-haiku";
|