diff options
Diffstat (limited to 'internal/llm/provider.go')
| -rw-r--r-- | internal/llm/provider.go | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/internal/llm/provider.go b/internal/llm/provider.go index a87d815..f7dad31 100644 --- a/internal/llm/provider.go +++ b/internal/llm/provider.go @@ -3,7 +3,8 @@ package llm import ( "context" "errors" - "os" + "os" + "strings" ) // Message represents a chat-style prompt message. @@ -17,6 +18,10 @@ type Message struct { type Client interface { // Chat sends chat messages and returns the assistant text. Chat(ctx context.Context, messages []Message, opts ...RequestOption) (string, error) + // Name returns the provider's short name (e.g., "openai", "ollama"). + Name() string + // DefaultModel returns the configured default model name. + DefaultModel() string } // Options for a request. Providers may ignore unsupported fields. @@ -38,11 +43,33 @@ func WithStop(stop ...string) RequestOption { } // NewDefault returns the default provider using environment configuration. -// Currently this is the OpenAI provider using OPENAI_API_KEY. +// Selection order: +// 1) HEXAI_LLM_PROVIDER=openai|ollama +// 2) If OPENAI_API_KEY is set -> OpenAI +// 3) If any OLLAMA_* vars are set -> Ollama func NewDefault() (Client, error) { - apiKey := os.Getenv("OPENAI_API_KEY") - if apiKey == "" { - return nil, errors.New("OPENAI_API_KEY is not set") + // Explicit provider selection + if p := strings.ToLower(strings.TrimSpace(os.Getenv("HEXAI_LLM_PROVIDER"))); p != "" { + switch p { + case "openai": + apiKey := os.Getenv("OPENAI_API_KEY") + if apiKey == "" { + return nil, errors.New("OPENAI_API_KEY is not set") + } + return newOpenAIFromEnv(apiKey), nil + case "ollama": + return newOllamaFromEnv(), nil + default: + return nil, errors.New("unknown HEXAI_LLM_PROVIDER: " + p) + } } - return newOpenAIFromEnv(apiKey), nil + + // Auto-detect + if apiKey := os.Getenv("OPENAI_API_KEY"); apiKey != "" { + return newOpenAIFromEnv(apiKey), nil + } + if os.Getenv("OLLAMA_BASE_URL") != "" || os.Getenv("OLLAMA_HOST") != "" || os.Getenv("OLLAMA_MODEL") != "" { + return newOllamaFromEnv(), nil + } + return nil, errors.New("no LLM provider configured (set OPENAI_API_KEY or HEXAI_LLM_PROVIDER/OLLAMA_*)") } |
