Summary
Gitbun currently supports local AI via Ollama and mentions "remote APIs" in the README feature list, but the implementation appears to be Ollama-only for the AI path. Users who do not have the hardware to run a local LLM (which requires 4–16GB of VRAM depending on the model) have no cloud API fallback other than the rule-based engine. Adding OpenAI (gpt-4o-mini) and Anthropic Claude (claude-haiku-4-5) as lightweight, affordable remote providers would dramatically expand the tool's usability.
Problem
- The README says "Leverages local LLMs (via Ollama) or remote APIs" — but the "remote APIs" path is either not implemented or not documented anywhere.
npx gitbun for a developer without Ollama installed always falls back to the rule-based engine, producing lower-quality commit messages than the AI path.
gpt-4o-mini costs ~$0.00015 per 1K input tokens — a typical git diff for a small commit is under 2K tokens, making cloud AI cost essentially negligible (< $0.001 per commit).
- The
.smartcommitrc and .gitbunrc config files have no provider or apiKey fields documented.
- Users in enterprise environments who cannot install Ollama on their machines have no AI path at all.
Proposed Solution
1. Add a provider field to the config schema:
// src/types/config.ts
export interface GitbunConfig {
model?: string;
ai?: boolean;
interactive?: boolean;
customPrompt?: string;
provider?: 'ollama' | 'openai' | 'anthropic'; // NEW
apiKey?: string; // NEW — read from config OR env var
}
2. Add an OpenAIProvider class alongside the existing Ollama integration:
// src/providers/openai.provider.ts
import OpenAI from 'openai';
export class OpenAIProvider {
private client: OpenAI;
private model: string;
constructor(apiKey: string, model = 'gpt-4o-mini') {
this.client = new OpenAI({ apiKey });
this.model = model;
}
async generateCommitMessage(diff: string, prompt: string): Promise<string> {
const response = await this.client.chat.completions.create({
model: this.model,
messages: [
{ role: 'system', content: prompt },
{ role: 'user', content: `Git diff:\n\`\`\`\n${diff}\n\`\`\`` },
],
max_tokens: 200,
temperature: 0.3,
});
return response.choices[0].message.content?.trim() ?? '';
}
}
3. Add an AnthropicProvider class:
// src/providers/anthropic.provider.ts
import Anthropic from '@anthropic-ai/sdk';
export class AnthropicProvider {
private client: Anthropic;
private model: string;
constructor(apiKey: string, model = 'claude-haiku-4-5') {
this.client = new Anthropic({ apiKey });
this.model = model;
}
async generateCommitMessage(diff: string, prompt: string): Promise<string> {
const response = await this.client.messages.create({
model: this.model,
max_tokens: 200,
messages: [{ role: 'user', content: `${prompt}\n\nGit diff:\n\`\`\`\n${diff}\n\`\`\`` }],
});
return (response.content[0] as { text: string }).text.trim();
}
}
4. Provider resolution order in the main AI engine:
// src/ai/engine.ts
function resolveProvider(config: GitbunConfig): AIProvider {
const apiKey = config.apiKey
|| process.env.OPENAI_API_KEY
|| process.env.ANTHROPIC_API_KEY;
if (config.provider === 'openai' && process.env.OPENAI_API_KEY) {
return new OpenAIProvider(process.env.OPENAI_API_KEY, config.model);
}
if (config.provider === 'anthropic' && process.env.ANTHROPIC_API_KEY) {
return new AnthropicProvider(process.env.ANTHROPIC_API_KEY, config.model);
}
// Default: try Ollama, fall back to rule-based
return new OllamaProvider(config.model);
}
5. Updated .gitbunrc example:
{
"provider": "openai",
"model": "gpt-4o-mini",
"ai": true,
"interactive": true
}
The API key is read from OPENAI_API_KEY or ANTHROPIC_API_KEY environment variables — it is never stored in the config file.
Additional Notes
- New npm dependencies:
openai (official SDK), @anthropic-ai/sdk (official SDK). Both are lightweight and have no native addons.
- API keys are never stored in
.gitbunrc or .smartcommitrc — they are read from environment variables only, to prevent accidental credential commits.
- The diff sent to cloud APIs is truncated at 8,000 characters to stay within cost and token limits — the same truncation applied to Ollama prompts.
Could you assign this issue to me?
Labels: enhancement, feature, help wanted, GSSoC 2026
Summary
Gitbun currently supports local AI via Ollama and mentions "remote APIs" in the README feature list, but the implementation appears to be Ollama-only for the AI path. Users who do not have the hardware to run a local LLM (which requires 4–16GB of VRAM depending on the model) have no cloud API fallback other than the rule-based engine. Adding OpenAI (
gpt-4o-mini) and Anthropic Claude (claude-haiku-4-5) as lightweight, affordable remote providers would dramatically expand the tool's usability.Problem
npx gitbunfor a developer without Ollama installed always falls back to the rule-based engine, producing lower-quality commit messages than the AI path.gpt-4o-minicosts ~$0.00015 per 1K input tokens — a typicalgit difffor a small commit is under 2K tokens, making cloud AI cost essentially negligible (< $0.001 per commit)..smartcommitrcand.gitbunrcconfig files have noproviderorapiKeyfields documented.Proposed Solution
1. Add a
providerfield to the config schema:2. Add an
OpenAIProviderclass alongside the existing Ollama integration:3. Add an
AnthropicProviderclass:4. Provider resolution order in the main AI engine:
5. Updated
.gitbunrcexample:{ "provider": "openai", "model": "gpt-4o-mini", "ai": true, "interactive": true }The API key is read from
OPENAI_API_KEYorANTHROPIC_API_KEYenvironment variables — it is never stored in the config file.Additional Notes
openai(official SDK),@anthropic-ai/sdk(official SDK). Both are lightweight and have no native addons..gitbunrcor.smartcommitrc— they are read from environment variables only, to prevent accidental credential commits.Could you assign this issue to me?
Labels:
enhancement,feature,help wanted,GSSoC 2026