inferock-bench 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.js ADDED
@@ -0,0 +1,240 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { createInterface } from "node:readline/promises";
6
+ import { stdin as input, stdout as output } from "node:process";
7
+ import { isRecord, stringValue } from "./record.js";
8
+ export const DEFAULT_PORT = 4318;
9
+ export const DEFAULT_HOST = "127.0.0.1";
10
+ export const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
11
+ export const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com/v1";
12
+ export const WATERMARK_NAME = "Inferock Bench";
13
+ const WATERMARK_HOST = ["inferock", "opiusai", "com"].join(".");
14
+ export const WATERMARK_URL = `https://${WATERMARK_HOST}`;
15
+ export function resolveBenchPaths(env = process.env) {
16
+ const homeDir = env.INFEROCK_BENCH_HOME ?? join(homedir(), ".inferock-bench");
17
+ return {
18
+ homeDir,
19
+ configFile: join(homeDir, "config"),
20
+ legacyConfigFile: join(homeDir, "config.json"),
21
+ eventsFile: join(homeDir, "events.jsonl"),
22
+ receiptsDir: join(homeDir, "receipts"),
23
+ };
24
+ }
25
+ export async function ensureBenchHome(paths) {
26
+ await mkdir(paths.homeDir, { recursive: true });
27
+ }
28
+ export async function readBenchConfig(paths) {
29
+ try {
30
+ const raw = await readFile(paths.configFile, "utf8");
31
+ return parseBenchConfig(JSON.parse(raw));
32
+ }
33
+ catch (error) {
34
+ if (isNodeError(error) && error.code === "ENOENT") {
35
+ return readLegacyBenchConfig(paths);
36
+ }
37
+ throw error;
38
+ }
39
+ }
40
+ export async function writeBenchConfig(paths, config) {
41
+ await ensureBenchHome(paths);
42
+ await writeFile(paths.configFile, `${JSON.stringify(config, null, 2)}\n`, {
43
+ encoding: "utf8",
44
+ mode: 0o600,
45
+ });
46
+ await chmod(paths.configFile, 0o600);
47
+ }
48
+ export function benchKeyFromConfig(config, env = process.env) {
49
+ return env.INFEROCK_BENCH_KEY ?? config.benchKey ?? "";
50
+ }
51
+ export function acceptedBenchKeysFromConfig(config, env = process.env) {
52
+ return uniqueStrings([
53
+ config.benchKey,
54
+ env.INFEROCK_BENCH_KEY,
55
+ ]);
56
+ }
57
+ export function generateBenchKey() {
58
+ return `ibl_${randomBytes(12).toString("hex")}`;
59
+ }
60
+ export async function ensureGeneratedBenchKey(input) {
61
+ if (input.config.benchKey)
62
+ return input.config;
63
+ const config = {
64
+ ...input.config,
65
+ benchKey: generateBenchKey(),
66
+ };
67
+ await writeBenchConfig(input.paths, config);
68
+ return config;
69
+ }
70
+ export async function applyProviderKeyUpdate(input) {
71
+ const config = { ...input.config };
72
+ if ("openaiApiKey" in input.update) {
73
+ const next = normalizedKeyUpdate(input.update.openaiApiKey);
74
+ if (next)
75
+ config.openaiApiKey = next;
76
+ else
77
+ delete config.openaiApiKey;
78
+ }
79
+ if ("anthropicApiKey" in input.update) {
80
+ const next = normalizedKeyUpdate(input.update.anthropicApiKey);
81
+ if (next)
82
+ config.anthropicApiKey = next;
83
+ else
84
+ delete config.anthropicApiKey;
85
+ }
86
+ await writeBenchConfig(input.paths, config);
87
+ return config;
88
+ }
89
+ export function providerApiKey(provider, config, env = process.env) {
90
+ if (provider === "openai") {
91
+ return env.INFEROCK_BENCH_OPENAI_API_KEY ?? env.OPENAI_API_KEY ?? config.openaiApiKey;
92
+ }
93
+ return env.INFEROCK_BENCH_ANTHROPIC_API_KEY ?? env.ANTHROPIC_API_KEY ?? config.anthropicApiKey;
94
+ }
95
+ export function providerKeyStatus(provider, config, env = process.env) {
96
+ const envKey = provider === "openai"
97
+ ? env.INFEROCK_BENCH_OPENAI_API_KEY ?? env.OPENAI_API_KEY
98
+ : env.INFEROCK_BENCH_ANTHROPIC_API_KEY ?? env.ANTHROPIC_API_KEY;
99
+ if (envKey) {
100
+ return {
101
+ configured: true,
102
+ source: "env",
103
+ maskedKey: maskSecret(envKey),
104
+ };
105
+ }
106
+ const configKey = provider === "openai" ? config.openaiApiKey : config.anthropicApiKey;
107
+ if (configKey) {
108
+ return {
109
+ configured: true,
110
+ source: "config",
111
+ maskedKey: maskSecret(configKey),
112
+ };
113
+ }
114
+ return {
115
+ configured: false,
116
+ source: null,
117
+ maskedKey: null,
118
+ };
119
+ }
120
+ export function maskSecret(secret) {
121
+ const trimmed = secret.trim();
122
+ if (trimmed.length <= 8)
123
+ return "..." + trimmed.slice(-4);
124
+ const prefix = secretPrefix(trimmed);
125
+ return `${prefix}...${trimmed.slice(-4)}`;
126
+ }
127
+ export function providerBaseUrl(provider, _config, env = process.env) {
128
+ const endpoint = provider === "openai"
129
+ ? env.INFEROCK_BENCH_OPENAI_BASE_URL
130
+ : env.INFEROCK_BENCH_ANTHROPIC_BASE_URL;
131
+ if (endpoint)
132
+ return endpoint;
133
+ return provider === "openai" ? DEFAULT_OPENAI_BASE_URL : DEFAULT_ANTHROPIC_BASE_URL;
134
+ }
135
+ export function reliabilityEndpoint(config, env = process.env) {
136
+ return env.INFEROCK_BENCH_INDEX_ENDPOINT ?? config.reliabilityIndex?.endpoint;
137
+ }
138
+ export async function ensureReliabilityIndexAsked(inputConfig) {
139
+ const env = inputConfig.env ?? process.env;
140
+ const log = inputConfig.log ?? console.log;
141
+ if (inputConfig.config.reliabilityIndex?.askedAt)
142
+ return inputConfig.config;
143
+ const askedAt = new Date().toISOString();
144
+ const tty = inputConfig.stdinIsTty ?? Boolean(input.isTTY);
145
+ const outTty = inputConfig.stdoutIsTty ?? Boolean(output.isTTY);
146
+ let enabled = false;
147
+ if (env.INFEROCK_BENCH_RELIABILITY_INDEX === "on") {
148
+ enabled = true;
149
+ }
150
+ else if (tty && outTty) {
151
+ enabled = await askReliabilityOptIn();
152
+ }
153
+ else {
154
+ log("Reliability index opt-in defaulted to off. Run `inferock-bench telemetry enable --reliability-index` to opt in.");
155
+ }
156
+ const config = {
157
+ ...inputConfig.config,
158
+ reliabilityIndex: {
159
+ ...(inputConfig.config.reliabilityIndex ?? {}),
160
+ askedAt,
161
+ enabled,
162
+ },
163
+ };
164
+ await writeBenchConfig(inputConfig.paths, config);
165
+ return config;
166
+ }
167
+ export async function setReliabilityIndexEnabled(input) {
168
+ const config = {
169
+ ...input.config,
170
+ reliabilityIndex: {
171
+ ...(input.config.reliabilityIndex ?? {}),
172
+ askedAt: input.config.reliabilityIndex?.askedAt ?? new Date().toISOString(),
173
+ enabled: input.enabled,
174
+ },
175
+ };
176
+ await writeBenchConfig(input.paths, config);
177
+ return config;
178
+ }
179
+ function parseBenchConfig(value) {
180
+ if (!isRecord(value))
181
+ return {};
182
+ const reliability = parseReliabilityIndexConfig(value.reliabilityIndex);
183
+ return {
184
+ ...(stringValue(value.benchKey) ? { benchKey: stringValue(value.benchKey) } : {}),
185
+ ...(stringValue(value.openaiApiKey) ? { openaiApiKey: stringValue(value.openaiApiKey) } : {}),
186
+ ...(stringValue(value.anthropicApiKey) ? { anthropicApiKey: stringValue(value.anthropicApiKey) } : {}),
187
+ ...(reliability ? { reliabilityIndex: reliability } : {}),
188
+ };
189
+ }
190
+ async function readLegacyBenchConfig(paths) {
191
+ try {
192
+ const raw = await readFile(paths.legacyConfigFile, "utf8");
193
+ const config = parseBenchConfig(JSON.parse(raw));
194
+ await writeBenchConfig(paths, config);
195
+ return config;
196
+ }
197
+ catch (error) {
198
+ if (isNodeError(error) && error.code === "ENOENT")
199
+ return {};
200
+ throw error;
201
+ }
202
+ }
203
+ function normalizedKeyUpdate(value) {
204
+ if (typeof value !== "string")
205
+ return undefined;
206
+ const trimmed = value.trim();
207
+ return trimmed.length > 0 ? trimmed : undefined;
208
+ }
209
+ function secretPrefix(secret) {
210
+ const secondDash = secret.indexOf("-", secret.indexOf("-") + 1);
211
+ if (secondDash > 0 && secondDash < 8)
212
+ return secret.slice(0, secondDash + 1);
213
+ return secret.slice(0, Math.min(7, secret.length - 4));
214
+ }
215
+ function uniqueStrings(values) {
216
+ return [...new Set(values.filter((value) => Boolean(value)))];
217
+ }
218
+ function parseReliabilityIndexConfig(value) {
219
+ if (!isRecord(value))
220
+ return undefined;
221
+ return {
222
+ enabled: value.enabled === true,
223
+ ...(stringValue(value.askedAt) ? { askedAt: stringValue(value.askedAt) } : {}),
224
+ ...(stringValue(value.endpoint) ? { endpoint: stringValue(value.endpoint) } : {}),
225
+ };
226
+ }
227
+ async function askReliabilityOptIn() {
228
+ const rl = createInterface({ input, output });
229
+ try {
230
+ const answer = await rl.question("Join the public reliability index? Aggregates only: no prompts, outputs, keys, traces, or identifiers. Type yes to opt in [default no]: ");
231
+ return answer.trim().toLowerCase() === "yes";
232
+ }
233
+ finally {
234
+ rl.close();
235
+ }
236
+ }
237
+ function isNodeError(error) {
238
+ return error instanceof Error && "code" in error;
239
+ }
240
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}