diff --git a/dsh/app.py b/dsh/app.py index 46f68ca..57f64e8 100644 --- a/dsh/app.py +++ b/dsh/app.py @@ -272,17 +272,20 @@ async def chat(message: Annotated[str, Form()], session["model"] = model hist = session["messages"] hist.append({"role": "user", "content": message}) - if use_vision: + sel = session.get("model") or "" + use_multimodal = use_vision or (sel in VISION_OVERRIDE_MODELS) + if use_multimodal: base = VISION_BASE key = VISION_KEY + mm_model = sel if (sel in VISION_OVERRIDE_MODELS) else VISION_MODEL + content = [{"type": "text", "text": message or ("Describe this image." if use_vision else "")}] + if use_vision: + content.append({"type": "image_url", "image_url": {"url": image}}) payload = { - "model": VISION_MODEL, + "model": mm_model, "messages": [ {"role": "system", "content": SYSTEM_PROMPT}, - {"role": "user", "content": [ - {"type": "text", "text": message or "Describe this image."}, - {"type": "image_url", "image_url": {"url": image}}, - ]}, + {"role": "user", "content": content}, ], "stream": True, "temperature": 0.4, @@ -290,7 +293,7 @@ async def chat(message: Annotated[str, Form()], else: base = LLM_BASE key = LLM_KEY - active_model = session.get("model") or LLM_MODEL + active_model = sel or LLM_MODEL if active_model not in MODEL_CHOICES: active_model = LLM_MODEL payload = { @@ -404,12 +407,15 @@ async def generate_image(prompt: Annotated[str, Form()]) -> dict: MODEL_CHOICES = ["opencode-go/deepseek-v4-flash", "deepseek/deepseek-v4-flash", - "deepseek/deepseek-v4-pro"] + "deepseek/deepseek-v4-pro", + "z-ai/glm-5v-turbo"] MODEL_LABELS = { "opencode-go/deepseek-v4-flash": "Chat · opencode-go flash", "deepseek/deepseek-v4-flash": "Reasoning · deepseek flash", "deepseek/deepseek-v4-pro": "Coding · deepseek pro", + "z-ai/glm-5v-turbo": "Multimodal · GLM vision", } +VISION_OVERRIDE_MODELS = {"z-ai/glm-5v-turbo"} @app.get("/api/models")