From 0b5adf104a6b7b1e865d09af5b606f3b8b7cd040 Mon Sep 17 00:00:00 2001 From: di-sukharev Date: Sun, 3 Mar 2024 19:36:23 +0800 Subject: [PATCH] build --- out/cli.cjs | 70 +++++++++++++++++++++++++++++++++---------- out/github-action.cjs | 70 +++++++++++++++++++++++++++++++++---------- 2 files changed, 110 insertions(+), 30 deletions(-) diff --git a/out/cli.cjs b/out/cli.cjs index e6e6c37..6d64b99 100755 --- a/out/cli.cjs +++ b/out/cli.cjs @@ -18650,7 +18650,6 @@ function getI18nLocal(value) { // src/commands/config.ts dotenv.config(); -var DEFAULT_MODEL_TOKEN_LIMIT = 4096; var validateConfig = (key, condition, validationMessage) => { if (!condition) { ce( @@ -18682,17 +18681,33 @@ var configValidators = { ); return value; }, - ["OCO_OPENAI_MAX_TOKENS" /* OCO_OPENAI_MAX_TOKENS */](value) { + ["OCO_TOKENS_MAX_INPUT" /* OCO_TOKENS_MAX_INPUT */](value) { if (typeof value === "string") { value = parseInt(value); validateConfig( - "OCO_OPENAI_MAX_TOKENS" /* OCO_OPENAI_MAX_TOKENS */, + "OCO_TOKENS_MAX_INPUT" /* OCO_TOKENS_MAX_INPUT */, !isNaN(value), "Must be a number" ); } validateConfig( - "OCO_OPENAI_MAX_TOKENS" /* OCO_OPENAI_MAX_TOKENS */, + "OCO_TOKENS_MAX_INPUT" /* OCO_TOKENS_MAX_INPUT */, + value ? typeof value === "number" : void 0, + "Must be a number" + ); + return value; + }, + ["OCO_TOKENS_MAX_OUTPUT" /* OCO_TOKENS_MAX_OUTPUT */](value) { + if (typeof value === "string") { + value = parseInt(value); + validateConfig( + "OCO_TOKENS_MAX_OUTPUT" /* OCO_TOKENS_MAX_OUTPUT */, + !isNaN(value), + "Must be a number" + ); + } + validateConfig( + "OCO_TOKENS_MAX_OUTPUT" /* OCO_TOKENS_MAX_OUTPUT */, value ? typeof value === "number" : void 0, "Must be a number" ); @@ -18729,9 +18744,10 @@ var configValidators = { "gpt-3.5-turbo", "gpt-4", "gpt-3.5-turbo-16k", - "gpt-3.5-turbo-0613" + "gpt-3.5-turbo-0613", + "gpt-4-1106-preview" ].includes(value), - `${value} is not supported yet, use 'gpt-4', 'gpt-3.5-turbo-16k' (default), 'gpt-3.5-turbo-0613' or 'gpt-3.5-turbo'` + `${value} is not supported yet, use 'gpt-4', 'gpt-3.5-turbo-16k' (default), 'gpt-3.5-turbo-0613', 'gpt-3.5-turbo' or 'gpt-4-1106-preview'` ); return value; }, @@ -18768,7 +18784,8 @@ var configPath = (0, import_path.join)((0, import_os.homedir)(), ".opencommit"); var getConfig = () => { const configFromEnv = { OCO_OPENAI_API_KEY: process.env.OCO_OPENAI_API_KEY, - OCO_OPENAI_MAX_TOKENS: process.env.OCO_OPENAI_MAX_TOKENS ? Number(process.env.OCO_OPENAI_MAX_TOKENS) : void 0, + OCO_TOKENS_MAX_INPUT: process.env.OCO_TOKENS_MAX_INPUT ? Number(process.env.OCO_TOKENS_MAX_INPUT) : void 0, + OCO_TOKENS_MAX_OUTPUT: process.env.OCO_TOKENS_MAX_OUTPUT ? Number(process.env.OCO_TOKENS_MAX_OUTPUT) : void 0, OCO_OPENAI_BASE_PATH: process.env.OCO_OPENAI_BASE_PATH, OCO_DESCRIPTION: process.env.OCO_DESCRIPTION === "true" ? true : false, OCO_EMOJI: process.env.OCO_EMOJI === "true" ? true : false, @@ -19036,6 +19053,15 @@ var removeDoubleNewlines = (input) => { } return input; }; +var getJSONBlock = (input) => { + const jsonIndex = input.search("```json"); + if (jsonIndex > -1) { + input = input.slice(jsonIndex + 8); + const endJsonIndex = consistency.search("```"); + input = input.slice(0, endJsonIndex); + } + return input; +}; var commitlintLLMConfigExists = async () => { let exists; try { @@ -21899,7 +21925,8 @@ function tokenCount(content) { // src/engine/openAi.ts var config3 = getConfig(); -var maxTokens = config3?.OCO_OPENAI_MAX_TOKENS; +var MAX_TOKENS_OUTPUT = config3?.OCO_TOKENS_MAX_OUTPUT || 500 /* DEFAULT_MAX_TOKENS_OUTPUT */; +var MAX_TOKENS_INPUT = config3?.OCO_TOKENS_MAX_INPUT || 4096 /* DEFAULT_MAX_TOKENS_INPUT */; var basePath = config3?.OCO_OPENAI_BASE_PATH; var apiKey = config3?.OCO_OPENAI_API_KEY; var [command, mode] = process.argv.slice(2); @@ -21932,11 +21959,11 @@ var OpenAi = class { messages, temperature: 0, top_p: 0.1, - max_tokens: maxTokens || 500 + max_tokens: MAX_TOKENS_OUTPUT }; try { const REQUEST_TOKENS = messages.map((msg) => tokenCount(msg.content) + 4).reduce((a2, b6) => a2 + b6, 0); - if (REQUEST_TOKENS > DEFAULT_MODEL_TOKEN_LIMIT - maxTokens) { + if (REQUEST_TOKENS > MAX_TOKENS_INPUT - MAX_TOKENS_OUTPUT) { throw new Error("TOO_MUCH_TOKENS" /* tooMuchTokens */); } const { data } = await this.openAI.createChatCompletion(params); @@ -22020,15 +22047,16 @@ var configureCommitlintIntegration = async (force = false) => { const prompts = inferPromptsFromCommitlintConfig(commitLintConfig); const consistencyPrompts = commitlintPrompts.GEN_COMMITLINT_CONSISTENCY_PROMPT(prompts); const engine = getEngine(); - let consistency = await engine.generateCommitMessage(consistencyPrompts) || "{}"; - prompts.forEach((prompt) => consistency = consistency.replace(prompt, "")); - consistency = removeDoubleNewlines(consistency); + let consistency2 = await engine.generateCommitMessage(consistencyPrompts) || "{}"; + prompts.forEach((prompt) => consistency2 = consistency2.replace(prompt, "")); + consistency2 = getJSONBlock(consistency2); + consistency2 = removeDoubleNewlines(consistency2); const commitlintLLMConfig = { hash, prompts, consistency: { [translation2.localLanguage]: { - ...JSON.parse(consistency) + ...JSON.parse(consistency2) } } }; @@ -22127,6 +22155,8 @@ function mergeDiffs(arr, maxStringLength) { // src/generateCommitMessageFromGitDiff.ts var config6 = getConfig(); +var MAX_TOKENS_INPUT2 = config6?.OCO_TOKENS_MAX_INPUT || 4096 /* DEFAULT_MAX_TOKENS_INPUT */; +var MAX_TOKENS_OUTPUT2 = config6?.OCO_TOKENS_MAX_OUTPUT || 500 /* DEFAULT_MAX_TOKENS_OUTPUT */; var generateCommitMessageChatCompletionPrompt = async (diff) => { const INIT_MESSAGES_PROMPT = await getMainCommitPrompt(); const chatContextAsCompletionRequest = [...INIT_MESSAGES_PROMPT]; @@ -22136,6 +22166,13 @@ var generateCommitMessageChatCompletionPrompt = async (diff) => { }); return chatContextAsCompletionRequest; }; +var GenerateCommitMessageErrorEnum = ((GenerateCommitMessageErrorEnum2) => { + GenerateCommitMessageErrorEnum2["tooMuchTokens"] = "TOO_MUCH_TOKENS"; + GenerateCommitMessageErrorEnum2["internalError"] = "INTERNAL_ERROR"; + GenerateCommitMessageErrorEnum2["emptyMessage"] = "EMPTY_MESSAGE"; + GenerateCommitMessageErrorEnum2[GenerateCommitMessageErrorEnum2["outputTokensTooHigh"] = `Token limit exceeded, OCO_TOKENS_MAX_OUTPUT must not be much higher than the default ${500 /* DEFAULT_MAX_TOKENS_OUTPUT */} tokens.`] = "outputTokensTooHigh"; + return GenerateCommitMessageErrorEnum2; +})(GenerateCommitMessageErrorEnum || {}); var ADJUSTMENT_FACTOR = 20; var generateCommitMessageByDiff = async (diff) => { try { @@ -22143,7 +22180,7 @@ var generateCommitMessageByDiff = async (diff) => { const INIT_MESSAGES_PROMPT_LENGTH = INIT_MESSAGES_PROMPT.map( (msg) => tokenCount(msg.content) + 4 ).reduce((a2, b6) => a2 + b6, 0); - const MAX_REQUEST_TOKENS = DEFAULT_MODEL_TOKEN_LIMIT - ADJUSTMENT_FACTOR - INIT_MESSAGES_PROMPT_LENGTH - config6?.OCO_OPENAI_MAX_TOKENS; + const MAX_REQUEST_TOKENS = MAX_TOKENS_INPUT2 - ADJUSTMENT_FACTOR - INIT_MESSAGES_PROMPT_LENGTH - MAX_TOKENS_OUTPUT2; if (tokenCount(diff) >= MAX_REQUEST_TOKENS) { const commitMessagePromises = await getCommitMsgsPromisesFromFileDiffs( diff, @@ -22198,6 +22235,9 @@ function splitDiff(diff, maxChangeLength) { const lines = diff.split("\n"); const splitDiffs = []; let currentDiff = ""; + if (maxChangeLength <= 0) { + throw new Error(GenerateCommitMessageErrorEnum.outputTokensTooHigh); + } for (let line of lines) { while (tokenCount(line) > maxChangeLength) { const subLine = line.substring(0, maxChangeLength); diff --git a/out/github-action.cjs b/out/github-action.cjs index 5e660d2..996decc 100644 --- a/out/github-action.cjs +++ b/out/github-action.cjs @@ -24145,7 +24145,6 @@ function getI18nLocal(value) { // src/commands/config.ts dotenv.config(); -var DEFAULT_MODEL_TOKEN_LIMIT = 4096; var validateConfig = (key, condition, validationMessage) => { if (!condition) { ce( @@ -24177,17 +24176,33 @@ var configValidators = { ); return value; }, - ["OCO_OPENAI_MAX_TOKENS" /* OCO_OPENAI_MAX_TOKENS */](value) { + ["OCO_TOKENS_MAX_INPUT" /* OCO_TOKENS_MAX_INPUT */](value) { if (typeof value === "string") { value = parseInt(value); validateConfig( - "OCO_OPENAI_MAX_TOKENS" /* OCO_OPENAI_MAX_TOKENS */, + "OCO_TOKENS_MAX_INPUT" /* OCO_TOKENS_MAX_INPUT */, !isNaN(value), "Must be a number" ); } validateConfig( - "OCO_OPENAI_MAX_TOKENS" /* OCO_OPENAI_MAX_TOKENS */, + "OCO_TOKENS_MAX_INPUT" /* OCO_TOKENS_MAX_INPUT */, + value ? typeof value === "number" : void 0, + "Must be a number" + ); + return value; + }, + ["OCO_TOKENS_MAX_OUTPUT" /* OCO_TOKENS_MAX_OUTPUT */](value) { + if (typeof value === "string") { + value = parseInt(value); + validateConfig( + "OCO_TOKENS_MAX_OUTPUT" /* OCO_TOKENS_MAX_OUTPUT */, + !isNaN(value), + "Must be a number" + ); + } + validateConfig( + "OCO_TOKENS_MAX_OUTPUT" /* OCO_TOKENS_MAX_OUTPUT */, value ? typeof value === "number" : void 0, "Must be a number" ); @@ -24224,9 +24239,10 @@ var configValidators = { "gpt-3.5-turbo", "gpt-4", "gpt-3.5-turbo-16k", - "gpt-3.5-turbo-0613" + "gpt-3.5-turbo-0613", + "gpt-4-1106-preview" ].includes(value), - `${value} is not supported yet, use 'gpt-4', 'gpt-3.5-turbo-16k' (default), 'gpt-3.5-turbo-0613' or 'gpt-3.5-turbo'` + `${value} is not supported yet, use 'gpt-4', 'gpt-3.5-turbo-16k' (default), 'gpt-3.5-turbo-0613', 'gpt-3.5-turbo' or 'gpt-4-1106-preview'` ); return value; }, @@ -24263,7 +24279,8 @@ var configPath = (0, import_path.join)((0, import_os.homedir)(), ".opencommit"); var getConfig = () => { const configFromEnv = { OCO_OPENAI_API_KEY: process.env.OCO_OPENAI_API_KEY, - OCO_OPENAI_MAX_TOKENS: process.env.OCO_OPENAI_MAX_TOKENS ? Number(process.env.OCO_OPENAI_MAX_TOKENS) : void 0, + OCO_TOKENS_MAX_INPUT: process.env.OCO_TOKENS_MAX_INPUT ? Number(process.env.OCO_TOKENS_MAX_INPUT) : void 0, + OCO_TOKENS_MAX_OUTPUT: process.env.OCO_TOKENS_MAX_OUTPUT ? Number(process.env.OCO_TOKENS_MAX_OUTPUT) : void 0, OCO_OPENAI_BASE_PATH: process.env.OCO_OPENAI_BASE_PATH, OCO_DESCRIPTION: process.env.OCO_DESCRIPTION === "true" ? true : false, OCO_EMOJI: process.env.OCO_EMOJI === "true" ? true : false, @@ -24531,6 +24548,15 @@ var removeDoubleNewlines = (input) => { } return input; }; +var getJSONBlock = (input) => { + const jsonIndex = input.search("```json"); + if (jsonIndex > -1) { + input = input.slice(jsonIndex + 8); + const endJsonIndex = consistency.search("```"); + input = input.slice(0, endJsonIndex); + } + return input; +}; var commitlintLLMConfigExists = async () => { let exists; try { @@ -27394,7 +27420,8 @@ function tokenCount(content) { // src/engine/openAi.ts var config3 = getConfig(); -var maxTokens = config3?.OCO_OPENAI_MAX_TOKENS; +var MAX_TOKENS_OUTPUT = config3?.OCO_TOKENS_MAX_OUTPUT || 500 /* DEFAULT_MAX_TOKENS_OUTPUT */; +var MAX_TOKENS_INPUT = config3?.OCO_TOKENS_MAX_INPUT || 4096 /* DEFAULT_MAX_TOKENS_INPUT */; var basePath = config3?.OCO_OPENAI_BASE_PATH; var apiKey = config3?.OCO_OPENAI_API_KEY; var [command, mode] = process.argv.slice(2); @@ -27427,11 +27454,11 @@ var OpenAi = class { messages, temperature: 0, top_p: 0.1, - max_tokens: maxTokens || 500 + max_tokens: MAX_TOKENS_OUTPUT }; try { const REQUEST_TOKENS = messages.map((msg) => tokenCount(msg.content) + 4).reduce((a2, b2) => a2 + b2, 0); - if (REQUEST_TOKENS > DEFAULT_MODEL_TOKEN_LIMIT - maxTokens) { + if (REQUEST_TOKENS > MAX_TOKENS_INPUT - MAX_TOKENS_OUTPUT) { throw new Error("TOO_MUCH_TOKENS" /* tooMuchTokens */); } const { data } = await this.openAI.createChatCompletion(params); @@ -27515,15 +27542,16 @@ var configureCommitlintIntegration = async (force = false) => { const prompts = inferPromptsFromCommitlintConfig(commitLintConfig); const consistencyPrompts = commitlintPrompts.GEN_COMMITLINT_CONSISTENCY_PROMPT(prompts); const engine = getEngine(); - let consistency = await engine.generateCommitMessage(consistencyPrompts) || "{}"; - prompts.forEach((prompt) => consistency = consistency.replace(prompt, "")); - consistency = removeDoubleNewlines(consistency); + let consistency2 = await engine.generateCommitMessage(consistencyPrompts) || "{}"; + prompts.forEach((prompt) => consistency2 = consistency2.replace(prompt, "")); + consistency2 = getJSONBlock(consistency2); + consistency2 = removeDoubleNewlines(consistency2); const commitlintLLMConfig = { hash, prompts, consistency: { [translation2.localLanguage]: { - ...JSON.parse(consistency) + ...JSON.parse(consistency2) } } }; @@ -27622,6 +27650,8 @@ function mergeDiffs(arr, maxStringLength) { // src/generateCommitMessageFromGitDiff.ts var config6 = getConfig(); +var MAX_TOKENS_INPUT2 = config6?.OCO_TOKENS_MAX_INPUT || 4096 /* DEFAULT_MAX_TOKENS_INPUT */; +var MAX_TOKENS_OUTPUT2 = config6?.OCO_TOKENS_MAX_OUTPUT || 500 /* DEFAULT_MAX_TOKENS_OUTPUT */; var generateCommitMessageChatCompletionPrompt = async (diff) => { const INIT_MESSAGES_PROMPT = await getMainCommitPrompt(); const chatContextAsCompletionRequest = [...INIT_MESSAGES_PROMPT]; @@ -27631,6 +27661,13 @@ var generateCommitMessageChatCompletionPrompt = async (diff) => { }); return chatContextAsCompletionRequest; }; +var GenerateCommitMessageErrorEnum = ((GenerateCommitMessageErrorEnum2) => { + GenerateCommitMessageErrorEnum2["tooMuchTokens"] = "TOO_MUCH_TOKENS"; + GenerateCommitMessageErrorEnum2["internalError"] = "INTERNAL_ERROR"; + GenerateCommitMessageErrorEnum2["emptyMessage"] = "EMPTY_MESSAGE"; + GenerateCommitMessageErrorEnum2[GenerateCommitMessageErrorEnum2["outputTokensTooHigh"] = `Token limit exceeded, OCO_TOKENS_MAX_OUTPUT must not be much higher than the default ${500 /* DEFAULT_MAX_TOKENS_OUTPUT */} tokens.`] = "outputTokensTooHigh"; + return GenerateCommitMessageErrorEnum2; +})(GenerateCommitMessageErrorEnum || {}); var ADJUSTMENT_FACTOR = 20; var generateCommitMessageByDiff = async (diff) => { try { @@ -27638,7 +27675,7 @@ var generateCommitMessageByDiff = async (diff) => { const INIT_MESSAGES_PROMPT_LENGTH = INIT_MESSAGES_PROMPT.map( (msg) => tokenCount(msg.content) + 4 ).reduce((a2, b2) => a2 + b2, 0); - const MAX_REQUEST_TOKENS = DEFAULT_MODEL_TOKEN_LIMIT - ADJUSTMENT_FACTOR - INIT_MESSAGES_PROMPT_LENGTH - config6?.OCO_OPENAI_MAX_TOKENS; + const MAX_REQUEST_TOKENS = MAX_TOKENS_INPUT2 - ADJUSTMENT_FACTOR - INIT_MESSAGES_PROMPT_LENGTH - MAX_TOKENS_OUTPUT2; if (tokenCount(diff) >= MAX_REQUEST_TOKENS) { const commitMessagePromises = await getCommitMsgsPromisesFromFileDiffs( diff, @@ -27693,6 +27730,9 @@ function splitDiff(diff, maxChangeLength) { const lines = diff.split("\n"); const splitDiffs = []; let currentDiff = ""; + if (maxChangeLength <= 0) { + throw new Error(GenerateCommitMessageErrorEnum.outputTokensTooHigh); + } for (let line of lines) { while (tokenCount(line) > maxChangeLength) { const subLine = line.substring(0, maxChangeLength);