diff --git a/jimmy/config.py b/jimmy/config.py index ddbe244..a2b7b14 100644 --- a/jimmy/config.py +++ b/jimmy/config.py @@ -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 "".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