Skip to content

Commit b151f32

Browse files
committed
create fine-tuning example
1 parent d1fee33 commit b151f32

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed

examples/fine-tuning-data.jsonl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{"messages": [{"role": "system", "content": "<system message 1>"}, {"role": "user", "content": "<user message 1>"}, {"role": "assistant", "content": "<example desired response 1>"}]}
2+
{"messages": [{"role": "system", "content": "<system message 2>"}, {"role": "user", "content": "<user message 2>"}, {"role": "assistant", "content": "<example desired response 2>"}]}
3+
{"messages": [{"role": "system", "content": "<system message 3>"}, {"role": "user", "content": "<user message 3>"}, {"role": "assistant", "content": "<example desired response 3>"}]}
4+
{"messages": [{"role": "system", "content": "<system message 4>"}, {"role": "user", "content": "<user message 4>"}, {"role": "assistant", "content": "<example desired response 4>"}]}
5+
{"messages": [{"role": "system", "content": "<system message 5>"}, {"role": "user", "content": "<user message 5>"}, {"role": "assistant", "content": "<example desired response 5>"}]}
6+
{"messages": [{"role": "system", "content": "<system message 6>"}, {"role": "user", "content": "<user message 6>"}, {"role": "assistant", "content": "<example desired response 6>"}]}
7+
{"messages": [{"role": "system", "content": "<system message 7>"}, {"role": "user", "content": "<user message 7>"}, {"role": "assistant", "content": "<example desired response 7>"}]}
8+
{"messages": [{"role": "system", "content": "<system message 8>"}, {"role": "user", "content": "<user message 8>"}, {"role": "assistant", "content": "<example desired response 8>"}]}
9+
{"messages": [{"role": "system", "content": "<system message 9>"}, {"role": "user", "content": "<user message 9>"}, {"role": "assistant", "content": "<example desired response 9>"}]}
10+
{"messages": [{"role": "system", "content": "<system message 10>"}, {"role": "user", "content": "<user message 10>"}, {"role": "assistant", "content": "<example desired response 10>"}]}

examples/fine-tuning.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#!/usr/bin/env -S npm run tsn -T
2+
3+
/**
4+
* Fine-tuning allows you to train models on your own data.
5+
*
6+
* See these guides for more information:
7+
* - https://help.openai.com/en/articles/5528730-fine-tuning-a-classifier-to-improve-truthfulness
8+
* - https://platform.openai.com/docs/guides/fine-tuning
9+
*/
10+
11+
import fs from 'fs';
12+
import OpenAI from 'openai';
13+
14+
// Gets the API Key from the environment variable `OPENAI_API_KEY`
15+
const client = new OpenAI();
16+
17+
async function main() {
18+
console.log(`Uploading file`);
19+
20+
let file = await client.files.create({
21+
file: fs.createReadStream('./examples/fine-tune-data.jsonl'),
22+
purpose: 'fine-tune',
23+
});
24+
console.log(`Uploaded file with ID: ${file.id}`);
25+
console.log('-----');
26+
27+
// Wait for the file to be processed
28+
console.log(`Waiting for file to be processed`);
29+
while (true) {
30+
file = await client.files.retrieve(file.id);
31+
console.log(`File status: ${file.status}`);
32+
33+
if (file.status === 'processed') {
34+
break;
35+
} else {
36+
await new Promise((resolve) => setTimeout(resolve, 1000));
37+
}
38+
}
39+
40+
console.log('-----');
41+
42+
console.log(`Starting fine-tuning`);
43+
let fineTune = await client.fineTuning.jobs.create({ model: 'gpt-3.5-turbo', training_file: file.id });
44+
console.log(`Fine-tuning ID: ${fineTune.id}`);
45+
console.log('-----');
46+
47+
console.log(`Track fine-tuning progress:`);
48+
let after: string | undefined;
49+
while (fineTune.status !== 'succeeded') {
50+
fineTune = await client.fineTuning.jobs.retrieve(fineTune.id);
51+
console.log(`${fineTune.status}`);
52+
53+
const options = after ? { limit: 50, after } : { limit: 50 };
54+
const events = await client.fineTuning.jobs.listEvents(fineTune.id, options);
55+
for (const event of events.data.reverse()) {
56+
console.log(`- ${event.created_at}: ${event.message}`);
57+
}
58+
59+
if (events.data.length > 0) {
60+
after = events.data[events.data.length - 1]?.id;
61+
console.log(after);
62+
}
63+
64+
await new Promise((resolve) => setTimeout(resolve, 5000));
65+
}
66+
}
67+
68+
main().catch((err) => {
69+
console.error(err);
70+
process.exit(1);
71+
});

src/resources/fine-tuning/jobs.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ export interface FineTuningJobEvent {
194194
message: string;
195195

196196
object: string;
197+
198+
id: string;
197199
}
198200

199201
export interface JobCreateParams {

0 commit comments

Comments
 (0)