From c73b9eb4030c67697234ca66b9b5e2d1a5b1ad10 Mon Sep 17 00:00:00 2001 From: Pine Date: Fri, 14 Aug 2026 11:33:13 +0800 Subject: [PATCH] feat(ui): add model field to the image-recognition settings card The card now configures the provider endpoint, API key, and model, mirroring the provider Config. Co-Authored-By: Claude --- .../src/client/ImageRecognitionCard.tsx | 12 ++++++++++++ .../src/client/image-recognition-card-controller.ts | 7 ++++++- .../client/ui-settings-plugins/src/client/locales.ts | 5 +++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/client/ui-settings-plugins/src/client/ImageRecognitionCard.tsx b/packages/client/ui-settings-plugins/src/client/ImageRecognitionCard.tsx index 609075f240..a3583fb20f 100644 --- a/packages/client/ui-settings-plugins/src/client/ImageRecognitionCard.tsx +++ b/packages/client/ui-settings-plugins/src/client/ImageRecognitionCard.tsx @@ -56,6 +56,18 @@ export function ImageRecognitionCard(props: ImageRecognitionCardProps) { onEdit={(text) => { props.edit('baseURL', text) }} onReset={() => { props.resetField('baseURL') }} /> + { props.edit('model', text) }} + onReset={() => { props.resetField('model') }} + /> ) } diff --git a/packages/client/ui-settings-plugins/src/client/image-recognition-card-controller.ts b/packages/client/ui-settings-plugins/src/client/image-recognition-card-controller.ts index 68faf3b5af..fda7f35803 100644 --- a/packages/client/ui-settings-plugins/src/client/image-recognition-card-controller.ts +++ b/packages/client/ui-settings-plugins/src/client/image-recognition-card-controller.ts @@ -34,6 +34,8 @@ export interface ImageRecognitionSettings { apiKeyEnv?: string /** Provider endpoint; blank inherits the provider default. */ baseURL?: string + /** Vision model name; blank inherits the provider default. */ + model?: string } /** What the credentials domain last reported, and for which reference. */ @@ -50,6 +52,8 @@ interface CredentialState { export interface ImageRecognitionCardState extends CardShell { /** Provider endpoint. */ baseURL: CardFieldState + /** Vision model name. */ + model: CardFieldState /** The staged credential, which starts blank on every load. */ apiKey: CardFieldState /** Whether the Host reports a credential configured for the referenced key. */ @@ -82,7 +86,7 @@ export class ImageRecognitionCardController { ) { this.form = new CardForm( scope, - [textField('baseURL')], + [textField('baseURL'), textField('model')], [{ field: API_KEY_FIELD, write: text => this.writeKey(text) }], ) this.store = this.form.bind(() => this.projection()) @@ -94,6 +98,7 @@ export class ImageRecognitionCardController { return { ...this.form.shell(), baseURL: this.form.field('baseURL'), + model: this.form.field('model'), apiKey: this.form.field(API_KEY_FIELD), apiKeyConfigured: this.credential.configured, apiKeyWritable: this.credential.writable, diff --git a/packages/client/ui-settings-plugins/src/client/locales.ts b/packages/client/ui-settings-plugins/src/client/locales.ts index a547b7b10d..3e2e282417 100644 --- a/packages/client/ui-settings-plugins/src/client/locales.ts +++ b/packages/client/ui-settings-plugins/src/client/locales.ts @@ -14,6 +14,7 @@ export type PluginsSettingsLocaleKey = | 'imageRecognitionTitle' | 'imageRecognitionDescription' | 'imageRecognitionApiKey' | 'imageRecognitionApiKeyHint' | 'imageRecognitionApiKeySet' | 'imageRecognitionApiKeyUnset' | 'imageRecognitionBaseUrl' | 'imageRecognitionBaseUrlHint' + | 'imageRecognitionModel' | 'imageRecognitionModelHint' /** English copy. */ export const en: Record = { @@ -62,6 +63,8 @@ export const en: Record = { imageRecognitionApiKeyUnset: 'No key is configured; recognition is unavailable until one is.', imageRecognitionBaseUrl: 'Endpoint', imageRecognitionBaseUrlHint: 'Leave blank to use the provider default.', + imageRecognitionModel: 'Model', + imageRecognitionModelHint: 'Vision model name; leave blank to use the provider default.', } /** Simplified Chinese copy. */ @@ -111,4 +114,6 @@ export const zh: Record = { imageRecognitionApiKeyUnset: '未配置密钥;配置之前图像识别不可用。', imageRecognitionBaseUrl: '接口地址', imageRecognitionBaseUrlHint: '留空则使用提供方默认地址。', + imageRecognitionModel: '模型', + imageRecognitionModelHint: '视觉模型名称;留空则使用提供方默认。', }