zerogpu-cli 3.1.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,6 +25,7 @@ The official command-line interface for [ZeroGPU](https://zerogpu.ai) — run fa
25
25
  - [Classification](#classification)
26
26
  - [`classify_iab`](#classify_iab)
27
27
  - [`classify_iab_enriched`](#classify_iab_enriched)
28
+ - [`classify_domain`](#classify_domain)
28
29
  - [`classify_structured`](#classify_structured)
29
30
  - [`classify_zero_shot`](#classify_zero_shot)
30
31
  - [Extraction](#extraction)
@@ -122,16 +123,33 @@ zerogpu status
122
123
 
123
124
  #### `chat`
124
125
 
125
- Chat with the **LFM2.5-1.2B-Instruct** model.
126
+ Chat with a ZeroGPU text-generation model. Defaults to **LFM2.5-1.2B-Instruct**; use `--model` to reach for a larger reasoning model.
126
127
 
127
128
  ```bash
128
129
  zerogpu chat "Explain edge inference in one sentence."
129
130
  zerogpu chat "Translate to French: Good morning." -i "You are a precise translator."
131
+
132
+ # Frontier-grade reasoning, with the trace printed alongside the answer
133
+ zerogpu chat "Why does my API keep getting rate-limited?" -m gpt-oss-120b -r
134
+
135
+ # Multilingual reasoning
136
+ zerogpu chat "Explique la mise en cache en une phrase." -m qwen3-30b-a3b-fp8
130
137
  ```
131
138
 
132
139
  | Option | Description |
133
140
  |---|---|
134
141
  | `-i, --instructions <text>` | System instructions that steer the assistant's behavior. |
142
+ | `-m, --model <model>` | Model to use (default `LFM2.5-1.2B-Instruct`). |
143
+ | `-r, --reasoning` | Also print the reasoning trace, for models that return one. |
144
+
145
+ | Model | Notes |
146
+ |---|---|
147
+ | `LFM2.5-1.2B-Instruct` | Default. Fast edge chat. |
148
+ | `LFM2.5-1.2B-Thinking` | Compact reasoning model. |
149
+ | `gpt-oss-120b` | 117B MoE, 131K context, reasoning + function calling. |
150
+ | `qwen3-30b-a3b-fp8` | 30.5B MoE, 100+ languages, reasoning + function calling. |
151
+
152
+ `qwen3-30b-a3b-fp8` is served by the Chat Completions API rather than the Responses API; the CLI routes it automatically.
135
153
 
136
154
  #### `chat_thinking`
137
155
 
@@ -177,6 +195,16 @@ Same as `classify_iab` but returns enriched output: audience, topics, keywords,
177
195
  zerogpu classify_iab_enriched "Best running shoes for marathon training."
178
196
  ```
179
197
 
198
+ #### `classify_domain`
199
+
200
+ Classify a **domain name** against the IAB taxonomy using the ZeroGPU domain edge model. Takes only the hostname — no page fetch or body text — so it suits bidstream enrichment and inventory-level targeting.
201
+
202
+ ```bash
203
+ zerogpu classify_domain nytimes.com
204
+ ```
205
+
206
+ Returns scored content categories plus topics, keywords, and inferred user intent for the domain. When you have the page text and need per-URL precision, use `classify_iab` instead.
207
+
180
208
  #### `classify_structured`
181
209
 
182
210
  Classify text against a **structured schema** of categories and allowed labels using GLiNER2.
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkFpC,wBAAgB,YAAY,IAAI,OAAO,CAyBtC;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAIxC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmFpC,wBAAgB,YAAY,IAAI,OAAO,CA0BtC;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAIxC"}
package/dist/cli.js CHANGED
@@ -5,6 +5,7 @@ import { Command } from "commander";
5
5
  import updateNotifier from "update-notifier";
6
6
  import { registerChatCommand } from "./commands/chat.js";
7
7
  import { registerChatThinkingCommand } from "./commands/chatThinking.js";
8
+ import { registerClassifyDomainCommand } from "./commands/classifyDomain.js";
8
9
  import { registerClassifyIabCommand } from "./commands/classifyIab.js";
9
10
  import { registerClassifyIabEnrichedCommand } from "./commands/classifyIabEnriched.js";
10
11
  import { registerClassifyStructuredCommand } from "./commands/classifyStructured.js";
@@ -82,6 +83,7 @@ export function buildProgram() {
82
83
  registerStatusCommand(program);
83
84
  registerClassifyIabCommand(program);
84
85
  registerClassifyIabEnrichedCommand(program);
86
+ registerClassifyDomainCommand(program);
85
87
  registerClassifyStructuredCommand(program);
86
88
  registerClassifyZeroShotCommand(program);
87
89
  registerGenerateFollowupsCommand(program);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoE1D"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8H1D"}
@@ -1,27 +1,57 @@
1
1
  import { getApiKey } from "../lib/auth.js";
2
- import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
2
+ import { CHAT_COMPLETIONS_ENDPOINT, toResponsesUsage, } from "../lib/chatCompletions.js";
3
+ import { RESPONSES_ENDPOINT, extractOutputText, extractReasoningText, } from "../lib/responses.js";
3
4
  import { recordAndMaybeNotify } from "../lib/savings.js";
4
- const MODEL = "LFM2.5-1.2B-Instruct";
5
+ const DEFAULT_MODEL = "LFM2.5-1.2B-Instruct";
6
+ // Text-generation models `--model` accepts, and the API each one speaks.
7
+ // qwen3-30b-a3b-fp8 is Chat Completions only — it has no Responses endpoint.
8
+ // Source: https://docs.zerogpu.ai/docs/text-generation
9
+ const CHAT_MODELS = {
10
+ "LFM2.5-1.2B-Instruct": "responses",
11
+ "LFM2.5-1.2B-Thinking": "responses",
12
+ "gpt-oss-120b": "responses",
13
+ "qwen3-30b-a3b-fp8": "chat-completions",
14
+ };
15
+ // Model ids are case-sensitive to the API but not to the person typing them.
16
+ function resolveModel(name) {
17
+ return Object.keys(CHAT_MODELS).find((id) => id.toLowerCase() === name.toLowerCase());
18
+ }
5
19
  export function registerChatCommand(program) {
6
20
  program
7
21
  .command("chat <text>")
8
- .description("Chat with the LFM2.5 instruct model.")
22
+ .description(`Chat with a ZeroGPU text-generation model (default ${DEFAULT_MODEL}).`)
9
23
  .option("-i, --instructions <instructions>", "System instructions that steer the assistant's behavior.")
24
+ .option("-m, --model <model>", `Model to use: ${Object.keys(CHAT_MODELS).join(", ")}.`, DEFAULT_MODEL)
25
+ .option("-r, --reasoning", "Also print the reasoning trace, for models that return one.")
10
26
  .action(async (text, opts) => {
27
+ const model = resolveModel(opts.model);
28
+ if (!model) {
29
+ console.error(`Unknown model '${opts.model}'. Available models: ${Object.keys(CHAT_MODELS).join(", ")}.`);
30
+ process.exit(1);
31
+ }
11
32
  const apiKey = getApiKey();
12
33
  if (!apiKey) {
13
34
  console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key.");
14
35
  process.exit(1);
15
36
  }
16
- const body = {
17
- model: MODEL,
18
- input: text,
19
- };
20
- if (opts.instructions)
37
+ const useChatCompletions = CHAT_MODELS[model] === "chat-completions";
38
+ const body = useChatCompletions
39
+ ? {
40
+ model,
41
+ messages: [
42
+ ...(opts.instructions
43
+ ? [{ role: "system", content: opts.instructions }]
44
+ : []),
45
+ { role: "user", content: text },
46
+ ],
47
+ }
48
+ : { model, input: text };
49
+ if (!useChatCompletions && opts.instructions) {
21
50
  body.instructions = opts.instructions;
51
+ }
22
52
  let response;
23
53
  try {
24
- response = await fetch(RESPONSES_ENDPOINT, {
54
+ response = await fetch(useChatCompletions ? CHAT_COMPLETIONS_ENDPOINT : RESPONSES_ENDPOINT, {
25
55
  method: "POST",
26
56
  headers: {
27
57
  "content-type": "application/json",
@@ -42,13 +72,31 @@ export function registerChatCommand(program) {
42
72
  console.error(errBody);
43
73
  process.exit(1);
44
74
  }
45
- const data = (await response.json());
46
- const content = data.output?.[0]?.content?.find((c) => c.type === "output_text")?.text ?? data.output?.[0]?.content?.[0]?.text;
75
+ const payload = await response.json();
76
+ let content;
77
+ let reasoning;
78
+ let usage;
79
+ if (useChatCompletions) {
80
+ const data = payload;
81
+ const message = data.choices?.[0]?.message;
82
+ content = message?.content;
83
+ reasoning = message?.reasoning;
84
+ usage = toResponsesUsage(data.usage);
85
+ }
86
+ else {
87
+ const data = payload;
88
+ content = extractOutputText(data);
89
+ reasoning = extractReasoningText(data);
90
+ usage = data.usage;
91
+ }
47
92
  if (!content) {
48
93
  console.error("Response did not contain any chat content.");
49
- console.error(JSON.stringify(data, null, 2));
94
+ console.error(JSON.stringify(payload, null, 2));
50
95
  process.exit(1);
51
96
  }
97
+ if (opts.reasoning && reasoning) {
98
+ console.log(`Reasoning:\n${reasoning}\n`);
99
+ }
52
100
  try {
53
101
  const parsed = JSON.parse(content);
54
102
  console.log(JSON.stringify(parsed, null, 2));
@@ -56,7 +104,7 @@ export function registerChatCommand(program) {
56
104
  catch {
57
105
  console.log(content);
58
106
  }
59
- recordAndMaybeNotify({ model: MODEL, usage: data.usage });
107
+ recordAndMaybeNotify({ model, usage });
60
108
  });
61
109
  }
62
110
  //# sourceMappingURL=chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerClassifyDomainCommand(program: Command): void;
3
+ //# sourceMappingURL=classifyDomain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifyDomain.d.ts","sourceRoot":"","sources":["../../src/commands/classifyDomain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4DpE"}
@@ -0,0 +1,59 @@
1
+ import { getApiKey } from "../lib/auth.js";
2
+ import { RESPONSES_ENDPOINT, extractOutputText, } from "../lib/responses.js";
3
+ import { recordAndMaybeNotify } from "../lib/savings.js";
4
+ const MODEL = "zlm-v1-iab-domain-classifier";
5
+ export function registerClassifyDomainCommand(program) {
6
+ program
7
+ .command("classify_domain <domain>")
8
+ .alias("classify-domain")
9
+ .description("Classify a domain name with the IAB domain edge model (content, topics, keywords, intent).")
10
+ .action(async (domain) => {
11
+ const apiKey = getApiKey();
12
+ if (!apiKey) {
13
+ console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key.");
14
+ process.exit(1);
15
+ }
16
+ let response;
17
+ try {
18
+ response = await fetch(RESPONSES_ENDPOINT, {
19
+ method: "POST",
20
+ headers: {
21
+ "content-type": "application/json",
22
+ "x-api-key": apiKey.apiKey,
23
+ },
24
+ body: JSON.stringify({
25
+ model: MODEL,
26
+ input: domain,
27
+ }),
28
+ });
29
+ }
30
+ catch (err) {
31
+ const message = err instanceof Error ? err.message : String(err);
32
+ console.error(`Request failed: ${message}`);
33
+ process.exit(1);
34
+ }
35
+ if (!response.ok) {
36
+ const body = await response.text();
37
+ console.error(`Request failed with status ${response.status}.`);
38
+ if (body)
39
+ console.error(body);
40
+ process.exit(1);
41
+ }
42
+ const data = (await response.json());
43
+ const content = extractOutputText(data);
44
+ if (!content) {
45
+ console.error("Response did not contain any classification content.");
46
+ console.error(JSON.stringify(data, null, 2));
47
+ process.exit(1);
48
+ }
49
+ try {
50
+ const parsed = JSON.parse(content);
51
+ console.log(JSON.stringify(parsed, null, 2));
52
+ }
53
+ catch {
54
+ console.log(content);
55
+ }
56
+ recordAndMaybeNotify({ model: MODEL, usage: data.usage });
57
+ });
58
+ }
59
+ //# sourceMappingURL=classifyDomain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifyDomain.js","sourceRoot":"","sources":["../../src/commands/classifyDomain.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,KAAK,GAAG,8BAA8B,CAAC;AAE7C,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,OAAO;SACJ,OAAO,CAAC,0BAA0B,CAAC;SACnC,KAAK,CAAC,iBAAiB,CAAC;SACxB,WAAW,CACV,4FAA4F,CAC7F;SACA,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CACX,0EAA0E,CAC3E,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,EAAE;gBACzC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,WAAW,EAAE,MAAM,CAAC,MAAM;iBAC3B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,MAAM;iBACd,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,IAAI,IAAI;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QAC7D,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { getApiKey } from "../lib/auth.js";
2
2
  import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
3
3
  import { recordAndMaybeNotify } from "../lib/savings.js";
4
- const MODEL = "zlm-v1-iab-classify-edge-enriched";
4
+ const MODEL = "zlm-v2-iab-classify-edge-enriched";
5
5
  export function registerClassifyIabEnrichedCommand(program) {
6
6
  program
7
7
  .command("classify_iab_enriched <text>")
@@ -3,7 +3,7 @@ export function registerCostSavingsCommand(program) {
3
3
  program
4
4
  .command("cost_savings")
5
5
  .alias("cost-savings")
6
- .description("Show how much you've saved by routing tasks to ZeroGPU instead of Claude.")
6
+ .description("Show how much you've saved by routing tasks to ZeroGPU instead of your frontier model.")
7
7
  .option("--json", "Output the raw savings data as JSON.")
8
8
  .option("--reset", "Clear all recorded savings and start over.")
9
9
  .action((opts) => {
@@ -1 +1 @@
1
- {"version":3,"file":"costSavings.js","sourceRoot":"","sources":["../../src/commands/costSavings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5E,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,KAAK,CAAC,cAAc,CAAC;SACrB,WAAW,CACV,2EAA2E,CAC5E;SACA,MAAM,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SACxD,MAAM,CAAC,SAAS,EAAE,4CAA4C,CAAC;SAC/D,MAAM,CAAC,CAAC,IAAyC,EAAE,EAAE;QACpD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"costSavings.js","sourceRoot":"","sources":["../../src/commands/costSavings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5E,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,KAAK,CAAC,cAAc,CAAC;SACrB,WAAW,CACV,wFAAwF,CACzF;SACA,MAAM,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SACxD,MAAM,CAAC,SAAS,EAAE,4CAA4C,CAAC;SAC/D,MAAM,CAAC,CAAC,IAAyC,EAAE,EAAE;QACpD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ResponsesUsage } from "./responses.js";
2
+ export declare const CHAT_COMPLETIONS_ENDPOINT = "https://api.zerogpu.ai/v1/chat/completions";
3
+ export interface ChatCompletionsUsage {
4
+ prompt_tokens?: number;
5
+ completion_tokens?: number;
6
+ total_tokens?: number;
7
+ }
8
+ export interface ChatCompletionsApiResponse {
9
+ model?: string;
10
+ usage?: ChatCompletionsUsage;
11
+ choices?: Array<{
12
+ index?: number;
13
+ finish_reason?: string;
14
+ message?: {
15
+ role?: string;
16
+ content?: string;
17
+ reasoning?: string;
18
+ };
19
+ }>;
20
+ }
21
+ export declare function toResponsesUsage(usage: ChatCompletionsUsage | undefined): ResponsesUsage | undefined;
22
+ //# sourceMappingURL=chatCompletions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatCompletions.d.ts","sourceRoot":"","sources":["../../src/lib/chatCompletions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,yBAAyB,+CACQ,CAAC;AAE/C,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC,CAAC;CACJ;AAGD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,oBAAoB,GAAG,SAAS,GACtC,cAAc,GAAG,SAAS,CAO5B"}
@@ -0,0 +1,12 @@
1
+ export const CHAT_COMPLETIONS_ENDPOINT = "https://api.zerogpu.ai/v1/chat/completions";
2
+ // Savings bookkeeping speaks the Responses API's token names.
3
+ export function toResponsesUsage(usage) {
4
+ if (!usage)
5
+ return undefined;
6
+ return {
7
+ input_tokens: usage.prompt_tokens,
8
+ output_tokens: usage.completion_tokens,
9
+ total_tokens: usage.total_tokens,
10
+ };
11
+ }
12
+ //# sourceMappingURL=chatCompletions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatCompletions.js","sourceRoot":"","sources":["../../src/lib/chatCompletions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GACpC,4CAA4C,CAAC;AAuB/C,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAC9B,KAAuC;IAEvC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,aAAa;QACjC,aAAa,EAAE,KAAK,CAAC,iBAAiB;QACtC,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;AACJ,CAAC"}
@@ -10,14 +10,19 @@ export interface ResponsesUsage {
10
10
  reasoning_tokens?: number;
11
11
  };
12
12
  }
13
+ export interface ResponsesContentPart {
14
+ type?: string;
15
+ text?: string;
16
+ }
17
+ export interface ResponsesOutputItem {
18
+ type?: string;
19
+ content?: ResponsesContentPart[];
20
+ }
13
21
  export interface ResponsesApiResponse {
14
22
  model?: string;
15
23
  usage?: ResponsesUsage;
16
- output?: Array<{
17
- content?: Array<{
18
- type?: string;
19
- text?: string;
20
- }>;
21
- }>;
24
+ output?: ResponsesOutputItem[];
22
25
  }
26
+ export declare function extractOutputText(data: ResponsesApiResponse): string | undefined;
27
+ export declare function extractReasoningText(data: ResponsesApiResponse): string | undefined;
23
28
  //# sourceMappingURL=responses.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/lib/responses.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,wCAAwC,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,qBAAqB,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ"}
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/lib/responses.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,wCAAwC,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,qBAAqB,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAID,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,oBAAoB,GACzB,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,oBAAoB,GACzB,MAAM,GAAG,SAAS,CAIpB"}
@@ -1,2 +1,14 @@
1
1
  export const RESPONSES_ENDPOINT = "https://api.zerogpu.ai/v1/responses";
2
+ // Reasoning models (gpt-oss-120b) emit a `reasoning` item ahead of the
3
+ // assistant message, so the answer is not always output[0].
4
+ export function extractOutputText(data) {
5
+ const items = data.output ?? [];
6
+ const message = items.find((item) => item.type === "message") ?? items[0];
7
+ const parts = message?.content ?? [];
8
+ return parts.find((p) => p.type === "output_text")?.text ?? parts[0]?.text;
9
+ }
10
+ export function extractReasoningText(data) {
11
+ const parts = data.output?.find((item) => item.type === "reasoning")?.content ?? [];
12
+ return parts.find((p) => p.type === "reasoning_text")?.text ?? parts[0]?.text;
13
+ }
2
14
  //# sourceMappingURL=responses.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/lib/responses.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,qCAAqC,CAAC"}
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/lib/responses.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AA0BxE,uEAAuE;AACvE,4DAA4D;AAC5D,MAAM,UAAU,iBAAiB,CAC/B,IAA0B;IAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAA0B;IAE1B,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;IACxE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAChF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"savings.d.ts","sourceRoot":"","sources":["../../src/lib/savings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyCrD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,MAAM,EAAE;QAAE,kBAAkB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAeD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAOD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAYxC;AAED,wBAAgB,WAAW,IAAI,YAAY,CAW1C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAGtD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAWD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,MAAM,GAAE,MAAM,MAAoB,GACjC,OAAO,CAQT;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,CAAC;IAEvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAgD7D;AAkCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQxD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAwDxD"}
1
+ {"version":3,"file":"savings.d.ts","sourceRoot":"","sources":["../../src/lib/savings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA6CrD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,MAAM,EAAE;QAAE,kBAAkB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAeD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAOD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAYxC;AAED,wBAAgB,WAAW,IAAI,YAAY,CAW1C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAGtD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAWD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,MAAM,GAAE,MAAM,MAAoB,GACjC,OAAO,CAQT;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,CAAC;IAEvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAgD7D;AAoCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQxD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAyCxD"}
@@ -15,18 +15,22 @@ const DEFAULT_BASELINE = "claude-opus-4-8";
15
15
  // Actual ZeroGPU pricing per 1M tokens (in / out), per model.
16
16
  // Source: https://docs.zerogpu.ai model catalog.
17
17
  const ZGPU_PRICING = {
18
+ "gpt-oss-120b": { in: 0.03, out: 0.1 },
19
+ "qwen3-30b-a3b-fp8": { in: 0.05, out: 0.3 },
18
20
  "llama-3.1-8b-instruct-fast": { in: 0.02, out: 0.05 },
19
- "zlm-v1-iab-classify-edge": { in: 0.05, out: 0.4 },
20
- "zlm-v1-iab-classify-edge-enriched": { in: 0.05, out: 0.4 },
21
- "zlm-v1-followup-questions-edge": { in: 0.05, out: 0.4 },
22
- "gliner-multi-pii-v1": { in: 0.05, out: 0.4 },
23
- "gliner2-base-v1": { in: 0.05, out: 0.4 },
24
- "deberta-v3-small": { in: 0.04, out: 0.1 },
25
- "LFM2.5-1.2B-Thinking": { in: 0.02, out: 0.1 },
26
- "LFM2.5-1.2B-Instruct": { in: 0.02, out: 0.1 },
21
+ "zlm-v1-iab-classify-edge": { in: 0.02, out: 0.05 },
22
+ "zlm-v2-iab-classify-edge-enriched": { in: 0.02, out: 0.05 },
23
+ "zlm-v1-iab-domain-classifier": { in: 0.02, out: 0.05 },
24
+ "zlm-v1-followup-questions-edge": { in: 0.02, out: 0.05 },
25
+ "gliner-multi-pii-v1": { in: 0.02, out: 0.05 },
26
+ "gliner2-base-v1": { in: 0.02, out: 0.05 },
27
+ "deberta-v3-small": { in: 0.02, out: 0.05 },
28
+ "LFM2.5-1.2B-Thinking": { in: 0.02, out: 0.05 },
29
+ "LFM2.5-1.2B-Instruct": { in: 0.02, out: 0.05 },
27
30
  };
28
- // Conservative fallback for any model id not in the table above.
29
- const ZGPU_FALLBACK = { in: 0.05, out: 0.4 };
31
+ // Conservative fallback for any model id not in the table above: the priciest
32
+ // published rate, so an unlisted model never overstates savings.
33
+ const ZGPU_FALLBACK = { in: 0.05, out: 0.3 };
30
34
  // Cadence: aim to show the savings note roughly once every 2–3 routed calls,
31
35
  // never twice in a row, and guaranteed within a bounded window.
32
36
  const MIN_GAP = 2; // never show within this many calls of the last one
@@ -161,10 +165,12 @@ const MONTHS = [
161
165
  // Call-to-action appended to every savings message.
162
166
  const CTA_NOTICE = " → https://platform.zerogpu.ai for your detailed savings report · https://zerogpu.ai to learn more";
163
167
  const CTA_REPORT = "→ See your detailed savings report at https://platform.zerogpu.ai\n→ Learn more at https://zerogpu.ai";
168
+ // Deliberately coarse: the dollar figure is an estimate (it assumes a baseline
169
+ // model), so we round to whole dollars and never imply cent-level precision.
164
170
  function fmtUsd(n) {
165
- if (n >= 0.01)
166
- return `~$${n.toFixed(2)}`;
167
- return `~$${n.toFixed(4)}`;
171
+ if (n >= 1)
172
+ return `≈ $${Math.round(n)}`;
173
+ return "under $1";
168
174
  }
169
175
  function fmtTokensShort(n) {
170
176
  if (n >= 1_000_000)
@@ -184,7 +190,7 @@ function fmtDate(iso, withYear) {
184
190
  }
185
191
  export function formatNotice(state) {
186
192
  return (`💰 ZeroGPU savings so far: ${fmtUsd(state.totalSavingsUsd)} ` +
187
- `(≈ ${fmtTokensShort(state.totalTokens)} Claude tokens offloaded across ` +
193
+ `(≈ ${fmtTokensShort(state.totalTokens)} frontier-model tokens offloaded across ` +
188
194
  `${state.totalRequests} routed call${state.totalRequests === 1 ? "" : "s"} ` +
189
195
  `since ${fmtDate(state.firstRecordedAt, false)})\n` +
190
196
  CTA_NOTICE);
@@ -203,25 +209,15 @@ export function formatReport(state) {
203
209
  lines.push(CTA_REPORT);
204
210
  return lines.join("\n");
205
211
  }
206
- const avg = state.totalSavingsUsd / state.totalRequests;
207
- lines.push(`Saved so far: ${fmtUsd(state.totalSavingsUsd)}`);
208
- lines.push(`Tokens offloaded: ≈ ${state.totalTokens.toLocaleString("en-US")} Claude tokens`);
212
+ lines.push(`Saved so far: ${fmtUsd(state.totalSavingsUsd)} (vs baseline ${baseline})`);
213
+ lines.push(`Tokens offloaded: ${state.totalTokens.toLocaleString("en-US")} frontier-model tokens`);
209
214
  lines.push(`Routed calls: ${state.totalRequests}`);
210
- lines.push(`Avg per call: ${fmtUsd(avg)}`);
211
215
  lines.push(`Since: ${fmtDate(state.firstRecordedAt, true)}`);
212
- const models = Object.entries(state.byModel).sort((a, b) => b[1].savingsUsd - a[1].savingsUsd);
213
- if (models.length > 0) {
214
- lines.push("");
215
- lines.push("By model:");
216
- for (const [name, m] of models) {
217
- lines.push(` ${name} — ${m.requests} call${m.requests === 1 ? "" : "s"}, ` +
218
- `${fmtUsd(m.savingsUsd)}, ${fmtTokensShort(m.tokens)} tok`);
219
- }
220
- }
221
216
  lines.push("");
222
- lines.push("Token counts and ZeroGPU costs are actual. Dollar savings estimate the Claude");
223
- lines.push(`spend avoided: what these exact tokens would have cost on ${baseline}, minus the`);
224
- lines.push("real ZeroGPU cost. Set ZEROGPU_SAVINGS_MODEL to compare against another Claude model.");
217
+ lines.push("Token counts are actual (from the API). The dollar figure is a rounded");
218
+ lines.push(`estimate of the frontier-model spend avoided what these exact tokens would`);
219
+ lines.push(`have cost on ${baseline}, minus the real ZeroGPU cost. Set ZEROGPU_SAVINGS_MODEL`);
220
+ lines.push("to compare against another baseline model.");
225
221
  lines.push("");
226
222
  lines.push(CTA_REPORT);
227
223
  return lines.join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"savings.js","sourceRoot":"","sources":["../../src/lib/savings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"savings.js","sourceRoot":"","sources":["../../src/lib/savings.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zerogpu-cli",
3
- "version": "3.1.0",
3
+ "version": "3.3.0",
4
4
  "description": "Command-line interface for ZeroGPU.",
5
5
  "type": "module",
6
6
  "bin": {