返回 DeepSeek-Reasonix
providerVisionCapability.ts
根目录 / desktop / frontend / src / lib / providerVisionCapability.ts
1 import type { ProviderView } from "./types";
2 import { matchingModelKey, modelCapabilityForModel } from "./providerImageInput";
3
4 export type ProviderModelVisionCapability = "supported" | "unsupported" | "unknown";
5
6 /**
7 * Returns the models known to accept images, merging model metadata with the
8 * legacy provider-level list without allowing a stale legacy entry to override
9 * an explicit per-model false value.
10 */
11 export function providerVisionModelsForView(
12 provider: Pick<ProviderView, "models" | "visionModels" | "modelOverrides" | "modelCapabilities">,
13 models = provider.models,
14 ): string[] {
15 const legacyVision = new Set(provider.visionModels);
16 return models.filter((model) => {
17 const metadata = modelCapabilityForModel(provider.modelCapabilities, model);
18 if (metadata?.imageInputEnableAllowed === false) return false;
19 const key = matchingModelKey((provider.modelOverrides ?? []).map((item) => item.model), model);
20 const override = provider.modelOverrides?.find((item) => item.model === key)?.vision;
21 if (override !== undefined && override !== null) return override;
22 if (metadata) return metadata.state === "supported";
23 return legacyVision.has(model);
24 });
25 }
26
27 /** Returns a conservative read-only capability label for one model. */
28 export function providerModelVisionCapability(
29 provider: Pick<ProviderView, "visionModelsConfigured" | "modelCapabilities" | "visionCapability">,
30 model: string,
31 visionModels: string[],
32 ): ProviderModelVisionCapability {
33 const metadata = modelCapabilityForModel(provider.modelCapabilities, model);
34 if (metadata) return metadata.state === "supported" ? "supported" : metadata.state === "unknown" ? "unknown" : "unsupported";
35 if (visionModels.includes(model)) return "supported";
36 if (provider.visionModelsConfigured || provider.visionCapability === "unsupported") return "unsupported";
37 return "unknown";
38 }
39
39 lines TYPESCRIPT