Skip to content

Commit db1e928

Browse files
committed
feat: add gemini as options in the generate flow modal
1 parent 832a188 commit db1e928

3 files changed

Lines changed: 87 additions & 14 deletions

File tree

src/components/molecules/flow/flowtestai.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,26 @@ export const generateFlowData = async (instruction, modelName, modelKey, collect
9696
nodes: translateGeneratedNodesToOpenApiNodes(generatedNodes, collection.nodes),
9797
};
9898
return flowData;
99+
} else if (modelName === GENAI_MODELS.gemini) {
100+
if (!collection.dotEnvVariables) {
101+
await ipcRenderer.invoke('renderer:create-dotenv', collection.pathname, `GEMINI_APIKEY=${modelKey}`);
102+
} else if (
103+
!Object.prototype.hasOwnProperty.call(collection.dotEnvVariables, 'GEMINI_APIKEY') ||
104+
modelKey != collection.dotEnvVariables['GEMINI_APIKEY']
105+
) {
106+
await addOrUpdateDotEnvironmentFile(collectionId, {
107+
...collection.dotEnvVariables,
108+
GEMINI_APIKEY: modelKey,
109+
});
110+
}
111+
const generatedNodes = await ipcRenderer.invoke('renderer:generate-nodes-ai', instruction, collectionId, {
112+
name: GENAI_MODELS.gemini,
113+
apiKey: modelKey,
114+
});
115+
const flowData = {
116+
nodes: translateGeneratedNodesToOpenApiNodes(generatedNodes, collection.nodes),
117+
};
118+
return flowData;
99119
} else {
100120
return Promise.reject(new Error(`model: ${modelName} not supported`));
101121
}

src/components/molecules/modals/GenerateFlowTestModal.js

Lines changed: 66 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ const GenerateFlowTestModal = ({ closeFn = () => null, open = false, collectionI
3030

3131
const [selectedModel, setSelectedModel] = useState(null);
3232
const [textareaValue, setTextareaValue] = useState('');
33-
const [modelKey, setModelKey] = useState('');
33+
const [openaiKey, setOpenAIKey] = useState('');
34+
const [geminiKey, setGeminiKey] = useState('');
3435
const [bedrockAccessKeyId, setBedrockAccessKeyId] = useState('');
3536
const [bedrockSecretAccessKey, setBedrockSecretAccessKey] = useState('');
3637

@@ -42,15 +43,16 @@ const GenerateFlowTestModal = ({ closeFn = () => null, open = false, collectionI
4243
const [showFlowtestNameError, setShowFlowtestNameError] = useState(false);
4344
const [showCollectionSelectionError, setShowCollectionSelectionError] = useState(false);
4445
const [showSelectedModelError, setSelectedModelError] = useState(false);
45-
const [showModelKeyError, setShowModelKeyError] = useState(false);
46+
const [showOpenAIKeyError, setShowOpenAIKeyError] = useState(false);
47+
const [showGeminiKeyError, setShowGeminiKeyError] = useState(false);
4648
const [showDescribeFlowError, setShowDescribeFlowError] = useState(false);
4749
const [showBedrockAccessKeyIdError, setShowBedrockAccessKeyIdError] = useState(false);
4850
const [showBedrockSecretAccessKeyError, setShowBedrockSecretAccessKeyError] = useState(false);
4951
//const [showFolderSelectionError, setShowFolderSelectionError] = useState(false);
5052

5153
useEffect(() => {
5254
setSelectionCollection(collectionId ? collections.find((c) => c.id === collectionId) : {});
53-
}, [collectionId]);
55+
}, [collectionId, collections]);
5456

5557
const resetFields = () => {
5658
if (!collectionId) {
@@ -60,10 +62,12 @@ const GenerateFlowTestModal = ({ closeFn = () => null, open = false, collectionI
6062
}
6163
setSelectedModel(null);
6264
setTextareaValue('');
63-
setModelKey('');
65+
setOpenAIKey('');
66+
setGeminiKey('');
6467
setShowFlowtestNameError(false);
6568
setShowCollectionSelectionError(false);
66-
setShowModelKeyError(false);
69+
setShowOpenAIKeyError(false);
70+
setShowGeminiKeyError(false);
6771
setShowDescribeFlowError(false);
6872
setSelectedModelError(false);
6973
setShowBedrockAccessKeyIdError(false);
@@ -289,7 +293,18 @@ const GenerateFlowTestModal = ({ closeFn = () => null, open = false, collectionI
289293
'OPENAI_APIKEY',
290294
)
291295
) {
292-
setModelKey(selectedCollection.dotEnvVariables['OPENAI_APIKEY']);
296+
setOpenAIKey(selectedCollection.dotEnvVariables['OPENAI_APIKEY']);
297+
}
298+
}
299+
300+
if (GENAI_MODELS.gemini) {
301+
if (
302+
Object.prototype.hasOwnProperty.call(
303+
selectedCollection.dotEnvVariables,
304+
'GEMINI_APIKEY',
305+
)
306+
) {
307+
setGeminiKey(selectedCollection.dotEnvVariables['GEMINI_APIKEY']);
293308
}
294309
}
295310

@@ -366,6 +381,35 @@ const GenerateFlowTestModal = ({ closeFn = () => null, open = false, collectionI
366381
)}
367382
</div>
368383
)}
384+
{selectedModel === GENAI_MODELS.gemini ? (
385+
<div>
386+
<div className='mt-6 flex h-12 w-full items-center justify-center rounded border border-cyan-900 bg-background-light text-sm text-cyan-900 hover:bg-background'>
387+
<label
388+
className='flex h-full w-32 items-center border-r border-cyan-900 bg-transparent px-4'
389+
htmlFor='openAIkey'
390+
>
391+
API_KEY
392+
</label>
393+
<input
394+
id='geminikey'
395+
type='text'
396+
className='nodrag nowheel block w-full bg-transparent p-2.5 outline-none'
397+
name='keyName'
398+
placeholder='Enter your GEMINI api key'
399+
value={geminiKey.trim()}
400+
//readOnly='readonly'
401+
onChange={(e) => setGeminiKey(e.target.value)}
402+
/>
403+
</div>
404+
{geminiKey.trim() === '' && showGeminiKeyError ? (
405+
<div className='py-2 text-red-600'> {`Please enter ${selectedModel} api key`}</div>
406+
) : (
407+
''
408+
)}
409+
</div>
410+
) : (
411+
''
412+
)}
369413
{selectedModel === GENAI_MODELS.openai ? (
370414
<div>
371415
<div className='mt-6 flex h-12 w-full items-center justify-center rounded border border-cyan-900 bg-background-light text-sm text-cyan-900 hover:bg-background'>
@@ -381,12 +425,12 @@ const GenerateFlowTestModal = ({ closeFn = () => null, open = false, collectionI
381425
className='nodrag nowheel block w-full bg-transparent p-2.5 outline-none'
382426
name='keyName'
383427
placeholder='Enter your OPENAI api key'
384-
value={modelKey.trim()}
428+
value={openaiKey.trim()}
385429
//readOnly='readonly'
386-
onChange={(e) => setModelKey(e.target.value)}
430+
onChange={(e) => setOpenAIKey(e.target.value)}
387431
/>
388432
</div>
389-
{modelKey.trim() === '' && showModelKeyError ? (
433+
{openaiKey.trim() === '' && showOpenAIKeyError ? (
390434
<div className='py-2 text-red-600'> {`Please enter ${selectedModel} api key`}</div>
391435
) : (
392436
''
@@ -506,8 +550,13 @@ const GenerateFlowTestModal = ({ closeFn = () => null, open = false, collectionI
506550
return;
507551
}
508552

509-
if (selectedModel === GENAI_MODELS.openai && (!modelKey || modelKey.trim() === '')) {
510-
setShowModelKeyError(true);
553+
if (selectedModel === GENAI_MODELS.openai && (!openaiKey || openaiKey.trim() === '')) {
554+
setShowOpenAIKeyError(true);
555+
return;
556+
}
557+
558+
if (selectedModel === GENAI_MODELS.gemini && (!geminiKey || geminiKey.trim() === '')) {
559+
setShowGeminiKeyError(true);
511560
return;
512561
}
513562

@@ -534,16 +583,19 @@ const GenerateFlowTestModal = ({ closeFn = () => null, open = false, collectionI
534583

535584
setShowFlowtestNameError(false);
536585
setShowCollectionSelectionError(false);
537-
setShowModelKeyError(false);
586+
setShowOpenAIKeyError(false);
587+
setShowGeminiKeyError(false);
538588
setShowBedrockAccessKeyIdError(false);
539589
setShowBedrockSecretAccessKeyError(false);
540590
setShowDescribeFlowError(false);
541591
setSelectedModelError(false);
542592

543593
const creds =
544594
selectedModel === GENAI_MODELS.openai
545-
? modelKey
546-
: { accessKeyId: bedrockAccessKeyId, secretAccessKey: bedrockSecretAccessKey };
595+
? openaiKey
596+
: selectedModel === GENAI_MODELS.gemini
597+
? geminiKey
598+
: { accessKeyId: bedrockAccessKeyId, secretAccessKey: bedrockSecretAccessKey };
547599
function gen() {
548600
setShowLoader(true);
549601
promiseWithTimeout(

src/constants/Common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,5 @@ export const OBJ_TYPES = {
3232
export const GENAI_MODELS = {
3333
openai: 'OPENAI',
3434
bedrock_claude: 'BEDROCK_CLAUDE',
35+
gemini: 'GEMINI',
3536
};

0 commit comments

Comments
 (0)