Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
ollama
Commits
8dbc9e7b
Unverified
Commit
8dbc9e7b
authored
Dec 15, 2025
by
Eva H
Committed by
GitHub
Dec 15, 2025
Browse files
app/ui: handle unspecified bind addresses and wait for server in ollama proxy (#13159)
parent
abe67acf
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
54 additions
and
28 deletions
+54
-28
app/ui/ui.go
app/ui/ui.go
+54
-28
No files found.
app/ui/ui.go
View file @
8dbc9e7b
...
@@ -12,13 +12,13 @@ import (
...
@@ -12,13 +12,13 @@ import (
"log/slog"
"log/slog"
"net/http"
"net/http"
"net/http/httputil"
"net/http/httputil"
"net/url"
"os"
"os"
"runtime"
"runtime"
"runtime/debug"
"runtime/debug"
"slices"
"slices"
"strconv"
"strconv"
"strings"
"strings"
"sync"
"time"
"time"
"github.com/google/uuid"
"github.com/google/uuid"
...
@@ -117,40 +117,66 @@ func (s *Server) log() *slog.Logger {
...
@@ -117,40 +117,66 @@ func (s *Server) log() *slog.Logger {
// ollamaProxy creates a reverse proxy handler to the Ollama server
// ollamaProxy creates a reverse proxy handler to the Ollama server
func
(
s
*
Server
)
ollamaProxy
()
http
.
Handler
{
func
(
s
*
Server
)
ollamaProxy
()
http
.
Handler
{
ollamaHost
:=
os
.
Getenv
(
"OLLAMA_HOST"
)
var
(
if
ollamaHost
==
""
{
proxy
http
.
Handler
ollamaHost
=
"http://127.0.0.1:11434"
proxyMu
sync
.
Mutex
}
)
if
!
strings
.
HasPrefix
(
ollamaHost
,
"http://"
)
&&
!
strings
.
HasPrefix
(
ollamaHost
,
"https://"
)
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
ollamaHost
=
"http://"
+
ollamaHost
proxyMu
.
Lock
()
}
p
:=
proxy
proxyMu
.
Unlock
()
if
p
==
nil
{
proxyMu
.
Lock
()
if
proxy
==
nil
{
var
err
error
for
i
:=
range
2
{
if
i
>
0
{
s
.
log
()
.
Warn
(
"ollama server not ready, retrying"
,
"attempt"
,
i
+
1
)
time
.
Sleep
(
1
*
time
.
Second
)
}
target
,
err
:=
url
.
Parse
(
ollamaHost
)
err
=
WaitForServer
(
context
.
Background
(),
10
*
time
.
Second
)
if
err
!=
nil
{
if
err
==
nil
{
s
.
log
()
.
Error
(
"failed to parse OLLAMA_HOST"
,
"error"
,
err
,
"host"
,
ollamaHost
)
break
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
}
http
.
Error
(
w
,
"failed to configure proxy"
,
http
.
StatusInternalServerError
)
}
})
}
s
.
log
()
.
Info
(
"configuring ollama proxy"
,
"target"
,
target
.
String
())
if
err
!=
nil
{
proxyMu
.
Unlock
()
s
.
log
()
.
Error
(
"ollama server not ready after retries"
,
"error"
,
err
)
http
.
Error
(
w
,
"Ollama server is not ready"
,
http
.
StatusServiceUnavailable
)
return
}
proxy
:=
httputil
.
NewSingleHostReverseProxy
(
target
)
target
:=
envconfig
.
Host
()
s
.
log
()
.
Info
(
"configuring ollama proxy"
,
"target"
,
target
.
String
())
originalDirector
:=
proxy
.
Director
newProxy
:=
httputil
.
NewSingleHostReverseProxy
(
target
)
proxy
.
Director
=
func
(
req
*
http
.
Request
)
{
originalDirector
(
req
)
req
.
Host
=
target
.
Host
s
.
log
()
.
Debug
(
"proxying request"
,
"method"
,
req
.
Method
,
"path"
,
req
.
URL
.
Path
,
"target"
,
target
.
Host
)
}
proxy
.
ErrorHandler
=
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
err
error
)
{
originalDirector
:=
newProxy
.
Director
s
.
log
()
.
Error
(
"proxy error"
,
"error"
,
err
,
"path"
,
r
.
URL
.
Path
,
"target"
,
target
.
String
())
newProxy
.
Director
=
func
(
req
*
http
.
Request
)
{
http
.
Error
(
w
,
"proxy error: "
+
err
.
Error
(),
http
.
StatusBadGateway
)
originalDirector
(
req
)
}
req
.
Host
=
target
.
Host
s
.
log
()
.
Debug
(
"proxying request"
,
"method"
,
req
.
Method
,
"path"
,
req
.
URL
.
Path
,
"target"
,
target
.
Host
)
}
return
proxy
newProxy
.
ErrorHandler
=
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
err
error
)
{
s
.
log
()
.
Error
(
"proxy error"
,
"error"
,
err
,
"path"
,
r
.
URL
.
Path
,
"target"
,
target
.
String
())
http
.
Error
(
w
,
"proxy error: "
+
err
.
Error
(),
http
.
StatusBadGateway
)
}
proxy
=
newProxy
p
=
newProxy
}
else
{
p
=
proxy
}
proxyMu
.
Unlock
()
}
p
.
ServeHTTP
(
w
,
r
)
})
}
}
type
errHandlerFunc
func
(
http
.
ResponseWriter
,
*
http
.
Request
)
error
type
errHandlerFunc
func
(
http
.
ResponseWriter
,
*
http
.
Request
)
error
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment