- {'Success'}
+ {isDemo ? 'Success' : 'Job Successfully Started'}
{isDemo ? (
@@ -361,7 +365,18 @@ const Finish = () => {
(
+ renderItem={({ title, href, icon, description, external }, i) => (
+ external ?
+
+
+ }
+ title={title}
+ description={description}
+ />
+
+ :
+
= ({ data }) => {
const [colDefs, setColDefs] = useState([]);
const [rowData, setRowData] = useState([]);
+ console.log('FreeFormExampleTable', data);
useEffect(() => {
if (!isEmpty(data)) {
diff --git a/app/client/src/pages/DataGenerator/Success.tsx b/app/client/src/pages/DataGenerator/Success.tsx
index f7c8e504..e942e3c9 100644
--- a/app/client/src/pages/DataGenerator/Success.tsx
+++ b/app/client/src/pages/DataGenerator/Success.tsx
@@ -122,7 +122,7 @@ const Success: FC = ({ formData, isDemo = true }) => {
- {'Success'}
+ {isDemo ? 'Success' : 'Job successfully started.'}
{isDemo ? (
diff --git a/app/client/src/pages/DataGenerator/constants.ts b/app/client/src/pages/DataGenerator/constants.ts
index b90946bc..b4f1f058 100644
--- a/app/client/src/pages/DataGenerator/constants.ts
+++ b/app/client/src/pages/DataGenerator/constants.ts
@@ -5,6 +5,8 @@ export const MODEL_PROVIDER_LABELS = {
[ModelProviders.CAII]: 'Cloudera AI Inference Service',
[ModelProviders.GOOGLE_GEMINI]: 'Google Gemini',
[ModelProviders.AZURE_OPENAI]: 'Azure OpenAI',
+ [ModelProviders.GEMINI]: 'Gemini',
+ [ModelProviders.OPENAI]: 'OpenAI'
};
export const MIN_SEED_INSTRUCTIONS = 1
diff --git a/app/client/src/pages/DataGenerator/types.ts b/app/client/src/pages/DataGenerator/types.ts
index 73c64b20..027bb054 100644
--- a/app/client/src/pages/DataGenerator/types.ts
+++ b/app/client/src/pages/DataGenerator/types.ts
@@ -19,6 +19,8 @@ export enum ModelProviders {
CAII = 'CAII',
AZURE_OPENAI = 'AZURE_OPENAI',
GOOGLE_GEMINI = 'GOOGLE_GEMINI',
+ OPENAI = 'openai',
+ GEMINI = 'gemini',
}
export type ModelProvidersDropdownOpts = { label: string, value: ModelProviders }[];
diff --git a/app/client/src/pages/Datasets/DatasetsPage.tsx b/app/client/src/pages/Datasets/DatasetsPage.tsx
index b36c85d7..2ff5954c 100644
--- a/app/client/src/pages/Datasets/DatasetsPage.tsx
+++ b/app/client/src/pages/Datasets/DatasetsPage.tsx
@@ -4,7 +4,6 @@ import { Col, Flex, Input, Layout, Row, Table, TableProps, Tooltip, notification
import styled from 'styled-components';
import Paragraph from 'antd/es/typography/Paragraph';
import { useDatasets } from '../Home/hooks';
-import { ExportResult } from '../../components/Export/ExportModal';
import { SearchProps } from 'antd/es/input';
import Loading from '../Evaluator/Loading';
import { Dataset } from '../Evaluator/types';
diff --git a/app/client/src/pages/Home/DatasetsTab.tsx b/app/client/src/pages/Home/DatasetsTab.tsx
index 7ce2d040..6512dc1a 100644
--- a/app/client/src/pages/Home/DatasetsTab.tsx
+++ b/app/client/src/pages/Home/DatasetsTab.tsx
@@ -106,10 +106,16 @@ const DatasetsTab: React.FC = ({ hideSearch = false }) => {
key: 'job_status',
title: 'Status',
dataIndex: 'job_status',
- width: 80,
+ width: 140,
sorter: sortItemsByKey('job_status'),
- render: (status: JobStatus) =>
+ render: (status: JobStatus) =>
+
+ {status === 'ENGINE_SCHEDULING' && {'Scheduling'}
}
+ {status === 'ENGINE_RUNNING' && {'Running'}
}
+ {status === 'ENGINE_STOPPED' && {'Stopped'}
}
+ {status === 'ENGINE_SUCCEEDED' && {'Success'}
}
+ {status === 'ENGINE_TIMEDOUT' && {'Timeout'}
}
},
{
diff --git a/app/client/src/pages/Home/TemplateCard.tsx b/app/client/src/pages/Home/TemplateCard.tsx
index 112a68e2..69577971 100644
--- a/app/client/src/pages/Home/TemplateCard.tsx
+++ b/app/client/src/pages/Home/TemplateCard.tsx
@@ -132,10 +132,10 @@ const TagsContainer = styled.div`
}
`;
-const StyledTag = styled(Tag)`
- color: ${props => props.theme.color};
- background-color: ${props => props.theme.backgroundColor};
- border: 1px solid ${props => props.theme.borderColor};
+const StyledTag = styled(Tag)<{ $theme: { color: string; backgroundColor: string; borderColor: string } }>`
+ color: ${props => props.$theme.color} !important;
+ background-color: ${props => props.$theme.backgroundColor} !important;
+ border: 1px solid ${props => props.$theme.borderColor} !important;
`;
@@ -150,7 +150,7 @@ const TemplateCard: React.FC = ({ template }) => {
const { color, backgroundColor, borderColor } = getTemplateTagColors(theme as string);
return (
-
+
{tag}
diff --git a/app/client/src/pages/Settings/AddModelProviderButton.tsx b/app/client/src/pages/Settings/AddModelProviderButton.tsx
new file mode 100644
index 00000000..a1207a6f
--- /dev/null
+++ b/app/client/src/pages/Settings/AddModelProviderButton.tsx
@@ -0,0 +1,306 @@
+import { useEffect, useState } from 'react';
+import { PlusCircleOutlined } from '@ant-design/icons';
+import { Alert, AutoComplete, Button, Form, Input, Modal, notification, Radio, Select } from 'antd';
+import type { CheckboxGroupProps } from 'antd/es/checkbox';
+import get from 'lodash/get';
+import isEqual from 'lodash/isEqual';
+import { useMutation } from "@tanstack/react-query";
+import { addModelProvider } from './hooks';
+import Loading from '../Evaluator/Loading';
+
+export enum ModelProviderType {
+ OPENAI = 'openai',
+ OPENAI_COMPATIBLE = 'openai_compatible',
+ GEMINI = 'gemini',
+ CAII = 'caii',
+ AWS_BEDROCK = 'aws_bedrock'
+}
+
+
+export const modelProviderTypeOptions: CheckboxGroupProps['options'] = [
+ { label: 'OpenAI', value: 'openai' },
+ { label: 'OpenAI Compatible', value: 'openai_compatible' },
+ { label: 'Gemini', value: 'gemini' },
+ { label: 'AWS Bedrock', value: 'aws_bedrock' },
+ { label: 'CAII', value: 'caii' },
+];
+
+const OPENAI_MODELS = [
+ "gpt-4.1", // Latest GPT-4.1 series (April 2025)
+ "gpt-4.1-mini",
+ "gpt-4.1-nano"
+];
+
+export const OPENAI_MODELS_OPTIONS = OPENAI_MODELS.map((model: string) => ({
+ label: model,
+ value: model
+}));
+
+const GEMINI_MODELS = [
+ "gemini-2.5-pro", // June 2025 - most powerful thinking model
+ "gemini-2.5-flash", // June 2025 - best price-performance
+ "gemini-2.5-flash-lite" // June 2025 - cost-efficient
+];
+
+export const AWS_BEDROCK_MODELS = [
+ "us.anthropic.claude-3-5-sonnet-20241022-v2:0",
+ "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
+ "us.anthropic.claude-opus-4-1-20250805-v1:0",
+ "us.anthropic.claude-opus-4-20250514-v1:0",
+ "global.anthropic.claude-sonnet-4-20250514-v1:0",
+ "us.anthropic.claude-3-7-sonnet-20250219-v1:0",
+ "us.anthropic.claude-3-5-haiku-20241022-v1:0",
+ "anthropic.claude-3-5-sonnet-20240620-v1:0",
+ "anthropic.claude-3-haiku-20240307-v1:0",
+ "anthropic.claude-3-sonnet-20240229-v1:0",
+ "us.anthropic.claude-3-opus-20240229-v1:0",
+ "meta.llama3-8b-instruct-v1:0",
+ "meta.llama3-70b-instruct-v1:0",
+ "mistral.mistral-large-2402-v1:0",
+ "mistral.mistral-small-2402-v1:0",
+ "us.meta.llama3-2-11b-instruct-v1:0",
+ "us.meta.llama3-2-3b-instruct-v1:0",
+ "us.meta.llama3-2-90b-instruct-v1:0",
+ "us.meta.llama3-2-1b-instruct-v1:0",
+ "us.meta.llama3-1-8b-instruct-v1:0",
+ "us.meta.llama3-1-70b-instruct-v1:0",
+ "us.meta.llama3-3-70b-instruct-v1:0",
+ "us.mistral.pixtral-large-2502-v1:0",
+ "us.meta.llama4-scout-17b-instruct-v1:0",
+ "us.meta.llama4-maverick-17b-instruct-v1:0",
+ "mistral.mistral-7b-instruct-v0:2",
+ "mistral.mixtral-8x7b-instruct-v0:1"
+];
+
+export const AWS_BEDROCK_MODELS_OPTIONS = AWS_BEDROCK_MODELS.map((model: string) => ({
+ label: model,
+ value: model
+}));
+
+export const GEMINI_MODELS_OPTIONS = GEMINI_MODELS.map((model: string) => ({
+ label: model,
+ value: model
+}));
+
+interface Props {
+ refetch: () => void;
+}
+
+const AddModelProviderButton: React.FC = ({ refetch }) => {
+ const [form] = Form.useForm();
+ const [showModal, setShowModal] = useState(false);
+ const [modelProviderType, setModelProviderType] = useState(ModelProviderType.OPENAI);
+ const [models, setModels] = useState(OPENAI_MODELS_OPTIONS);
+ const mutation = useMutation({
+ mutationFn: addModelProvider
+ });
+
+
+ useEffect(() => {
+ if (mutation.isError) {
+ notification.error({
+ message: 'Error',
+ description: `An error occurred while fetching the prompt.\n ${mutation.error}`
+ });
+ }
+ if (mutation.isSuccess) {
+ notification.success({
+ message: 'Success',
+ description: `THe model provider has been created successfully!.`
+ });
+ form.resetFields();
+ setShowModal(false);
+ refetch();
+ }
+ }, [mutation.error, mutation.isSuccess]);
+
+ const onCancel = () => {
+ form.resetFields();
+ setShowModal(false);
+ }
+
+ const onSubmit = async () => {
+ try {
+ await form.validateFields();
+ const values = form.getFieldsValue();
+
+ mutation.mutate({
+ endpoint_config: {
+ display_name: values.display_name,
+ endpoint_id: values.endpoint_id,
+ model_id: values.model_id,
+ provider_type: values.provider_type,
+ api_key: values.api_key,
+ endpoint_url: values.endpoint_url
+ }
+ });
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+
+ const initialValues = {
+ provider_type: 'openai'
+ };
+
+ const onChange = (e: any) => {
+ const value = get(e, 'target.value');
+ setModelProviderType(value as ModelProviderType);
+ if (value === 'openai' && !isEqual(OPENAI_MODELS_OPTIONS, models)) {
+ setModels(OPENAI_MODELS_OPTIONS);
+ } else if (value === 'gemini' && !isEqual(GEMINI_MODELS_OPTIONS, models)) {
+ setModels(GEMINI_MODELS_OPTIONS);
+ } else if (value === 'aws_bedrock' && !isEqual(GEMINI_MODELS_OPTIONS, models)) {
+ setModels(AWS_BEDROCK_MODELS_OPTIONS);
+ }
+ }
+
+ return (
+ <>
+
+ {showModal &&
+
+ }
+ />
+ )}
+