Support Gitmoji Format in Commit Messages (#249)
* 📝 docs(prompts.ts): update prompt message to include information about GitMoji convention and descriptions of changes 📝 docs(prompts.ts): update prompt message to include information about GitMoji convention and descriptions of changes * 🎨 (prompts.ts): import `removeConventionalCommitWord` function to remove conventional commit word from commit prompts 🐛 (prompts.ts): remove conventional commit word from `commitFix` and `commitFeat` prompts to improve clarity 📝 (removeConventionalCommitWord.ts): add `removeConventionalCommitWord` function to remove conventional commit word from commit message * 📝 (package.json): update version from 3.0.3 to 3.0.0 to align with the latest release * 🔧 (cli.ts): add a new flag 'fgm' to the 'flags' object to support the '--fgm' flag in the CLI command 🔧 (commit.ts): pass the value of the 'fgm' flag to the 'commit' function to enable or disable full GitMoji specification ♻️ (commit.ts): refactor the 'commit' function to accept the 'fullGitMojiSpec' parameter and pass it to the 'commit' function recursively ♻️ (generateCommitMessageFromGitDiff.ts): refactor the 'generateCommitMessageByDiff' function to accept the 'fullGitMojiSpec' parameter and pass it to the 'generateCommitMessageChatCompletionPrompt' function ♻️ (generateCommitMessageFromGitDiff.ts): refactor the 'generateCommitMessageChatCompletionPrompt' function to accept the 'fullGitMojiSpec' parameter and pass it to the 'getMainCommitPrompt' function ♻️ (generateCommitMessageFromGitDiff.ts): refactor the 'getCommitMsgsPromisesFromFileDiffs' function to accept the 'fullGitMojiSpec' parameter and pass it to the 'getMessagesPromisesByChangesInFile' function ♻️ (generateCommitMessageFromGitDiff.ts): refactor the 'getMessagesPromisesByChangesInFile' function to accept the 'fullGitMojiSpec' parameter and pass it to the 'generateCommitMessageChatCompletionPrompt' function ♻️ (prompts.ts): refactor the 'getMainCommitPrompt' function to accept the 'fullGitMojiSpec' parameter and pass it to the 'INIT_MAIN_PROMPT' function * 📝 (README.md): add documentation for the `--fgm` flag in the `oco` command to enable the use of the full GitMoji specification * 📝 (README.md): update flag description for using full GitMoji specification 📝 (README.md): add link to the GitMoji specification for reference * 🔧 (README.md): fix a typo in the description of the `Use Full GitMoji Specification` flag 🔧 (api.ts): update the default value of the `apiKey` variable to a placeholder value for testing purposes * Revert "🔧 (README.md): fix a typo in the description of the `Use Full GitMoji Specification` flag" This reverts commit 230a4aa449b4718063db22f7aa835bbb68dc1a88. * 🔧 (README.md): fix a typo in the description of the `Use Full GitMoji Specification` flag * 📝 (prompts.ts): update INIT_MAIN_PROMPT content to include information about the fullGitMojiSpec flag and provide instructions on how to choose the right emoji for the commit message --------- Co-authored-by: GPT10 <57486732+di-sukharev@users.noreply.github.com>
This commit is contained in:
@@ -14,9 +14,10 @@ const MAX_TOKENS_INPUT = config?.OCO_TOKENS_MAX_INPUT || DEFAULT_TOKEN_LIMITS.DE
|
||||
const MAX_TOKENS_OUTPUT = config?.OCO_TOKENS_MAX_OUTPUT || DEFAULT_TOKEN_LIMITS.DEFAULT_MAX_TOKENS_OUTPUT;
|
||||
|
||||
const generateCommitMessageChatCompletionPrompt = async (
|
||||
diff: string
|
||||
diff: string,
|
||||
fullGitMojiSpec: boolean
|
||||
): Promise<Array<ChatCompletionRequestMessage>> => {
|
||||
const INIT_MESSAGES_PROMPT = await getMainCommitPrompt();
|
||||
const INIT_MESSAGES_PROMPT = await getMainCommitPrompt(fullGitMojiSpec);
|
||||
|
||||
const chatContextAsCompletionRequest = [...INIT_MESSAGES_PROMPT];
|
||||
|
||||
@@ -38,10 +39,11 @@ export enum GenerateCommitMessageErrorEnum {
|
||||
const ADJUSTMENT_FACTOR = 20;
|
||||
|
||||
export const generateCommitMessageByDiff = async (
|
||||
diff: string
|
||||
diff: string,
|
||||
fullGitMojiSpec: boolean
|
||||
): Promise<string> => {
|
||||
try {
|
||||
const INIT_MESSAGES_PROMPT = await getMainCommitPrompt();
|
||||
const INIT_MESSAGES_PROMPT = await getMainCommitPrompt(fullGitMojiSpec);
|
||||
|
||||
const INIT_MESSAGES_PROMPT_LENGTH = INIT_MESSAGES_PROMPT.map(
|
||||
(msg) => tokenCount(msg.content) + 4
|
||||
@@ -56,7 +58,8 @@ export const generateCommitMessageByDiff = async (
|
||||
if (tokenCount(diff) >= MAX_REQUEST_TOKENS) {
|
||||
const commitMessagePromises = await getCommitMsgsPromisesFromFileDiffs(
|
||||
diff,
|
||||
MAX_REQUEST_TOKENS
|
||||
MAX_REQUEST_TOKENS,
|
||||
fullGitMojiSpec
|
||||
);
|
||||
|
||||
const commitMessages = [];
|
||||
@@ -68,7 +71,7 @@ export const generateCommitMessageByDiff = async (
|
||||
return commitMessages.join('\n\n');
|
||||
}
|
||||
|
||||
const messages = await generateCommitMessageChatCompletionPrompt(diff);
|
||||
const messages = await generateCommitMessageChatCompletionPrompt(diff, fullGitMojiSpec);
|
||||
|
||||
const engine = getEngine()
|
||||
const commitMessage = await engine.generateCommitMessage(messages);
|
||||
@@ -85,7 +88,8 @@ export const generateCommitMessageByDiff = async (
|
||||
function getMessagesPromisesByChangesInFile(
|
||||
fileDiff: string,
|
||||
separator: string,
|
||||
maxChangeLength: number
|
||||
maxChangeLength: number,
|
||||
fullGitMojiSpec: boolean
|
||||
) {
|
||||
const hunkHeaderSeparator = '@@ ';
|
||||
const [fileHeader, ...fileDiffByLines] = fileDiff.split(hunkHeaderSeparator);
|
||||
@@ -112,7 +116,8 @@ function getMessagesPromisesByChangesInFile(
|
||||
const commitMsgsFromFileLineDiffs = lineDiffsWithHeader.map(
|
||||
async (lineDiff) => {
|
||||
const messages = await generateCommitMessageChatCompletionPrompt(
|
||||
separator + lineDiff
|
||||
separator + lineDiff,
|
||||
fullGitMojiSpec
|
||||
);
|
||||
|
||||
return engine.generateCommitMessage(messages);
|
||||
@@ -160,7 +165,8 @@ function splitDiff(diff: string, maxChangeLength: number) {
|
||||
|
||||
export const getCommitMsgsPromisesFromFileDiffs = async (
|
||||
diff: string,
|
||||
maxDiffLength: number
|
||||
maxDiffLength: number,
|
||||
fullGitMojiSpec: boolean
|
||||
) => {
|
||||
const separator = 'diff --git ';
|
||||
|
||||
@@ -177,13 +183,15 @@ export const getCommitMsgsPromisesFromFileDiffs = async (
|
||||
const messagesPromises = getMessagesPromisesByChangesInFile(
|
||||
fileDiff,
|
||||
separator,
|
||||
maxDiffLength
|
||||
maxDiffLength,
|
||||
fullGitMojiSpec
|
||||
);
|
||||
|
||||
commitMessagePromises.push(...messagesPromises);
|
||||
} else {
|
||||
const messages = await generateCommitMessageChatCompletionPrompt(
|
||||
separator + fileDiff
|
||||
separator + fileDiff,
|
||||
fullGitMojiSpec
|
||||
);
|
||||
|
||||
const engine = getEngine()
|
||||
|
||||
Reference in New Issue
Block a user