feat: add gims media files and improve AI provider resolution logic

This commit is contained in:
s41r4j
2026-01-28 23:13:07 +05:30
parent 5d8a92ceb8
commit 687dd1920f
4 changed files with 21 additions and 16 deletions
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 MiB

+20 -15
View File
@@ -15,14 +15,17 @@ class AIProviderManager {
resolveProvider(preference = 'auto') { resolveProvider(preference = 'auto') {
if (preference === 'none') return 'none'; if (preference === 'none') return 'none';
if (preference === 'openai') return process.env.OPENAI_API_KEY ? 'openai' : 'none';
if (preference === 'gemini') return process.env.GEMINI_API_KEY ? 'gemini' : 'none'; // Check if preferred provider's key is available
if (preference === 'groq') return process.env.GROQ_API_KEY ? 'groq' : 'none'; if (preference === 'openai' && process.env.OPENAI_API_KEY) return 'openai';
if (preference === 'gemini' && process.env.GEMINI_API_KEY) return 'gemini';
if (preference === 'groq' && process.env.GROQ_API_KEY) return 'groq';
// Auto-detection with preference order (Gemini first - fastest and cheapest) // Fallback: try any available provider (priority: Gemini → OpenAI → Groq)
if (process.env.GEMINI_API_KEY) return 'gemini'; if (process.env.GEMINI_API_KEY) return 'gemini';
if (process.env.OPENAI_API_KEY) return 'openai'; if (process.env.OPENAI_API_KEY) return 'openai';
if (process.env.GROQ_API_KEY) return 'groq'; if (process.env.GROQ_API_KEY) return 'groq';
return 'none'; return 'none';
} }
@@ -119,8 +122,8 @@ class AIProviderManager {
async generateCommitMessage(diff, options = {}) { async generateCommitMessage(diff, options = {}) {
const { const {
provider: preferredProvider = 'auto', provider: preferredProvider = this.config.provider || 'auto',
conventional = false, conventional = this.config.conventional || false,
body = false, body = false,
verbose = false verbose = false
} = options; } = options;
@@ -137,8 +140,6 @@ class AIProviderManager {
for (const provider of providerChain) { for (const provider of providerChain) {
try { try {
if (verbose) Progress.info(`Trying provider: ${provider}`);
if (provider === 'local') { if (provider === 'local') {
const result = await this.generateLocalHeuristic(diff, options); const result = await this.generateLocalHeuristic(diff, options);
this.setCache(cacheKey, result, true); this.setCache(cacheKey, result, true);
@@ -167,17 +168,21 @@ class AIProviderManager {
buildProviderChain(preferred) { buildProviderChain(preferred) {
const available = []; const available = [];
// First, try the preferred provider if its key is available
if (preferred !== 'auto' && preferred !== 'none') { if (preferred !== 'auto' && preferred !== 'none') {
const resolved = this.resolveProvider(preferred); if (preferred === 'gemini' && process.env.GEMINI_API_KEY) available.push('gemini');
if (resolved !== 'none') available.push(resolved); else if (preferred === 'openai' && process.env.OPENAI_API_KEY) available.push('openai');
} else if (preferred === 'auto') { else if (preferred === 'groq' && process.env.GROQ_API_KEY) available.push('groq');
if (process.env.GEMINI_API_KEY) available.push('gemini');
if (process.env.OPENAI_API_KEY) available.push('openai');
if (process.env.GROQ_API_KEY) available.push('groq');
} }
// Then add all other available providers as fallbacks
if (process.env.GEMINI_API_KEY && !available.includes('gemini')) available.push('gemini');
if (process.env.OPENAI_API_KEY && !available.includes('openai')) available.push('openai');
if (process.env.GROQ_API_KEY && !available.includes('groq')) available.push('groq');
// Local heuristics as final fallback
available.push('local'); available.push('local');
return [...new Set(available)]; return available;
} }
buildPrompt(diff, options) { buildPrompt(diff, options) {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "gims", "name": "gims",
"version": "0.8.1", "version": "0.8.2",
"description": "Git Made Simple AIpowered git helper with smart insights, stats & code review", "description": "Git Made Simple AIpowered git helper with smart insights, stats & code review",
"author": "S41R4J", "author": "S41R4J",
"license": "MIT", "license": "MIT",