feat: Add Input Token Limit Config Option (#281)

This commit is contained in:
mattsalt123
2024-02-29 15:06:23 +00:00
committed by GitHub
parent 011db5ad5e
commit c9b45492a5
4 changed files with 54 additions and 18 deletions
+11 -4
View File
@@ -3,13 +3,15 @@ import {
ChatCompletionRequestMessageRoleEnum
} from 'openai';
import { DEFAULT_MODEL_TOKEN_LIMIT, getConfig } from './commands/config';
import { DEFAULT_TOKEN_LIMITS, getConfig } from './commands/config';
import { getMainCommitPrompt } from './prompts';
import { mergeDiffs } from './utils/mergeDiffs';
import { tokenCount } from './utils/tokenCount';
import { getEngine } from './utils/engine';
const config = getConfig();
const MAX_TOKENS_INPUT = config?.OCO_TOKENS_MAX_INPUT || DEFAULT_TOKEN_LIMITS.DEFAULT_MAX_TOKENS_INPUT;
const MAX_TOKENS_OUTPUT = config?.OCO_TOKENS_MAX_OUTPUT || DEFAULT_TOKEN_LIMITS.DEFAULT_MAX_TOKENS_OUTPUT;
const generateCommitMessageChatCompletionPrompt = async (
diff: string
@@ -29,7 +31,8 @@ const generateCommitMessageChatCompletionPrompt = async (
export enum GenerateCommitMessageErrorEnum {
tooMuchTokens = 'TOO_MUCH_TOKENS',
internalError = 'INTERNAL_ERROR',
emptyMessage = 'EMPTY_MESSAGE'
emptyMessage = 'EMPTY_MESSAGE',
outputTokensTooHigh = `Token limit exceeded, OCO_TOKENS_MAX_OUTPUT must not be much higher than the default ${DEFAULT_TOKEN_LIMITS.DEFAULT_MAX_TOKENS_OUTPUT} tokens.`
}
const ADJUSTMENT_FACTOR = 20;
@@ -45,10 +48,10 @@ export const generateCommitMessageByDiff = async (
).reduce((a, b) => a + b, 0);
const MAX_REQUEST_TOKENS =
DEFAULT_MODEL_TOKEN_LIMIT -
MAX_TOKENS_INPUT -
ADJUSTMENT_FACTOR -
INIT_MESSAGES_PROMPT_LENGTH -
config?.OCO_OPENAI_MAX_TOKENS;
MAX_TOKENS_OUTPUT;
if (tokenCount(diff) >= MAX_REQUEST_TOKENS) {
const commitMessagePromises = await getCommitMsgsPromisesFromFileDiffs(
@@ -124,6 +127,10 @@ function splitDiff(diff: string, maxChangeLength: number) {
const splitDiffs = [];
let currentDiff = '';
if (maxChangeLength <= 0) {
throw new Error(GenerateCommitMessageErrorEnum.outputTokensTooHigh);
}
for (let line of lines) {
// If a single line exceeds maxChangeLength, split it into multiple lines
while (tokenCount(line) > maxChangeLength) {