diff options
| author | Florian <2320560+florianbuetow@users.noreply.github.com> | 2026-01-31 23:48:38 +0100 |
|---|---|---|
| committer | Florian <2320560+florianbuetow@users.noreply.github.com> | 2026-01-31 23:48:38 +0100 |
| commit | 22009e90a4576764687328ed3cf81efbd2813d77 (patch) | |
| tree | e69b810f813955e24b79409bc27ff6b86adf11e3 /internal/llm/provider.go | |
| parent | 7194696eb8c4c5bd50f69df96e9a6b87cec1f049 (diff) | |
feat: add configurable request timeout for LLM calls
Local LLMs (LM Studio, Ollama, etc.) often need more than the default
30-second timeout. Added request_timeout config option (in seconds)
to [general] section and HEXAI_REQUEST_TIMEOUT env var.
Original constructor signatures preserved via *WithTimeout variants,
so no test changes required.
Diffstat (limited to 'internal/llm/provider.go')
| -rw-r--r-- | internal/llm/provider.go | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/internal/llm/provider.go b/internal/llm/provider.go index ae840b0..297f1f3 100644 --- a/internal/llm/provider.go +++ b/internal/llm/provider.go @@ -64,7 +64,8 @@ func WithStop(stop ...string) RequestOption { // Config defines provider configuration read from the Hexai config file. type Config struct { - Provider string + Provider string + RequestTimeout int // seconds; 0 means use default (30s) // OpenAI options OpenAIBaseURL string OpenAIModel string @@ -119,7 +120,7 @@ func NewFromConfig(cfg Config, openAIAPIKey, openRouterAPIKey, copilotAPIKey, an v := 0.2 cfg.OpenAITemperature = &v } - return newOpenAI(cfg.OpenAIBaseURL, cfg.OpenAIModel, openAIAPIKey, cfg.OpenAITemperature), nil + return newOpenAIWithTimeout(cfg.OpenAIBaseURL, cfg.OpenAIModel, openAIAPIKey, cfg.OpenAITemperature, cfg.RequestTimeout), nil case "openrouter": if strings.TrimSpace(openRouterAPIKey) == "" { return nil, errors.New("missing OPENROUTER_API_KEY for provider openrouter") @@ -128,13 +129,13 @@ func NewFromConfig(cfg Config, openAIAPIKey, openRouterAPIKey, copilotAPIKey, an t := 0.2 cfg.OpenRouterTemperature = &t } - return newOpenRouter(cfg.OpenRouterBaseURL, cfg.OpenRouterModel, openRouterAPIKey, cfg.OpenRouterTemperature), nil + return newOpenRouterWithTimeout(cfg.OpenRouterBaseURL, cfg.OpenRouterModel, openRouterAPIKey, cfg.OpenRouterTemperature, cfg.RequestTimeout), nil case "ollama": if cfg.OllamaTemperature == nil { t := 0.2 cfg.OllamaTemperature = &t } - return newOllama(cfg.OllamaBaseURL, cfg.OllamaModel, cfg.OllamaTemperature), nil + return newOllamaWithTimeout(cfg.OllamaBaseURL, cfg.OllamaModel, cfg.OllamaTemperature, cfg.RequestTimeout), nil case "copilot": if strings.TrimSpace(copilotAPIKey) == "" { return nil, errors.New("missing COPILOT_API_KEY for provider copilot") @@ -143,7 +144,7 @@ func NewFromConfig(cfg Config, openAIAPIKey, openRouterAPIKey, copilotAPIKey, an t := 0.2 cfg.CopilotTemperature = &t } - return newCopilot(cfg.CopilotBaseURL, cfg.CopilotModel, copilotAPIKey, cfg.CopilotTemperature), nil + return newCopilotWithTimeout(cfg.CopilotBaseURL, cfg.CopilotModel, copilotAPIKey, cfg.CopilotTemperature, cfg.RequestTimeout), nil case "anthropic": if strings.TrimSpace(anthropicAPIKey) == "" { return nil, errors.New("missing ANTHROPIC_API_KEY for provider anthropic") @@ -152,7 +153,7 @@ func NewFromConfig(cfg Config, openAIAPIKey, openRouterAPIKey, copilotAPIKey, an t := 0.2 cfg.AnthropicTemperature = &t } - return newAnthropic(cfg.AnthropicBaseURL, cfg.AnthropicModel, anthropicAPIKey, cfg.AnthropicTemperature), nil + return newAnthropicWithTimeout(cfg.AnthropicBaseURL, cfg.AnthropicModel, anthropicAPIKey, cfg.AnthropicTemperature, cfg.RequestTimeout), nil default: return nil, errors.New("unknown LLM provider: " + p) } |
