diff --git a/src/renderer/src/i18n/en-us.json b/src/renderer/src/i18n/en-us.json index bc31014d..52cce207 100644 --- a/src/renderer/src/i18n/en-us.json +++ b/src/renderer/src/i18n/en-us.json @@ -373,7 +373,9 @@ }, "error": { "chat.response": "Something went wrong. Please check if you have set your API key in the Settings > Providers", - "backup.file_format": "Backup file format error" + "backup.file_format": "Backup file format error", + "provider_disabled": "Model provider is not enabled", + "no_api_key": "API key is not configured" }, "words": { "knowledgeGraph": "Knowledge Graph", diff --git a/src/renderer/src/i18n/zh-cn.json b/src/renderer/src/i18n/zh-cn.json index e72e4f17..dcbf9587 100644 --- a/src/renderer/src/i18n/zh-cn.json +++ b/src/renderer/src/i18n/zh-cn.json @@ -373,7 +373,9 @@ }, "error": { "chat.response": "出错了,如果没有配置 API 密钥,请前往设置 > 模型提供商中配置密钥", - "backup.file_format": "备份文件格式错误" + "backup.file_format": "备份文件格式错误", + "provider_disabled": "模型提供商未启用", + "no_api_key": "API 密钥未配置" }, "words": { "knowledgeGraph": "知识图谱", diff --git a/src/renderer/src/i18n/zh-tw.json b/src/renderer/src/i18n/zh-tw.json index 7facc660..5f29fa4d 100644 --- a/src/renderer/src/i18n/zh-tw.json +++ b/src/renderer/src/i18n/zh-tw.json @@ -373,7 +373,9 @@ }, "error": { "chat.response": "出現錯誤。如果尚未配置 API 密鑰,請前往設定 > 模型提供者中配置密鑰", - "backup.file_format": "備份文件格式錯誤" + "backup.file_format": "備份文件格式錯誤", + "provider_disabled": "模型提供商未啟用", + "no_api_key": "API 密鑰未配置" }, "words": { "knowledgeGraph": "知識圖譜", diff --git a/src/renderer/src/pages/paintings/PaintingsPage.tsx b/src/renderer/src/pages/paintings/PaintingsPage.tsx index 4a96838e..bc2e325c 100644 --- a/src/renderer/src/pages/paintings/PaintingsPage.tsx +++ b/src/renderer/src/pages/paintings/PaintingsPage.tsx @@ -11,7 +11,7 @@ import Scrollbar from '@renderer/components/Scrollbar' import { TEXT_TO_IMAGES_MODELS } from '@renderer/config/models' import { useTheme } from '@renderer/context/ThemeProvider' import { usePaintings } from '@renderer/hooks/usePaintings' -import { useProviders } from '@renderer/hooks/useProvider' +import { useAllProviders } from '@renderer/hooks/useProvider' import AiProvider from '@renderer/providers/AiProvider' import { getProviderByModel } from '@renderer/services/AssistantService' import FileManager from '@renderer/services/FileManager' @@ -69,7 +69,7 @@ const PaintingsPage: FC = () => { const { paintings, addPainting, removePainting, updatePainting } = usePaintings() const [painting, setPainting] = useState(_painting || paintings[0]) const { theme } = useTheme() - const { providers } = useProviders() + const providers = useAllProviders() const siliconProvider = providers.find((p) => p.id === 'silicon')! const [currentImageIndex, setCurrentImageIndex] = useState(0) @@ -118,8 +118,19 @@ const PaintingsPage: FC = () => { const model = TEXT_TO_IMAGES_MODELS.find((m) => m.id === painting.model) const provider = getProviderByModel(model) + if (!provider.enabled) { + window.modal.error({ + content: t('error.provider_disabled'), + centered: true + }) + return + } + if (!provider.apiKey) { - window.message.error(t('error.no_api_key')) + window.modal.error({ + content: t('error.no_api_key'), + centered: true + }) return } @@ -160,7 +171,10 @@ const PaintingsPage: FC = () => { } } catch (error: unknown) { if (error instanceof Error && error.name !== 'AbortError') { - window.message.error(getErrorMessage(error)) + window.modal.error({ + content: getErrorMessage(error), + centered: true + }) } } finally { setIsLoading(false) diff --git a/src/renderer/src/providers/OpenAIProvider.ts b/src/renderer/src/providers/OpenAIProvider.ts index da72bc6a..b0435197 100644 --- a/src/renderer/src/providers/OpenAIProvider.ts +++ b/src/renderer/src/providers/OpenAIProvider.ts @@ -370,28 +370,23 @@ export default class OpenAIProvider extends BaseProvider { guidanceScale: number signal?: AbortSignal }): Promise { - try { - const response = (await this.sdk.request({ - method: 'post', - path: '/images/generations', - headers: this.getHeaders(), - signal, - body: { - model: 'stabilityai/stable-diffusion-3-5-large', - prompt, - negative_prompt: negativePrompt, - image_size: imageSize, - batch_size: batchSize, - seed: seed ? parseInt(seed) : undefined, - num_inference_steps: numInferenceSteps, - guidance_scale: guidanceScale - } - })) as { data: Array<{ url: string }> } + const response = (await this.sdk.request({ + method: 'post', + path: '/images/generations', + headers: this.getHeaders(), + signal, + body: { + model: 'stabilityai/stable-diffusion-3-5-large', + prompt, + negative_prompt: negativePrompt, + image_size: imageSize, + batch_size: batchSize, + seed: seed ? parseInt(seed) : undefined, + num_inference_steps: numInferenceSteps, + guidance_scale: guidanceScale + } + })) as { data: Array<{ url: string }> } - return response.data.map((item) => item.url) - } catch (error) { - console.error('Image generation error:', error) - return [] - } + return response.data.map((item) => item.url) } }