feat: add gims media files and improve AI provider resolution logic
This commit is contained in:
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 6.9 MiB |
+20
-15
@@ -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
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "gims",
|
"name": "gims",
|
||||||
"version": "0.8.1",
|
"version": "0.8.2",
|
||||||
"description": "Git Made Simple – AI‑powered git helper with smart insights, stats & code review",
|
"description": "Git Made Simple – AI‑powered git helper with smart insights, stats & code review",
|
||||||
"author": "S41R4J",
|
"author": "S41R4J",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
Reference in New Issue
Block a user