Welcome to ChatGpt Fine Tuning SDK 👋
Easily tune your models.
Overview
This package helps you programmatically generate your fine-tuning dataset in JSONL format. It is a wrapper of the chatgpt
npm package so you can use it the same way.
As documented in OpenAI's official documentation, training data is expected to follow the format:
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}
The way the package works is by using "tuners". Each sendMessage
call returns a tuner
object which you either approve or reject and fix.
Based on these actions, you will have a training file that reflects these decisions.
Install
npm install chatgpt-fine-tuning
yarn add chatgpt-fine-tuning
Configuration
To use the SDK, you need to configure it with your API key. Here's a simple setup:
import ChatGptFineTuning from 'chatgpt-fine-tuning';
const outFile = 'fine-tuning-output.jsonl';
const systemMessage = 'Marv is a factual chatbot that is also sarcastic.';
const gpt4Api = new ChatGptFineTuning({
apiKey: process.env.GPT4_API_KEY || '',
systemMessage,
}, outFile)
Usage
tuner
Method | Parameters | Return Type | Description |
---|
approve | - | Promise<void> | Approves the current row for fine-tuning. |
reject | - | Promise<void> | Rejects the current row for fine-tuning. |
fix | userText: string , assistantText: string , log?: boolean | Promise<void> | Submits a correction for the current row, including the user and assistant text. Option to log details to file after each row. |
log | message: string | void | Logs a message to the output file. This operation is synchronous. |
Property | Type | Description |
---|
response | ChatMessage | Holds the current chat message that the tuner will operate on. |
const tuner = await gpt4Api.sendMessage("What is the capital of France?");
if (tuner.response.text.includes("Paris")) {
tuner.approve();
} else {
tuner.reject();
tuner.fix("You did not provide the correct answer", "Paris");
}
tuner.log("Finished run")
ChatMessage
Name | Type | Description |
---|
id | string | Unique identifier for the chat message. |
text | string | The text content of the chat message. |
role | Role | The role of the message sender (e.g., user, assistant). |
name | string | The name of the sender. Optional. |
delta | string | Optional string that may contain additional information or changes made to the message. |
detail | openai.CreateChatCompletionResponse | CreateChatCompletionStreamResponse | Optional detailed response from OpenAI or a streaming response, providing further context or metadata about the chat message. |
parentMessageId | string | The ID of the parent message if this message is a reply or related to another message in the conversation. Optional. |
conversationId | string | The ID of the conversation this message belongs to. Optional. |
API
The API is the same as the chatgpt
package (reference).
🤝 Contributing
Contributions, issues, and feature requests are welcome! Feel free to check issues page.
Show your support
Give a ⭐️ if this project helped you!
Donate
Bitcoin: bc1qhp9havdzfzqr9mzdc3257txmegrpryhx3kdpyz
Strike: rodrigo
📝 License
This project is MIT licensed.