From db3719af7a888fcf8116a9778f69c73ea031750f Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Sun, 30 Aug 2026 20:08:32 +0200 Subject: [PATCH] Default reasoning effort to medium --- .env.example | 1 + compose.yaml | 1 + config/install.env.example | 1 + router/ai_profile_router.py | 19 +++++++++++++++---- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 9dc1518..885cb93 100644 --- a/.env.example +++ b/.env.example @@ -11,6 +11,7 @@ XTTS_IMAGE=ghcr.io/coqui-ai/xtts-streaming-server:latest-cuda121@sha256:f7fb3b1f XTTS_CACHE_DIR=/data/models/xtts-v2-cache XTTS_GPU_DEVICE=GPU-4834d9d7-5b61-3004-1fb3-4ae49d482d4b AI_DNS=192.168.1.1 +DEFAULT_REASONING_EFFORT=medium FAST_MODEL_FILE=qwen-mix/Qwen3.8-27B-IQ4-MIX.gguf MEDIUM_MODEL_FILE=qwen-pure/qwen3.8-27b-IQ4_XS-pure.gguf diff --git a/compose.yaml b/compose.yaml index c64d43e..1758ae4 100644 --- a/compose.yaml +++ b/compose.yaml @@ -570,6 +570,7 @@ services: # request limit llama.cpp uses n_predict=-1 and a reasoning loop can # consume the complete context before yielding visible output. MAX_GENERATION_TOKENS: "8192" + DEFAULT_REASONING_EFFORT: "${DEFAULT_REASONING_EFFORT:-medium}" IMAGE_DIR: /data/images IMAGE_WORKER_URL: http://image-worker:8086 IMAGE_WORKER_TOKEN: "${CONTROLLER_TOKEN:?CONTROLLER_TOKEN is required}" diff --git a/config/install.env.example b/config/install.env.example index 02d2eaf..7a8936e 100644 --- a/config/install.env.example +++ b/config/install.env.example @@ -72,6 +72,7 @@ EXPERIMENTAL_MODEL_SHA256=40fac4050e940397dbf13087afd50f4734a11805bf9d65ef8ddd74 VISION_PROJECTOR_FILE=qwen/mmproj-BF16.gguf VISION_PROJECTOR_URL=https://huggingface.co/unsloth/Qwen3.8-27B-GGUF/resolve/main/mmproj-BF16.gguf VISION_PROJECTOR_SHA256=83ee4f4f205fa514161778c41df1ea14144faa0f713510893b63c2395f5c2d53 +DEFAULT_REASONING_EFFORT=medium # All standard profiles use the MTP tensor embedded in their GGUF. A separate # draft-model artifact is neither downloaded nor passed to llama-server. diff --git a/router/ai_profile_router.py b/router/ai_profile_router.py index ae2681a..983ed3a 100755 --- a/router/ai_profile_router.py +++ b/router/ai_profile_router.py @@ -116,6 +116,8 @@ REQUEST_TIMEOUT = float(os.environ.get("REQUEST_TIMEOUT", "600")) # s, Read-Ti CONNECT_TIMEOUT = float(os.environ.get("CONNECT_TIMEOUT", "10")) # s, Connect-Timeout POLL_INTERVAL = float(os.environ.get("POLL_INTERVAL", "2")) # s, Polling-Intervall MAX_GENERATION_TOKENS = int(os.environ.get("MAX_GENERATION_TOKENS", "8192")) +DEFAULT_REASONING_EFFORT = os.environ.get( + "DEFAULT_REASONING_EFFORT", "medium").strip().lower() # --- Bildgenerierung und Referenzbild-Bearbeitung (FLUX.2 Klein 4B) --- LLAMA_SERVICE = os.environ.get("LLAMA_SERVICE", "mike-ai-llama-ui.service") @@ -1272,10 +1274,19 @@ def _normalize_llamacpp_reasoning(data: dict) -> dict: entfernt das wirkungslose Top-Level-Feld. Andere Template-Argumente des Clients bleiben erhalten. """ - if "reasoning_effort" not in data: - return data - - raw_effort = data.pop("reasoning_effort") + explicit_effort = "reasoning_effort" in data + if explicit_effort: + raw_effort = data.pop("reasoning_effort") + else: + # A client may already speak llama.cpp's native template dialect. + # Preserve that explicit choice; otherwise apply the platform-wide + # default so every OpenAI-compatible client behaves consistently. + existing_kwargs = data.get("chat_template_kwargs") + if isinstance(existing_kwargs, dict) and ( + "reasoning_effort" in existing_kwargs + or "enable_thinking" in existing_kwargs): + return data + raw_effort = DEFAULT_REASONING_EFFORT effort = str(raw_effort).strip().lower() if raw_effort is not None else "" template_kwargs = data.get("chat_template_kwargs") if not isinstance(template_kwargs, dict):