mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-07-15 00:11:15 +03:00
Pull correctly
This commit is contained in:
parent
b7a4eb57e9
commit
0729af7246
@ -62,7 +62,7 @@ class LlamaCppClient(GenAIClient):
|
|||||||
if base_url is None:
|
if base_url is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Query /v1/models to validate the configured model exists
|
# Query /v1/models to validate the model and extract capabilities
|
||||||
try:
|
try:
|
||||||
response = requests.get(
|
response = requests.get(
|
||||||
f"{base_url}/v1/models",
|
f"{base_url}/v1/models",
|
||||||
@ -71,22 +71,17 @@ class LlamaCppClient(GenAIClient):
|
|||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
models_data = response.json()
|
models_data = response.json()
|
||||||
|
|
||||||
model_found = False
|
matched_model = None
|
||||||
configured_model = self.genai_config.model
|
configured_model = self.genai_config.model
|
||||||
for model in models_data.get("data", []):
|
for model in models_data.get("data", []):
|
||||||
model_ids = {model.get("id")}
|
model_ids = {model.get("id")}
|
||||||
# llama.cpp models can have aliases (e.g. short names)
|
|
||||||
for alias in model.get("aliases", []):
|
for alias in model.get("aliases", []):
|
||||||
model_ids.add(alias)
|
model_ids.add(alias)
|
||||||
if configured_model in model_ids:
|
if configured_model in model_ids:
|
||||||
model_found = True
|
matched_model = model
|
||||||
# Extract context size from model metadata if available
|
|
||||||
meta = model.get("meta", {})
|
|
||||||
if meta.get("n_ctx_train"):
|
|
||||||
self._context_size = int(meta["n_ctx_train"])
|
|
||||||
break
|
break
|
||||||
|
|
||||||
if not model_found:
|
if matched_model is None:
|
||||||
available = []
|
available = []
|
||||||
for m in models_data.get("data", []):
|
for m in models_data.get("data", []):
|
||||||
available.append(m.get("id", "unknown"))
|
available.append(m.get("id", "unknown"))
|
||||||
@ -98,36 +93,14 @@ class LlamaCppClient(GenAIClient):
|
|||||||
available,
|
available,
|
||||||
)
|
)
|
||||||
return None
|
return None
|
||||||
except Exception as e:
|
|
||||||
logger.warning(
|
|
||||||
"Failed to query llama.cpp /v1/models endpoint: %s. "
|
|
||||||
"Model validation skipped.",
|
|
||||||
e,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Query /props for server properties (context size, modalities)
|
# Parse capabilities from the model's server launch args
|
||||||
try:
|
args = matched_model.get("status", {}).get("args", [])
|
||||||
response = requests.get(
|
self._parse_model_args(args)
|
||||||
f"{base_url}/props",
|
|
||||||
timeout=10,
|
|
||||||
)
|
|
||||||
response.raise_for_status()
|
|
||||||
props = response.json()
|
|
||||||
|
|
||||||
# Context size from server runtime config
|
|
||||||
default_settings = props.get("default_generation_settings", {})
|
|
||||||
if default_settings.get("n_ctx"):
|
|
||||||
self._context_size = int(default_settings["n_ctx"])
|
|
||||||
|
|
||||||
# Check supported modalities
|
|
||||||
modalities = props.get("modalities", {})
|
|
||||||
self._supports_vision = modalities.get("vision", False)
|
|
||||||
self._supports_audio = modalities.get("audio", False)
|
|
||||||
self._supports_tools = modalities.get("tools", False)
|
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
"llama.cpp model '%s' loaded — context: %s, vision: %s, audio: %s, tools: %s",
|
"llama.cpp model '%s' initialized — context: %s, vision: %s, audio: %s, tools: %s",
|
||||||
self.genai_config.model,
|
configured_model,
|
||||||
self._context_size or "unknown",
|
self._context_size or "unknown",
|
||||||
self._supports_vision,
|
self._supports_vision,
|
||||||
self._supports_audio,
|
self._supports_audio,
|
||||||
@ -135,13 +108,26 @@ class LlamaCppClient(GenAIClient):
|
|||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
"Failed to query llama.cpp /props endpoint: %s. "
|
"Failed to query llama.cpp /v1/models endpoint: %s. "
|
||||||
"Using defaults for context size and modalities.",
|
"Model validation skipped.",
|
||||||
e,
|
e,
|
||||||
)
|
)
|
||||||
|
|
||||||
return base_url
|
return base_url
|
||||||
|
|
||||||
|
def _parse_model_args(self, args: list[str]) -> None:
|
||||||
|
"""Extract context size and capabilities from llama-server launch args."""
|
||||||
|
for i, arg in enumerate(args):
|
||||||
|
if arg == "--ctx-size" and i + 1 < len(args):
|
||||||
|
try:
|
||||||
|
self._context_size = int(args[i + 1])
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
elif arg == "--mmproj":
|
||||||
|
self._supports_vision = True
|
||||||
|
elif arg == "--jinja":
|
||||||
|
self._supports_tools = True
|
||||||
|
|
||||||
def _send(
|
def _send(
|
||||||
self,
|
self,
|
||||||
prompt: str,
|
prompt: str,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user