@m4trix/evals 0.1.0 → 0.2.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.
package/dist/index.cjs CHANGED
@@ -2,11 +2,33 @@
2
2
 
3
3
  var crypto = require('crypto');
4
4
  var effect = require('effect');
5
- var promises = require('fs/promises');
5
+ var fs = require('fs');
6
6
  var path = require('path');
7
+ var jitiModule = require('jiti');
8
+ var promises = require('fs/promises');
7
9
  var url = require('url');
8
10
 
9
11
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
12
+ function _interopNamespace(e) {
13
+ if (e && e.__esModule) return e;
14
+ var n = Object.create(null);
15
+ if (e) {
16
+ Object.keys(e).forEach(function (k) {
17
+ if (k !== 'default') {
18
+ var d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: function () { return e[k]; }
22
+ });
23
+ }
24
+ });
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+
30
+ var jitiModule__namespace = /*#__PURE__*/_interopNamespace(jitiModule);
31
+
10
32
  // src/cli/data.mock.json
11
33
  var data_mock_default = {
12
34
  datasets: [
@@ -544,6 +566,9 @@ var binaryScore = Score.of({
544
566
  });
545
567
 
546
568
  // src/runner/config.ts
569
+ function defineConfigFunction(factory) {
570
+ return factory;
571
+ }
547
572
  var defaultRunnerConfig = {
548
573
  discovery: {
549
574
  rootDir: process.cwd(),
@@ -564,6 +589,42 @@ var defaultRunnerConfig = {
564
589
  },
565
590
  artifactDirectory: ".eval-results"
566
591
  };
592
+ function toRunnerConfigOverrides(config) {
593
+ if (!config) {
594
+ return void 0;
595
+ }
596
+ const rawDiscovery = config.discovery;
597
+ const discovery = {};
598
+ if (rawDiscovery?.rootDir !== void 0) {
599
+ discovery.rootDir = rawDiscovery.rootDir;
600
+ }
601
+ if (rawDiscovery?.datasetFilePatterns !== void 0) {
602
+ discovery.datasetSuffixes = rawDiscovery.datasetFilePatterns;
603
+ } else if (rawDiscovery?.datasetSuffixes !== void 0) {
604
+ discovery.datasetSuffixes = rawDiscovery.datasetSuffixes;
605
+ }
606
+ if (rawDiscovery?.evaluatorFilePatterns !== void 0) {
607
+ discovery.evaluatorSuffixes = rawDiscovery.evaluatorFilePatterns;
608
+ } else if (rawDiscovery?.evaluatorSuffixes !== void 0) {
609
+ discovery.evaluatorSuffixes = rawDiscovery.evaluatorSuffixes;
610
+ }
611
+ if (rawDiscovery?.testCaseFilePatterns !== void 0) {
612
+ discovery.testCaseSuffixes = rawDiscovery.testCaseFilePatterns;
613
+ } else if (rawDiscovery?.testCaseSuffixes !== void 0) {
614
+ discovery.testCaseSuffixes = rawDiscovery.testCaseSuffixes;
615
+ }
616
+ if (rawDiscovery?.excludeDirectories !== void 0) {
617
+ discovery.excludeDirectories = rawDiscovery.excludeDirectories;
618
+ }
619
+ const overrides = {};
620
+ if (config.artifactDirectory !== void 0) {
621
+ overrides.artifactDirectory = config.artifactDirectory;
622
+ }
623
+ if (Object.keys(discovery).length > 0) {
624
+ overrides.discovery = discovery;
625
+ }
626
+ return overrides;
627
+ }
567
628
  function withRunnerConfig(overrides) {
568
629
  if (!overrides) {
569
630
  return defaultRunnerConfig;
@@ -578,6 +639,53 @@ function withRunnerConfig(overrides) {
578
639
  discovery
579
640
  };
580
641
  }
642
+ var CONFIG_FILE_NAME = "m4trix-eval.config.ts";
643
+ var cachedLoader;
644
+ function getJitiLoader() {
645
+ if (cachedLoader) {
646
+ return cachedLoader;
647
+ }
648
+ const createJiti2 = jitiModule__namespace.createJiti ?? jitiModule__namespace.default;
649
+ if (typeof createJiti2 !== "function") {
650
+ throw new Error("Failed to initialize jiti for m4trix eval config loading.");
651
+ }
652
+ cachedLoader = createJiti2((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)), {
653
+ interopDefault: true,
654
+ moduleCache: true
655
+ });
656
+ return cachedLoader;
657
+ }
658
+ function resolveConfigModuleExport(loadedModule) {
659
+ if (loadedModule && typeof loadedModule === "object" && "default" in loadedModule) {
660
+ return loadedModule.default;
661
+ }
662
+ return loadedModule;
663
+ }
664
+ function resolveConfigValue(value) {
665
+ if (value === void 0 || value === null) {
666
+ return void 0;
667
+ }
668
+ if (typeof value === "function") {
669
+ return value();
670
+ }
671
+ if (typeof value !== "object") {
672
+ throw new Error(
673
+ "Invalid m4trix eval config export. Expected an object or defineConfigFunction(() => config)."
674
+ );
675
+ }
676
+ return value;
677
+ }
678
+ function loadRunnerConfigFile(cwd = process.cwd()) {
679
+ const configPath = path.resolve(cwd, CONFIG_FILE_NAME);
680
+ if (!fs.existsSync(configPath)) {
681
+ return void 0;
682
+ }
683
+ const loader = getJitiLoader();
684
+ const loaded = loader(configPath);
685
+ const exportedValue = resolveConfigModuleExport(loaded);
686
+ const config = resolveConfigValue(exportedValue);
687
+ return toRunnerConfigOverrides(config);
688
+ }
581
689
  var jitiLoader;
582
690
  function toId(prefix, filePath, name) {
583
691
  const stable = name && name.trim().length > 0 ? name : filePath;
@@ -629,12 +737,12 @@ function hasOneSuffix(filePath, suffixes) {
629
737
  async function loadModuleExports(filePath) {
630
738
  if (filePath.endsWith(".ts") || filePath.endsWith(".tsx")) {
631
739
  if (!jitiLoader) {
632
- const jitiModule = await import('jiti');
633
- const createJiti = jitiModule.createJiti ?? jitiModule.default;
634
- if (!createJiti) {
740
+ const jitiModule2 = await import('jiti');
741
+ const createJiti2 = jitiModule2.createJiti ?? jitiModule2.default;
742
+ if (!createJiti2) {
635
743
  throw new Error("Failed to initialize jiti TypeScript loader");
636
744
  }
637
- jitiLoader = createJiti((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)), {
745
+ jitiLoader = createJiti2((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('out.js', document.baseURI).href)), {
638
746
  interopDefault: true,
639
747
  moduleCache: true
640
748
  });
@@ -965,8 +1073,27 @@ function createNameMatcher(pattern) {
965
1073
  }
966
1074
  return (value) => value.toLowerCase() === normalizedPattern.toLowerCase();
967
1075
  }
1076
+ function mergeRunnerOverrides(base, next) {
1077
+ if (!base) {
1078
+ return next;
1079
+ }
1080
+ if (!next) {
1081
+ return base;
1082
+ }
1083
+ const discovery = base.discovery || next.discovery ? {
1084
+ ...base.discovery ?? {},
1085
+ ...next.discovery ?? {}
1086
+ } : void 0;
1087
+ return {
1088
+ ...base,
1089
+ ...next,
1090
+ discovery
1091
+ };
1092
+ }
968
1093
  function createRunner(overrides) {
969
- return new EffectRunner(withRunnerConfig(overrides));
1094
+ const fileOverrides = loadRunnerConfigFile();
1095
+ const merged = mergeRunnerOverrides(fileOverrides, overrides);
1096
+ return new EffectRunner(withRunnerConfig(merged));
970
1097
  }
971
1098
  var EffectRunner = class {
972
1099
  constructor(config) {
@@ -1171,6 +1298,7 @@ exports.TestCase = TestCase;
1171
1298
  exports.binaryScore = binaryScore;
1172
1299
  exports.createRunner = createRunner;
1173
1300
  exports.defaultRunnerConfig = defaultRunnerConfig;
1301
+ exports.defineConfigFunction = defineConfigFunction;
1174
1302
  exports.getMetricById = getMetricById;
1175
1303
  exports.getScoreById = getScoreById;
1176
1304
  exports.latencyMetric = latencyMetric;