zerogpu-cli 1.0.0 → 2.0.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.
Files changed (56) hide show
  1. package/README.md +304 -5
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +22 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/chat.d.ts +3 -0
  6. package/dist/commands/chat.d.ts.map +1 -0
  7. package/dist/commands/chat.js +62 -0
  8. package/dist/commands/chat.js.map +1 -0
  9. package/dist/commands/chatThinking.d.ts +3 -0
  10. package/dist/commands/chatThinking.d.ts.map +1 -0
  11. package/dist/commands/chatThinking.js +59 -0
  12. package/dist/commands/chatThinking.js.map +1 -0
  13. package/dist/commands/classifyIab.d.ts +3 -0
  14. package/dist/commands/classifyIab.d.ts.map +1 -0
  15. package/dist/commands/classifyIab.js +58 -0
  16. package/dist/commands/classifyIab.js.map +1 -0
  17. package/dist/commands/classifyIabEnriched.d.ts.map +1 -1
  18. package/dist/commands/classifyIabEnriched.js +2 -2
  19. package/dist/commands/classifyIabEnriched.js.map +1 -1
  20. package/dist/commands/classifyStructured.d.ts +3 -0
  21. package/dist/commands/classifyStructured.d.ts.map +1 -0
  22. package/dist/commands/classifyStructured.js +73 -0
  23. package/dist/commands/classifyStructured.js.map +1 -0
  24. package/dist/commands/classifyZeroShot.d.ts +3 -0
  25. package/dist/commands/classifyZeroShot.d.ts.map +1 -0
  26. package/dist/commands/classifyZeroShot.js +75 -0
  27. package/dist/commands/classifyZeroShot.js.map +1 -0
  28. package/dist/commands/extractEntities.d.ts +3 -0
  29. package/dist/commands/extractEntities.d.ts.map +1 -0
  30. package/dist/commands/extractEntities.js +85 -0
  31. package/dist/commands/extractEntities.js.map +1 -0
  32. package/dist/commands/extractJson.d.ts +3 -0
  33. package/dist/commands/extractJson.d.ts.map +1 -0
  34. package/dist/commands/extractJson.js +72 -0
  35. package/dist/commands/extractJson.js.map +1 -0
  36. package/dist/commands/extractPii.d.ts +3 -0
  37. package/dist/commands/extractPii.d.ts.map +1 -0
  38. package/dist/commands/extractPii.js +77 -0
  39. package/dist/commands/extractPii.js.map +1 -0
  40. package/dist/commands/generateFollowups.d.ts +3 -0
  41. package/dist/commands/generateFollowups.d.ts.map +1 -0
  42. package/dist/commands/generateFollowups.js +58 -0
  43. package/dist/commands/generateFollowups.js.map +1 -0
  44. package/dist/commands/redactPii.d.ts +3 -0
  45. package/dist/commands/redactPii.d.ts.map +1 -0
  46. package/dist/commands/redactPii.js +62 -0
  47. package/dist/commands/redactPii.js.map +1 -0
  48. package/dist/commands/summarize.d.ts +3 -0
  49. package/dist/commands/summarize.d.ts.map +1 -0
  50. package/dist/commands/summarize.js +58 -0
  51. package/dist/commands/summarize.js.map +1 -0
  52. package/dist/lib/responses.d.ts +10 -0
  53. package/dist/lib/responses.d.ts.map +1 -0
  54. package/dist/lib/responses.js +2 -0
  55. package/dist/lib/responses.js.map +1 -0
  56. package/package.json +1 -1
@@ -0,0 +1,73 @@
1
+ import { getApiKey, getProjectId } from "../lib/auth.js";
2
+ import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
3
+ const MODEL = "gliner2-base-v1";
4
+ export function registerClassifyStructuredCommand(program) {
5
+ program
6
+ .command("classify_structured <text>")
7
+ .description("Classify text against a structured schema of categories and labels.")
8
+ .requiredOption("-s, --schema <json>", 'JSON object mapping category name to allowed labels, e.g. \'{"sentiment":["positive","negative","neutral"]}\'')
9
+ .action(async (text, opts) => {
10
+ const apiKey = getApiKey();
11
+ const projectId = getProjectId();
12
+ if (!apiKey || !projectId) {
13
+ console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key and project ID.");
14
+ process.exit(1);
15
+ }
16
+ let schema;
17
+ try {
18
+ schema = JSON.parse(opts.schema);
19
+ }
20
+ catch (err) {
21
+ const message = err instanceof Error ? err.message : String(err);
22
+ console.error(`Invalid --schema JSON: ${message}`);
23
+ process.exit(1);
24
+ }
25
+ let response;
26
+ try {
27
+ response = await fetch(RESPONSES_ENDPOINT, {
28
+ method: "POST",
29
+ headers: {
30
+ "content-type": "application/json",
31
+ "x-api-key": apiKey.apiKey,
32
+ "x-project-id": projectId.projectId,
33
+ },
34
+ body: JSON.stringify({
35
+ model: MODEL,
36
+ input: text,
37
+ metadata: {
38
+ schema,
39
+ usecase: "classification",
40
+ },
41
+ }),
42
+ });
43
+ }
44
+ catch (err) {
45
+ const message = err instanceof Error ? err.message : String(err);
46
+ console.error(`Request failed: ${message}`);
47
+ process.exit(1);
48
+ }
49
+ if (!response.ok) {
50
+ const body = await response.text();
51
+ console.error(`Request failed with status ${response.status}.`);
52
+ if (body)
53
+ console.error(body);
54
+ process.exit(1);
55
+ }
56
+ const data = (await response.json());
57
+ const content = data.output?.[0]?.content?.find((c) => c.type === "output_text")
58
+ ?.text ?? data.output?.[0]?.content?.[0]?.text;
59
+ if (!content) {
60
+ console.error("Response did not contain any classification content.");
61
+ console.error(JSON.stringify(data, null, 2));
62
+ process.exit(1);
63
+ }
64
+ try {
65
+ const parsed = JSON.parse(content);
66
+ console.log(JSON.stringify(parsed, null, 2));
67
+ }
68
+ catch {
69
+ console.log(content);
70
+ }
71
+ });
72
+ }
73
+ //# sourceMappingURL=classifyStructured.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifyStructured.js","sourceRoot":"","sources":["../../src/commands/classifyStructured.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerClassifyZeroShotCommand(program: Command): void;
3
+ //# sourceMappingURL=classifyZeroShot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifyZeroShot.d.ts","sourceRoot":"","sources":["../../src/commands/classifyZeroShot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4FtE"}
@@ -0,0 +1,75 @@
1
+ import { getApiKey, getProjectId } from "../lib/auth.js";
2
+ import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
3
+ const MODEL = "deberta-v3-small";
4
+ function collectLabel(value, previous) {
5
+ return previous.concat([value]);
6
+ }
7
+ export function registerClassifyZeroShotCommand(program) {
8
+ program
9
+ .command("classify_zero_shot <text>")
10
+ .description("Zero-shot classify text against a set of candidate labels using DeBERTa v3.")
11
+ .option("-l, --label <label>", "Candidate label (repeatable).", collectLabel, [])
12
+ .option("--labels <labels>", "Comma-separated list of candidate labels (alternative to repeating --label).")
13
+ .action(async (text, opts) => {
14
+ const apiKey = getApiKey();
15
+ const projectId = getProjectId();
16
+ if (!apiKey || !projectId) {
17
+ console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key and project ID.");
18
+ process.exit(1);
19
+ }
20
+ const labels = [
21
+ ...opts.label,
22
+ ...(opts.labels
23
+ ? opts.labels.split(",").map((l) => l.trim()).filter(Boolean)
24
+ : []),
25
+ ];
26
+ if (labels.length === 0) {
27
+ console.error("At least one label is required. Use --label <name> (repeatable) or --labels a,b,c.");
28
+ process.exit(1);
29
+ }
30
+ const instructions = `[${labels.join(", ")}]`;
31
+ let response;
32
+ try {
33
+ response = await fetch(RESPONSES_ENDPOINT, {
34
+ method: "POST",
35
+ headers: {
36
+ "content-type": "application/json",
37
+ "x-api-key": apiKey.apiKey,
38
+ "x-project-id": projectId.projectId,
39
+ },
40
+ body: JSON.stringify({
41
+ model: MODEL,
42
+ input: text,
43
+ instructions,
44
+ }),
45
+ });
46
+ }
47
+ catch (err) {
48
+ const message = err instanceof Error ? err.message : String(err);
49
+ console.error(`Request failed: ${message}`);
50
+ process.exit(1);
51
+ }
52
+ if (!response.ok) {
53
+ const body = await response.text();
54
+ console.error(`Request failed with status ${response.status}.`);
55
+ if (body)
56
+ console.error(body);
57
+ process.exit(1);
58
+ }
59
+ const data = (await response.json());
60
+ const content = data.output?.[0]?.content?.find((c) => c.type === "output_text")?.text ?? data.output?.[0]?.content?.[0]?.text;
61
+ if (!content) {
62
+ console.error("Response did not contain any classification content.");
63
+ console.error(JSON.stringify(data, null, 2));
64
+ process.exit(1);
65
+ }
66
+ try {
67
+ const parsed = JSON.parse(content);
68
+ console.log(JSON.stringify(parsed, null, 2));
69
+ }
70
+ catch {
71
+ console.log(content);
72
+ }
73
+ });
74
+ }
75
+ //# sourceMappingURL=classifyZeroShot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifyZeroShot.js","sourceRoot":"","sources":["../../src/commands/classifyZeroShot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,KAAK,GAAG,kBAAkB,CAAC;AAEjC,SAAS,YAAY,CAAC,KAAa,EAAE,QAAkB;IACrD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,OAAgB;IAC9D,OAAO;SACJ,OAAO,CAAC,2BAA2B,CAAC;SACpC,WAAW,CACV,6EAA6E,CAC9E;SACA,MAAM,CACL,qBAAqB,EACrB,+BAA+B,EAC/B,YAAY,EACZ,EAAE,CACH;SACA,MAAM,CACL,mBAAmB,EACnB,8EAA8E,CAC/E;SACA,MAAM,CACL,KAAK,EACH,IAAY,EACZ,IAA0C,EAC1C,EAAE;QACF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QAEjC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CACX,yFAAyF,CAC1F,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG;YACb,GAAG,IAAI,CAAC,KAAK;YACb,GAAG,CAAC,IAAI,CAAC,MAAM;gBACb,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC7D,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CACX,oFAAoF,CACrF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAE9C,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;oBAC1B,cAAc,EAAE,SAAS,CAAC,SAAS;iBACpC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,IAAI;oBACX,YAAY;iBACb,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,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAChC,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAChD,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;IACH,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerExtractEntitiesCommand(program: Command): void;
3
+ //# sourceMappingURL=extractEntities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractEntities.d.ts","sourceRoot":"","sources":["../../src/commands/extractEntities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyGrE"}
@@ -0,0 +1,85 @@
1
+ import { getApiKey, getProjectId } from "../lib/auth.js";
2
+ import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
3
+ const MODEL = "gliner2-base-v1";
4
+ const DEFAULT_THRESHOLD = 0.3;
5
+ function collectLabel(value, previous) {
6
+ return previous.concat([value]);
7
+ }
8
+ export function registerExtractEntitiesCommand(program) {
9
+ program
10
+ .command("extract_entities <text>")
11
+ .description("Extract named entities from text using the GLiNER2 model with custom labels.")
12
+ .option("-l, --label <label>", "Entity label to extract (repeatable).", collectLabel, [])
13
+ .option("--labels <labels>", "Comma-separated list of entity labels (alternative to repeating --label).")
14
+ .option("-t, --threshold <number>", "Confidence threshold between 0 and 1.", `${DEFAULT_THRESHOLD}`)
15
+ .action(async (text, opts) => {
16
+ const apiKey = getApiKey();
17
+ const projectId = getProjectId();
18
+ if (!apiKey || !projectId) {
19
+ console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key and project ID.");
20
+ process.exit(1);
21
+ }
22
+ const labels = [
23
+ ...opts.label,
24
+ ...(opts.labels
25
+ ? opts.labels.split(",").map((l) => l.trim()).filter(Boolean)
26
+ : []),
27
+ ];
28
+ if (labels.length === 0) {
29
+ console.error("At least one label is required. Use --label <name> (repeatable) or --labels a,b,c.");
30
+ process.exit(1);
31
+ }
32
+ const threshold = Number(opts.threshold);
33
+ if (!Number.isFinite(threshold) || threshold < 0 || threshold > 1) {
34
+ console.error("--threshold must be a number between 0 and 1.");
35
+ process.exit(1);
36
+ }
37
+ let response;
38
+ try {
39
+ response = await fetch(RESPONSES_ENDPOINT, {
40
+ method: "POST",
41
+ headers: {
42
+ "content-type": "application/json",
43
+ "x-api-key": apiKey.apiKey,
44
+ "x-project-id": projectId.projectId,
45
+ },
46
+ body: JSON.stringify({
47
+ model: MODEL,
48
+ input: text,
49
+ metadata: {
50
+ labels,
51
+ usecase: "ner",
52
+ threshold,
53
+ },
54
+ }),
55
+ });
56
+ }
57
+ catch (err) {
58
+ const message = err instanceof Error ? err.message : String(err);
59
+ console.error(`Request failed: ${message}`);
60
+ process.exit(1);
61
+ }
62
+ if (!response.ok) {
63
+ const body = await response.text();
64
+ console.error(`Request failed with status ${response.status}.`);
65
+ if (body)
66
+ console.error(body);
67
+ process.exit(1);
68
+ }
69
+ const data = (await response.json());
70
+ const content = data.output?.[0]?.content?.find((c) => c.type === "output_text")?.text ?? data.output?.[0]?.content?.[0]?.text;
71
+ if (!content) {
72
+ console.error("Response did not contain any entity content.");
73
+ console.error(JSON.stringify(data, null, 2));
74
+ process.exit(1);
75
+ }
76
+ try {
77
+ const parsed = JSON.parse(content);
78
+ console.log(JSON.stringify(parsed, null, 2));
79
+ }
80
+ catch {
81
+ console.log(content);
82
+ }
83
+ });
84
+ }
85
+ //# sourceMappingURL=extractEntities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractEntities.js","sourceRoot":"","sources":["../../src/commands/extractEntities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerExtractJsonCommand(program: Command): void;
3
+ //# sourceMappingURL=extractJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractJson.d.ts","sourceRoot":"","sources":["../../src/commands/extractJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8EjE"}
@@ -0,0 +1,72 @@
1
+ import { getApiKey, getProjectId } from "../lib/auth.js";
2
+ import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
3
+ const MODEL = "gliner2-base-v1";
4
+ export function registerExtractJsonCommand(program) {
5
+ program
6
+ .command("extract_json <text>")
7
+ .description("Extract structured JSON from text according to a provided schema.")
8
+ .requiredOption("-s, --schema <json>", 'Schema as a JSON string, e.g. \'{"contact":["name::str::Full name","email::str::Email address"]}\'')
9
+ .action(async (text, options) => {
10
+ const apiKey = getApiKey();
11
+ const projectId = getProjectId();
12
+ if (!apiKey || !projectId) {
13
+ console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key and project ID.");
14
+ process.exit(1);
15
+ }
16
+ let schema;
17
+ try {
18
+ schema = JSON.parse(options.schema);
19
+ }
20
+ catch (err) {
21
+ const message = err instanceof Error ? err.message : String(err);
22
+ console.error(`Invalid --schema JSON: ${message}`);
23
+ process.exit(1);
24
+ }
25
+ let response;
26
+ try {
27
+ response = await fetch(RESPONSES_ENDPOINT, {
28
+ method: "POST",
29
+ headers: {
30
+ "content-type": "application/json",
31
+ "x-api-key": apiKey.apiKey,
32
+ "x-project-id": projectId.projectId,
33
+ },
34
+ body: JSON.stringify({
35
+ model: MODEL,
36
+ input: text,
37
+ metadata: {
38
+ schema,
39
+ usecase: "json",
40
+ },
41
+ }),
42
+ });
43
+ }
44
+ catch (err) {
45
+ const message = err instanceof Error ? err.message : String(err);
46
+ console.error(`Request failed: ${message}`);
47
+ process.exit(1);
48
+ }
49
+ if (!response.ok) {
50
+ const body = await response.text();
51
+ console.error(`Request failed with status ${response.status}.`);
52
+ if (body)
53
+ console.error(body);
54
+ process.exit(1);
55
+ }
56
+ const data = (await response.json());
57
+ const content = data.output?.[0]?.content?.find((c) => c.type === "output_text")?.text ?? data.output?.[0]?.content?.[0]?.text;
58
+ if (!content) {
59
+ console.error("Response did not contain any extraction content.");
60
+ console.error(JSON.stringify(data, null, 2));
61
+ process.exit(1);
62
+ }
63
+ try {
64
+ const parsed = JSON.parse(content);
65
+ console.log(JSON.stringify(parsed, null, 2));
66
+ }
67
+ catch {
68
+ console.log(content);
69
+ }
70
+ });
71
+ }
72
+ //# sourceMappingURL=extractJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractJson.js","sourceRoot":"","sources":["../../src/commands/extractJson.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerExtractPiiCommand(program: Command): void;
3
+ //# sourceMappingURL=extractPii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractPii.d.ts","sourceRoot":"","sources":["../../src/commands/extractPii.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2FhE"}
@@ -0,0 +1,77 @@
1
+ import { getApiKey, getProjectId } from "../lib/auth.js";
2
+ import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
3
+ const MODEL = "gliner-multi-pii-v1";
4
+ const DEFAULT_THRESHOLD = 0.5;
5
+ const DEFAULT_CATEGORIES = ["identity", "contact"];
6
+ export function registerExtractPiiCommand(program) {
7
+ program
8
+ .command("extract_pii <text>")
9
+ .description("Extract PII entities from text (persons, emails, phone numbers, etc.).")
10
+ .option("-t, --threshold <number>", "Confidence threshold for entity extraction.", String(DEFAULT_THRESHOLD))
11
+ .option("-c, --categories <list>", "Comma-separated list of PII categories to extract.", DEFAULT_CATEGORIES.join(","))
12
+ .action(async (text, opts) => {
13
+ const apiKey = getApiKey();
14
+ const projectId = getProjectId();
15
+ if (!apiKey || !projectId) {
16
+ console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key and project ID.");
17
+ process.exit(1);
18
+ }
19
+ const threshold = Number(opts.threshold);
20
+ if (!Number.isFinite(threshold)) {
21
+ console.error(`Invalid threshold: ${opts.threshold}`);
22
+ process.exit(1);
23
+ }
24
+ const categories = opts.categories
25
+ .split(",")
26
+ .map((c) => c.trim())
27
+ .filter((c) => c.length > 0);
28
+ let response;
29
+ try {
30
+ response = await fetch(RESPONSES_ENDPOINT, {
31
+ method: "POST",
32
+ headers: {
33
+ "content-type": "application/json",
34
+ "x-api-key": apiKey.apiKey,
35
+ "x-project-id": projectId.projectId,
36
+ },
37
+ body: JSON.stringify({
38
+ model: MODEL,
39
+ input: text,
40
+ metadata: {
41
+ usecase: "extract-pii",
42
+ threshold,
43
+ categories,
44
+ },
45
+ }),
46
+ });
47
+ }
48
+ catch (err) {
49
+ const message = err instanceof Error ? err.message : String(err);
50
+ console.error(`Request failed: ${message}`);
51
+ process.exit(1);
52
+ }
53
+ if (!response.ok) {
54
+ const body = await response.text();
55
+ console.error(`Request failed with status ${response.status}.`);
56
+ if (body)
57
+ console.error(body);
58
+ process.exit(1);
59
+ }
60
+ const data = (await response.json());
61
+ const content = data.output?.[0]?.content?.find((c) => c.type === "output_text")
62
+ ?.text ?? data.output?.[0]?.content?.[0]?.text;
63
+ if (!content) {
64
+ console.error("Response did not contain any extraction content.");
65
+ console.error(JSON.stringify(data, null, 2));
66
+ process.exit(1);
67
+ }
68
+ try {
69
+ const parsed = JSON.parse(content);
70
+ console.log(JSON.stringify(parsed, null, 2));
71
+ }
72
+ catch {
73
+ console.log(content);
74
+ }
75
+ });
76
+ }
77
+ //# sourceMappingURL=extractPii.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractPii.js","sourceRoot":"","sources":["../../src/commands/extractPii.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerGenerateFollowupsCommand(program: Command): void;
3
+ //# sourceMappingURL=generateFollowups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateFollowups.d.ts","sourceRoot":"","sources":["../../src/commands/generateFollowups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6DvE"}
@@ -0,0 +1,58 @@
1
+ import { getApiKey, getProjectId } from "../lib/auth.js";
2
+ import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
3
+ const MODEL = "zlm-v1-followup-questions-edge";
4
+ export function registerGenerateFollowupsCommand(program) {
5
+ program
6
+ .command("generate_followups <text>")
7
+ .description("Generate contextual follow-up questions with the ZeroGPU followup edge model.")
8
+ .action(async (text) => {
9
+ const apiKey = getApiKey();
10
+ const projectId = getProjectId();
11
+ if (!apiKey || !projectId) {
12
+ console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key and project ID.");
13
+ process.exit(1);
14
+ }
15
+ let response;
16
+ try {
17
+ response = await fetch(RESPONSES_ENDPOINT, {
18
+ method: "POST",
19
+ headers: {
20
+ "content-type": "application/json",
21
+ "x-api-key": apiKey.apiKey,
22
+ "x-project-id": projectId.projectId,
23
+ },
24
+ body: JSON.stringify({
25
+ model: MODEL,
26
+ input: text,
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 = data.output?.[0]?.content?.find((c) => c.type === "output_text")?.text ?? data.output?.[0]?.content?.[0]?.text;
44
+ if (!content) {
45
+ console.error("Response did not contain any follow-up 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
+ });
57
+ }
58
+ //# sourceMappingURL=generateFollowups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateFollowups.js","sourceRoot":"","sources":["../../src/commands/generateFollowups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerRedactPiiCommand(program: Command): void;
3
+ //# sourceMappingURL=redactPii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactPii.d.ts","sourceRoot":"","sources":["../../src/commands/redactPii.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE/D"}
@@ -0,0 +1,62 @@
1
+ import { getApiKey, getProjectId } from "../lib/auth.js";
2
+ import { RESPONSES_ENDPOINT, } from "../lib/responses.js";
3
+ const MODEL = "gliner-multi-pii-v1";
4
+ export function registerRedactPiiCommand(program) {
5
+ program
6
+ .command("redact_pii <text>")
7
+ .description("Detect and redact PII entities in text (persons, phone numbers, emails, etc.).")
8
+ .action(async (text) => {
9
+ const apiKey = getApiKey();
10
+ const projectId = getProjectId();
11
+ if (!apiKey || !projectId) {
12
+ console.error("You're not fully signed in yet. Run 'zerogpu login' to set your API key and project ID.");
13
+ process.exit(1);
14
+ }
15
+ let response;
16
+ try {
17
+ response = await fetch(RESPONSES_ENDPOINT, {
18
+ method: "POST",
19
+ headers: {
20
+ "content-type": "application/json",
21
+ "x-api-key": apiKey.apiKey,
22
+ "x-project-id": projectId.projectId,
23
+ },
24
+ body: JSON.stringify({
25
+ model: MODEL,
26
+ input: text,
27
+ metadata: {
28
+ mask: "label",
29
+ usecase: "redact",
30
+ },
31
+ }),
32
+ });
33
+ }
34
+ catch (err) {
35
+ const message = err instanceof Error ? err.message : String(err);
36
+ console.error(`Request failed: ${message}`);
37
+ process.exit(1);
38
+ }
39
+ if (!response.ok) {
40
+ const body = await response.text();
41
+ console.error(`Request failed with status ${response.status}.`);
42
+ if (body)
43
+ console.error(body);
44
+ process.exit(1);
45
+ }
46
+ const data = (await response.json());
47
+ const content = data.output?.[0]?.content?.find((c) => c.type === "output_text")?.text ?? data.output?.[0]?.content?.[0]?.text;
48
+ if (!content) {
49
+ console.error("Response did not contain any redaction content.");
50
+ console.error(JSON.stringify(data, null, 2));
51
+ process.exit(1);
52
+ }
53
+ try {
54
+ const parsed = JSON.parse(content);
55
+ console.log(JSON.stringify(parsed, null, 2));
56
+ }
57
+ catch {
58
+ console.log(content);
59
+ }
60
+ });
61
+ }
62
+ //# sourceMappingURL=redactPii.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactPii.js","sourceRoot":"","sources":["../../src/commands/redactPii.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,KAAK,GAAG,qBAAqB,CAAC;AAEpC,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CACV,gFAAgF,CACjF;SACA,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QAEjC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CACX,yFAAyF,CAC1F,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;oBAC1B,cAAc,EAAE,SAAS,CAAC,SAAS;iBACpC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE;wBACR,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,QAAQ;qBAClB;iBACF,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,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAChC,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,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;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerSummarizeCommand(program: Command): void;
3
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/commands/summarize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D/D"}