@root-signals/scorable-cli 0.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.
Files changed (81) hide show
  1. package/README.md +206 -0
  2. package/dist/auth.d.ts +7 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +103 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +16 -0
  9. package/dist/client.d.ts +7 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/client.js +52 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/commands/judge/create.d.ts +3 -0
  14. package/dist/commands/judge/create.d.ts.map +1 -0
  15. package/dist/commands/judge/create.js +40 -0
  16. package/dist/commands/judge/create.js.map +1 -0
  17. package/dist/commands/judge/delete.d.ts +3 -0
  18. package/dist/commands/judge/delete.d.ts.map +1 -0
  19. package/dist/commands/judge/delete.js +33 -0
  20. package/dist/commands/judge/delete.js.map +1 -0
  21. package/dist/commands/judge/duplicate.d.ts +3 -0
  22. package/dist/commands/judge/duplicate.d.ts.map +1 -0
  23. package/dist/commands/judge/duplicate.js +23 -0
  24. package/dist/commands/judge/duplicate.js.map +1 -0
  25. package/dist/commands/judge/exec-openai-generic.d.ts +3 -0
  26. package/dist/commands/judge/exec-openai-generic.d.ts.map +1 -0
  27. package/dist/commands/judge/exec-openai-generic.js +50 -0
  28. package/dist/commands/judge/exec-openai-generic.js.map +1 -0
  29. package/dist/commands/judge/exec-openai.d.ts +3 -0
  30. package/dist/commands/judge/exec-openai.d.ts.map +1 -0
  31. package/dist/commands/judge/exec-openai.js +50 -0
  32. package/dist/commands/judge/exec-openai.js.map +1 -0
  33. package/dist/commands/judge/execute-by-name.d.ts +15 -0
  34. package/dist/commands/judge/execute-by-name.d.ts.map +1 -0
  35. package/dist/commands/judge/execute-by-name.js +73 -0
  36. package/dist/commands/judge/execute-by-name.js.map +1 -0
  37. package/dist/commands/judge/execute.d.ts +15 -0
  38. package/dist/commands/judge/execute.d.ts.map +1 -0
  39. package/dist/commands/judge/execute.js +73 -0
  40. package/dist/commands/judge/execute.js.map +1 -0
  41. package/dist/commands/judge/get.d.ts +3 -0
  42. package/dist/commands/judge/get.d.ts.map +1 -0
  43. package/dist/commands/judge/get.js +23 -0
  44. package/dist/commands/judge/get.js.map +1 -0
  45. package/dist/commands/judge/index.d.ts +3 -0
  46. package/dist/commands/judge/index.d.ts.map +1 -0
  47. package/dist/commands/judge/index.js +25 -0
  48. package/dist/commands/judge/index.js.map +1 -0
  49. package/dist/commands/judge/list.d.ts +3 -0
  50. package/dist/commands/judge/list.d.ts.map +1 -0
  51. package/dist/commands/judge/list.js +58 -0
  52. package/dist/commands/judge/list.js.map +1 -0
  53. package/dist/commands/judge/update.d.ts +3 -0
  54. package/dist/commands/judge/update.d.ts.map +1 -0
  55. package/dist/commands/judge/update.js +45 -0
  56. package/dist/commands/judge/update.js.map +1 -0
  57. package/dist/commands/prompt-test/index.d.ts +3 -0
  58. package/dist/commands/prompt-test/index.d.ts.map +1 -0
  59. package/dist/commands/prompt-test/index.js +13 -0
  60. package/dist/commands/prompt-test/index.js.map +1 -0
  61. package/dist/commands/prompt-test/init.d.ts +3 -0
  62. package/dist/commands/prompt-test/init.d.ts.map +1 -0
  63. package/dist/commands/prompt-test/init.js +77 -0
  64. package/dist/commands/prompt-test/init.js.map +1 -0
  65. package/dist/commands/prompt-test/run.d.ts +4 -0
  66. package/dist/commands/prompt-test/run.d.ts.map +1 -0
  67. package/dist/commands/prompt-test/run.js +194 -0
  68. package/dist/commands/prompt-test/run.js.map +1 -0
  69. package/dist/index.d.ts +3 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +29 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/output.d.ts +9 -0
  74. package/dist/output.d.ts.map +1 -0
  75. package/dist/output.js +40 -0
  76. package/dist/output.js.map +1 -0
  77. package/dist/types.d.ts +62 -0
  78. package/dist/types.d.ts.map +1 -0
  79. package/dist/types.js +8 -0
  80. package/dist/types.js.map +1 -0
  81. package/package.json +53 -0
@@ -0,0 +1,194 @@
1
+ import { readFileSync, writeFileSync } from "node:fs";
2
+ import yaml from "js-yaml";
3
+ import Table from "cli-table3";
4
+ import { requireApiKey } from "../../auth.js";
5
+ import { apiRequest } from "../../client.js";
6
+ import { printInfo, printSuccess, printWarning, printError } from "../../output.js";
7
+ import { CliError } from "../../types.js";
8
+ function isPromptTestComplete(exp) {
9
+ if (!exp.tasks.length)
10
+ return false;
11
+ return exp.tasks.every((t) => t.status === "completed" || t.status === "failed");
12
+ }
13
+ function displayProgressTable(experiments) {
14
+ const table = new Table({
15
+ head: ["Prompt Test ID", "Status", "Tasks Completed"],
16
+ style: { head: ["cyan"] },
17
+ });
18
+ for (const exp of experiments) {
19
+ const done = exp.tasks.filter((t) => t.status === "completed" || t.status === "failed").length;
20
+ const total = exp.tasks.length;
21
+ table.push([
22
+ exp.id,
23
+ isPromptTestComplete(exp) ? "✅ Completed" : "⏳ Running",
24
+ `${done}/${total}`,
25
+ ]);
26
+ }
27
+ console.log(table.toString());
28
+ }
29
+ function displayAggregatedResults(experiments) {
30
+ if (!experiments.length) {
31
+ printWarning("No prompt test results to display.");
32
+ return;
33
+ }
34
+ const allEvaluators = new Map();
35
+ for (const exp of experiments) {
36
+ for (const e of exp.evaluators) {
37
+ if (!allEvaluators.has(e.id))
38
+ allEvaluators.set(e.id, e.name);
39
+ }
40
+ }
41
+ const sortedEvalIds = [...allEvaluators.keys()].sort();
42
+ const table = new Table({
43
+ head: [
44
+ "Inputs",
45
+ "Prompt",
46
+ "Model",
47
+ "Cost",
48
+ "Latency (s)",
49
+ "Output",
50
+ ...sortedEvalIds.map((id) => allEvaluators.get(id)),
51
+ ],
52
+ style: { head: ["cyan"] },
53
+ wordWrap: true,
54
+ });
55
+ for (const exp of experiments) {
56
+ for (const task of exp.tasks) {
57
+ const inputsStr = Object.entries(task.variables)
58
+ .map(([k, v]) => `${k}: ${v}`)
59
+ .join("\n");
60
+ const row = [
61
+ inputsStr,
62
+ exp.prompt,
63
+ exp.model,
64
+ task.cost ?? "N/A",
65
+ task.model_call_duration != null ? task.model_call_duration.toFixed(3) : "N/A",
66
+ task.llm_output ?? "",
67
+ ];
68
+ const scores = new Map(task.evaluation_results.map((r) => [r.id, r.score]));
69
+ for (const evalId of sortedEvalIds) {
70
+ const score = scores.get(evalId);
71
+ row.push(score != null ? String(score) : "N/A");
72
+ }
73
+ table.push(row);
74
+ }
75
+ }
76
+ console.log(table.toString());
77
+ }
78
+ export async function runPromptTests(outputFile, configPath, sleep = (ms) => new Promise((r) => setTimeout(r, ms))) {
79
+ let rawConfig;
80
+ try {
81
+ rawConfig = yaml.load(readFileSync(configPath, "utf8"));
82
+ }
83
+ catch {
84
+ printError(`'${configPath}' not found. Please run \`pt init\` first or specify a different config file with -c.`);
85
+ throw new CliError(1, `Config file not found: ${configPath}`);
86
+ }
87
+ let config;
88
+ try {
89
+ config = rawConfig;
90
+ if (!config.prompts || !config.models || !config.evaluators) {
91
+ throw new Error("Missing required fields: prompts, models, evaluators");
92
+ }
93
+ }
94
+ catch (e) {
95
+ printError(`Error reading or validating '${configPath}': ${e instanceof Error ? e.message : String(e)}`);
96
+ throw new CliError(1, "Invalid config");
97
+ }
98
+ const apiKey = await requireApiKey();
99
+ printInfo("Starting prompt tests");
100
+ const experiments = {};
101
+ for (const prompt of config.prompts) {
102
+ for (const model of config.models) {
103
+ const evaluators = config.evaluators.map((e) => {
104
+ const entry = {};
105
+ if (e.id)
106
+ entry["id"] = e.id;
107
+ if (e.name)
108
+ entry["name"] = e.name;
109
+ if (e.version_id)
110
+ entry["version_id"] = e.version_id;
111
+ return entry;
112
+ });
113
+ const payload = {
114
+ prompt,
115
+ inputs: config.inputs.map((i) => i.vars),
116
+ model,
117
+ evaluators,
118
+ };
119
+ if (config.response_schema)
120
+ payload["response_schema"] = config.response_schema;
121
+ if (config.dataset_id)
122
+ payload["dataset_id"] = config.dataset_id;
123
+ const result = (await apiRequest("POST", "prompt-tests", {
124
+ payload,
125
+ apiKey,
126
+ }));
127
+ if (result?.id) {
128
+ experiments[result.id] = result;
129
+ printSuccess(`Successfully created prompt test for model '${model}' with ID: ${result.id}`);
130
+ }
131
+ else {
132
+ printWarning(`Failed to create prompt test for model '${model}' with prompt: ${prompt}`);
133
+ }
134
+ }
135
+ }
136
+ if (!Object.keys(experiments).length) {
137
+ printError("No prompt tests were created. Aborting.");
138
+ throw new CliError(1, "No prompt tests created");
139
+ }
140
+ printInfo("Waiting for prompt tests to complete...");
141
+ const completed = {};
142
+ while (Object.keys(completed).length < Object.keys(experiments).length) {
143
+ for (const expId of Object.keys(experiments)) {
144
+ if (completed[expId])
145
+ continue;
146
+ const expData = (await apiRequest("GET", `prompt-tests/${expId}`, {
147
+ apiKey,
148
+ }));
149
+ if (!expData) {
150
+ printWarning(`Could not retrieve status for prompt test ${expId}`);
151
+ continue;
152
+ }
153
+ experiments[expId] = expData;
154
+ if (isPromptTestComplete(expData)) {
155
+ completed[expId] = expData;
156
+ printSuccess(`Prompt test ${expId} completed.`);
157
+ }
158
+ }
159
+ displayProgressTable(Object.values(experiments));
160
+ if (Object.keys(completed).length < Object.keys(experiments).length) {
161
+ await sleep(1000);
162
+ }
163
+ }
164
+ printSuccess("All prompt tests completed.");
165
+ const finalTests = Object.values(completed).sort((a, b) => a.id.localeCompare(b.id));
166
+ displayAggregatedResults(finalTests);
167
+ if (outputFile) {
168
+ try {
169
+ writeFileSync(outputFile, JSON.stringify(finalTests, null, 2));
170
+ printSuccess(`Results saved to ${outputFile}`);
171
+ }
172
+ catch (e) {
173
+ printError(`Failed to write results to ${outputFile}: ${e instanceof Error ? e.message : String(e)}`);
174
+ }
175
+ }
176
+ const ids = finalTests.map((t) => t.id).join(",");
177
+ printInfo(`\nView full results in the browser:\nhttps://scorable.ai/prompt-testing/compare?ids=${ids}`);
178
+ }
179
+ export function registerRunCommand(pt) {
180
+ pt.command("run")
181
+ .description("Runs prompt tests from the prompt-tests.yaml file")
182
+ .option("-o, --output <path>", "Output file path to save prompt test results as JSON")
183
+ .option("-c, --config <path>", "Path to prompt testing configuration file", "prompt-tests.yaml")
184
+ .action(async (opts) => {
185
+ try {
186
+ await runPromptTests(opts.output, opts.config);
187
+ }
188
+ catch (e) {
189
+ if (e instanceof CliError)
190
+ throw e;
191
+ throw new CliError(1, e instanceof Error ? e.message : String(e));
192
+ }
193
+ });
194
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/prompt-test/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createCli(): Command;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,SAAS,IAAI,OAAO,CAUnC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ import { Command } from "commander";
2
+ import { registerJudgeCommands } from "./commands/judge/index.js";
3
+ import { registerPromptTestCommands } from "./commands/prompt-test/index.js";
4
+ export function createCli() {
5
+ const program = new Command()
6
+ .name("scorable-cli")
7
+ .description("A CLI tool to interact with the Scorable API")
8
+ .exitOverride();
9
+ registerJudgeCommands(program);
10
+ registerPromptTestCommands(program);
11
+ return program;
12
+ }
13
+ if (import.meta.url === `file://${process.argv[1]}`) {
14
+ createCli()
15
+ .parseAsync(process.argv)
16
+ .catch((e) => {
17
+ if (e && typeof e === "object" && "exitCode" in e) {
18
+ process.exit(e.exitCode);
19
+ }
20
+ if (e &&
21
+ typeof e === "object" &&
22
+ "code" in e &&
23
+ String(e.code).startsWith("commander.")) {
24
+ process.exit(e.exitCode ?? 1);
25
+ }
26
+ process.stderr.write(String(e) + "\n");
27
+ process.exit(1);
28
+ });
29
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,cAAc,CAAC;SACpB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,YAAY,EAAE,CAAC;IAElB,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAEpC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,SAAS,EAAE;SACR,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;QACpB,sEAAsE;QACtE,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAE,CAA0B,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;QACD,qEAAqE;QACrE,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAE,CAAuB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChH,OAAO,CAAC,IAAI,CAAE,CAA2B,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Judge } from "./types.js";
2
+ export declare function printJson(data: unknown): void;
3
+ export declare function printError(msg: string): void;
4
+ export declare function printSuccess(msg: string): void;
5
+ export declare function printInfo(msg: string): void;
6
+ export declare function printWarning(msg: string): void;
7
+ export declare function printMessage(msg: string): void;
8
+ export declare function printJudgeTable(judges: Judge[], nextCursor?: string): void;
9
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAmB1E"}
package/dist/output.js ADDED
@@ -0,0 +1,40 @@
1
+ import chalk from "chalk";
2
+ import Table from "cli-table3";
3
+ export function printJson(data) {
4
+ console.log(JSON.stringify(data, null, 2));
5
+ }
6
+ export function printError(msg) {
7
+ console.log(chalk.bold.red("Error:") + " " + msg);
8
+ }
9
+ export function printSuccess(msg) {
10
+ console.log(chalk.bold.green("Success:") + " " + msg);
11
+ }
12
+ export function printInfo(msg) {
13
+ console.log(chalk.bold.blue("Info:") + " " + msg);
14
+ }
15
+ export function printWarning(msg) {
16
+ console.log(chalk.bold.yellow("Warning:") + " " + msg);
17
+ }
18
+ export function printMessage(msg) {
19
+ console.log(msg);
20
+ }
21
+ function truncate(s, max) {
22
+ return s.length > max ? s.slice(0, max - 1) + "…" : s;
23
+ }
24
+ export function printJudgeTable(judges, nextCursor) {
25
+ const table = new Table({
26
+ head: ["ID", "Name", "Intent", "Created At", "Status"],
27
+ style: { head: ["cyan"] },
28
+ colWidths: [38, 30, 52, 12, 10],
29
+ wordWrap: true,
30
+ });
31
+ for (const j of judges) {
32
+ const date = (j.created_at ?? "").slice(0, 10);
33
+ table.push([j.id, j.name, truncate(j.intent ?? "", 50), date, j.status ?? ""]);
34
+ }
35
+ console.log(table.toString());
36
+ if (nextCursor) {
37
+ const cursor = nextCursor.split("cursor=")[1] ?? nextCursor;
38
+ printInfo(`Next page available. Use --cursor "${cursor}"`);
39
+ }
40
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAG/B,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAW;IACtC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,UAAmB;IAClE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC;QACtD,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;QACzB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC/B,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9B,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;QAC5D,SAAS,CAAC,sCAAsC,MAAM,GAAG,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,62 @@
1
+ export interface Judge {
2
+ id: string;
3
+ name: string;
4
+ intent: string;
5
+ created_at: string;
6
+ status?: string;
7
+ stage?: string;
8
+ evaluator_references?: Array<{
9
+ id: string;
10
+ }>;
11
+ }
12
+ export interface JudgeListResponse {
13
+ results: Judge[];
14
+ next?: string;
15
+ }
16
+ export interface PromptTestTask {
17
+ id: string;
18
+ status: string;
19
+ cost?: string;
20
+ llm_output?: string;
21
+ model_call_duration?: number;
22
+ evaluation_results: Array<{
23
+ id: string;
24
+ name: string;
25
+ score: number | null;
26
+ justification: string | null;
27
+ }>;
28
+ variables: Record<string, unknown>;
29
+ }
30
+ export interface PromptTest {
31
+ id: string;
32
+ model: string;
33
+ prompt: string;
34
+ tasks: PromptTestTask[];
35
+ avg_cost?: string;
36
+ avg_model_call_duration?: number;
37
+ evaluators: Array<{
38
+ id: string;
39
+ name: string;
40
+ }>;
41
+ }
42
+ export interface EvaluatorConfig {
43
+ id?: string;
44
+ name?: string;
45
+ version_id?: string;
46
+ }
47
+ export interface PromptTestInput {
48
+ vars: Record<string, unknown>;
49
+ }
50
+ export interface PromptTestConfig {
51
+ prompts: string[];
52
+ inputs: PromptTestInput[];
53
+ models: string[];
54
+ evaluators: EvaluatorConfig[];
55
+ response_schema?: Record<string, unknown>;
56
+ dataset_id?: string;
57
+ }
58
+ export declare class CliError extends Error {
59
+ readonly exitCode: number;
60
+ constructor(exitCode: number, message: string);
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,KAAK,CAAC;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,QAAS,SAAQ,KAAK;aAEf,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM,EAChC,OAAO,EAAE,MAAM;CAKlB"}
package/dist/types.js ADDED
@@ -0,0 +1,8 @@
1
+ export class CliError extends Error {
2
+ exitCode;
3
+ constructor(exitCode, message) {
4
+ super(message);
5
+ this.exitCode = exitCode;
6
+ this.name = "CliError";
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA2DA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IADlB,YACkB,QAAgB,EAChC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAQ;QAIhC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@root-signals/scorable-cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI for Scorable",
5
+ "license": "Apache-2.0",
6
+ "author": "Scorable",
7
+ "bin": {
8
+ "scorable": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*.js",
12
+ "dist/**/*.js.map",
13
+ "dist/**/*.d.ts",
14
+ "dist/**/*.d.ts.map",
15
+ "README.md",
16
+ "LICENSE"
17
+ ],
18
+ "type": "module",
19
+ "main": "./dist/index.js",
20
+ "scripts": {
21
+ "build": "tsc --project tsconfig.build.json",
22
+ "bundle": "esbuild src/cli.ts --bundle --platform=node --target=node18 --format=cjs --minify --banner:js='#!/usr/bin/env node' --log-override:empty-import-meta=silent --outfile=dist/scorable.cjs && chmod +x dist/scorable.cjs",
23
+ "check-all": "npm run typecheck && npm run lint && npm run fmt:check && npm run test",
24
+ "prepublishOnly": "npm run check-all && npm run build",
25
+ "typecheck": "tsc --noEmit",
26
+ "test": "vitest run",
27
+ "test:watch": "vitest",
28
+ "lint": "oxlint src tests",
29
+ "fmt": "oxfmt .",
30
+ "fmt:check": "oxfmt . --check"
31
+ },
32
+ "dependencies": {
33
+ "@inquirer/prompts": "^8.3.2",
34
+ "@root-signals/scorable": "^0.2.1",
35
+ "chalk": "^5.6.2",
36
+ "cli-table3": "^0.6.5",
37
+ "commander": "^14.0.3",
38
+ "js-yaml": "^4.1.1",
39
+ "ora": "^9.3.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/js-yaml": "^4.0.9",
43
+ "@types/node": "^25.5.0",
44
+ "esbuild": "^0.25.0",
45
+ "oxfmt": "^0.41.0",
46
+ "oxlint": "^1.56.0",
47
+ "typescript": "^5.9.3",
48
+ "vitest": "^4.1.0"
49
+ },
50
+ "engines": {
51
+ "node": ">=20"
52
+ }
53
+ }