Skip to main content
chainforge’s core.Provider interface decouples your agent logic from any specific SDK. Swapping providers requires changing exactly one line.

Available providers

ProviderPackageShorthand
Anthropic (Claude)pkg/providers/anthropicWithAnthropic(key, model)
OpenAIpkg/providers/openaiWithOpenAI(key, model)
Google Geminipkg/providers/geminiWithGemini(key, model)
Ollamapkg/providers/ollamaWithOllama(url, model)
Any OpenAI-compatible APIpkg/providers/openaiWithOpenAICompatible(key, url, name, model)

Usage

chainforge.WithAnthropic(os.Getenv("ANTHROPIC_API_KEY"), "claude-sonnet-4-6")

Gemini convenience constructors

The pkg/providers/gemini package includes named constructors for common models:
import "github.com/lioarce01/chainforge/pkg/providers/gemini"

p, err := gemini.NewFlash(apiKey)  // gemini-2.0-flash — fast, cost-effective
p, err := gemini.NewPro(apiKey)    // gemini-2.0-pro

Custom provider

Implement core.Provider to add any backend:
type Provider interface {
    Name() string
    Chat(ctx context.Context, req ChatRequest) (ChatResponse, error)
    ChatStream(ctx context.Context, req ChatRequest) (<-chan StreamEvent, error)
}
pkg/core has zero external dependencies — a custom provider never pulls any SDK into your binary unless you need it.