aitelier 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.
Files changed (97) hide show
  1. package/dist/commands/add.d.ts +3 -0
  2. package/dist/commands/add.d.ts.map +1 -0
  3. package/dist/commands/add.js +141 -0
  4. package/dist/commands/add.js.map +1 -0
  5. package/dist/commands/add.test.d.ts +2 -0
  6. package/dist/commands/add.test.d.ts.map +1 -0
  7. package/dist/commands/add.test.js +203 -0
  8. package/dist/commands/add.test.js.map +1 -0
  9. package/dist/commands/eval.d.ts +3 -0
  10. package/dist/commands/eval.d.ts.map +1 -0
  11. package/dist/commands/eval.js +505 -0
  12. package/dist/commands/eval.js.map +1 -0
  13. package/dist/commands/eval.test.d.ts +2 -0
  14. package/dist/commands/eval.test.d.ts.map +1 -0
  15. package/dist/commands/eval.test.js +804 -0
  16. package/dist/commands/eval.test.js.map +1 -0
  17. package/dist/commands/format.d.ts +3 -0
  18. package/dist/commands/format.d.ts.map +1 -0
  19. package/dist/commands/format.js +198 -0
  20. package/dist/commands/format.js.map +1 -0
  21. package/dist/commands/format.test.d.ts +2 -0
  22. package/dist/commands/format.test.d.ts.map +1 -0
  23. package/dist/commands/format.test.js +568 -0
  24. package/dist/commands/format.test.js.map +1 -0
  25. package/dist/commands/init.d.ts +3 -0
  26. package/dist/commands/init.d.ts.map +1 -0
  27. package/dist/commands/init.js +94 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/init.test.d.ts +2 -0
  30. package/dist/commands/init.test.d.ts.map +1 -0
  31. package/dist/commands/init.test.js +123 -0
  32. package/dist/commands/init.test.js.map +1 -0
  33. package/dist/commands/rate.d.ts +3 -0
  34. package/dist/commands/rate.d.ts.map +1 -0
  35. package/dist/commands/rate.js +209 -0
  36. package/dist/commands/rate.js.map +1 -0
  37. package/dist/commands/rate.test.d.ts +2 -0
  38. package/dist/commands/rate.test.d.ts.map +1 -0
  39. package/dist/commands/rate.test.js +393 -0
  40. package/dist/commands/rate.test.js.map +1 -0
  41. package/dist/commands/split.d.ts +3 -0
  42. package/dist/commands/split.d.ts.map +1 -0
  43. package/dist/commands/split.js +210 -0
  44. package/dist/commands/split.js.map +1 -0
  45. package/dist/commands/split.test.d.ts +2 -0
  46. package/dist/commands/split.test.d.ts.map +1 -0
  47. package/dist/commands/split.test.js +503 -0
  48. package/dist/commands/split.test.js.map +1 -0
  49. package/dist/commands/stats.d.ts +3 -0
  50. package/dist/commands/stats.d.ts.map +1 -0
  51. package/dist/commands/stats.js +209 -0
  52. package/dist/commands/stats.js.map +1 -0
  53. package/dist/commands/stats.test.d.ts +2 -0
  54. package/dist/commands/stats.test.d.ts.map +1 -0
  55. package/dist/commands/stats.test.js +476 -0
  56. package/dist/commands/stats.test.js.map +1 -0
  57. package/dist/commands/status.d.ts +3 -0
  58. package/dist/commands/status.d.ts.map +1 -0
  59. package/dist/commands/status.js +132 -0
  60. package/dist/commands/status.js.map +1 -0
  61. package/dist/commands/status.test.d.ts +2 -0
  62. package/dist/commands/status.test.d.ts.map +1 -0
  63. package/dist/commands/status.test.js +443 -0
  64. package/dist/commands/status.test.js.map +1 -0
  65. package/dist/commands/train.d.ts +3 -0
  66. package/dist/commands/train.d.ts.map +1 -0
  67. package/dist/commands/train.js +139 -0
  68. package/dist/commands/train.js.map +1 -0
  69. package/dist/commands/train.test.d.ts +2 -0
  70. package/dist/commands/train.test.d.ts.map +1 -0
  71. package/dist/commands/train.test.js +288 -0
  72. package/dist/commands/train.test.js.map +1 -0
  73. package/dist/index.d.ts +3 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +27 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/providers/openai.d.ts +9 -0
  78. package/dist/providers/openai.d.ts.map +1 -0
  79. package/dist/providers/openai.js +20 -0
  80. package/dist/providers/openai.js.map +1 -0
  81. package/dist/providers/together.d.ts +11 -0
  82. package/dist/providers/together.d.ts.map +1 -0
  83. package/dist/providers/together.js +118 -0
  84. package/dist/providers/together.js.map +1 -0
  85. package/dist/providers/types.d.ts +28 -0
  86. package/dist/providers/types.d.ts.map +1 -0
  87. package/dist/providers/types.js +2 -0
  88. package/dist/providers/types.js.map +1 -0
  89. package/dist/storage/config.d.ts +24 -0
  90. package/dist/storage/config.d.ts.map +1 -0
  91. package/dist/storage/config.js +11 -0
  92. package/dist/storage/config.js.map +1 -0
  93. package/dist/storage/dataset.d.ts +14 -0
  94. package/dist/storage/dataset.d.ts.map +1 -0
  95. package/dist/storage/dataset.js +18 -0
  96. package/dist/storage/dataset.js.map +1 -0
  97. package/package.json +58 -0
@@ -0,0 +1,209 @@
1
+ import { access } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { readExamples } from '../storage/dataset.js';
4
+ import { loadConfig } from '../storage/config.js';
5
+ const CONFIG_FILE = '.ftpipeline.json';
6
+ const EXAMPLES_FILE = 'data/examples.jsonl';
7
+ const TRAIN_FILE = 'data/train.jsonl';
8
+ const VAL_FILE = 'data/val.jsonl';
9
+ export function registerStats(program) {
10
+ program
11
+ .command('stats')
12
+ .description('Show dataset health overview')
13
+ .action(async () => {
14
+ try {
15
+ await statsCommand();
16
+ }
17
+ catch (error) {
18
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
19
+ process.exit(1);
20
+ }
21
+ });
22
+ }
23
+ async function statsCommand() {
24
+ const cwd = process.cwd();
25
+ // Check if project is initialized
26
+ try {
27
+ await access(join(cwd, CONFIG_FILE));
28
+ }
29
+ catch {
30
+ throw new Error('Project not initialized. Run `ft init` first to create .ftpipeline.json');
31
+ }
32
+ // Load config to get quality threshold
33
+ const config = await loadConfig(cwd);
34
+ // Load examples
35
+ const examplesPath = join(cwd, EXAMPLES_FILE);
36
+ let examples;
37
+ try {
38
+ examples = await readExamples(examplesPath);
39
+ }
40
+ catch (error) {
41
+ if (error.code === 'ENOENT') {
42
+ console.log('No examples found. Add examples with `ft add` first.');
43
+ return;
44
+ }
45
+ throw error;
46
+ }
47
+ // Check if file has any examples
48
+ if (examples.length === 0) {
49
+ console.log('No examples found. Add examples with `ft add` first.');
50
+ return;
51
+ }
52
+ // Calculate statistics
53
+ const stats = calculateStats(examples, config.qualityThreshold);
54
+ // Check for train/val files
55
+ try {
56
+ await access(join(cwd, TRAIN_FILE));
57
+ stats.hasTrainFile = true;
58
+ }
59
+ catch {
60
+ stats.hasTrainFile = false;
61
+ }
62
+ try {
63
+ await access(join(cwd, VAL_FILE));
64
+ stats.hasValFile = true;
65
+ }
66
+ catch {
67
+ stats.hasValFile = false;
68
+ }
69
+ // Count examples with split assignments
70
+ stats.trainCount = examples.filter((e) => e.split === 'train').length;
71
+ stats.valCount = examples.filter((e) => e.split === 'val').length;
72
+ // Display statistics
73
+ displayStats(stats, config.qualityThreshold);
74
+ }
75
+ function calculateStats(examples, threshold) {
76
+ const stats = {
77
+ total: examples.length,
78
+ rated: 0,
79
+ unrated: 0,
80
+ ratingDistribution: new Map(),
81
+ aboveThreshold: 0,
82
+ trainCount: 0,
83
+ valCount: 0,
84
+ hasTrainFile: false,
85
+ hasValFile: false,
86
+ };
87
+ for (const example of examples) {
88
+ if (example.rating === null) {
89
+ stats.unrated++;
90
+ }
91
+ else {
92
+ stats.rated++;
93
+ const rating = example.rating;
94
+ stats.ratingDistribution.set(rating, (stats.ratingDistribution.get(rating) || 0) + 1);
95
+ if (rating >= threshold) {
96
+ stats.aboveThreshold++;
97
+ }
98
+ }
99
+ }
100
+ return stats;
101
+ }
102
+ function displayStats(stats, threshold) {
103
+ console.log('\n' + '═'.repeat(70));
104
+ console.log('Dataset Health Overview');
105
+ console.log('═'.repeat(70));
106
+ // Dataset size
107
+ console.log(`\nTotal examples: ${stats.total}`);
108
+ console.log(`Rated: ${stats.rated} (${percentage(stats.rated, stats.total)}%)`);
109
+ console.log(`Unrated: ${stats.unrated} (${percentage(stats.unrated, stats.total)}%)`);
110
+ // Rating distribution histogram
111
+ if (stats.rated > 0) {
112
+ console.log('\nRating Distribution:');
113
+ console.log('━'.repeat(70));
114
+ displayHistogram(stats.ratingDistribution, stats.rated);
115
+ }
116
+ // Quality threshold analysis
117
+ console.log('\nQuality Analysis:');
118
+ console.log('━'.repeat(70));
119
+ console.log(`Quality threshold: ${threshold}/10`);
120
+ console.log(`Examples ≥ ${threshold}: ${stats.aboveThreshold} (${percentage(stats.aboveThreshold, stats.total)}%)`);
121
+ // Train/val split status
122
+ console.log('\nTrain/Val Split:');
123
+ console.log('━'.repeat(70));
124
+ if (stats.trainCount > 0 || stats.valCount > 0) {
125
+ console.log(`Train: ${stats.trainCount} examples`);
126
+ console.log(`Val: ${stats.valCount} examples`);
127
+ if (stats.hasTrainFile) {
128
+ console.log('✓ train.jsonl exists');
129
+ }
130
+ else {
131
+ console.log('✗ train.jsonl not found (run `ft format` to generate)');
132
+ }
133
+ if (stats.hasValFile) {
134
+ console.log('✓ val.jsonl exists');
135
+ }
136
+ else {
137
+ console.log('✗ val.jsonl not found (run `ft format` to generate)');
138
+ }
139
+ }
140
+ else {
141
+ console.log('Not yet split (run `ft split` to assign train/val splits)');
142
+ }
143
+ // Readiness assessment
144
+ console.log('\nReadiness:');
145
+ console.log('━'.repeat(70));
146
+ assessReadiness(stats, threshold);
147
+ console.log('═'.repeat(70) + '\n');
148
+ }
149
+ function displayHistogram(distribution, total) {
150
+ // Display histogram for ratings 1-10
151
+ const maxBarLength = 40;
152
+ const maxCount = Math.max(...Array.from(distribution.values()));
153
+ for (let rating = 10; rating >= 1; rating--) {
154
+ const count = distribution.get(rating) || 0;
155
+ const barLength = maxCount > 0 ? Math.round((count / maxCount) * maxBarLength) : 0;
156
+ const bar = '█'.repeat(barLength);
157
+ const pct = percentage(count, total);
158
+ console.log(`${rating.toString().padStart(2)}/10 │${bar.padEnd(maxBarLength)} │ ${count.toString().padStart(3)} (${pct.toString().padStart(5)}%)`);
159
+ }
160
+ }
161
+ function assessReadiness(stats, _threshold) {
162
+ const issues = [];
163
+ const recommendations = [];
164
+ // Check for unrated examples
165
+ if (stats.unrated > 0) {
166
+ issues.push(`${stats.unrated} unrated examples`);
167
+ recommendations.push('Run `ft rate` to rate all examples');
168
+ }
169
+ // Check for sufficient high-quality examples
170
+ if (stats.aboveThreshold < 20) {
171
+ issues.push(`Only ${stats.aboveThreshold} examples meet quality threshold (recommend 20+ for fine-tuning)`);
172
+ if (stats.rated < stats.total) {
173
+ recommendations.push('Rate more examples to identify high-quality data');
174
+ }
175
+ else {
176
+ recommendations.push('Add more examples with `ft add` or lower quality threshold');
177
+ }
178
+ }
179
+ // Check for train/val split
180
+ if (stats.trainCount === 0 && stats.valCount === 0) {
181
+ issues.push('No train/val split assigned');
182
+ recommendations.push('Run `ft split` to create train/val splits');
183
+ }
184
+ // Check for formatted files
185
+ if (!stats.hasTrainFile || !stats.hasValFile) {
186
+ issues.push('Training files not generated');
187
+ recommendations.push('Run `ft format` to generate train.jsonl and val.jsonl');
188
+ }
189
+ if (issues.length === 0) {
190
+ console.log('✓ Dataset is ready for training');
191
+ console.log(' Run `ft train` to start fine-tuning');
192
+ }
193
+ else {
194
+ console.log('✗ Dataset not ready for training:');
195
+ for (const issue of issues) {
196
+ console.log(` • ${issue}`);
197
+ }
198
+ console.log('\nRecommended next steps:');
199
+ for (const rec of recommendations) {
200
+ console.log(` 1. ${rec}`);
201
+ }
202
+ }
203
+ }
204
+ function percentage(value, total) {
205
+ if (total === 0)
206
+ return 0;
207
+ return Math.round((value / total) * 100);
208
+ }
209
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stats.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.test.d.ts","sourceRoot":"","sources":["../../src/commands/stats.test.ts"],"names":[],"mappings":""}