|
@@ -1,6 +1,7 @@
|
|
|
package envconfig
|
|
|
|
|
|
import (
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"log/slog"
|
|
|
"net"
|
|
@@ -11,6 +12,18 @@ import (
|
|
|
"strings"
|
|
|
)
|
|
|
|
|
|
+type OllamaHost struct {
|
|
|
+ Scheme string
|
|
|
+ Host string
|
|
|
+ Port string
|
|
|
+}
|
|
|
+
|
|
|
+func (o OllamaHost) String() string {
|
|
|
+ return fmt.Sprintf("%s://%s:%s", o.Scheme, o.Host, o.Port)
|
|
|
+}
|
|
|
+
|
|
|
+var ErrInvalidHostPort = errors.New("invalid port specified in OLLAMA_HOST")
|
|
|
+
|
|
|
var (
|
|
|
// Set via OLLAMA_ORIGINS in the environment
|
|
|
AllowOrigins []string
|
|
@@ -34,6 +47,8 @@ var (
|
|
|
NoPrune bool
|
|
|
// Set via OLLAMA_NUM_PARALLEL in the environment
|
|
|
NumParallel int
|
|
|
+ // Set via OLLAMA_HOST in the environment
|
|
|
+ Host *OllamaHost
|
|
|
// Set via OLLAMA_RUNNERS_DIR in the environment
|
|
|
RunnersDir string
|
|
|
// Set via OLLAMA_TMPDIR in the environment
|
|
@@ -50,7 +65,7 @@ func AsMap() map[string]EnvVar {
|
|
|
return map[string]EnvVar{
|
|
|
"OLLAMA_DEBUG": {"OLLAMA_DEBUG", Debug, "Show additional debug information (e.g. OLLAMA_DEBUG=1)"},
|
|
|
"OLLAMA_FLASH_ATTENTION": {"OLLAMA_FLASH_ATTENTION", FlashAttention, "Enabled flash attention"},
|
|
|
- "OLLAMA_HOST": {"OLLAMA_HOST", "", "IP Address for the ollama server (default 127.0.0.1:11434)"},
|
|
|
+ "OLLAMA_HOST": {"OLLAMA_HOST", Host, "IP Address for the ollama server (default 127.0.0.1:11434)"},
|
|
|
"OLLAMA_KEEP_ALIVE": {"OLLAMA_KEEP_ALIVE", KeepAlive, "The duration that models stay loaded in memory (default \"5m\")"},
|
|
|
"OLLAMA_LLM_LIBRARY": {"OLLAMA_LLM_LIBRARY", LLMLibrary, "Set LLM library to bypass autodetection"},
|
|
|
"OLLAMA_MAX_LOADED_MODELS": {"OLLAMA_MAX_LOADED_MODELS", MaxRunners, "Maximum number of loaded models (default 1)"},
|
|
@@ -216,4 +231,54 @@ func LoadConfig() {
|
|
|
}
|
|
|
|
|
|
KeepAlive = clean("OLLAMA_KEEP_ALIVE")
|
|
|
+
|
|
|
+ var err error
|
|
|
+ Host, err = getOllamaHost()
|
|
|
+ if err != nil {
|
|
|
+ slog.Error("invalid setting", "OLLAMA_HOST", Host, "error", err, "using default port", Host.Port)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func getOllamaHost() (*OllamaHost, error) {
|
|
|
+ defaultPort := "11434"
|
|
|
+
|
|
|
+ hostVar := os.Getenv("OLLAMA_HOST")
|
|
|
+ hostVar = strings.TrimSpace(strings.Trim(strings.TrimSpace(hostVar), "\"'"))
|
|
|
+
|
|
|
+ scheme, hostport, ok := strings.Cut(hostVar, "://")
|
|
|
+ switch {
|
|
|
+ case !ok:
|
|
|
+ scheme, hostport = "http", hostVar
|
|
|
+ case scheme == "http":
|
|
|
+ defaultPort = "80"
|
|
|
+ case scheme == "https":
|
|
|
+ defaultPort = "443"
|
|
|
+ }
|
|
|
+
|
|
|
+ // trim trailing slashes
|
|
|
+ hostport = strings.TrimRight(hostport, "/")
|
|
|
+
|
|
|
+ host, port, err := net.SplitHostPort(hostport)
|
|
|
+ if err != nil {
|
|
|
+ host, port = "127.0.0.1", defaultPort
|
|
|
+ if ip := net.ParseIP(strings.Trim(hostport, "[]")); ip != nil {
|
|
|
+ host = ip.String()
|
|
|
+ } else if hostport != "" {
|
|
|
+ host = hostport
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if portNum, err := strconv.ParseInt(port, 10, 32); err != nil || portNum > 65535 || portNum < 0 {
|
|
|
+ return &OllamaHost{
|
|
|
+ Scheme: scheme,
|
|
|
+ Host: host,
|
|
|
+ Port: defaultPort,
|
|
|
+ }, ErrInvalidHostPort
|
|
|
+ }
|
|
|
+
|
|
|
+ return &OllamaHost{
|
|
|
+ Scheme: scheme,
|
|
|
+ Host: host,
|
|
|
+ Port: port,
|
|
|
+ }, nil
|
|
|
}
|