From 0349cc01d49ad28a6a438fad68a2aa0e598a617f Mon Sep 17 00:00:00 2001 From: Vis-X Team Date: Thu, 30 Apr 2026 09:23:13 +0800 Subject: [PATCH 1/2] feat(providers): add model check for add/edit provider --- electron/api/routes/providers.ts | 16 + .../providers/provider-model-check.ts | 343 ++++++++++++++++++ src/components/settings/ProvidersSettings.tsx | 195 +++++++++- src/lib/provider-model-check.ts | 36 ++ 4 files changed, 586 insertions(+), 4 deletions(-) create mode 100644 electron/services/providers/provider-model-check.ts create mode 100644 src/lib/provider-model-check.ts diff --git a/electron/api/routes/providers.ts b/electron/api/routes/providers.ts index 6b231faf0..acf2ee689 100644 --- a/electron/api/routes/providers.ts +++ b/electron/api/routes/providers.ts @@ -20,6 +20,7 @@ import { import { validateApiKeyWithProvider } from '../../services/providers/provider-validation'; import { getProviderService } from '../../services/providers/provider-service'; import { providerAccountToConfig } from '../../services/providers/provider-store'; +import { checkProviderModel, type ModelCheckInput } from '../../services/providers/provider-model-check'; import type { ProviderAccount } from '../../shared/providers/types'; import { logger } from '../../utils/logger'; @@ -50,6 +51,21 @@ export async function handleProviderRoutes( ); }; + if (url.pathname === '/api/provider-model-check' && req.method === 'POST') { + try { + const body = await parseJsonBody(req); + sendJson(res, 200, await checkProviderModel(body)); + } catch (error) { + sendJson(res, 500, { + success: false, + status: 'failed', + message: String(error), + modelUsed: '', + }); + } + return true; + } + if (url.pathname === '/api/provider-vendors' && req.method === 'GET') { sendJson(res, 200, await providerService.listVendors()); return true; diff --git a/electron/services/providers/provider-model-check.ts b/electron/services/providers/provider-model-check.ts new file mode 100644 index 000000000..525fb03a3 --- /dev/null +++ b/electron/services/providers/provider-model-check.ts @@ -0,0 +1,343 @@ +import type { ProviderProtocol, ProviderType } from '../../shared/providers/types'; +import { getProviderDefinition } from '../../shared/providers/registry'; +import { getApiKey } from '../../utils/secure-storage'; +import { proxyAwareFetch } from '../../utils/proxy-fetch'; +import { getProviderService } from './provider-service'; + +export type ModelCheckStatus = 'operational' | 'degraded' | 'failed'; +export type ModelCheckErrorCategory = 'modelNotFound' | 'auth' | 'timeout' | 'connection' | 'unsupported'; + +export interface ModelCheckInput { + accountId?: string; + vendorId: ProviderType; + apiKey?: string; + baseUrl?: string; + apiProtocol?: ProviderProtocol; + headers?: Record; + model?: string; + timeoutMs?: number; + degradedThresholdMs?: number; + testPrompt?: string; +} + +export interface ModelCheckResult { + success: boolean; + status: ModelCheckStatus; + message: string; + responseTimeMs?: number; + httpStatus?: number; + modelUsed: string; + errorCategory?: ModelCheckErrorCategory; +} + +const DEFAULT_TIMEOUT_MS = 45_000; +const DEFAULT_DEGRADED_THRESHOLD_MS = 6_000; +const DEFAULT_TEST_PROMPT = 'Hi'; + +function normalizeBaseUrl(baseUrl: string | undefined): string { + return (baseUrl || '').trim().replace(/\/+$/, ''); +} + +function normalizeHeaders(headers?: Record): Record { + return Object.fromEntries( + Object.entries(headers ?? {}).filter(([key, value]) => key && typeof value === 'string' && value.trim()), + ); +} + +function buildResult( + success: boolean, + responseTimeMs: number, + degradedThresholdMs: number, + modelUsed: string, + message: string, + httpStatus?: number, + errorCategory?: ModelCheckErrorCategory, +): ModelCheckResult { + if (!success) { + return { + success: false, + status: 'failed', + message, + responseTimeMs, + httpStatus, + modelUsed, + errorCategory, + }; + } + + return { + success: true, + status: responseTimeMs > degradedThresholdMs ? 'degraded' : 'operational', + message: responseTimeMs > degradedThresholdMs ? 'Model is available, but response is slow' : 'Model is available', + responseTimeMs, + httpStatus, + modelUsed, + }; +} + +function detectModelNotFound(body: string): boolean { + const text = body.toLowerCase(); + if (!text.includes('model')) return false; + return [ + 'model_not_found', + 'model not found', + 'does not exist', + 'invalid_model', + 'invalid model', + 'unknown_model', + 'unknown model', + 'is not a valid model', + 'not_found_error', + ].some((token) => text.includes(token)); +} + +function detectAuthFailure(status: number, body: string): boolean { + if (status === 401 || status === 403) return true; + const text = body.toLowerCase(); + return text.includes('invalid api key') || text.includes('unauthorized') || text.includes('authentication'); +} + +async function ensureReadableStream(response: Response): Promise { + if (!response.body) { + throw new Error('No response body'); + } + + const reader = response.body.getReader(); + try { + const firstChunk = await reader.read(); + if (!firstChunk || firstChunk.done) { + throw new Error('No response data received'); + } + } finally { + try { + reader.releaseLock(); + } catch { + // ignore + } + try { + await response.body.cancel(); + } catch { + // ignore + } + } +} + +function mergeHeaders(base: Record, extra?: Record): Record { + const merged = { ...base }; + for (const [key, value] of Object.entries(extra ?? {})) { + merged[key] = value; + } + return merged; +} + +function buildOpenAICompletionRequestBody(model: string, prompt: string, vendorId: ProviderType): Record { + if (vendorId === 'deepseek') { + return { + model, + stream: true, + max_tokens: 16, + reasoning_effort: 'high', + extra_body: { thinking: { type: 'enabled' } }, + messages: [ + { role: 'system', content: 'You are a helpful assistant' }, + { role: 'user', content: prompt }, + ], + }; + } + + return { + model, + stream: true, + max_tokens: 16, + messages: [{ role: 'user', content: prompt }], + }; +} + +async function checkOpenAICompletions( + baseUrl: string, + apiKey: string, + model: string, + headers: Record, + prompt: string, + signal: AbortSignal, + vendorId: ProviderType, +): Promise { + return proxyAwareFetch(`${baseUrl}/chat/completions`, { + method: 'POST', + signal, + headers: mergeHeaders({ + Authorization: `Bearer ${apiKey}`, + 'Content-Type': 'application/json', + Accept: 'text/event-stream', + 'Accept-Encoding': 'identity', + }, headers), + body: JSON.stringify(buildOpenAICompletionRequestBody(model, prompt, vendorId)), + }); +} + +async function checkOpenAIResponses( + baseUrl: string, + apiKey: string, + model: string, + headers: Record, + prompt: string, + signal: AbortSignal, +): Promise { + return proxyAwareFetch(`${baseUrl}/responses`, { + method: 'POST', + signal, + headers: mergeHeaders({ + Authorization: `Bearer ${apiKey}`, + 'Content-Type': 'application/json', + Accept: 'text/event-stream', + 'Accept-Encoding': 'identity', + }, headers), + body: JSON.stringify({ + model, + stream: true, + max_output_tokens: 16, + input: prompt, + }), + }); +} + +async function checkAnthropicMessages( + baseUrl: string, + apiKey: string, + model: string, + headers: Record, + prompt: string, + signal: AbortSignal, +): Promise { + return proxyAwareFetch(`${baseUrl}/messages`, { + method: 'POST', + signal, + headers: mergeHeaders({ + Authorization: `Bearer ${apiKey}`, + 'Content-Type': 'application/json', + Accept: 'text/event-stream', + 'Accept-Encoding': 'identity', + 'anthropic-version': '2023-06-01', + }, headers), + body: JSON.stringify({ + model, + max_tokens: 16, + stream: true, + messages: [{ role: 'user', content: prompt }], + }), + }); +} + +export async function checkProviderModel(input: ModelCheckInput): Promise { + const providerService = getProviderService(); + const account = input.accountId ? await providerService.getAccount(input.accountId) : null; + const definition = getProviderDefinition(input.vendorId); + const model = (input.model || account?.model || definition?.defaultModelId || '').trim(); + if (!model) { + return { + success: false, + status: 'failed', + message: 'Model is required', + modelUsed: '', + }; + } + + const protocol = input.apiProtocol || account?.apiProtocol || definition?.providerConfig?.api; + if (!protocol) { + return { + success: false, + status: 'failed', + message: 'API protocol is required', + modelUsed: model, + errorCategory: 'unsupported', + }; + } + + const baseUrl = normalizeBaseUrl(input.baseUrl || account?.baseUrl || definition?.providerConfig?.baseUrl); + if (!baseUrl) { + return { + success: false, + status: 'failed', + message: 'Base URL is required', + modelUsed: model, + }; + } + + const resolvedApiKey = (input.apiKey && input.apiKey.trim()) || (input.accountId ? await getApiKey(input.accountId) : '') || ''; + const requiresApiKey = definition?.requiresApiKey ?? input.vendorId !== 'ollama'; + if (requiresApiKey && !resolvedApiKey) { + return { + success: false, + status: 'failed', + message: 'API key is required for model check', + modelUsed: model, + errorCategory: 'auth', + }; + } + + const mergedHeaders = mergeHeaders(definition?.providerConfig?.headers ?? {}, normalizeHeaders(account?.headers)); + const requestHeaders = mergeHeaders(mergedHeaders, normalizeHeaders(input.headers)); + const timeoutMs = input.timeoutMs ?? DEFAULT_TIMEOUT_MS; + const degradedThresholdMs = input.degradedThresholdMs ?? DEFAULT_DEGRADED_THRESHOLD_MS; + const prompt = input.testPrompt?.trim() || DEFAULT_TEST_PROMPT; + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(new Error('timeout')), timeoutMs); + const startedAt = Date.now(); + + try { + let response: Response; + switch (protocol) { + case 'openai-completions': + response = await checkOpenAICompletions(baseUrl, resolvedApiKey, model, requestHeaders, prompt, controller.signal, input.vendorId); + break; + case 'openai-responses': + response = await checkOpenAIResponses(baseUrl, resolvedApiKey, model, requestHeaders, prompt, controller.signal); + break; + case 'anthropic-messages': + response = await checkAnthropicMessages(baseUrl, resolvedApiKey, model, requestHeaders, prompt, controller.signal); + break; + default: + return { + success: false, + status: 'failed', + message: `Unsupported protocol for model check: ${protocol}`, + modelUsed: model, + errorCategory: 'unsupported', + }; + } + + const responseTimeMs = Date.now() - startedAt; + if (!response.ok) { + const errorText = await response.text().catch(() => ''); + const errorCategory = detectModelNotFound(errorText) + ? 'modelNotFound' + : detectAuthFailure(response.status, errorText) + ? 'auth' + : undefined; + return buildResult( + false, + responseTimeMs, + degradedThresholdMs, + model, + errorText || `HTTP ${response.status}`, + response.status, + errorCategory, + ); + } + + await ensureReadableStream(response); + return buildResult(true, responseTimeMs, degradedThresholdMs, model, 'Model is available', response.status); + } catch (error) { + const responseTimeMs = Date.now() - startedAt; + const message = error instanceof Error ? error.message : String(error); + const lowered = message.toLowerCase(); + const category: ModelCheckErrorCategory = lowered.includes('timeout') || lowered.includes('aborted') + ? 'timeout' + : lowered.includes('fetch') || lowered.includes('network') || lowered.includes('connect') + ? 'connection' + : 'connection'; + return buildResult(false, responseTimeMs, degradedThresholdMs, model, message, undefined, category); + } finally { + clearTimeout(timeout); + } +} diff --git a/src/components/settings/ProvidersSettings.tsx b/src/components/settings/ProvidersSettings.tsx index 78055ad33..bb68cc4d0 100644 --- a/src/components/settings/ProvidersSettings.tsx +++ b/src/components/settings/ProvidersSettings.tsx @@ -1,4 +1,4 @@ -/** +/** * Providers Settings Component * Manage AI provider configurations and API keys */ @@ -46,6 +46,10 @@ import { hasConfiguredCredentials, type ProviderListItem, } from '@/lib/provider-accounts'; +import { + runProviderModelCheck, + type ProviderModelCheckResult, +} from '@/lib/provider-model-check'; import { cn } from '@/lib/utils'; import { toast } from 'sonner'; import { useTranslation } from 'react-i18next'; @@ -148,6 +152,39 @@ function getAuthModeLabel( } } +function getModelCheckTone(result: ProviderModelCheckResult | null): 'success' | 'warning' | 'error' | 'idle' { + if (!result) return 'idle'; + if (result.success && result.status === 'operational') return 'success'; + if (result.success && result.status === 'degraded') return 'warning'; + return 'error'; +} + +function getModelCheckText(result: ProviderModelCheckResult | null): string { + if (!result) return ''; + const suffix = result.responseTimeMs ? ` · ${result.responseTimeMs} ms` : ''; + if (result.success && result.status === 'operational') return `检测成功${suffix}`; + if (result.success && result.status === 'degraded') return `模型可用,但响应较慢${suffix}`; + if (result.errorCategory === 'modelNotFound') return `模型不存在或当前供应商不支持该模型${suffix}`; + if (result.errorCategory === 'auth') return `鉴权失败:${result.message}${suffix}`; + if (result.errorCategory === 'timeout') return `请求超时:${result.message}${suffix}`; + if (result.errorCategory === 'unsupported') return `${result.message}${suffix}`; + return `检测失败:${result.message}${suffix}`; +} + +function modelCheckHintClassName(result: ProviderModelCheckResult | null): string { + const tone = getModelCheckTone(result); + switch (tone) { + case 'success': + return 'text-[12px] text-green-600 dark:text-green-500'; + case 'warning': + return 'text-[12px] text-amber-600 dark:text-amber-500'; + case 'error': + return 'text-[12px] text-red-500'; + default: + return 'text-[12px] text-muted-foreground'; + } +} + export function ProvidersSettings() { const { t } = useTranslation('settings'); const devModeUnlocked = useSettingsStore((state) => state.devModeUnlocked); @@ -371,6 +408,8 @@ function ProviderCard({ const [showFallback, setShowFallback] = useState(false); const [validating, setValidating] = useState(false); const [saving, setSaving] = useState(false); + const [checkingModel, setCheckingModel] = useState(false); + const [modelCheckResult, setModelCheckResult] = useState(null); const [arkMode, setArkMode] = useState('apikey'); const typeInfo = PROVIDER_TYPE_INFO.find((t) => t.id === account.vendorId); @@ -396,6 +435,7 @@ function ProviderCard({ setApiProtocol(account.apiProtocol || 'openai-completions'); setUserAgent(getUserAgentHeader(account.headers)); setModelId(account.model || ''); + setModelCheckResult(null); setFallbackModelsText(normalizeFallbackModels(account.fallbackModels).join('\n')); setFallbackProviderIds(normalizeFallbackProviderIds(account.fallbackAccountIds)); setArkMode( @@ -498,6 +538,50 @@ function ProviderCard({ } }; + const handleModelCheck = async () => { + const effectiveModel = (modelId.trim() || account.model || '').trim(); + if (!effectiveModel) { + toast.error(t('aiProviders.toast.modelRequired')); + return; + } + + const effectiveApiKey = normalizeProviderApiKeyInput(newKey); + if ((typeInfo?.requiresApiKey ?? account.vendorId !== 'ollama') && !effectiveApiKey && !status?.hasKey) { + toast.error(t('aiProviders.dialog.apiKeyMissing')); + return; + } + + setCheckingModel(true); + try { + const result = await runProviderModelCheck({ + accountId: account.id, + vendorId: account.vendorId, + apiKey: effectiveApiKey || undefined, + baseUrl: baseUrl.trim() || undefined, + apiProtocol: (account.vendorId === 'custom' || account.vendorId === 'ollama') ? apiProtocol : undefined, + headers: showUserAgentField ? mergeHeadersWithUserAgent(account.headers, userAgent.trim()) : undefined, + model: effectiveModel, + }); + setModelCheckResult(result); + if (result.success) { + toast.success(getModelCheckText(result)); + } else { + toast.error(getModelCheckText(result)); + } + } catch (error) { + const failedResult: ProviderModelCheckResult = { + success: false, + status: 'failed', + message: String(error), + modelUsed: effectiveModel, + }; + setModelCheckResult(failedResult); + toast.error(getModelCheckText(failedResult)); + } finally { + setCheckingModel(false); + } + }; + const currentInputClasses = isDefault ? "h-[40px] rounded-xl font-mono text-[13px] bg-white dark:bg-card border-black/10 dark:border-white/10 focus-visible:ring-2 focus-visible:ring-blue-500/50 shadow-sm" : inputClasses; @@ -521,7 +605,7 @@ function ProviderCard({ {getProviderIconUrl(account.vendorId) ? ( {typeInfo?.name ) : ( - {vendor?.icon || typeInfo?.icon || '⚙️'} + {vendor?.icon || typeInfo?.icon || 'ΓÜÖ∩╕Å'} )}
@@ -788,6 +872,34 @@ function ProviderCard({ )}
+
+
+
+

模型检测

+

用当前配置发起一次真实流式请求,只要首包返回即判定通过。

+
+ +
+ {modelCheckResult ? ( +

{getModelCheckText(modelCheckResult)}

+ ) : ( +

保存前可先检查模型是否存在、Key 是否有效、端点是否可用。

+ )} +
@@ -934,6 +1046,8 @@ function AddProviderDialog({ const [showKey, setShowKey] = useState(false); const [saving, setSaving] = useState(false); const [validationError, setValidationError] = useState(null); + const [checkingModel, setCheckingModel] = useState(false); + const [modelCheckResult, setModelCheckResult] = useState(null); // OAuth Flow State const [oauthFlowing, setOauthFlowing] = useState(false); @@ -1139,7 +1253,7 @@ function AddProviderDialog({ // Skip providers that are temporarily hidden from the UI. if (type.hidden) return false; - // MiniMax portal variants are mutually exclusive — hide BOTH variants + // MiniMax portal variants are mutually exclusive ΓÇö hide BOTH variants // when either one already exists (account may have vendorId of either variant). const hasMinimax = existingVendorIds.has('minimax-portal') || existingVendorIds.has('minimax-portal-cn'); if ((type.id === 'minimax-portal' || type.id === 'minimax-portal-cn') && hasMinimax) return false; @@ -1214,6 +1328,52 @@ function AddProviderDialog({ } }; + const handleModelCheck = async () => { + if (!selectedType || !typeInfo) return; + + const effectiveModel = (modelId.trim() || typeInfo.defaultModelId || '').trim(); + if (!effectiveModel) { + setValidationError(t('aiProviders.toast.modelRequired')); + return; + } + + const effectiveApiKey = normalizeProviderApiKeyInput(apiKey); + if ((typeInfo.requiresApiKey ?? selectedType !== 'ollama') && !effectiveApiKey) { + setValidationError(t('aiProviders.dialog.apiKeyMissing')); + return; + } + + setCheckingModel(true); + setValidationError(null); + try { + const result = await runProviderModelCheck({ + vendorId: selectedType, + apiKey: effectiveApiKey || undefined, + baseUrl: baseUrl.trim() || undefined, + apiProtocol: (selectedType === 'custom' || selectedType === 'ollama') ? apiProtocol : undefined, + headers: userAgent.trim() ? { 'User-Agent': userAgent.trim() } : undefined, + model: effectiveModel, + }); + setModelCheckResult(result); + if (result.success) { + toast.success(getModelCheckText(result)); + } else { + toast.error(getModelCheckText(result)); + } + } catch (error) { + const failedResult: ProviderModelCheckResult = { + success: false, + status: 'failed', + message: String(error), + modelUsed: effectiveModel, + }; + setModelCheckResult(failedResult); + toast.error(getModelCheckText(failedResult)); + } finally { + setCheckingModel(false); + } + }; + return (
@@ -1245,6 +1405,7 @@ function AddProviderDialog({ setBaseUrl(type.defaultBaseUrl || ''); setModelId(type.defaultModelId || ''); setUserAgent(''); + setModelCheckResult(null); setShowAdvancedConfig(false); setArkMode('apikey'); }} @@ -1280,6 +1441,7 @@ function AddProviderDialog({ setBaseUrl(''); setModelId(''); setUserAgent(''); + setModelCheckResult(null); setShowAdvancedConfig(false); setArkMode('apikey'); }} @@ -1341,7 +1503,7 @@ function AddProviderDialog({
)} - {/* API Key input — shown for non-OAuth providers or when apikey mode is selected */} + {/* API Key input ΓÇö shown for non-OAuth providers or when apikey mode is selected */} {(!isOAuth || (supportsApiKey && authMode === 'apikey')) && (
@@ -1522,6 +1684,31 @@ function AddProviderDialog({ )}
)} + {(typeInfo?.showBaseUrl || showModelIdField || selectedType === 'custom' || selectedType === 'ollama' || (!isOAuth || (supportsApiKey && authMode === 'apikey'))) && ( +
+
+
+

模型检测

+

用当前配置发起一次真实流式请求,只要首包返回即判定通过。

+
+ +
+ {modelCheckResult ? ( +

{getModelCheckText(modelCheckResult)}

+ ) : ( +

保存前可先检查模型是否存在、Key 是否有效、端点是否可用。

+ )} +
+ )} {/* Device OAuth Trigger — only shown when in OAuth mode */} {useOAuthFlow && (
diff --git a/src/lib/provider-model-check.ts b/src/lib/provider-model-check.ts new file mode 100644 index 000000000..79672e00d --- /dev/null +++ b/src/lib/provider-model-check.ts @@ -0,0 +1,36 @@ +export type ProviderModelCheckStatus = 'operational' | 'degraded' | 'failed'; +export type ProviderModelCheckErrorCategory = 'modelNotFound' | 'auth' | 'timeout' | 'connection' | 'unsupported'; + +export interface ProviderModelCheckPayload { + accountId?: string; + vendorId: string; + apiKey?: string; + baseUrl?: string; + apiProtocol?: 'openai-completions' | 'openai-responses' | 'anthropic-messages'; + headers?: Record; + model?: string; + timeoutMs?: number; + degradedThresholdMs?: number; + testPrompt?: string; +} + +export interface ProviderModelCheckResult { + success: boolean; + status: ProviderModelCheckStatus; + message: string; + responseTimeMs?: number; + httpStatus?: number; + modelUsed: string; + errorCategory?: ProviderModelCheckErrorCategory; +} + +import { hostApiFetch } from '@/lib/host-api'; + +export async function runProviderModelCheck( + payload: ProviderModelCheckPayload, +): Promise { + return hostApiFetch('/api/provider-model-check', { + method: 'POST', + body: JSON.stringify(payload), + }); +} From 2ddc10960a9ed65179ddccaa02c2864fe9fbb5c3 Mon Sep 17 00:00:00 2001 From: Vis-X Team Date: Thu, 30 Apr 2026 09:54:04 +0800 Subject: [PATCH 2/2] docs(pr): add model-check verification notes and screenshot --- docs/pr/provider-model-check-pr.md | 96 ++++++++++++++++++++++++++ docs/pr/provider-model-check-test.png | Bin 0 -> 80025 bytes 2 files changed, 96 insertions(+) create mode 100644 docs/pr/provider-model-check-pr.md create mode 100644 docs/pr/provider-model-check-test.png diff --git a/docs/pr/provider-model-check-pr.md b/docs/pr/provider-model-check-pr.md new file mode 100644 index 000000000..1dbc8aad8 --- /dev/null +++ b/docs/pr/provider-model-check-pr.md @@ -0,0 +1,96 @@ +# Add provider model-check support + +## Summary + +This PR adds a lightweight **model check** workflow to the Add/Edit Provider UI so users can verify whether a provider endpoint, API key, and model ID are actually usable **before saving**. + +## Why + +Today, adding or editing a provider often requires trial-and-error: + +- users may save an invalid model ID +- users may save a bad API key +- users may save an unreachable / misconfigured endpoint +- the actual failure is only discovered later when the provider is used + +This change adds an explicit pre-save validation step that performs a real request and reports a clear result. + +## What changed + +### UI + +- Added a **"检测模型" / model-check** action in both: + - Add Provider dialog + - Edit Provider panel +- Added inline feedback text for: + - success + - degraded / slow response + - model not found + - auth failure + - timeout + - unsupported protocol + +### Frontend + +- Added `src/lib/provider-model-check.ts` +- Wired `ProvidersSettings.tsx` to call the new API and surface results in the UI + +### Backend + +- Added `/api/provider-model-check` +- Added `electron/services/providers/provider-model-check.ts` +- The backend performs a real streaming request and treats the first returned chunk as proof that the model is usable + +### Supported protocol paths + +- `openai-completions` +- `openai-responses` +- `anthropic-messages` + +## Validation behavior + +The check intentionally stays lightweight: + +- uses a tiny prompt (`Hi`) +- uses small token limits +- uses streaming mode +- considers the request successful once the first response chunk arrives + +This makes the check fast while still proving that: + +- the endpoint is reachable +- auth works +- the requested model exists / is accepted + +## Verification + +Validated locally on a clean upstream-based working tree with only the minimal feature patch applied. + +Commands used: + +```bash +pnpm run ext:bridge +pnpm exec tsc --noEmit +pnpm exec vite build +``` + +All passed successfully. + +## Screenshot + +A local verification screenshot is included in this branch: + +- `docs/pr/provider-model-check-test.png` + +It shows the provider settings UI with the model-check entry point and successful validation state used during testing. + +## Scope / non-goals + +This PR intentionally avoids unrelated customization: + +- no branding changes +- no provider list policy changes +- no advanced-settings refactor +- no packaging / release pipeline changes + +The goal is to keep this patch reviewable and upstream-friendly. diff --git a/docs/pr/provider-model-check-test.png b/docs/pr/provider-model-check-test.png new file mode 100644 index 0000000000000000000000000000000000000000..bbde5e964cd6e1bed1ce276e39c122f37b214ce2 GIT binary patch literal 80025 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 z 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