feat: language support via locale config (#96)
Co-authored-by: hiroki osame <hiroki.osame@gmail.com>
This commit is contained in:
committed by
GitHub
parent
4876e8d966
commit
58ce61eab8
@@ -36,6 +36,7 @@ export default async (
|
|||||||
|
|
||||||
const config = await getConfig();
|
const config = await getConfig();
|
||||||
const OPENAI_KEY = process.env.OPENAI_KEY ?? process.env.OPENAI_API_KEY ?? config.OPENAI_KEY;
|
const OPENAI_KEY = process.env.OPENAI_KEY ?? process.env.OPENAI_API_KEY ?? config.OPENAI_KEY;
|
||||||
|
const locale = config.locale ?? 'en';
|
||||||
if (!OPENAI_KEY) {
|
if (!OPENAI_KEY) {
|
||||||
throw new KnownError('Please set your OpenAI API key via `aicommits config set OPENAI_KEY=<your token>`');
|
throw new KnownError('Please set your OpenAI API key via `aicommits config set OPENAI_KEY=<your token>`');
|
||||||
}
|
}
|
||||||
@@ -44,6 +45,7 @@ export default async (
|
|||||||
s.start('The AI is analyzing your changes');
|
s.start('The AI is analyzing your changes');
|
||||||
const messages = await generateCommitMessage(
|
const messages = await generateCommitMessage(
|
||||||
OPENAI_KEY,
|
OPENAI_KEY,
|
||||||
|
locale,
|
||||||
staged.diff,
|
staged.diff,
|
||||||
generate,
|
generate,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export default () => (async () => {
|
|||||||
|
|
||||||
intro(bgCyan(black(' aicommits ')));
|
intro(bgCyan(black(' aicommits ')));
|
||||||
|
|
||||||
const { OPENAI_KEY, generate } = await getConfig();
|
const { OPENAI_KEY, locale = 'en', generate } = await getConfig();
|
||||||
if (!OPENAI_KEY) {
|
if (!OPENAI_KEY) {
|
||||||
throw new KnownError('Please set your OpenAI API key in ~/.aicommits');
|
throw new KnownError('Please set your OpenAI API key in ~/.aicommits');
|
||||||
}
|
}
|
||||||
@@ -39,6 +39,7 @@ export default () => (async () => {
|
|||||||
s.start('The AI is analyzing your changes');
|
s.start('The AI is analyzing your changes');
|
||||||
const messages = await generateCommitMessage(
|
const messages = await generateCommitMessage(
|
||||||
OPENAI_KEY,
|
OPENAI_KEY,
|
||||||
|
locale,
|
||||||
staged!.diff,
|
staged!.diff,
|
||||||
generate || 1,
|
generate || 1,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -26,6 +26,12 @@ const configParsers = {
|
|||||||
|
|
||||||
return key;
|
return key;
|
||||||
},
|
},
|
||||||
|
locale(key: string) {
|
||||||
|
parseAssert('locale', key, 'Cannot be empty');
|
||||||
|
parseAssert('locale', /^[a-z-]+$/i.test(key), 'Must be a valid locale (letters and dashes/underscores). You can consult the list of codes in: https://wikipedia.org/wiki/List_of_ISO_639-1_codes');
|
||||||
|
|
||||||
|
return key;
|
||||||
|
},
|
||||||
generate(key: string) {
|
generate(key: string) {
|
||||||
parseAssert('generate', key, 'Cannot be empty');
|
parseAssert('generate', key, 'Cannot be empty');
|
||||||
parseAssert('generate', /^\d+$/.test(key), 'Must be an integer');
|
parseAssert('generate', /^\d+$/.test(key), 'Must be an integer');
|
||||||
|
|||||||
@@ -58,17 +58,18 @@ const sanitizeMessage = (message: string) => message.trim().replace(/[\n\r]/g, '
|
|||||||
|
|
||||||
const deduplicateMessages = (array: string[]) => Array.from(new Set(array));
|
const deduplicateMessages = (array: string[]) => Array.from(new Set(array));
|
||||||
|
|
||||||
const promptTemplate = 'Write an insightful but concise Git commit message in a complete sentence in present tense for the following diff without prefacing it with anything:';
|
const getPrompt = (locale: string, diff: string) => `Write an insightful but concise Git commit message in a complete sentence in present tense for the following diff without prefacing it with anything, the response must be in the language ${locale}:\n${diff}`;
|
||||||
|
|
||||||
const model = 'text-davinci-003';
|
const model = 'text-davinci-003';
|
||||||
const encoder = encodingForModel(model);
|
const encoder = encodingForModel(model);
|
||||||
|
|
||||||
export const generateCommitMessage = async (
|
export const generateCommitMessage = async (
|
||||||
apiKey: string,
|
apiKey: string,
|
||||||
|
locale: string,
|
||||||
diff: string,
|
diff: string,
|
||||||
completions: number,
|
completions: number,
|
||||||
) => {
|
) => {
|
||||||
const prompt = `${promptTemplate}\n${diff}`;
|
const prompt = getPrompt(locale, diff);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* text-davinci-003 has a token limit of 4000
|
* text-davinci-003 has a token limit of 4000
|
||||||
|
|||||||
Reference in New Issue
Block a user