@nahisaho/katashiro-evaluation 2.0.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/LICENSE +21 -0
- package/dist/BenchmarkSuite.d.ts +63 -0
- package/dist/BenchmarkSuite.d.ts.map +1 -0
- package/dist/BenchmarkSuite.js +152 -0
- package/dist/BenchmarkSuite.js.map +1 -0
- package/dist/DatasetManager.d.ts +68 -0
- package/dist/DatasetManager.d.ts.map +1 -0
- package/dist/DatasetManager.js +161 -0
- package/dist/DatasetManager.js.map +1 -0
- package/dist/ExperimentRunner.d.ts +51 -0
- package/dist/ExperimentRunner.d.ts.map +1 -0
- package/dist/ExperimentRunner.js +170 -0
- package/dist/ExperimentRunner.js.map +1 -0
- package/dist/evaluators/CompositeEvaluator.d.ts +66 -0
- package/dist/evaluators/CompositeEvaluator.d.ts.map +1 -0
- package/dist/evaluators/CompositeEvaluator.js +122 -0
- package/dist/evaluators/CompositeEvaluator.js.map +1 -0
- package/dist/evaluators/HeuristicEvaluator.d.ts +82 -0
- package/dist/evaluators/HeuristicEvaluator.d.ts.map +1 -0
- package/dist/evaluators/HeuristicEvaluator.js +233 -0
- package/dist/evaluators/HeuristicEvaluator.js.map +1 -0
- package/dist/evaluators/LLMJudgeEvaluator.d.ts +93 -0
- package/dist/evaluators/LLMJudgeEvaluator.d.ts.map +1 -0
- package/dist/evaluators/LLMJudgeEvaluator.js +296 -0
- package/dist/evaluators/LLMJudgeEvaluator.js.map +1 -0
- package/dist/evaluators/RAGASEvaluators.d.ts +128 -0
- package/dist/evaluators/RAGASEvaluators.d.ts.map +1 -0
- package/dist/evaluators/RAGASEvaluators.js +521 -0
- package/dist/evaluators/RAGASEvaluators.js.map +1 -0
- package/dist/evaluators/index.d.ts +13 -0
- package/dist/evaluators/index.d.ts.map +1 -0
- package/dist/evaluators/index.js +12 -0
- package/dist/evaluators/index.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/reporting/EvaluationReporter.d.ts +135 -0
- package/dist/reporting/EvaluationReporter.d.ts.map +1 -0
- package/dist/reporting/EvaluationReporter.js +285 -0
- package/dist/reporting/EvaluationReporter.js.map +1 -0
- package/dist/reporting/index.d.ts +8 -0
- package/dist/reporting/index.d.ts.map +1 -0
- package/dist/reporting/index.js +8 -0
- package/dist/reporting/index.js.map +1 -0
- package/dist/reporting/templates.d.ts +91 -0
- package/dist/reporting/templates.d.ts.map +1 -0
- package/dist/reporting/templates.js +150 -0
- package/dist/reporting/templates.js.map +1 -0
- package/dist/types.d.ts +408 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 nahisaho
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchmark Suite
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-EVAL-005
|
|
5
|
+
* @design DES-KATASHIRO-003-EVAL §3.6
|
|
6
|
+
*/
|
|
7
|
+
import type { BenchmarkConfig, BenchmarkResult } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* ベンチマーク関数型
|
|
10
|
+
*/
|
|
11
|
+
export type BenchmarkFn = () => Promise<void> | void;
|
|
12
|
+
/**
|
|
13
|
+
* ベンチマークスイート
|
|
14
|
+
*/
|
|
15
|
+
export declare class BenchmarkSuite {
|
|
16
|
+
private results;
|
|
17
|
+
/**
|
|
18
|
+
* ベンチマーク実行
|
|
19
|
+
*/
|
|
20
|
+
run(name: string, fn: BenchmarkFn, config?: BenchmarkConfig): Promise<BenchmarkResult>;
|
|
21
|
+
/**
|
|
22
|
+
* 複数ベンチマーク実行
|
|
23
|
+
*/
|
|
24
|
+
runAll(benchmarks: Array<{
|
|
25
|
+
name: string;
|
|
26
|
+
fn: BenchmarkFn;
|
|
27
|
+
config?: BenchmarkConfig;
|
|
28
|
+
}>): Promise<BenchmarkResult[]>;
|
|
29
|
+
/**
|
|
30
|
+
* 結果取得
|
|
31
|
+
*/
|
|
32
|
+
getResult(name: string): BenchmarkResult | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* 全結果取得
|
|
35
|
+
*/
|
|
36
|
+
getAllResults(): BenchmarkResult[];
|
|
37
|
+
/**
|
|
38
|
+
* 結果比較
|
|
39
|
+
*/
|
|
40
|
+
compare(nameA: string, nameB: string): {
|
|
41
|
+
winner: string;
|
|
42
|
+
speedup: number;
|
|
43
|
+
significant: boolean;
|
|
44
|
+
} | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* レポート生成
|
|
47
|
+
*/
|
|
48
|
+
generateReport(): string;
|
|
49
|
+
/**
|
|
50
|
+
* 結果クリア
|
|
51
|
+
*/
|
|
52
|
+
clear(): void;
|
|
53
|
+
private percentile;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* グローバルベンチマークスイート取得
|
|
57
|
+
*/
|
|
58
|
+
export declare function getBenchmarkSuite(): BenchmarkSuite;
|
|
59
|
+
/**
|
|
60
|
+
* ベンチマークスイートリセット(テスト用)
|
|
61
|
+
*/
|
|
62
|
+
export declare function resetBenchmarkSuite(): void;
|
|
63
|
+
//# sourceMappingURL=BenchmarkSuite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BenchmarkSuite.d.ts","sourceRoot":"","sources":["../src/BenchmarkSuite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAErD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA2C;IAE1D;;OAEG;IACG,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,WAAW,EACf,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,eAAe,CAAC;IAwD3B;;OAEG;IACG,MAAM,CACV,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,WAAW,CAAC;QAChB,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B,CAAC,GACD,OAAO,CAAC,eAAe,EAAE,CAAC;IAW7B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIpD;;OAEG;IACH,aAAa,IAAI,eAAe,EAAE;IAIlC;;OAEG;IACH,OAAO,CACL,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS;IAyBxE;;OAEG;IACH,cAAc,IAAI,MAAM;IAyBxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,UAAU;CAInB;AAKD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchmark Suite
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-EVAL-005
|
|
5
|
+
* @design DES-KATASHIRO-003-EVAL §3.6
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* ベンチマークスイート
|
|
9
|
+
*/
|
|
10
|
+
export class BenchmarkSuite {
|
|
11
|
+
results = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* ベンチマーク実行
|
|
14
|
+
*/
|
|
15
|
+
async run(name, fn, config) {
|
|
16
|
+
const iterations = config?.iterations ?? 100;
|
|
17
|
+
const warmupIterations = config?.warmupIterations ?? 10;
|
|
18
|
+
const timeout = config?.timeout ?? 60000;
|
|
19
|
+
// ウォームアップ
|
|
20
|
+
for (let i = 0; i < warmupIterations; i++) {
|
|
21
|
+
await fn();
|
|
22
|
+
}
|
|
23
|
+
// 測定
|
|
24
|
+
const durations = [];
|
|
25
|
+
const startTotal = Date.now();
|
|
26
|
+
for (let i = 0; i < iterations; i++) {
|
|
27
|
+
if (Date.now() - startTotal > timeout) {
|
|
28
|
+
console.warn(`Benchmark "${name}" timed out after ${i} iterations`);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
const start = performance.now();
|
|
32
|
+
await fn();
|
|
33
|
+
const end = performance.now();
|
|
34
|
+
durations.push(end - start);
|
|
35
|
+
}
|
|
36
|
+
// 統計計算
|
|
37
|
+
const sorted = [...durations].sort((a, b) => a - b);
|
|
38
|
+
const mean = durations.reduce((a, b) => a + b, 0) / durations.length;
|
|
39
|
+
const variance = durations.reduce((sum, d) => sum + Math.pow(d - mean, 2), 0) /
|
|
40
|
+
durations.length;
|
|
41
|
+
const stdDev = Math.sqrt(variance);
|
|
42
|
+
const result = {
|
|
43
|
+
name,
|
|
44
|
+
meanMs: mean,
|
|
45
|
+
stdDevMs: stdDev,
|
|
46
|
+
minMs: sorted[0] ?? 0,
|
|
47
|
+
maxMs: sorted[sorted.length - 1] ?? 0,
|
|
48
|
+
percentiles: {
|
|
49
|
+
p50: this.percentile(sorted, 0.5),
|
|
50
|
+
p90: this.percentile(sorted, 0.9),
|
|
51
|
+
p99: this.percentile(sorted, 0.99),
|
|
52
|
+
},
|
|
53
|
+
iterations: durations.length,
|
|
54
|
+
timestamp: new Date().toISOString(),
|
|
55
|
+
};
|
|
56
|
+
this.results.set(name, result);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 複数ベンチマーク実行
|
|
61
|
+
*/
|
|
62
|
+
async runAll(benchmarks) {
|
|
63
|
+
const results = [];
|
|
64
|
+
for (const { name, fn, config } of benchmarks) {
|
|
65
|
+
const result = await this.run(name, fn, config);
|
|
66
|
+
results.push(result);
|
|
67
|
+
}
|
|
68
|
+
return results;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 結果取得
|
|
72
|
+
*/
|
|
73
|
+
getResult(name) {
|
|
74
|
+
return this.results.get(name);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 全結果取得
|
|
78
|
+
*/
|
|
79
|
+
getAllResults() {
|
|
80
|
+
return Array.from(this.results.values());
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 結果比較
|
|
84
|
+
*/
|
|
85
|
+
compare(nameA, nameB) {
|
|
86
|
+
const resultA = this.results.get(nameA);
|
|
87
|
+
const resultB = this.results.get(nameB);
|
|
88
|
+
if (!resultA || !resultB) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
const speedup = resultA.meanMs / resultB.meanMs;
|
|
92
|
+
const winner = speedup > 1 ? nameB : nameA;
|
|
93
|
+
// 簡易的な有意性判定(2σ)
|
|
94
|
+
const diffMean = Math.abs(resultA.meanMs - resultB.meanMs);
|
|
95
|
+
const combinedStdDev = Math.sqrt(Math.pow(resultA.stdDevMs, 2) + Math.pow(resultB.stdDevMs, 2));
|
|
96
|
+
const significant = diffMean > 2 * combinedStdDev;
|
|
97
|
+
return {
|
|
98
|
+
winner,
|
|
99
|
+
speedup: speedup > 1 ? speedup : 1 / speedup,
|
|
100
|
+
significant,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* レポート生成
|
|
105
|
+
*/
|
|
106
|
+
generateReport() {
|
|
107
|
+
const results = this.getAllResults();
|
|
108
|
+
if (results.length === 0) {
|
|
109
|
+
return 'No benchmark results available.';
|
|
110
|
+
}
|
|
111
|
+
const lines = [
|
|
112
|
+
'# Benchmark Report',
|
|
113
|
+
'',
|
|
114
|
+
`Generated: ${new Date().toISOString()}`,
|
|
115
|
+
'',
|
|
116
|
+
'| Name | Mean (ms) | StdDev | Min | Max | P50 | P90 | P99 | Iterations |',
|
|
117
|
+
'|------|-----------|--------|-----|-----|-----|-----|-----|------------|',
|
|
118
|
+
];
|
|
119
|
+
for (const r of results) {
|
|
120
|
+
lines.push(`| ${r.name} | ${r.meanMs.toFixed(2)} | ${r.stdDevMs.toFixed(2)} | ${r.minMs.toFixed(2)} | ${r.maxMs.toFixed(2)} | ${r.percentiles.p50.toFixed(2)} | ${r.percentiles.p90.toFixed(2)} | ${r.percentiles.p99.toFixed(2)} | ${r.iterations} |`);
|
|
121
|
+
}
|
|
122
|
+
return lines.join('\n');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 結果クリア
|
|
126
|
+
*/
|
|
127
|
+
clear() {
|
|
128
|
+
this.results.clear();
|
|
129
|
+
}
|
|
130
|
+
percentile(sorted, p) {
|
|
131
|
+
const idx = Math.ceil(sorted.length * p) - 1;
|
|
132
|
+
return sorted[Math.max(0, idx)] ?? 0;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// シングルトン
|
|
136
|
+
let benchmarkSuite = null;
|
|
137
|
+
/**
|
|
138
|
+
* グローバルベンチマークスイート取得
|
|
139
|
+
*/
|
|
140
|
+
export function getBenchmarkSuite() {
|
|
141
|
+
if (!benchmarkSuite) {
|
|
142
|
+
benchmarkSuite = new BenchmarkSuite();
|
|
143
|
+
}
|
|
144
|
+
return benchmarkSuite;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* ベンチマークスイートリセット(テスト用)
|
|
148
|
+
*/
|
|
149
|
+
export function resetBenchmarkSuite() {
|
|
150
|
+
benchmarkSuite = null;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=BenchmarkSuite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BenchmarkSuite.js","sourceRoot":"","sources":["../src/BenchmarkSuite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dataset Manager
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-EVAL-004
|
|
5
|
+
* @design DES-KATASHIRO-003-EVAL §3.4
|
|
6
|
+
*/
|
|
7
|
+
import type { Dataset, DatasetItem } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* データセット管理クラス
|
|
10
|
+
*/
|
|
11
|
+
export declare class DatasetManager {
|
|
12
|
+
private datasets;
|
|
13
|
+
private items;
|
|
14
|
+
/**
|
|
15
|
+
* データセット作成
|
|
16
|
+
*/
|
|
17
|
+
create(name: string, options?: {
|
|
18
|
+
description?: string;
|
|
19
|
+
tags?: string[];
|
|
20
|
+
}): Dataset;
|
|
21
|
+
/**
|
|
22
|
+
* データセット取得
|
|
23
|
+
*/
|
|
24
|
+
get(id: string): Dataset | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* データセット一覧取得
|
|
27
|
+
*/
|
|
28
|
+
list(filter?: {
|
|
29
|
+
tags?: string[];
|
|
30
|
+
}): Dataset[];
|
|
31
|
+
/**
|
|
32
|
+
* データセット削除
|
|
33
|
+
*/
|
|
34
|
+
delete(id: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* アイテム追加
|
|
37
|
+
*/
|
|
38
|
+
addItem(datasetId: string, item: Omit<DatasetItem, 'id'>): DatasetItem | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* 複数アイテム追加
|
|
41
|
+
*/
|
|
42
|
+
addItems(datasetId: string, items: Array<Omit<DatasetItem, 'id'>>): DatasetItem[];
|
|
43
|
+
/**
|
|
44
|
+
* アイテム取得
|
|
45
|
+
*/
|
|
46
|
+
getItems(datasetId: string): DatasetItem[];
|
|
47
|
+
/**
|
|
48
|
+
* アイテム削除
|
|
49
|
+
*/
|
|
50
|
+
removeItem(datasetId: string, itemId: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* データセットをJSONにエクスポート
|
|
53
|
+
*/
|
|
54
|
+
export(datasetId: string): string | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* JSONからデータセットをインポート
|
|
57
|
+
*/
|
|
58
|
+
import(json: string): Dataset | undefined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* グローバルデータセットマネージャー取得
|
|
62
|
+
*/
|
|
63
|
+
export declare function getDatasetManager(): DatasetManager;
|
|
64
|
+
/**
|
|
65
|
+
* データセットマネージャーリセット(テスト用)
|
|
66
|
+
*/
|
|
67
|
+
export declare function resetDatasetManager(): void;
|
|
68
|
+
//# sourceMappingURL=DatasetManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatasetManager.d.ts","sourceRoot":"","sources":["../src/DatasetManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,KAAK,CAAyC;IAEtD;;OAEG;IACH,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,GACA,OAAO;IAoBV;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIpC;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,EAAE;IAa7C;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK3B;;OAEG;IACH,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAC5B,WAAW,GAAG,SAAS;IAoB1B;;OAEG;IACH,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GACpC,WAAW,EAAE;IAMhB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAI1C;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAmBtD;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAW7C;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;CA+B1C;AAKD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dataset Manager
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-EVAL-004
|
|
5
|
+
* @design DES-KATASHIRO-003-EVAL §3.4
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* データセット管理クラス
|
|
9
|
+
*/
|
|
10
|
+
export class DatasetManager {
|
|
11
|
+
datasets = new Map();
|
|
12
|
+
items = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* データセット作成
|
|
15
|
+
*/
|
|
16
|
+
create(name, options) {
|
|
17
|
+
const id = `ds-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
18
|
+
const now = new Date().toISOString();
|
|
19
|
+
const dataset = {
|
|
20
|
+
id,
|
|
21
|
+
name,
|
|
22
|
+
description: options?.description,
|
|
23
|
+
size: 0,
|
|
24
|
+
tags: options?.tags,
|
|
25
|
+
createdAt: now,
|
|
26
|
+
updatedAt: now,
|
|
27
|
+
};
|
|
28
|
+
this.datasets.set(id, dataset);
|
|
29
|
+
this.items.set(id, []);
|
|
30
|
+
return dataset;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* データセット取得
|
|
34
|
+
*/
|
|
35
|
+
get(id) {
|
|
36
|
+
return this.datasets.get(id);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* データセット一覧取得
|
|
40
|
+
*/
|
|
41
|
+
list(filter) {
|
|
42
|
+
const datasets = Array.from(this.datasets.values());
|
|
43
|
+
if (filter?.tags && filter.tags.length > 0) {
|
|
44
|
+
return datasets.filter((ds) => ds.tags && filter.tags.some((tag) => ds.tags.includes(tag)));
|
|
45
|
+
}
|
|
46
|
+
return datasets;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* データセット削除
|
|
50
|
+
*/
|
|
51
|
+
delete(id) {
|
|
52
|
+
this.items.delete(id);
|
|
53
|
+
return this.datasets.delete(id);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* アイテム追加
|
|
57
|
+
*/
|
|
58
|
+
addItem(datasetId, item) {
|
|
59
|
+
const dataset = this.datasets.get(datasetId);
|
|
60
|
+
const datasetItems = this.items.get(datasetId);
|
|
61
|
+
if (!dataset || !datasetItems) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
const newItem = {
|
|
65
|
+
id: `item-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
66
|
+
...item,
|
|
67
|
+
};
|
|
68
|
+
datasetItems.push(newItem);
|
|
69
|
+
dataset.size = datasetItems.length;
|
|
70
|
+
dataset.updatedAt = new Date().toISOString();
|
|
71
|
+
return newItem;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 複数アイテム追加
|
|
75
|
+
*/
|
|
76
|
+
addItems(datasetId, items) {
|
|
77
|
+
return items
|
|
78
|
+
.map((item) => this.addItem(datasetId, item))
|
|
79
|
+
.filter((item) => item !== undefined);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* アイテム取得
|
|
83
|
+
*/
|
|
84
|
+
getItems(datasetId) {
|
|
85
|
+
return this.items.get(datasetId) ?? [];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* アイテム削除
|
|
89
|
+
*/
|
|
90
|
+
removeItem(datasetId, itemId) {
|
|
91
|
+
const dataset = this.datasets.get(datasetId);
|
|
92
|
+
const datasetItems = this.items.get(datasetId);
|
|
93
|
+
if (!dataset || !datasetItems) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
const idx = datasetItems.findIndex((item) => item.id === itemId);
|
|
97
|
+
if (idx >= 0) {
|
|
98
|
+
datasetItems.splice(idx, 1);
|
|
99
|
+
dataset.size = datasetItems.length;
|
|
100
|
+
dataset.updatedAt = new Date().toISOString();
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* データセットをJSONにエクスポート
|
|
107
|
+
*/
|
|
108
|
+
export(datasetId) {
|
|
109
|
+
const dataset = this.datasets.get(datasetId);
|
|
110
|
+
const items = this.items.get(datasetId);
|
|
111
|
+
if (!dataset || !items) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
return JSON.stringify({ dataset, items }, null, 2);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* JSONからデータセットをインポート
|
|
118
|
+
*/
|
|
119
|
+
import(json) {
|
|
120
|
+
try {
|
|
121
|
+
const { dataset, items } = JSON.parse(json);
|
|
122
|
+
// 新しいIDを生成
|
|
123
|
+
const newId = `ds-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
124
|
+
const now = new Date().toISOString();
|
|
125
|
+
const newDataset = {
|
|
126
|
+
...dataset,
|
|
127
|
+
id: newId,
|
|
128
|
+
createdAt: now,
|
|
129
|
+
updatedAt: now,
|
|
130
|
+
};
|
|
131
|
+
const newItems = items.map((item) => ({
|
|
132
|
+
...item,
|
|
133
|
+
id: `item-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
134
|
+
}));
|
|
135
|
+
this.datasets.set(newId, newDataset);
|
|
136
|
+
this.items.set(newId, newItems);
|
|
137
|
+
return newDataset;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// シングルトン
|
|
145
|
+
let datasetManager = null;
|
|
146
|
+
/**
|
|
147
|
+
* グローバルデータセットマネージャー取得
|
|
148
|
+
*/
|
|
149
|
+
export function getDatasetManager() {
|
|
150
|
+
if (!datasetManager) {
|
|
151
|
+
datasetManager = new DatasetManager();
|
|
152
|
+
}
|
|
153
|
+
return datasetManager;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* データセットマネージャーリセット(テスト用)
|
|
157
|
+
*/
|
|
158
|
+
export function resetDatasetManager() {
|
|
159
|
+
datasetManager = null;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=DatasetManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatasetManager.js","sourceRoot":"","sources":["../src/DatasetManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experiment Runner
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-EVAL-005
|
|
5
|
+
* @design DES-KATASHIRO-003-EVAL §3.5
|
|
6
|
+
*/
|
|
7
|
+
import type { ExperimentConfig, ExperimentResult } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* 実験ランナー設定
|
|
10
|
+
*/
|
|
11
|
+
export interface ExperimentRunnerConfig {
|
|
12
|
+
/** 並列実行数 */
|
|
13
|
+
concurrency?: number;
|
|
14
|
+
/** タイムアウト(ミリ秒) */
|
|
15
|
+
timeout?: number;
|
|
16
|
+
/** 進捗コールバック */
|
|
17
|
+
onProgress?: (current: number, total: number) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 実験ランナー
|
|
21
|
+
*/
|
|
22
|
+
export declare class ExperimentRunner {
|
|
23
|
+
private config;
|
|
24
|
+
private experiments;
|
|
25
|
+
constructor(config?: ExperimentRunnerConfig);
|
|
26
|
+
/**
|
|
27
|
+
* 実験実行
|
|
28
|
+
*/
|
|
29
|
+
run(experimentConfig: ExperimentConfig, generator: (input: string) => Promise<string>): Promise<ExperimentResult>;
|
|
30
|
+
/**
|
|
31
|
+
* 実験結果取得
|
|
32
|
+
*/
|
|
33
|
+
getResult(experimentId: string): ExperimentResult | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* 全実験結果取得
|
|
36
|
+
*/
|
|
37
|
+
listResults(): ExperimentResult[];
|
|
38
|
+
/**
|
|
39
|
+
* サマリー計算
|
|
40
|
+
*/
|
|
41
|
+
private calculateSummary;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* グローバル実験ランナー取得
|
|
45
|
+
*/
|
|
46
|
+
export declare function getExperimentRunner(): ExperimentRunner;
|
|
47
|
+
/**
|
|
48
|
+
* 実験ランナーリセット(テスト用)
|
|
49
|
+
*/
|
|
50
|
+
export declare function resetExperimentRunner(): void;
|
|
51
|
+
//# sourceMappingURL=ExperimentRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExperimentRunner.d.ts","sourceRoot":"","sources":["../src/ExperimentRunner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAKjB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,YAAY;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,WAAW,CAA4C;gBAEnD,MAAM,CAAC,EAAE,sBAAsB;IAQ3C;;OAEG;IACG,GAAG,CACP,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5C,OAAO,CAAC,gBAAgB,CAAC;IAyG5B;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI7D;;OAEG;IACH,WAAW,IAAI,gBAAgB,EAAE;IAIjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAwCzB;AAKD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAKtD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|