@dharshansr/gitgenius
Version:
AI-powered commit message generator with enhanced features
68 lines (62 loc) • 2.29 kB
JavaScript
import axios from 'axios';
export class GeminiProvider {
constructor(apiKey) {
this.name = 'gemini';
this.apiKey = apiKey;
}
async generateCommitMessage(diff, type, detailed) {
const prompt = this.buildPrompt(diff, type, detailed);
try {
const response = await axios.post(`https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=${this.apiKey}`, {
contents: [
{
parts: [
{
text: prompt
}
]
}
],
generationConfig: {
temperature: 0.7,
maxOutputTokens: detailed ? 300 : 150
}
}, {
headers: {
'Content-Type': 'application/json'
}
});
return response.data.candidates[0].content.parts[0].text.trim();
}
catch (error) {
if (axios.isAxiosError(error)) {
if (error.response?.status === 403) {
throw new Error('Invalid Gemini API key');
}
throw new Error(`Gemini API error: ${error.response?.data?.error?.message || error.message}`);
}
throw error;
}
}
buildPrompt(diff, type, detailed) {
const typePrefix = type ? `[${type.toUpperCase()}] ` : '';
if (detailed) {
return `${typePrefix}Generate a detailed git commit message for the following changes.
Follow conventional commits format with detailed description.
Format:
<type>(<scope>): <subject>
<body>
- <subject>: Brief summary (under 72 characters)
- <body>: Detailed explanation of what changed, why it was changed, and any important notes
Git diff:
${diff}
Return the commit message only, no additional text.`;
}
return `${typePrefix}Generate a concise git commit message for the following changes.
Follow conventional commits format and keep it under 72 characters.
Only return the commit message, nothing else.
Git diff:
${diff}`;
}
}
//# sourceMappingURL=GeminiProvider.js.map