pi-harness-runtime 1.1.385 → 1.1.387
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/index.ts +42 -24
- package/package.json +3 -2
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/connection-runtime/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/durable-review/package.json +1 -1
- package/packages/e2e-tester/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-sink/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/dist/auto-continue.d.ts.map +1 -1
- package/packages/jev-judge/dist/auto-continue.js +26 -0
- package/packages/jev-judge/dist/auto-continue.js.map +1 -1
- package/packages/jev-judge/dist/environment-judge.d.ts.map +1 -1
- package/packages/jev-judge/dist/environment-judge.js +7 -4
- package/packages/jev-judge/dist/environment-judge.js.map +1 -1
- package/packages/jev-judge/dist/index.d.ts +87 -12
- package/packages/jev-judge/dist/index.d.ts.map +1 -1
- package/packages/jev-judge/dist/index.js +291 -75
- package/packages/jev-judge/dist/index.js.map +1 -1
- package/packages/jev-judge/dist/provider-error.d.ts +61 -0
- package/packages/jev-judge/dist/provider-error.d.ts.map +1 -0
- package/packages/jev-judge/dist/provider-error.js +165 -0
- package/packages/jev-judge/dist/provider-error.js.map +1 -0
- package/packages/jev-judge/dist/task-intake.d.ts.map +1 -1
- package/packages/jev-judge/dist/task-intake.js +3 -2
- package/packages/jev-judge/dist/task-intake.js.map +1 -1
- package/packages/jev-judge/dist/types.d.ts +56 -2
- package/packages/jev-judge/dist/types.d.ts.map +1 -1
- package/packages/jev-judge/dist/typesafe-provider.d.ts +26 -1
- package/packages/jev-judge/dist/typesafe-provider.d.ts.map +1 -1
- package/packages/jev-judge/dist/typesafe-provider.js +153 -62
- package/packages/jev-judge/dist/typesafe-provider.js.map +1 -1
- package/packages/jev-judge/dist/typesafe-request.d.ts +65 -0
- package/packages/jev-judge/dist/typesafe-request.d.ts.map +1 -0
- package/packages/jev-judge/dist/typesafe-request.js +138 -0
- package/packages/jev-judge/dist/typesafe-request.js.map +1 -0
- package/packages/jev-judge/package.json +1 -1
- package/packages/jev-judge/src/auto-continue.ts +26 -0
- package/packages/jev-judge/src/environment-judge.ts +7 -4
- package/packages/jev-judge/src/index.ts +617 -333
- package/packages/jev-judge/src/provider-error.ts +190 -0
- package/packages/jev-judge/src/task-intake.ts +3 -2
- package/packages/jev-judge/src/types.ts +62 -5
- package/packages/jev-judge/src/typesafe-provider.ts +452 -318
- package/packages/jev-judge/src/typesafe-request.ts +181 -0
- package/packages/jev-judge/tests/jev-provider-chain.test.ts +536 -0
- package/packages/jev-judge/tests/typesafe-provider.test.ts +504 -44
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/paperclip-integration/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/permission-mode/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/relay/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/telegram/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/voice-api/package.json +1 -1
- package/packages/webmcp-tester/package.json +1 -1
- package/packages/wiki/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
- package/scripts/run-root-tests.mjs +207 -0
|
@@ -6,12 +6,17 @@
|
|
|
6
6
|
* - Primary: TypeSafe direct API (https://api.typesafe.ai/v1/systemone)
|
|
7
7
|
* - Fallback: OpenRouter API (https://openrouter.ai/api/v1)
|
|
8
8
|
*
|
|
9
|
+
* Every credential is bound to its own provider: a TypeSafe key is only ever
|
|
10
|
+
* sent to the TypeSafe API and an OpenRouter key only to OpenRouter. The
|
|
11
|
+
* fallback is explicit - the next provider is only used when the previous one
|
|
12
|
+
* failed with a retryable error.
|
|
13
|
+
*
|
|
9
14
|
* @example
|
|
10
15
|
* ```typescript
|
|
11
|
-
* import { JevJudge } from "@pi-harness/jev-judge";
|
|
16
|
+
* import { JevJudge, resolveJevProviders } from "@pi-harness/jev-judge";
|
|
12
17
|
*
|
|
13
|
-
* //
|
|
14
|
-
* const judge = new JevJudge({
|
|
18
|
+
* // Provider chain built from the environment / key files
|
|
19
|
+
* const judge = new JevJudge({ providers: resolveJevProviders() });
|
|
15
20
|
*
|
|
16
21
|
* // Ask multiple questions at once
|
|
17
22
|
* const result = await judge.evaluate(
|
|
@@ -29,10 +34,13 @@
|
|
|
29
34
|
* console.log(result.decisions.isUrgent.noul); // 0.92
|
|
30
35
|
* ```
|
|
31
36
|
*/
|
|
37
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
32
38
|
// OpenAI SDK (OpenRouter is OpenAI-compatible)
|
|
33
39
|
// @ts-ignore - openai is installed at workspace root
|
|
34
40
|
import OpenAI from "openai";
|
|
35
|
-
import { TypeSafeJudge } from "./typesafe-provider.js";
|
|
41
|
+
import { TypeSafeJudge, providerForBaseUrl } from "./typesafe-provider.js";
|
|
42
|
+
import { toProviderError, JevProviderError } from "./provider-error.js";
|
|
43
|
+
import { logError } from "./file-logger.js";
|
|
36
44
|
/**
|
|
37
45
|
* Environment variable keys for API keys
|
|
38
46
|
*/
|
|
@@ -40,72 +48,156 @@ export const ENV_KEYS = {
|
|
|
40
48
|
TYPESAFE_API_KEY: "TYPESAFE_API_KEY",
|
|
41
49
|
OPENROUTER_API_KEY: "OPENROUTER_API_KEY",
|
|
42
50
|
};
|
|
51
|
+
/** Default TypeSafe endpoint. */
|
|
52
|
+
export const TYPESAFE_BASE_URL = "https://api.typesafe.ai";
|
|
53
|
+
/** Default TypeSafe model (an alias served by the System One models). */
|
|
54
|
+
export const TYPESAFE_DEFAULT_MODEL = "jev-latest";
|
|
55
|
+
/** Default OpenRouter endpoint. */
|
|
56
|
+
export const OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
|
|
57
|
+
/**
|
|
58
|
+
* Default OpenRouter model.
|
|
59
|
+
*
|
|
60
|
+
* `typesafe/jev-router` is the only TypeSafe model published on OpenRouter;
|
|
61
|
+
* the previous default ("typesafe/systemone") is not in the catalog.
|
|
62
|
+
*/
|
|
63
|
+
export const OPENROUTER_DEFAULT_MODEL = "typesafe/jev-router";
|
|
64
|
+
/**
|
|
65
|
+
* The prefix of an OpenRouter key.
|
|
66
|
+
*
|
|
67
|
+
* Used to bind the LEGACY key file (jev-api-key.txt) to the right provider:
|
|
68
|
+
* that file has historically held both kinds of key, and binding it blindly
|
|
69
|
+
* to TypeSafe would send an OpenRouter key to the TypeSafe API.
|
|
70
|
+
*/
|
|
71
|
+
const OPENROUTER_KEY_PREFIX = "sk-or-";
|
|
72
|
+
/**
|
|
73
|
+
* True when the key looks like an OpenRouter key.
|
|
74
|
+
*/
|
|
75
|
+
export function looksLikeOpenRouterKey(apiKey) {
|
|
76
|
+
return apiKey.trim().startsWith(OPENROUTER_KEY_PREFIX);
|
|
77
|
+
}
|
|
43
78
|
/**
|
|
44
|
-
* Get API key
|
|
45
|
-
*
|
|
79
|
+
* Get the API key of the FIRST configured provider.
|
|
80
|
+
*
|
|
81
|
+
* The order is TypeSafe first, then OpenRouter. The returned key is NOT
|
|
82
|
+
* bound to a provider by this function - use `resolveJevProviders()` to get
|
|
83
|
+
* a provider chain where every credential belongs to its own endpoint.
|
|
84
|
+
*
|
|
85
|
+
* @deprecated Prefer `resolveJevProviders()`.
|
|
46
86
|
*/
|
|
47
87
|
export function getApiKeyFromEnv() {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
88
|
+
const providers = resolveJevProviders();
|
|
89
|
+
return providers[0]?.apiKey;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve the provider chain from the environment and the key files.
|
|
93
|
+
*
|
|
94
|
+
* A provider is only included when its OWN credential is available:
|
|
95
|
+
* - TypeSafe: TYPESAFE_API_KEY, or the key file typesafe-api-key.txt
|
|
96
|
+
* - OpenRouter: OPENROUTER_API_KEY, or the key file openrouter-api-key.txt
|
|
97
|
+
*
|
|
98
|
+
* The legacy key file jev-api-key.txt is bound by the shape of the key it
|
|
99
|
+
* holds: an "sk-or-" key is an OpenRouter key, everything else is treated as
|
|
100
|
+
* a TypeSafe key. It is never sent to the wrong endpoint.
|
|
101
|
+
*
|
|
102
|
+
* The credentials are never crossed: the TypeSafe key is never sent to
|
|
103
|
+
* OpenRouter and the OpenRouter key is never sent to TypeSafe.
|
|
104
|
+
*/
|
|
105
|
+
export function resolveJevProviders(options) {
|
|
106
|
+
const env = options?.env ?? process.env;
|
|
107
|
+
const keysDir = options?.keysDir ?? defaultKeysDir();
|
|
108
|
+
const providers = [];
|
|
109
|
+
// The legacy key file holds whichever key the user put there. It is bound
|
|
110
|
+
// by the SHAPE of the key (an "sk-or-" key is an OpenRouter key) and it is
|
|
111
|
+
// only used for a provider that has no credential of its own yet.
|
|
112
|
+
const legacyKey = readKeyFile(keysDir, "jev-api-key.txt");
|
|
113
|
+
const legacyIsOpenRouter = legacyKey ? looksLikeOpenRouterKey(legacyKey) : false;
|
|
114
|
+
const legacyKeyFor = (provider) => {
|
|
115
|
+
if (!legacyKey)
|
|
116
|
+
return undefined;
|
|
117
|
+
const isOpenRouter = provider === "openrouter";
|
|
118
|
+
return legacyIsOpenRouter === isOpenRouter ? legacyKey : undefined;
|
|
119
|
+
};
|
|
120
|
+
const typesafeKey = firstNonEmpty(env[ENV_KEYS.TYPESAFE_API_KEY], readKeyFile(keysDir, "typesafe-api-key.txt"), legacyKeyFor("typesafe"));
|
|
121
|
+
if (typesafeKey) {
|
|
122
|
+
providers.push({
|
|
123
|
+
provider: "typesafe",
|
|
124
|
+
apiKey: typesafeKey,
|
|
125
|
+
baseUrl: env["TYPESAFE_BASE_URL"]?.trim() || TYPESAFE_BASE_URL,
|
|
126
|
+
model: env["TYPESAFE_MODEL"]?.trim() || TYPESAFE_DEFAULT_MODEL,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const openrouterKey = firstNonEmpty(env[ENV_KEYS.OPENROUTER_API_KEY], readKeyFile(keysDir, "openrouter-api-key.txt"), legacyKeyFor("openrouter"));
|
|
130
|
+
if (openrouterKey) {
|
|
131
|
+
providers.push({
|
|
132
|
+
provider: "openrouter",
|
|
133
|
+
apiKey: openrouterKey,
|
|
134
|
+
baseUrl: env["OPENROUTER_BASE_URL"]?.trim() || OPENROUTER_BASE_URL,
|
|
135
|
+
model: env["OPENROUTER_MODEL"]?.trim() || OPENROUTER_DEFAULT_MODEL,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return providers;
|
|
139
|
+
}
|
|
140
|
+
function firstNonEmpty(...values) {
|
|
141
|
+
for (const value of values) {
|
|
142
|
+
const trimmed = value?.trim();
|
|
143
|
+
if (trimmed)
|
|
144
|
+
return trimmed;
|
|
145
|
+
}
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
function defaultKeysDir() {
|
|
54
149
|
const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
|
|
55
|
-
|
|
56
|
-
|
|
150
|
+
return `${homedir}/.pi-harness-runtime/keys`;
|
|
151
|
+
}
|
|
152
|
+
function readKeyFile(keysDir, name) {
|
|
57
153
|
try {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (existsSync(keyFile)) {
|
|
64
|
-
const key = readFileSync(keyFile, "utf8").trim();
|
|
65
|
-
if (key && key.length > 10) {
|
|
66
|
-
return key;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
154
|
+
const path = `${keysDir}/${name}`;
|
|
155
|
+
if (!existsSync(path))
|
|
156
|
+
return undefined;
|
|
157
|
+
const key = readFileSync(path, "utf8").trim();
|
|
158
|
+
return key.length > 10 ? key : undefined;
|
|
69
159
|
}
|
|
70
160
|
catch {
|
|
71
|
-
|
|
161
|
+
return undefined;
|
|
72
162
|
}
|
|
73
|
-
return undefined;
|
|
74
163
|
}
|
|
75
164
|
/**
|
|
76
|
-
* Check if Jev API key is available
|
|
165
|
+
* Check if a Jev API key is available
|
|
77
166
|
*/
|
|
78
167
|
export function hasJevApiKey() {
|
|
79
|
-
return
|
|
168
|
+
return resolveJevProviders().length > 0;
|
|
80
169
|
}
|
|
81
170
|
/**
|
|
82
|
-
* Create JevJudge with
|
|
171
|
+
* Create JevJudge with the provider chain resolved from the environment
|
|
83
172
|
*/
|
|
84
173
|
export function createJevJudge(config) {
|
|
85
|
-
const
|
|
86
|
-
if (
|
|
87
|
-
throw new Error(`Jev API key not found. Set TYPESAFE_API_KEY
|
|
174
|
+
const providers = resolveJevProviders();
|
|
175
|
+
if (providers.length === 0) {
|
|
176
|
+
throw new Error(`Jev API key not found. Set TYPESAFE_API_KEY (or OPENROUTER_API_KEY), or write the key to ~/.pi-harness-runtime/keys/typesafe-api-key.txt (or openrouter-api-key.txt)`);
|
|
88
177
|
}
|
|
89
|
-
return new JevJudge({
|
|
178
|
+
return new JevJudge({ ...config, providers: config?.providers ?? providers });
|
|
90
179
|
}
|
|
91
180
|
/**
|
|
92
181
|
* Default configuration
|
|
93
182
|
*/
|
|
94
183
|
const DEFAULT_CONFIG = {
|
|
95
|
-
baseUrl: "https://api.typesafe.ai", // TypeSafe direct API as default
|
|
96
|
-
model: "typesafe/systemone",
|
|
97
184
|
defaultThreshold: 0.7,
|
|
98
185
|
timeoutMs: 30000,
|
|
99
186
|
};
|
|
100
187
|
/**
|
|
101
|
-
*
|
|
188
|
+
* The identity of a provider entry.
|
|
189
|
+
*
|
|
190
|
+
* The clients are cached per provider IDENTITY, not per base URL: two
|
|
191
|
+
* entries may share an endpoint but use different credentials, and reusing
|
|
192
|
+
* the first client would send its key to the second entry.
|
|
102
193
|
*/
|
|
103
|
-
function
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
194
|
+
function providerCacheKey(provider) {
|
|
195
|
+
return [
|
|
196
|
+
provider.provider,
|
|
197
|
+
provider.baseUrl,
|
|
198
|
+
provider.model,
|
|
199
|
+
provider.apiKey,
|
|
200
|
+
].join("|");
|
|
109
201
|
}
|
|
110
202
|
/**
|
|
111
203
|
* JevJudge - Main class for making structured decisions with Jev
|
|
@@ -115,49 +207,130 @@ function detectProvider(baseUrl) {
|
|
|
115
207
|
* - OpenRouter API (fallback for backwards compatibility)
|
|
116
208
|
*/
|
|
117
209
|
export class JevJudge {
|
|
118
|
-
typesafeJudge;
|
|
119
|
-
openrouterClient;
|
|
120
210
|
config;
|
|
121
|
-
|
|
211
|
+
providers;
|
|
212
|
+
typesafeJudges = new Map();
|
|
213
|
+
openrouterClients = new Map();
|
|
122
214
|
constructor(config) {
|
|
123
215
|
this.config = {
|
|
124
|
-
|
|
125
|
-
|
|
216
|
+
defaultThreshold: config.defaultThreshold ?? DEFAULT_CONFIG.defaultThreshold,
|
|
217
|
+
timeoutMs: config.timeoutMs ?? DEFAULT_CONFIG.timeoutMs,
|
|
218
|
+
baseUrl: config.baseUrl,
|
|
219
|
+
model: config.model,
|
|
220
|
+
apiKey: config.apiKey,
|
|
126
221
|
};
|
|
127
|
-
this.
|
|
128
|
-
if (this.
|
|
129
|
-
|
|
130
|
-
this.typesafeJudge = new TypeSafeJudge({
|
|
131
|
-
apiKey: this.config.apiKey,
|
|
132
|
-
baseUrl: this.config.baseUrl,
|
|
133
|
-
timeoutMs: this.config.timeoutMs,
|
|
134
|
-
});
|
|
222
|
+
this.providers = this.resolveProviders(config);
|
|
223
|
+
if (this.providers.length === 0) {
|
|
224
|
+
throw new Error("Jev: no usable provider configured. Every provider needs a non-empty apiKey.");
|
|
135
225
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Build the provider chain.
|
|
229
|
+
*
|
|
230
|
+
* An explicit chain is used as-is. Otherwise the legacy single provider
|
|
231
|
+
* configuration is turned into a one element chain; the credential then
|
|
232
|
+
* belongs to the caller, who has to pass the matching baseUrl.
|
|
233
|
+
*/
|
|
234
|
+
resolveProviders(config) {
|
|
235
|
+
if (config.providers && config.providers.length > 0) {
|
|
236
|
+
const usable = config.providers.filter((provider) => Boolean(provider.apiKey?.trim()));
|
|
237
|
+
for (const dropped of config.providers) {
|
|
238
|
+
if (!dropped.apiKey?.trim()) {
|
|
239
|
+
logError("[JevJudge]", `Provider ${dropped.provider} has an empty apiKey and was dropped from the chain`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return usable;
|
|
143
243
|
}
|
|
244
|
+
if (!config.apiKey) {
|
|
245
|
+
throw new Error("Jev: no provider configured. Pass `providers` (see resolveJevProviders) or a legacy `apiKey`.");
|
|
246
|
+
}
|
|
247
|
+
// The legacy path cannot ask which endpoint the key belongs to, so an
|
|
248
|
+
// OpenRouter key without an explicit baseUrl is refused instead of
|
|
249
|
+
// being sent to the TypeSafe API.
|
|
250
|
+
if (!config.baseUrl && looksLikeOpenRouterKey(config.apiKey)) {
|
|
251
|
+
throw new Error("Jev: the key looks like an OpenRouter key. Pass `baseUrl: \"https://openrouter.ai/api/v1\"` or a provider chain (resolveJevProviders()) so the credential is not sent to the wrong endpoint.");
|
|
252
|
+
}
|
|
253
|
+
const baseUrl = config.baseUrl ?? TYPESAFE_BASE_URL;
|
|
254
|
+
const provider = providerForBaseUrl(baseUrl);
|
|
255
|
+
return [
|
|
256
|
+
{
|
|
257
|
+
provider,
|
|
258
|
+
apiKey: config.apiKey,
|
|
259
|
+
baseUrl,
|
|
260
|
+
model: config.model ??
|
|
261
|
+
(provider === "typesafe" ? TYPESAFE_DEFAULT_MODEL : OPENROUTER_DEFAULT_MODEL),
|
|
262
|
+
},
|
|
263
|
+
];
|
|
144
264
|
}
|
|
145
265
|
/**
|
|
146
266
|
* Evaluate state against questions
|
|
147
267
|
*
|
|
268
|
+
* The provider chain is tried in order. The next provider is only used
|
|
269
|
+
* when the previous one failed with a retryable error (network, timeout,
|
|
270
|
+
* rate limit, auth, 5xx). A request contract error is never retried on
|
|
271
|
+
* another provider: it is a bug that has to stay visible.
|
|
272
|
+
*
|
|
148
273
|
* @param state - The context/situation to evaluate (text or structured)
|
|
149
274
|
* @param questions - Map of question_id -> question definition
|
|
150
275
|
* @returns Evaluation result with decisions
|
|
151
276
|
*/
|
|
152
277
|
async evaluate(state, questions) {
|
|
153
|
-
|
|
154
|
-
if (this.provider === "typesafe" && this.typesafeJudge) {
|
|
155
|
-
return this.typesafeJudge.evaluate(state, questions);
|
|
156
|
-
}
|
|
157
|
-
// Fall back to OpenRouter
|
|
158
|
-
if (!this.openrouterClient) {
|
|
278
|
+
if (this.providers.length === 0) {
|
|
159
279
|
throw new Error("No Jev provider configured");
|
|
160
280
|
}
|
|
281
|
+
let lastError;
|
|
282
|
+
for (let i = 0; i < this.providers.length; i++) {
|
|
283
|
+
const provider = this.providers[i];
|
|
284
|
+
try {
|
|
285
|
+
const result = provider.provider === "typesafe"
|
|
286
|
+
? await this.evaluateWithTypeSafe(provider, state, questions)
|
|
287
|
+
: await this.evaluateWithOpenRouter(provider, state, questions);
|
|
288
|
+
return { ...result, provider: provider.provider };
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
const providerError = toProviderError(error, provider.provider);
|
|
292
|
+
lastError = providerError;
|
|
293
|
+
const isLast = i === this.providers.length - 1;
|
|
294
|
+
if (!providerError.retryable || isLast) {
|
|
295
|
+
throw providerError;
|
|
296
|
+
}
|
|
297
|
+
logError("[JevJudge]", `Provider ${provider.provider} failed (${providerError.message}); trying the next provider`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
throw lastError ?? new Error("No Jev provider configured");
|
|
301
|
+
}
|
|
302
|
+
evaluateWithTypeSafe(provider, state, questions) {
|
|
303
|
+
const cacheKey = providerCacheKey(provider);
|
|
304
|
+
let judge = this.typesafeJudges.get(cacheKey);
|
|
305
|
+
if (!judge) {
|
|
306
|
+
judge = new TypeSafeJudge({
|
|
307
|
+
apiKey: provider.apiKey,
|
|
308
|
+
baseUrl: provider.baseUrl,
|
|
309
|
+
model: provider.model,
|
|
310
|
+
timeoutMs: this.config.timeoutMs,
|
|
311
|
+
});
|
|
312
|
+
this.typesafeJudges.set(cacheKey, judge);
|
|
313
|
+
}
|
|
314
|
+
return judge.evaluate(state, questions);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Evaluate through OpenRouter.
|
|
318
|
+
*
|
|
319
|
+
* OpenRouter is an OpenAI compatible endpoint, so the questions are
|
|
320
|
+
* asked as a prompt and the answer is parsed as JSON. This path has its
|
|
321
|
+
* own contract and does not use the TypeSafe request format.
|
|
322
|
+
*/
|
|
323
|
+
async evaluateWithOpenRouter(provider, state, questions) {
|
|
324
|
+
const cacheKey = providerCacheKey(provider);
|
|
325
|
+
let client = this.openrouterClients.get(cacheKey);
|
|
326
|
+
if (!client) {
|
|
327
|
+
client = new OpenAI({
|
|
328
|
+
apiKey: provider.apiKey,
|
|
329
|
+
baseURL: provider.baseUrl,
|
|
330
|
+
timeout: this.config.timeoutMs,
|
|
331
|
+
});
|
|
332
|
+
this.openrouterClients.set(cacheKey, client);
|
|
333
|
+
}
|
|
161
334
|
const startTime = Date.now();
|
|
162
335
|
// Convert state to string if object
|
|
163
336
|
const stateStr = typeof state === "string" ? state : JSON.stringify(state);
|
|
@@ -172,7 +345,10 @@ export class JevJudge {
|
|
|
172
345
|
else if (questionObj.type === "choice") {
|
|
173
346
|
entry.type = "choice";
|
|
174
347
|
entry.instructions = questionObj.instructions;
|
|
175
|
-
entry.options = questionObj
|
|
348
|
+
entry.options = choiceNames(questionObj);
|
|
349
|
+
const descriptions = choiceDescriptions(questionObj);
|
|
350
|
+
if (descriptions)
|
|
351
|
+
entry.descriptions = descriptions;
|
|
176
352
|
}
|
|
177
353
|
else if (questionObj.type === "score") {
|
|
178
354
|
entry.type = "score";
|
|
@@ -181,12 +357,14 @@ export class JevJudge {
|
|
|
181
357
|
entry.min = questionObj.min;
|
|
182
358
|
if (questionObj.max !== undefined)
|
|
183
359
|
entry.max = questionObj.max;
|
|
360
|
+
if (questionObj.criteria)
|
|
361
|
+
entry.criteria = questionObj.criteria;
|
|
184
362
|
}
|
|
185
363
|
return entry;
|
|
186
364
|
});
|
|
187
365
|
// Call Jev via OpenRouter
|
|
188
|
-
const response = await
|
|
189
|
-
model:
|
|
366
|
+
const response = await client.chat.completions.create({
|
|
367
|
+
model: provider.model,
|
|
190
368
|
messages: [
|
|
191
369
|
{
|
|
192
370
|
role: "system",
|
|
@@ -227,7 +405,9 @@ Respond with a JSON object mapping each question ID to its answer.`,
|
|
|
227
405
|
const questionData = question;
|
|
228
406
|
const responseData = parsed[questionId];
|
|
229
407
|
if (!responseData) {
|
|
230
|
-
|
|
408
|
+
// The same policy as the TypeSafe path: a partial answer would
|
|
409
|
+
// silently produce a decision from a subset of the questions.
|
|
410
|
+
throw new JevProviderError(`OpenRouter: missing answer for required question "${questionId}"`, { provider: "openrouter", retryable: false });
|
|
231
411
|
}
|
|
232
412
|
const decision = this.buildDecision(questionId, questionData, responseData);
|
|
233
413
|
decisions[questionId] = decision;
|
|
@@ -236,7 +416,7 @@ Respond with a JSON object mapping each question ID to its answer.`,
|
|
|
236
416
|
decisions,
|
|
237
417
|
state: stateStr,
|
|
238
418
|
latencyMs,
|
|
239
|
-
model:
|
|
419
|
+
model: provider.model,
|
|
240
420
|
};
|
|
241
421
|
}
|
|
242
422
|
/**
|
|
@@ -295,6 +475,12 @@ Respond with a JSON object mapping each question ID to its answer.`,
|
|
|
295
475
|
}
|
|
296
476
|
return results;
|
|
297
477
|
}
|
|
478
|
+
/**
|
|
479
|
+
* The provider chain in use.
|
|
480
|
+
*/
|
|
481
|
+
getProviders() {
|
|
482
|
+
return [...this.providers];
|
|
483
|
+
}
|
|
298
484
|
// Private helpers
|
|
299
485
|
// Note: Response schema removed - using json_object mode without strict schema
|
|
300
486
|
// This allows Jev to return flexible responses
|
|
@@ -333,8 +519,36 @@ Respond with a JSON object mapping each question ID to its answer.`,
|
|
|
333
519
|
return "low";
|
|
334
520
|
}
|
|
335
521
|
}
|
|
522
|
+
/**
|
|
523
|
+
* The candidate names of a choice question.
|
|
524
|
+
*/
|
|
525
|
+
function choiceNames(question) {
|
|
526
|
+
const criteria = question.criteria;
|
|
527
|
+
if (Array.isArray(criteria))
|
|
528
|
+
return [...criteria];
|
|
529
|
+
if (criteria)
|
|
530
|
+
return Object.keys(criteria);
|
|
531
|
+
return [...(question.options ?? [])];
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* The per option descriptions of a choice question, when there are any.
|
|
535
|
+
*/
|
|
536
|
+
function choiceDescriptions(question) {
|
|
537
|
+
const criteria = question.criteria;
|
|
538
|
+
if (criteria && !Array.isArray(criteria)) {
|
|
539
|
+
const entries = Object.entries(criteria);
|
|
540
|
+
if (entries.length === 0)
|
|
541
|
+
return undefined;
|
|
542
|
+
return Object.fromEntries(entries);
|
|
543
|
+
}
|
|
544
|
+
if (question.optionDescriptions)
|
|
545
|
+
return question.optionDescriptions;
|
|
546
|
+
return undefined;
|
|
547
|
+
}
|
|
336
548
|
// Export types
|
|
337
549
|
export * from "./types.js";
|
|
550
|
+
// Export provider errors
|
|
551
|
+
export { JevProviderError, isRetryableStatus, toProviderError } from "./provider-error.js";
|
|
338
552
|
// Export submodules
|
|
339
553
|
export { E2EJudge } from "./e2e-judge.js";
|
|
340
554
|
export { FlakyDetector } from "./flaky-detector.js";
|
|
@@ -345,7 +559,9 @@ export { checkWrapUp, getTodoSummary } from "./wrap-up-judge.js";
|
|
|
345
559
|
// Export EnvironmentJudge
|
|
346
560
|
export { EnvironmentJudge } from "./environment-judge.js";
|
|
347
561
|
// Export TypeSafeJudge
|
|
348
|
-
export { TypeSafeJudge, detectProvider } from "./typesafe-provider.js";
|
|
562
|
+
export { TypeSafeJudge, detectProvider, providerForBaseUrl } from "./typesafe-provider.js";
|
|
563
|
+
// Export the TypeSafe request contract helpers
|
|
564
|
+
export { buildChoiceCriteria, buildScoreScale, scorePositionToProbability, scorePositionToValue, validateQuestion, MAX_SCORE_LEVELS, } from "./typesafe-request.js";
|
|
349
565
|
// Export TodoContinuation
|
|
350
566
|
export { TodoContinuationController, createTodoContinuation } from "./continuation-controller.js";
|
|
351
567
|
// Export TodoProvider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider errors for the Jev judge.
|
|
3
|
+
*
|
|
4
|
+
* The judge can talk to more than one provider (TypeSafe direct API first,
|
|
5
|
+
* OpenRouter as a fallback). A failure therefore carries the information the
|
|
6
|
+
* fallback logic needs: which provider failed, whether the failure was an
|
|
7
|
+
* HTTP error, and whether ANOTHER provider could still serve the request.
|
|
8
|
+
*/
|
|
9
|
+
import type { JevProviderName } from "./types.js";
|
|
10
|
+
export interface JevProviderErrorOptions {
|
|
11
|
+
provider: JevProviderName;
|
|
12
|
+
/** HTTP status, when the failure came from an HTTP response. */
|
|
13
|
+
status?: number;
|
|
14
|
+
/**
|
|
15
|
+
* True when another provider could still serve the request.
|
|
16
|
+
*
|
|
17
|
+
* Retryable: network failures, timeouts, rate limits, auth failures and
|
|
18
|
+
* 5xx. NOT retryable: 400/422 - those are contract errors in the request
|
|
19
|
+
* we build, and falling back would hide the bug.
|
|
20
|
+
*/
|
|
21
|
+
retryable: boolean;
|
|
22
|
+
cause?: unknown;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Error raised by a single Jev provider call.
|
|
26
|
+
*/
|
|
27
|
+
export declare class JevProviderError extends Error {
|
|
28
|
+
readonly provider: JevProviderName;
|
|
29
|
+
readonly status?: number;
|
|
30
|
+
readonly retryable: boolean;
|
|
31
|
+
constructor(message: string, options: JevProviderErrorOptions);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* HTTP statuses where another provider (or a later attempt) can still help.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isRetryableStatus(status: number): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Extract an HTTP status from an unknown error value.
|
|
39
|
+
*/
|
|
40
|
+
export declare function extractStatus(error: unknown): number | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* True when the error is a known transport failure (network, timeout, abort).
|
|
43
|
+
*
|
|
44
|
+
* Only these are retryable without an HTTP status: they never reached a
|
|
45
|
+
* server that could have rejected the request. Everything else without a
|
|
46
|
+
* status (a bug in our own code, a malformed response, a parse error) is NOT
|
|
47
|
+
* retryable - a contract bug must stay visible instead of being hidden behind
|
|
48
|
+
* a fallback to another provider.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isTransportError(error: unknown): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Wrap any thrown value into a JevProviderError.
|
|
53
|
+
*
|
|
54
|
+
* A failure with an HTTP status is retryable when the status says so (see
|
|
55
|
+
* `isRetryableStatus`). A failure WITHOUT a status is only retryable when it
|
|
56
|
+
* is a known transport failure (network, timeout, abort) - an unknown error
|
|
57
|
+
* is most likely a bug in our own code and must not disappear behind a
|
|
58
|
+
* fallback to another provider.
|
|
59
|
+
*/
|
|
60
|
+
export declare function toProviderError(error: unknown, provider: JevProviderName): JevProviderError;
|
|
61
|
+
//# sourceMappingURL=provider-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-error.d.ts","sourceRoot":"","sources":["../src/provider-error.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACvC,QAAQ,EAAE,eAAe,CAAC;IAC1B,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAM5D;CACD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIhE;AAmED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAwBxD;AAUD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,GAAG,gBAAgB,CAU3F"}
|