feat(caps): user-registered models trust upstream vision instead of stripping media

This commit is contained in:
2026-08-22 14:33:53 +07:00
parent 144dda2ac2
commit bb8d67ba9c
3 changed files with 23 additions and 4 deletions

View File

@@ -7,7 +7,8 @@ import {
extractApiKey,
isValidApiKey,
} from "../services/auth.js";
import { getSettings } from "@/lib/localDb";
import { getSettings, getCustomModels } from "@/lib/localDb";
import { capabilitiesFromServiceKind } from "open-sse/providers/capabilities.js";
import { getModelInfo, getComboModels } from "../services/model.js";
import { handleChatCore } from "open-sse/handlers/chatCore.js";
import { DEFAULT_HEADROOM_URL } from "@/lib/headroom/detect";
@@ -259,6 +260,13 @@ async function handleSingleModelChat(body, modelStr, clientRawRequest = null, re
// Use shared chatCore
const chatSettings = await getSettings();
const providerThinking = (chatSettings.providerThinking || {})[provider] || null;
// User-registered models (Provider page → "Add Model") trust upstream: keep
// images/media in the request instead of stripping by static-capability guess.
let capsOverride = null;
try {
const cm = (await getCustomModels()).find((m) => m.providerAlias === provider && m.id === model);
if (cm) capsOverride = { ...capabilitiesFromServiceKind(cm.type), vision: true };
} catch { /* fail-open to static caps */ }
const result = await handleChatCore({
body: { ...body, model: `${provider}/${model}` },
modelInfo: { provider, model },
@@ -284,6 +292,7 @@ async function handleSingleModelChat(body, modelStr, clientRawRequest = null, re
pxpipeTransform: chatSettings.pxpipeEnabled ? await getPxpipeTransform() : null,
onPxpipeEvent: appendPxpipeEvent,
providerThinking,
capsOverride,
// Detect source format by endpoint + body
sourceFormatOverride: request?.url ? detectFormatByEndpoint(new URL(request.url).pathname, body) : null,
onCredentialsRefreshed: async (newCreds) => {