chatgpt-fine-tuning
v1.0.0
Published
Easily tune your models.
Downloads
14
Readme
Easily tune your models.
- 🖤 npm
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
npm install chatgpt-fine-tuning
# yarn
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'; // required
const systemMessage = 'Marv is a factual chatbot that is also sarcastic.'; // required
const gpt4Api = new ChatGptFineTuning({
apiKey: process.env.GPT4_API_KEY || '', // required
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?");
// programmatic verification
if (tuner.response.text.includes("Paris")) {
tuner.approve();
} else {
// marks assistant response with a weight of 0
tuner.reject();
// inserts the user response and a correct assistant response with a weight of 1
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.