@velum-labs/routekit-eval-service 1.0.24 → 1.0.26

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.
@@ -23,36 +23,40 @@ export function compileDimensionEvidenceMatrix(input) {
23
23
  }
24
24
  comparisons.set(dimension.dimensionId, dimension);
25
25
  }
26
- for (const dimension of input.basis.dimensions) {
27
- if (!comparisons.has(dimension.id)) {
28
- fail(`comparison is missing dimension ${JSON.stringify(dimension.id)}`);
29
- }
26
+ if (comparisons.size === 0) {
27
+ fail("comparison is missing every selected dimension");
30
28
  }
31
29
  const evidence = [];
32
30
  for (const dimension of input.basis.dimensions) {
33
31
  const dimensionInput = comparisons.get(dimension.id);
32
+ if (dimensionInput === undefined) {
33
+ continue;
34
+ }
34
35
  evidence.push(...compileDimension(dimensionInput, candidateModels));
35
36
  }
36
37
  evidence.sort((left, right) => left.model.localeCompare(right.model) || left.dimensionId.localeCompare(right.dimensionId));
37
38
  const evidenceDigest = stableDigest(evidence);
38
39
  // Reuse the public contract's exhaustive matrix validation before returning
39
40
  // an artifact that can be handed to the v2 snapshot store.
40
- try {
41
- assertPublishedRoutingActivation({
42
- version: COMPOSITIONAL_ROUTING_VERSION,
43
- generatedAt: "1970-01-01T00:00:00.000Z",
44
- basisDigest: input.basis.basisDigest,
45
- evidenceDigest,
46
- classifierModel: "routekit/evidence-validator",
47
- objective: { kind: "highest-quality" },
48
- maximumUnknownWeight: 1,
49
- dimensions: [...input.basis.dimensions],
50
- candidateModels: [...candidateModels],
51
- evidence
52
- });
53
- }
54
- catch (cause) {
55
- fail(`compiled model-dimension evidence is invalid: ${detailOf(cause)}`);
41
+ const compiledDimensions = input.basis.dimensions.filter((dimension) => comparisons.has(dimension.id));
42
+ if (compiledDimensions.length === input.basis.dimensions.length) {
43
+ try {
44
+ assertPublishedRoutingActivation({
45
+ version: COMPOSITIONAL_ROUTING_VERSION,
46
+ generatedAt: "1970-01-01T00:00:00.000Z",
47
+ basisDigest: input.basis.basisDigest,
48
+ evidenceDigest,
49
+ classifierModel: "routekit/evidence-validator",
50
+ objective: { kind: "highest-quality" },
51
+ maximumUnknownWeight: 1,
52
+ dimensions: [...input.basis.dimensions],
53
+ candidateModels: [...candidateModels],
54
+ evidence
55
+ });
56
+ }
57
+ catch (cause) {
58
+ fail(`compiled model-dimension evidence is invalid: ${detailOf(cause)}`);
59
+ }
56
60
  }
57
61
  return { evidenceDigest, evidence };
58
62
  }
@@ -109,7 +109,8 @@ test("partial duration measurements do not produce a misleading percentile", ()
109
109
  test("matrix compilation rejects missing and duplicate dimensions or candidates", () => {
110
110
  const missingDimension = input();
111
111
  missingDimension.comparisons.pop();
112
- assert.throws(() => compileDimensionEvidenceMatrix(missingDimension), /missing dimension/);
112
+ const partial = compileDimensionEvidenceMatrix(missingDimension);
113
+ assert.equal(partial.evidence.length, (dimensionIds.length - 1) * models.length);
113
114
  const duplicateDimension = input();
114
115
  duplicateDimension.comparisons[1] = duplicateDimension.comparisons[0];
115
116
  assert.throws(() => compileDimensionEvidenceMatrix(duplicateDimension), /duplicate dimension/);
@@ -345,7 +345,7 @@ test("production runner uses its selected Node runtime for validation before obs
345
345
  assert.match(String(exit.cause), /missing-node/iu);
346
346
  }
347
347
  });
348
- test("production runner isolates qualification from a project SDK with a shorter hidden abort", async () => {
348
+ test("production runner uses its bundled SDK with or without copy isolation", async () => {
349
349
  const root = await mkdtemp(path.join(os.tmpdir(), "routekit-eval-runner-isolated-sdk-"));
350
350
  roots.push(root);
351
351
  await writeShadowEvalSdk(root, 20);
@@ -383,16 +383,18 @@ test("production runner isolates qualification from a project SDK with a shorter
383
383
  const address = gateway.address();
384
384
  assert.ok(address !== null && typeof address !== "string");
385
385
  try {
386
- const shadowed = await Effect.runPromise(withEvalService({
386
+ const unisolatedStarted = Date.now();
387
+ const unisolated = await Effect.runPromise(withEvalService({
387
388
  bearerCredential: "parent-only-token",
388
389
  timeoutMs: 15_000
389
390
  }, (service) => service.runComparison({
390
391
  ...requestFor(suite, `http://127.0.0.1:${String(address.port)}`),
391
392
  candidateModels: ["openai/cheap"],
392
393
  timeoutMs: 20
393
- }, "full")).pipe(Effect.provide(NodeHttpClient.layerUndici), Effect.exit));
394
- assert.equal(Exit.isFailure(shadowed), true);
395
- assert.deepEqual(calls, []);
394
+ }, "full")).pipe(Effect.provide(NodeHttpClient.layerUndici)));
395
+ assert.deepEqual(calls, ["openai/cheap", "openai/judge"]);
396
+ assert.equal(unisolated.models[0]?.cases[0]?.outcome, "passed");
397
+ assert.ok(Date.now() - unisolatedStarted >= 75, "runner-owned SDK materialization must replace the project SDK's 20ms abort");
396
398
  const started = Date.now();
397
399
  const result = await Effect.runPromise(withEvalService({
398
400
  bearerCredential: "parent-only-token",
@@ -403,9 +405,14 @@ test("production runner isolates qualification from a project SDK with a shorter
403
405
  candidateModels: ["openai/cheap"],
404
406
  timeoutMs: 20
405
407
  }, "full")).pipe(Effect.provide(NodeHttpClient.layerUndici)));
406
- assert.deepEqual(calls, ["openai/cheap", "openai/judge"]);
408
+ assert.deepEqual(calls, [
409
+ "openai/cheap",
410
+ "openai/judge",
411
+ "openai/cheap",
412
+ "openai/judge"
413
+ ]);
407
414
  assert.equal(result.models[0]?.cases[0]?.outcome, "passed");
408
- assert.ok(Date.now() - started >= 75, "the project SDK's 20ms abort must not bound execution");
415
+ assert.ok(Date.now() - started >= 75, "copy isolation must also keep the project SDK's 20ms abort out of execution");
409
416
  }
410
417
  finally {
411
418
  await new Promise((resolve, reject) => gateway.close((error) => (error === undefined ? resolve() : reject(error))));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@velum-labs/routekit-eval-service",
3
3
  "private": false,
4
- "version": "1.0.24",
4
+ "version": "1.0.26",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/velum-labs/routekit.git",
@@ -32,10 +32,10 @@
32
32
  "dependencies": {
33
33
  "@effect/platform-node": "4.0.0-rc.108",
34
34
  "effect": "4.0.0-rc.108",
35
- "@velum-labs/routekit-eval-contracts": "1.0.24",
36
- "@velum-labs/routekit-eval-engine": "1.0.24",
37
- "@velum-labs/routekit-eval-store": "1.0.24",
38
- "@velum-labs/routekit-registry": "1.0.24"
35
+ "@velum-labs/routekit-eval-contracts": "1.0.26",
36
+ "@velum-labs/routekit-eval-engine": "1.0.26",
37
+ "@velum-labs/routekit-eval-store": "1.0.26",
38
+ "@velum-labs/routekit-registry": "1.0.26"
39
39
  },
40
40
  "devDependencies": {
41
41
  "typescript": "7.0.2"