package llm import ( "context" "fmt" "github.com/enmanuel/agents/internal/config" coretypes "github.com/enmanuel/agents/pkg/llm" ) // FromConfig builds a CompleteFunc from an LLMProviderCfg. func FromConfig(cfg config.LLMProviderCfg) (coretypes.CompleteFunc, error) { switch cfg.Provider { case "anthropic": return NewAnthropicComplete(cfg.APIKeyEnv, cfg.BaseURL), nil case "openai": return NewOpenAIComplete(cfg.APIKeyEnv, cfg.BaseURL), nil case "ollama": base := cfg.BaseURL if base == "" { base = "http://localhost:11434/v1" } return NewOpenAIComplete("OLLAMA_API_KEY", base), nil default: return nil, fmt.Errorf("unknown LLM provider: %s", cfg.Provider) } } // WithFallback wraps primary with a fallback CompleteFunc. // If primary returns an error, fallback is tried. func WithFallback(primary, fallback coretypes.CompleteFunc) coretypes.CompleteFunc { return func(ctx context.Context, req coretypes.CompletionRequest) (coretypes.CompletionResponse, error) { resp, err := primary(ctx, req) if err != nil { return fallback(ctx, req) } return resp, nil } }