From 25377a9bc7ec98a1149253c3eb49300dc45b254d Mon Sep 17 00:00:00 2001 From: Sidney Date: Fri, 17 Jul 2026 22:22:32 -0300 Subject: [PATCH] feat: adiciona seletor de modelos de imagem da OpenAI (DALL-E 3 vs DALL-E 2) e do Gemini (Imagen 3) --- manager/components/Exams.tsx | 41 +++++++++++++++++++++++++++++++++--- manager/server.selfhosted.js | 6 +++--- manager/types.ts | 2 ++ 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/manager/components/Exams.tsx b/manager/components/Exams.tsx index daaf9b9..daf5d04 100644 --- a/manager/components/Exams.tsx +++ b/manager/components/Exams.tsx @@ -38,7 +38,9 @@ const Exams: React.FC = ({ data, updateData }) => { openaiModel: data.aiConfig?.openaiModel || 'gpt-4o-mini', claudeModel: data.aiConfig?.claudeModel || 'claude-3-5-sonnet-20241022', openrouterModel: data.aiConfig?.openrouterModel || 'google/gemini-2.5-flash', - activeImageProvider: data.aiConfig?.activeImageProvider || 'gemini' + activeImageProvider: data.aiConfig?.activeImageProvider || 'gemini', + openaiImageModel: data.aiConfig?.openaiImageModel || 'dall-e-3', + geminiImageModel: data.aiConfig?.geminiImageModel || 'imagen-3.0-generate-002' }); const [dynamicModels, setDynamicModels] = useState<{ @@ -89,7 +91,9 @@ const Exams: React.FC = ({ data, updateData }) => { openaiModel: data.aiConfig?.openaiModel || 'gpt-4o-mini', claudeModel: data.aiConfig?.claudeModel || 'claude-3-5-sonnet-20241022', openrouterModel: data.aiConfig?.openrouterModel || 'google/gemini-2.5-flash', - activeImageProvider: data.aiConfig?.activeImageProvider || 'gemini' + activeImageProvider: data.aiConfig?.activeImageProvider || 'gemini', + openaiImageModel: data.aiConfig?.openaiImageModel || 'dall-e-3', + geminiImageModel: data.aiConfig?.geminiImageModel || 'imagen-3.0-generate-002' }); setShowAIConfigModal(true); }; @@ -160,7 +164,9 @@ const Exams: React.FC = ({ data, updateData }) => { openaiModel: aiForm.openaiModel, claudeModel: aiForm.claudeModel, openrouterModel: aiForm.openrouterModel, - activeImageProvider: aiForm.activeImageProvider + activeImageProvider: aiForm.activeImageProvider, + openaiImageModel: aiForm.openaiImageModel, + geminiImageModel: aiForm.geminiImageModel }; try { @@ -1438,6 +1444,35 @@ const Exams: React.FC = ({ data, updateData }) => { + {/* Modelo da IA de Imagem */} +
+ {aiForm.activeImageProvider === 'openai' && ( +
+ + +
+ )} + {aiForm.activeImageProvider === 'gemini' && ( +
+ + +
+ )} +
+ {aiForm.activeProvider === 'gemini' && (

Google Gemini

diff --git a/manager/server.selfhosted.js b/manager/server.selfhosted.js index b18e8c8..1ad3bf0 100644 --- a/manager/server.selfhosted.js +++ b/manager/server.selfhosted.js @@ -1615,8 +1615,7 @@ app.post('/api/ai/generate-image', async (req, res) => { let imageUrl = ''; if (provider === 'openai') { - const modelName = aiConfig.openaiModel || 'gpt-4o-mini'; - const imageModel = modelName.includes('gpt-4') ? 'dall-e-3' : 'dall-e-2'; + const imageModel = aiConfig.openaiImageModel || 'dall-e-3'; const response = await fetch('https://api.openai.com/v1/images/generations', { method: 'POST', @@ -1663,7 +1662,8 @@ app.post('/api/ai/generate-image', async (req, res) => { } } else { // Usar Google Gemini Imagen 3 - const imagenUrl = `https://generativelanguage.googleapis.com/v1beta/models/imagen-3.0-generate-002:predict?key=${apiKey}`; + const geminiImageModel = aiConfig.geminiImageModel || 'imagen-3.0-generate-002'; + const imagenUrl = `https://generativelanguage.googleapis.com/v1beta/models/${geminiImageModel}:predict?key=${apiKey}`; const payload = { instances: [ { diff --git a/manager/types.ts b/manager/types.ts index c3e8cc4..17eee23 100644 --- a/manager/types.ts +++ b/manager/types.ts @@ -308,6 +308,8 @@ export interface AIConfig { claudeModel?: string; openrouterModel?: string; activeImageProvider?: 'gemini' | 'openai'; + openaiImageModel?: string; + geminiImageModel?: string; } export interface SchoolData {