fix: correct LM Studio URL parsing and uvicorn port binding (fixes #394)

- lm_studio_fn: use urlparse to extract port from server_address so that
  addresses with an http:// prefix (e.g. http://127.0.0.1:1234, as
  documented in README) no longer break the Docker URL construction.
  Previously split(":")[1] returned "//127.0.0.1" instead of the port
  number, producing a malformed URL.
  Also fix the non-Docker path to avoid prepending http:// when the address
  already includes a scheme.

- api.py: pass the computed port variable to uvicorn.run() instead of the
  hardcoded literal 7777, so that BACKEND_PORT environment variable is
  actually honoured when starting the server directly.
This commit is contained in:
octo-patch
2026-04-11 10:37:17 +08:00
parent 31205febfe
commit 05aa5c2104
2 changed files with 13 additions and 5 deletions
+1 -1
View File
@@ -299,4 +299,4 @@ if __name__ == "__main__":
port = int(envport)
else:
port = 7777
uvicorn.run(api, host="0.0.0.0", port=7777)
uvicorn.run(api, host="0.0.0.0", port=port)
+12 -4
View File
@@ -344,13 +344,21 @@ class Provider:
Use local lm-studio server to generate text.
"""
if self.in_docker:
# Extract port from server_address if present
# Extract port from server_address, handling both "host:port" and "http://host:port"
port = "1234" # default
if ":" in self.server_address:
port = self.server_address.split(":")[1]
addr = self.server_address
if "://" not in addr:
addr = f"http://{addr}"
parsed_addr = urlparse(addr)
if parsed_addr.port:
port = str(parsed_addr.port)
url = f"{self.internal_url}:{port}"
else:
url = f"http://{self.server_ip}"
# Normalize the address to ensure it has a scheme prefix
addr = self.server_ip
if "://" not in addr:
addr = f"http://{addr}"
url = addr
route_start = f"{url}/v1/chat/completions"
payload = {
"messages": history,