Enable on-the-fly server construction
This commit is contained in:
parent
c3edb759a9
commit
99001a60ba
1 changed files with 36 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import tomllib
|
import tomllib
|
||||||
import logging
|
import logging
|
||||||
|
import urllib.parse
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
@ -14,7 +15,7 @@ class ServerConfig(BaseModel):
|
||||||
base_url: AnyHttpUrl
|
base_url: AnyHttpUrl
|
||||||
gpu: bool = False
|
gpu: bool = False
|
||||||
vram_gb: int = 4
|
vram_gb: int = 4
|
||||||
throttle: bool = False
|
default_model: str = "llama3:latest"
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<ServerConfig name={0.name} base_url={0.base_url} gpu={0.gpu!s} vram_gb={0.vram_gb}>".format(self)
|
return "<ServerConfig name={0.name} base_url={0.base_url} gpu={0.gpu!s} vram_gb={0.vram_gb}>".format(self)
|
||||||
|
@ -57,6 +58,40 @@ def get_server(name_or_base_url: str) -> ServerConfig | None:
|
||||||
for server in servers:
|
for server in servers:
|
||||||
if server.name == name_or_base_url or server.base_url == name_or_base_url:
|
if server.name == name_or_base_url or server.base_url == name_or_base_url:
|
||||||
return server
|
return server
|
||||||
|
|
||||||
|
try:
|
||||||
|
parsed = urllib.parse.urlparse(name_or_base_url)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if parsed.netloc and parsed.scheme in ["http", "https"]:
|
||||||
|
defaults = {
|
||||||
|
"name": ":temporary:",
|
||||||
|
"base_url": "{0.scheme}://{0.netloc}".format(parsed),
|
||||||
|
"gpu": False,
|
||||||
|
"vram_gb": 2,
|
||||||
|
"default_model": "orca-mini:3b"
|
||||||
|
}
|
||||||
|
if parsed.path and parsed.path.endswith(("/api", "/api/")):
|
||||||
|
defaults["base_url"] += parsed.path
|
||||||
|
parsed_qs = urllib.parse.parse_qs(parsed.query)
|
||||||
|
for key, values in parsed_qs.items():
|
||||||
|
if not values:
|
||||||
|
continue
|
||||||
|
if key == "gpu":
|
||||||
|
values = [
|
||||||
|
values[0][0].lower() in ("t", "1", "y")
|
||||||
|
]
|
||||||
|
elif key == "vram_gb":
|
||||||
|
try:
|
||||||
|
values = [
|
||||||
|
int(values[0])
|
||||||
|
]
|
||||||
|
except ValueError:
|
||||||
|
values = []
|
||||||
|
if values:
|
||||||
|
defaults[key] = values[0]
|
||||||
|
return ServerConfig(**defaults)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue