Enable on-the-fly server construction

This commit is contained in:
Nexus 2024-06-11 00:53:48 +01:00
parent c3edb759a9
commit 99001a60ba
Signed by: nex
GPG key ID: 0FA334385D0B689F

View file

@ -1,6 +1,7 @@
import os
import tomllib
import logging
import urllib.parse
from typing import Callable
import httpx
@ -14,7 +15,7 @@ class ServerConfig(BaseModel):
base_url: AnyHttpUrl
gpu: bool = False
vram_gb: int = 4
throttle: bool = False
default_model: str = "llama3:latest"
def __repr__(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:
if server.name == name_or_base_url or server.base_url == name_or_base_url:
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