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 @@
1
+ {"version":3,"file":"train.test.d.ts","sourceRoot":"","sources":["../../src/commands/train.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,288 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { writeFile, readFile, mkdtemp, rm, mkdir } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { tmpdir } from 'node:os';
5
+ import { Command } from 'commander';
6
+ import { registerTrain } from './train.js';
7
+ describe('ft train', () => {
8
+ let testDir;
9
+ let originalCwd;
10
+ let originalFetch;
11
+ beforeEach(async () => {
12
+ // Create a temporary directory for each test
13
+ testDir = await mkdtemp(join(tmpdir(), 'ft-train-test-'));
14
+ originalCwd = process.cwd();
15
+ process.chdir(testDir);
16
+ // Mock TOGETHER_API_KEY
17
+ process.env.TOGETHER_API_KEY = 'test-api-key';
18
+ // Create basic project structure
19
+ const config = {
20
+ name: 'test-project',
21
+ provider: 'together',
22
+ model: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
23
+ qualityThreshold: 8,
24
+ runs: [],
25
+ };
26
+ await writeFile('.ftpipeline.json', JSON.stringify(config, null, 2));
27
+ await mkdir('data', { recursive: true });
28
+ // Create sample training and validation files
29
+ const trainData = [
30
+ {
31
+ messages: [
32
+ { role: 'user', content: 'Question 1' },
33
+ { role: 'assistant', content: 'Answer 1' },
34
+ ],
35
+ },
36
+ {
37
+ messages: [
38
+ { role: 'user', content: 'Question 2' },
39
+ { role: 'assistant', content: 'Answer 2' },
40
+ ],
41
+ },
42
+ ];
43
+ const valData = [
44
+ {
45
+ messages: [
46
+ { role: 'user', content: 'Val Question 1' },
47
+ { role: 'assistant', content: 'Val Answer 1' },
48
+ ],
49
+ },
50
+ ];
51
+ await writeFile('data/train.jsonl', trainData.map((d) => JSON.stringify(d)).join('\n') + '\n');
52
+ await writeFile('data/val.jsonl', valData.map((d) => JSON.stringify(d)).join('\n') + '\n');
53
+ // Mock fetch for API calls
54
+ originalFetch = globalThis.fetch;
55
+ });
56
+ afterEach(async () => {
57
+ process.chdir(originalCwd);
58
+ await rm(testDir, { recursive: true, force: true });
59
+ vi.restoreAllMocks();
60
+ globalThis.fetch = originalFetch;
61
+ delete process.env.TOGETHER_API_KEY;
62
+ });
63
+ it('should upload files and create a fine-tune job', async () => {
64
+ let uploadCallCount = 0;
65
+ let createJobCalled = false;
66
+ // Mock fetch to simulate Together.ai API
67
+ globalThis.fetch = vi.fn(async (url, options) => {
68
+ const urlString = typeof url === 'string' ? url : url.toString();
69
+ // Mock file upload
70
+ if (urlString.includes('/files/upload')) {
71
+ uploadCallCount++;
72
+ return {
73
+ ok: true,
74
+ json: async () => ({ id: `file-${uploadCallCount}` }),
75
+ text: async () => '',
76
+ };
77
+ }
78
+ // Mock fine-tune job creation
79
+ if (urlString.includes('/fine-tunes') && options?.method === 'POST') {
80
+ createJobCalled = true;
81
+ const body = JSON.parse(options.body);
82
+ expect(body.model).toBe('meta-llama/Llama-3.3-70B-Instruct-Turbo');
83
+ expect(body.training_file).toBe('file-1');
84
+ expect(body.validation_file).toBe('file-2');
85
+ expect(body.n_epochs).toBe(3);
86
+ expect(body.batch_size).toBe(4);
87
+ expect(body.learning_rate).toBe(1e-5);
88
+ expect(body.lora_r).toBe(16);
89
+ expect(body.lora_alpha).toBe(32);
90
+ return {
91
+ ok: true,
92
+ json: async () => ({ id: 'ft-job-123' }),
93
+ text: async () => '',
94
+ };
95
+ }
96
+ throw new Error(`Unexpected fetch call: ${urlString}`);
97
+ });
98
+ const program = new Command();
99
+ registerTrain(program);
100
+ await program.parseAsync(['node', 'test', 'train']);
101
+ // Verify files were uploaded
102
+ expect(uploadCallCount).toBe(2);
103
+ // Verify job was created
104
+ expect(createJobCalled).toBe(true);
105
+ // Verify job was saved to config
106
+ const configContent = await readFile('.ftpipeline.json', 'utf-8');
107
+ const config = JSON.parse(configContent);
108
+ expect(config.runs).toHaveLength(1);
109
+ expect(config.runs[0].jobId).toBe('ft-job-123');
110
+ expect(config.runs[0].provider).toBe('together');
111
+ expect(config.runs[0].status).toBe('pending');
112
+ expect(config.runs[0].hyperparameters).toEqual({
113
+ epochs: 3,
114
+ batchSize: 4,
115
+ learningRate: 1e-5,
116
+ loraR: 16,
117
+ loraAlpha: 32,
118
+ });
119
+ });
120
+ it('should support custom hyperparameters', async () => {
121
+ let jobConfig = {};
122
+ globalThis.fetch = vi.fn(async (url, options) => {
123
+ const urlString = typeof url === 'string' ? url : url.toString();
124
+ if (urlString.includes('/files/upload')) {
125
+ return {
126
+ ok: true,
127
+ json: async () => ({ id: 'file-test' }),
128
+ text: async () => '',
129
+ };
130
+ }
131
+ if (urlString.includes('/fine-tunes') && options?.method === 'POST') {
132
+ jobConfig = JSON.parse(options.body);
133
+ return {
134
+ ok: true,
135
+ json: async () => ({ id: 'ft-job-custom' }),
136
+ text: async () => '',
137
+ };
138
+ }
139
+ throw new Error(`Unexpected fetch call: ${urlString}`);
140
+ });
141
+ const program = new Command();
142
+ registerTrain(program);
143
+ await program.parseAsync([
144
+ 'node',
145
+ 'test',
146
+ 'train',
147
+ '--epochs',
148
+ '5',
149
+ '--batch-size',
150
+ '8',
151
+ '--learning-rate',
152
+ '2e-5',
153
+ '--lora-r',
154
+ '32',
155
+ '--lora-alpha',
156
+ '64',
157
+ ]);
158
+ expect(jobConfig.n_epochs).toBe(5);
159
+ expect(jobConfig.batch_size).toBe(8);
160
+ expect(jobConfig.learning_rate).toBe(2e-5);
161
+ expect(jobConfig.lora_r).toBe(32);
162
+ expect(jobConfig.lora_alpha).toBe(64);
163
+ });
164
+ it('should work without validation file', async () => {
165
+ // Remove validation file
166
+ await rm('data/val.jsonl');
167
+ let uploadCallCount = 0;
168
+ let jobConfig = {};
169
+ globalThis.fetch = vi.fn(async (url, options) => {
170
+ const urlString = typeof url === 'string' ? url : url.toString();
171
+ if (urlString.includes('/files/upload')) {
172
+ uploadCallCount++;
173
+ return {
174
+ ok: true,
175
+ json: async () => ({ id: `file-${uploadCallCount}` }),
176
+ text: async () => '',
177
+ };
178
+ }
179
+ if (urlString.includes('/fine-tunes') && options?.method === 'POST') {
180
+ jobConfig = JSON.parse(options.body);
181
+ return {
182
+ ok: true,
183
+ json: async () => ({ id: 'ft-job-no-val' }),
184
+ text: async () => '',
185
+ };
186
+ }
187
+ throw new Error(`Unexpected fetch call: ${urlString}`);
188
+ });
189
+ const program = new Command();
190
+ registerTrain(program);
191
+ await program.parseAsync(['node', 'test', 'train']);
192
+ // Should only upload training file
193
+ expect(uploadCallCount).toBe(1);
194
+ // Job config should not have validation_file
195
+ expect(jobConfig.validation_file).toBeUndefined();
196
+ });
197
+ it('should fail if project not initialized', async () => {
198
+ await rm('.ftpipeline.json');
199
+ const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
200
+ throw new Error('process.exit called');
201
+ });
202
+ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
203
+ const program = new Command();
204
+ registerTrain(program);
205
+ await expect(program.parseAsync(['node', 'test', 'train'])).rejects.toThrow('process.exit called');
206
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Project not initialized'));
207
+ mockExit.mockRestore();
208
+ consoleErrorSpy.mockRestore();
209
+ });
210
+ it('should fail if training file not found', async () => {
211
+ await rm('data/train.jsonl');
212
+ const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
213
+ throw new Error('process.exit called');
214
+ });
215
+ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
216
+ const program = new Command();
217
+ registerTrain(program);
218
+ await expect(program.parseAsync(['node', 'test', 'train'])).rejects.toThrow('process.exit called');
219
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Training file not found'));
220
+ mockExit.mockRestore();
221
+ consoleErrorSpy.mockRestore();
222
+ });
223
+ it('should fail if API key not set', async () => {
224
+ delete process.env.TOGETHER_API_KEY;
225
+ const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
226
+ throw new Error('process.exit called');
227
+ });
228
+ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
229
+ const program = new Command();
230
+ registerTrain(program);
231
+ await expect(program.parseAsync(['node', 'test', 'train'])).rejects.toThrow('process.exit called');
232
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('TOGETHER_API_KEY environment variable is required'));
233
+ mockExit.mockRestore();
234
+ consoleErrorSpy.mockRestore();
235
+ });
236
+ it('should handle file upload errors gracefully', async () => {
237
+ globalThis.fetch = vi.fn(async (url) => {
238
+ const urlString = typeof url === 'string' ? url : url.toString();
239
+ if (urlString.includes('/files/upload')) {
240
+ return {
241
+ ok: false,
242
+ text: async () => 'File upload failed: invalid format',
243
+ };
244
+ }
245
+ throw new Error(`Unexpected fetch call: ${urlString}`);
246
+ });
247
+ const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
248
+ throw new Error('process.exit called');
249
+ });
250
+ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
251
+ const program = new Command();
252
+ registerTrain(program);
253
+ await expect(program.parseAsync(['node', 'test', 'train'])).rejects.toThrow('process.exit called');
254
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Failed to upload file'));
255
+ mockExit.mockRestore();
256
+ consoleErrorSpy.mockRestore();
257
+ });
258
+ it('should handle job creation errors gracefully', async () => {
259
+ globalThis.fetch = vi.fn(async (url, options) => {
260
+ const urlString = typeof url === 'string' ? url : url.toString();
261
+ if (urlString.includes('/files/upload')) {
262
+ return {
263
+ ok: true,
264
+ json: async () => ({ id: 'file-test' }),
265
+ text: async () => '',
266
+ };
267
+ }
268
+ if (urlString.includes('/fine-tunes') && options?.method === 'POST') {
269
+ return {
270
+ ok: false,
271
+ text: async () => 'Job creation failed: insufficient credits',
272
+ };
273
+ }
274
+ throw new Error(`Unexpected fetch call: ${urlString}`);
275
+ });
276
+ const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
277
+ throw new Error('process.exit called');
278
+ });
279
+ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
280
+ const program = new Command();
281
+ registerTrain(program);
282
+ await expect(program.parseAsync(['node', 'test', 'train'])).rejects.toThrow('process.exit called');
283
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Failed to create fine-tune job'));
284
+ mockExit.mockRestore();
285
+ consoleErrorSpy.mockRestore();
286
+ });
287
+ });
288
+ //# sourceMappingURL=train.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"train.test.js","sourceRoot":"","sources":["../../src/commands/train.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { registerInit } from './commands/init.js';
4
+ import { registerAdd } from './commands/add.js';
5
+ import { registerRate } from './commands/rate.js';
6
+ import { registerStats } from './commands/stats.js';
7
+ import { registerFormat } from './commands/format.js';
8
+ import { registerSplit } from './commands/split.js';
9
+ import { registerTrain } from './commands/train.js';
10
+ import { registerEval } from './commands/eval.js';
11
+ import { registerStatus } from './commands/status.js';
12
+ const program = new Command();
13
+ program
14
+ .name('ft')
15
+ .description('CLI for collecting, rating, formatting, and iterating on LLM fine-tuning datasets')
16
+ .version('0.1.0');
17
+ registerInit(program);
18
+ registerAdd(program);
19
+ registerRate(program);
20
+ registerStats(program);
21
+ registerFormat(program);
22
+ registerSplit(program);
23
+ registerTrain(program);
24
+ registerEval(program);
25
+ registerStatus(program);
26
+ program.parse();
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,mFAAmF,CAAC;KAChG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Provider, FineTuneConfig, JobStatus, Message } from './types.js';
2
+ export declare class OpenAIProvider implements Provider {
3
+ name: string;
4
+ uploadTrainingFile(_filePath: string): Promise<string>;
5
+ createFineTuneJob(_config: FineTuneConfig): Promise<string>;
6
+ getJobStatus(_jobId: string): Promise<JobStatus>;
7
+ runInference(_model: string, _messages: Message[]): Promise<string>;
8
+ }
9
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE/E,qBAAa,cAAe,YAAW,QAAQ;IAC7C,IAAI,SAAY;IAEV,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKtD,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAKhD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAI1E"}
@@ -0,0 +1,20 @@
1
+ export class OpenAIProvider {
2
+ name = 'openai';
3
+ async uploadTrainingFile(_filePath) {
4
+ // TODO: implement OpenAI file upload
5
+ throw new Error('Not implemented');
6
+ }
7
+ async createFineTuneJob(_config) {
8
+ // TODO: implement OpenAI fine-tune job creation
9
+ throw new Error('Not implemented');
10
+ }
11
+ async getJobStatus(_jobId) {
12
+ // TODO: implement OpenAI job status check
13
+ throw new Error('Not implemented');
14
+ }
15
+ async runInference(_model, _messages) {
16
+ // TODO: implement OpenAI inference
17
+ throw new Error('Not implemented');
18
+ }
19
+ }
20
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACzB,IAAI,GAAG,QAAQ,CAAC;IAEhB,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QACxC,qCAAqC;QACrC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAuB;QAC7C,gDAAgD;QAChD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,0CAA0C;QAC1C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,SAAoB;QACrD,mCAAmC;QACnC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { Provider, FineTuneConfig, JobStatus, Message } from './types.js';
2
+ export declare class TogetherProvider implements Provider {
3
+ name: string;
4
+ private apiKey;
5
+ constructor();
6
+ uploadTrainingFile(filePath: string): Promise<string>;
7
+ createFineTuneJob(config: FineTuneConfig): Promise<string>;
8
+ getJobStatus(jobId: string): Promise<JobStatus>;
9
+ runInference(model: string, messages: Message[]): Promise<string>;
10
+ }
11
+ //# sourceMappingURL=together.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"together.d.ts","sourceRoot":"","sources":["../../src/providers/together.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI/E,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,IAAI,SAAc;IAClB,OAAO,CAAC,MAAM,CAAS;;IAUjB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BrD,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IA4C1D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAmC/C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAwBxE"}
@@ -0,0 +1,118 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ const TOGETHER_API_BASE = 'https://api.together.xyz/v1';
3
+ export class TogetherProvider {
4
+ name = 'together';
5
+ apiKey;
6
+ constructor() {
7
+ const key = process.env.TOGETHER_API_KEY;
8
+ if (!key) {
9
+ throw new Error('TOGETHER_API_KEY environment variable is required');
10
+ }
11
+ this.apiKey = key;
12
+ }
13
+ async uploadTrainingFile(filePath) {
14
+ const fileContent = await readFile(filePath, 'utf-8');
15
+ const fileName = filePath.split('/').pop() || 'training.jsonl';
16
+ const formData = new FormData();
17
+ const blob = new Blob([fileContent], { type: 'application/jsonl' });
18
+ formData.append('file', blob, fileName);
19
+ formData.append('purpose', 'fine-tune');
20
+ const response = await fetch(`${TOGETHER_API_BASE}/files/upload`, {
21
+ method: 'POST',
22
+ headers: {
23
+ Authorization: `Bearer ${this.apiKey}`,
24
+ },
25
+ body: formData,
26
+ });
27
+ if (!response.ok) {
28
+ const error = await response.text();
29
+ throw new Error(`Failed to upload file: ${error}`);
30
+ }
31
+ const data = (await response.json());
32
+ return data.id;
33
+ }
34
+ async createFineTuneJob(config) {
35
+ const body = {
36
+ model: config.model,
37
+ training_file: config.trainingFile,
38
+ };
39
+ // Add optional parameters
40
+ if (config.validationFile) {
41
+ body.validation_file = config.validationFile;
42
+ }
43
+ if (config.epochs !== undefined) {
44
+ body.n_epochs = config.epochs;
45
+ }
46
+ if (config.batchSize !== undefined) {
47
+ body.batch_size = config.batchSize;
48
+ }
49
+ if (config.learningRate !== undefined) {
50
+ body.learning_rate = config.learningRate;
51
+ }
52
+ if (config.loraR !== undefined) {
53
+ body.lora_r = config.loraR;
54
+ }
55
+ if (config.loraAlpha !== undefined) {
56
+ body.lora_alpha = config.loraAlpha;
57
+ }
58
+ const response = await fetch(`${TOGETHER_API_BASE}/fine-tunes`, {
59
+ method: 'POST',
60
+ headers: {
61
+ Authorization: `Bearer ${this.apiKey}`,
62
+ 'Content-Type': 'application/json',
63
+ },
64
+ body: JSON.stringify(body),
65
+ });
66
+ if (!response.ok) {
67
+ const error = await response.text();
68
+ throw new Error(`Failed to create fine-tune job: ${error}`);
69
+ }
70
+ const data = (await response.json());
71
+ return data.id;
72
+ }
73
+ async getJobStatus(jobId) {
74
+ const response = await fetch(`${TOGETHER_API_BASE}/fine-tunes/${jobId}`, {
75
+ headers: {
76
+ Authorization: `Bearer ${this.apiKey}`,
77
+ },
78
+ });
79
+ if (!response.ok) {
80
+ const error = await response.text();
81
+ throw new Error(`Failed to get job status: ${error}`);
82
+ }
83
+ const data = (await response.json());
84
+ const statusMap = {
85
+ pending: 'pending',
86
+ running: 'running',
87
+ succeeded: 'completed',
88
+ failed: 'failed',
89
+ cancelled: 'cancelled',
90
+ };
91
+ return {
92
+ id: data.id,
93
+ status: statusMap[data.status] || 'pending',
94
+ modelId: data.fine_tuned_model,
95
+ error: data.error,
96
+ };
97
+ }
98
+ async runInference(model, messages) {
99
+ const response = await fetch(`${TOGETHER_API_BASE}/chat/completions`, {
100
+ method: 'POST',
101
+ headers: {
102
+ Authorization: `Bearer ${this.apiKey}`,
103
+ 'Content-Type': 'application/json',
104
+ },
105
+ body: JSON.stringify({
106
+ model,
107
+ messages,
108
+ }),
109
+ });
110
+ if (!response.ok) {
111
+ const error = await response.text();
112
+ throw new Error(`Failed to run inference: ${error}`);
113
+ }
114
+ const data = (await response.json());
115
+ return data.choices[0].message.content;
116
+ }
117
+ }
118
+ //# sourceMappingURL=together.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"together.js","sourceRoot":"","sources":["../../src/providers/together.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface Message {
2
+ role: 'system' | 'user' | 'assistant';
3
+ content: string;
4
+ }
5
+ export interface FineTuneConfig {
6
+ model: string;
7
+ trainingFile: string;
8
+ validationFile?: string;
9
+ epochs?: number;
10
+ batchSize?: number;
11
+ learningRate?: number;
12
+ loraR?: number;
13
+ loraAlpha?: number;
14
+ }
15
+ export interface JobStatus {
16
+ id: string;
17
+ status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
18
+ modelId?: string;
19
+ error?: string;
20
+ }
21
+ export interface Provider {
22
+ name: string;
23
+ uploadTrainingFile(filePath: string): Promise<string>;
24
+ createFineTuneJob(config: FineTuneConfig): Promise<string>;
25
+ getJobStatus(jobId: string): Promise<JobStatus>;
26
+ runInference(model: string, messages: Message[]): Promise<string>;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ export interface ProjectConfig {
2
+ name: string;
3
+ provider: 'together' | 'openai';
4
+ model: string;
5
+ systemPrompt?: string;
6
+ qualityThreshold: number;
7
+ runs: Array<{
8
+ jobId: string;
9
+ modelId?: string;
10
+ provider: string;
11
+ startedAt: string;
12
+ status: string;
13
+ hyperparameters?: {
14
+ epochs?: number;
15
+ batchSize?: number;
16
+ learningRate?: number;
17
+ loraR?: number;
18
+ loraAlpha?: number;
19
+ };
20
+ }>;
21
+ }
22
+ export declare function loadConfig(dir?: string): Promise<ProjectConfig>;
23
+ export declare function saveConfig(config: ProjectConfig, dir?: string): Promise<void>;
24
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/storage/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,KAAK,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE;YAChB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC,CAAC;CACJ;AAED,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAGpF;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -0,0 +1,11 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ const CONFIG_FILE = '.ftpipeline.json';
4
+ export async function loadConfig(dir = process.cwd()) {
5
+ const raw = await readFile(join(dir, CONFIG_FILE), 'utf-8');
6
+ return JSON.parse(raw);
7
+ }
8
+ export async function saveConfig(config, dir = process.cwd()) {
9
+ await writeFile(join(dir, CONFIG_FILE), JSON.stringify(config, null, 2) + '\n');
10
+ }
11
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/storage/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAwBvC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC1D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAqB,EACrB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Message } from '../providers/types.js';
2
+ export interface Example {
3
+ id: number;
4
+ messages: Message[];
5
+ rating: number | null;
6
+ originalOutput?: string;
7
+ createdAt: string;
8
+ version: number;
9
+ split?: 'train' | 'val';
10
+ }
11
+ export declare function readExamples(filePath: string): Promise<Example[]>;
12
+ export declare function appendExample(filePath: string, example: Example): Promise<void>;
13
+ export declare function writeExamples(filePath: string, examples: Example[]): Promise<void>;
14
+ //# sourceMappingURL=dataset.d.ts.map