UNPKG

@dharshansr/gitgenius

Version:

AI-powered commit message generator with enhanced features

68 lines (62 loc) 2.29 kB
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