Perf: Bildschirm-Beschreibung knapper (B2) — schnellere Vision-Turns
voice.py _describe_images: max_tokens 600->280 (env MC_VISION_MAX_TOKENS) +
knapperer Prompt ('höchstens 5 kurze Sätze, keine Einleitung'). Schnellere
VL-Generierung UND weniger Kontext-Bloat im anschließenden Hermes-Turn.
Vision-Modell/Zwei-Schritt bleibt (volles Weglassen erst nach Bake-off, Stufe D).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -37,24 +37,27 @@ router = APIRouter(prefix="/api")
|
|||||||
# geht als TEXT an Hermes -> Lucy behält ihr volles Hirn/Gedächtnis UND nutzt das bessere VL-Modell
|
# geht als TEXT an Hermes -> Lucy behält ihr volles Hirn/Gedächtnis UND nutzt das bessere VL-Modell
|
||||||
# (statt der schwächeren Vision der fast-MoE). Per Env abschaltbar/umstellbar.
|
# (statt der schwächeren Vision der fast-MoE). Per Env abschaltbar/umstellbar.
|
||||||
VISION_MODEL = os.environ.get("MC_VISION_MODEL", "vision")
|
VISION_MODEL = os.environ.get("MC_VISION_MODEL", "vision")
|
||||||
|
# Knappe Beschreibung = schnellere VL-Generierung UND weniger Hermes-Kontext-Bloat (B2).
|
||||||
|
VISION_MAX_TOKENS = int(os.environ.get("MC_VISION_MAX_TOKENS", "280"))
|
||||||
|
|
||||||
|
|
||||||
async def _describe_images(image_urls: list[str], hint: str) -> str:
|
async def _describe_images(image_urls: list[str], hint: str) -> str:
|
||||||
"""Lässt das Vision-Modell die Screenshots (1 je Monitor) knapp beschreiben (Deutsch).
|
"""Lässt das Vision-Modell die Screenshots (1 je Monitor) knapp beschreiben (Deutsch).
|
||||||
Mehrere Bilder gehen in EINER Nachricht ans VL-Modell. Leerer String bei Fehler."""
|
Mehrere Bilder gehen in EINER Nachricht ans VL-Modell. Leerer String bei Fehler."""
|
||||||
multi = len(image_urls) > 1
|
multi = len(image_urls) > 1
|
||||||
intro = (f"Hier sind {len(image_urls)} Screenshots (je ein Monitor). Beschreibe knapp und präzise auf Deutsch, "
|
intro = (f"Hier sind {len(image_urls)} Screenshots (je ein Monitor). Beschreibe auf Deutsch in höchstens "
|
||||||
"was auf den Bildschirmen zu sehen ist (pro Monitor: App/Fenster, wichtige Inhalte, sichtbarer Text/Code). "
|
"5 kurzen Sätzen das Wesentliche (pro Monitor: App/Fenster, wichtige Inhalte, sichtbarer Text/Code). "
|
||||||
|
"Keine Einleitung, keine Wiederholung der Frage. "
|
||||||
if multi else
|
if multi else
|
||||||
"Beschreibe knapp und präzise auf Deutsch, was auf diesem Screenshot zu sehen ist "
|
"Beschreibe auf Deutsch in höchstens 5 kurzen Sätzen das Wesentliche auf diesem Screenshot "
|
||||||
"(App/Fenster, wichtige Inhalte, sichtbarer Text/Code). ")
|
"(App/Fenster, wichtige Inhalte, sichtbarer Text/Code). Keine Einleitung. ")
|
||||||
content: list = [{"type": "text", "text": intro + "Frage des Nutzers dazu: " + hint}]
|
content: list = [{"type": "text", "text": intro + "Frage des Nutzers dazu: " + hint}]
|
||||||
for u in image_urls:
|
for u in image_urls:
|
||||||
content.append({"type": "image_url", "image_url": {"url": u}})
|
content.append({"type": "image_url", "image_url": {"url": u}})
|
||||||
try:
|
try:
|
||||||
async with httpx.AsyncClient(timeout=httpx.Timeout(120.0, connect=5.0)) as client:
|
async with httpx.AsyncClient(timeout=httpx.Timeout(120.0, connect=5.0)) as client:
|
||||||
r = await client.post(f"{LLAMA_SWAP_URL}/v1/chat/completions", json={
|
r = await client.post(f"{LLAMA_SWAP_URL}/v1/chat/completions", json={
|
||||||
"model": VISION_MODEL, "max_tokens": 600, "stream": False,
|
"model": VISION_MODEL, "max_tokens": VISION_MAX_TOKENS, "stream": False,
|
||||||
"messages": [{"role": "user", "content": content}],
|
"messages": [{"role": "user", "content": content}],
|
||||||
})
|
})
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
|
|||||||
Reference in New Issue
Block a user