Skip to content

Commit 1359c0d

Browse files
authored
Merge pull request #132 from rootcodelabs/deployment-est-gpu
Get update from deployment-est-gpu into deployment-set-gpu-Bimsara
2 parents 9f4240e + ea50354 commit 1359c0d

12 files changed

Lines changed: 780 additions & 39 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-- Check if agency exists in mock_centops table
2+
SELECT agency_id
3+
FROM public.mock_centops
4+
WHERE agency_id = :agencyId;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
SELECT id, major, minor
22
FROM public.dataset_versions
3+
WHERE generation_status = 'Generation_Success'
34
ORDER BY id;
Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
SELECT
2-
id,
3-
major,
4-
minor,
5-
created_at,
6-
generation_status,
7-
last_model_trained,
8-
last_trained,
2+
dv.id,
3+
dv.major,
4+
dv.minor,
5+
dv.created_at,
6+
dv.generation_status,
7+
COALESCE(dm.model_name, dv.last_model_trained) AS last_model_trained,
8+
dv.last_trained,
99
CEIL(COUNT(*) OVER() / :page_size::DECIMAL) AS total_pages
1010
FROM
11-
dataset_versions
11+
dataset_versions dv
12+
LEFT JOIN
13+
data_models dm ON dv.last_model_trained = dm.model_id::text
1214
WHERE
13-
(:generation_status = 'all' OR generation_status ILIKE '%' || :generation_status || '%')
15+
(:generation_status = 'all' OR dv.generation_status ILIKE '%' || :generation_status || '%')
1416
AND (:dataset_name = 'all'
15-
OR POSITION(LOWER(:dataset_name) IN LOWER(CONCAT('v', major, '.', minor))) > 0
16-
OR POSITION(LOWER(:dataset_name) IN LOWER(CONCAT(major, '.', minor))) > 0
17-
OR POSITION(LOWER(:dataset_name) IN LOWER(major::text)) > 0
18-
OR POSITION(LOWER(:dataset_name) IN LOWER(minor::text)) > 0)
17+
OR POSITION(LOWER(:dataset_name) IN LOWER(CONCAT('v', dv.major, '.', dv.minor))) > 0
18+
OR POSITION(LOWER(:dataset_name) IN LOWER(CONCAT(dv.major, '.', dv.minor))) > 0
19+
OR POSITION(LOWER(:dataset_name) IN LOWER(dv.major::text)) > 0
20+
OR POSITION(LOWER(:dataset_name) IN LOWER(dv.minor::text)) > 0)
1921
ORDER BY
20-
CASE WHEN :sort_by = 'created_at' AND :sort_type = 'asc' THEN created_at END ASC,
21-
CASE WHEN :sort_by = 'created_at' AND :sort_type = 'desc' THEN created_at END DESC,
22-
-- CASE WHEN :sort_by = 'major' AND :sort_type = 'asc' THEN major END ASC,
23-
-- CASE WHEN :sort_by = 'major' AND :sort_type = 'desc' THEN major END DESC,
24-
-- CASE WHEN :sort_by = 'minor' AND :sort_type = 'asc' THEN minor END ASC,
25-
-- CASE WHEN :sort_by = 'minor' AND :sort_type = 'desc' THEN minor END DESC,
26-
CASE WHEN :sort_by IS NULL OR :sort_by = '' THEN created_at END DESC
22+
CASE WHEN :sort_by = 'created_at' AND :sort_type = 'asc' THEN dv.created_at END ASC,
23+
CASE WHEN :sort_by = 'created_at' AND :sort_type = 'desc' THEN dv.created_at END DESC,
24+
-- CASE WHEN :sort_by = 'major' AND :sort_type = 'asc' THEN dv.major END ASC,
25+
-- CASE WHEN :sort_by = 'major' AND :sort_type = 'desc' THEN dv.major END DESC,
26+
-- CASE WHEN :sort_by = 'minor' AND :sort_type = 'asc' THEN dv.minor END ASC,
27+
-- CASE WHEN :sort_by = 'minor' AND :sort_type = 'desc' THEN dv.minor END DESC,
28+
CASE WHEN :sort_by IS NULL OR :sort_by = '' THEN dv.created_at END DESC
2729
OFFSET ((GREATEST(:page, 1) - 1) * :page_size) LIMIT :page_size;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-- Insert new agency into mock_centops table
2+
INSERT INTO public.mock_centops (agency_id, agency_name, created_at)
3+
VALUES (:agencyId, :agencyName, NOW());

DSL/Resql/global-classifier/POST/update-datasets-connected-models.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ SET
88
ELSE
99
connected_models
1010
END,
11-
last_trained = CURRENT_TIMESTAMP
11+
last_trained = CURRENT_TIMESTAMP,
12+
last_model_trained = :modelId
1213
WHERE
1314
id = :datasetId
1415
RETURNING
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
declaration:
2+
call: declare
3+
version: 0.1
4+
description: "Create a new data model record in data_models, update connected dataset and initiate training"
5+
method: post
6+
accepts: json
7+
returns: json
8+
namespace: global-classifier
9+
# Input Validation Schema
10+
allowlist:
11+
body:
12+
- field: agency_id
13+
type: string
14+
description: "ID of the agency (required)"
15+
- field: agency_name
16+
type: string
17+
description: "Name of the agency (required)"
18+
next: extractRequestData
19+
20+
# Data Extraction
21+
extractRequestData:
22+
assign:
23+
agency_id: ${incoming.body.agency_id}
24+
agency_name: ${incoming.body.agency_name}
25+
next: checkAgencyExists
26+
27+
# Check if Agency Already Exists
28+
checkAgencyExists:
29+
call: http.post
30+
args:
31+
url: "[#GLOBAL_CLASSIFIER_RESQL]/get-agency-centops"
32+
body:
33+
agencyId: ${agency_id}
34+
result: agency_check_res
35+
next: evaluateAgencyExistence
36+
37+
# Evaluate Agency Existence
38+
evaluateAgencyExistence:
39+
switch:
40+
- condition: "${agency_check_res.response.body.length > 0}"
41+
next: return_agency_exists
42+
next: insertAgencyData
43+
44+
# Insert Agency Data
45+
insertAgencyData:
46+
call: http.post
47+
args:
48+
url: "[#GLOBAL_CLASSIFIER_RESQL]/insert-agency-centops"
49+
body:
50+
agencyId: ${agency_id}
51+
agencyName: ${agency_name}
52+
createdAt: ${new Date().toISOString()}
53+
result: insert_agency_res
54+
next: checkInsertResult
55+
56+
# Check Insert Result
57+
checkInsertResult:
58+
switch:
59+
- condition: ${200 <= insert_agency_res.response.statusCodeValue && insert_agency_res.response.statusCodeValue < 300}
60+
next: return_success
61+
next: return_insert_failed
62+
63+
return_success:
64+
return: "Agency created successfully in centops"
65+
status: 200
66+
next: end
67+
68+
return_agency_exists:
69+
return: "error: agency already exists in centops"
70+
status: 400
71+
next: end
72+
73+
return_insert_failed:
74+
return: "error: failed to add agency to centops"
75+
status: 500
76+
next: end

DSL/Ruuter.public/global-classifier/POST/data/callback.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ declare:
2525
description: "List of agency IDs for which the dataset generation was completed"
2626

2727
log_callback_received:
28-
log: "Dataset generation callback received - Task ID: ${incoming.body.task_id}, Status: ${incoming.body.status}, File Path: ${incoming.body.filePath}"
28+
log: "Dataset generation callback received - Task ID: ${incoming.body.task_id}, Status: ${incoming.body.status}, File Path: ${incoming.body.filePath}, Result: ${incoming.body.results}"
2929
next: extract_callback_data
3030

3131
extract_callback_data:

GUI/src/components/molecules/DataModelForm/index.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ type DataModelFormType = {
2121
handleChange: (name: keyof DataModel, value: any) => void;
2222
errors?: Record<string, string>;
2323
type: string;
24+
datasetVersions?: any;
2425
};
2526

2627
const DataModelForm: FC<DataModelFormType> = ({
2728
dataModel,
2829
handleChange,
2930
errors,
3031
type,
32+
datasetVersions: propDatasetVersions,
3133
}) => {
3234
const { t } = useTranslation();
3335
const [showTrainingResults, setShowTrainingResults] = useState(true);
@@ -39,8 +41,12 @@ const DataModelForm: FC<DataModelFormType> = ({
3941
const { data: datasetVersions } = useQuery({
4042
queryKey: dataModelsQueryKeys.DATA_MODEL_DEPLOYMENT_ENVIRONMENTS(),
4143
queryFn: () => getAllDatasetVersions(),
44+
enabled: !propDatasetVersions, // Only fetch if not provided as prop
4245
});
4346

47+
// Use prop datasetVersions if provided, otherwise use the queried data
48+
const finalDatasetVersions = propDatasetVersions || datasetVersions;
49+
4450
let trainingResults = null;
4551
if (dataModel?.trainingResults?.value) {
4652
try {
@@ -91,10 +97,19 @@ const DataModelForm: FC<DataModelFormType> = ({
9197
}} >
9298
<FormSelect
9399
name="datasetId"
94-
options={toLabelValueArray(datasetVersions, 'id', 'version') ?? []}
100+
options={toLabelValueArray(finalDatasetVersions, 'id', 'version') ?? []}
95101
label=""
96102
onSelectionChange={(selection) => {
97103
handleChange('datasetId', selection?.value);
104+
// Update version when dataset is selected
105+
if (selection?.value && finalDatasetVersions) {
106+
const selectedDataset = finalDatasetVersions.find(
107+
(dataset: any) => dataset.id.toString() === selection.value
108+
);
109+
if (selectedDataset?.version) {
110+
handleChange('version', selectedDataset.version);
111+
}
112+
}
98113
}}
99114
value={dataModel?.datasetId === null && ""}
100115
defaultValue={dataModel?.datasetId ? dataModel?.datasetId : ""}

GUI/src/pages/DataModels/ConfigureDataModel.tsx

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { dataModelsQueryKeys } from 'utils/queryKeys';
1515
import { useTranslation } from 'react-i18next';
1616
import './DataModels.scss';
1717
import { configureDataModel, deleteDataModel, deployDataModel, getDataModelMetadata, getProductionDataModel } from 'services/datamodels';
18+
import { getAllDatasetVersions } from 'services/datasets';
1819
import { use } from 'i18next';
1920
import { set } from 'date-fns';
2021
import { areArraysEqual } from 'utils/commonUtilts';
@@ -41,6 +42,11 @@ const ConfigureDataModel: FC = () => {
4142
queryFn: () => getProductionDataModel(),
4243
});
4344

45+
const { data: datasetVersions } = useQuery({
46+
queryKey: dataModelsQueryKeys.DATA_MODEL_DEPLOYMENT_ENVIRONMENTS(),
47+
queryFn: () => getAllDatasetVersions(),
48+
});
49+
4450
const [initialData, setInitialData] = useState<Partial<DataModel>>({
4551
modelName: modelMetadata?.modelName,
4652
datasetId: modelMetadata?.connectedDsId,
@@ -85,6 +91,22 @@ const ConfigureDataModel: FC = () => {
8591
name: keyof DataModel,
8692
value: any
8793
) => {
94+
// Update version when dataset is changed
95+
if (name === 'datasetId' && value && datasetVersions) {
96+
const selectedDataset = datasetVersions.find(
97+
(dataset: any) => dataset.id.toString() === value
98+
);
99+
if (selectedDataset?.version) {
100+
setDataModel((prevDataModel) => ({
101+
...prevDataModel,
102+
[name]: value,
103+
version: selectedDataset.version,
104+
}));
105+
return; // Early return to avoid the second setDataModel call
106+
}
107+
}
108+
109+
// Default case - just update the field
88110
setDataModel((prevDataModel) => ({
89111
...prevDataModel,
90112
[name]: value,
@@ -185,17 +207,24 @@ const ConfigureDataModel: FC = () => {
185207
return undefined;
186208
};
187209

188-
const buildUpdatedPayload = (updateType: string | undefined) => ({
189-
modelGroupKey: modelMetadata.modelGroupKey ?? "",
190-
modelName: dataModel.modelName ?? "",
191-
connectedDsId: Number(dataModel.datasetId) ?? 0,
192-
deploymentEnv: dataModel.deploymentEnvironment ?? "",
193-
baseModels: dataModel.baseModels ?? [],
194-
connectedDsMajorVersion: Number(dataModel.version?.split('.')[0]?.[1]) ?? 0,
195-
connectedDsMinorVersion: Number(dataModel.version?.split('.')[1]) ?? 0,
196-
updateType: updateType ?? "",
197-
isTrainingNeeded: !areArraysEqual(initialData.baseModels as string[], dataModel.baseModels as string[])
198-
});
210+
const buildUpdatedPayload = (updateType: string | undefined) => {
211+
// Parse version correctly - version format is "V1.0"
212+
const versionParts = dataModel.version?.split('.');
213+
const majorVersion = versionParts?.[0]?.substring(1); // Remove 'V' prefix
214+
const minorVersion = versionParts?.[1];
215+
216+
return {
217+
modelGroupKey: modelMetadata.modelGroupKey ?? "",
218+
modelName: dataModel.modelName ?? "",
219+
connectedDsId: Number(dataModel.datasetId) ?? 0,
220+
deploymentEnv: dataModel.deploymentEnvironment ?? "",
221+
baseModels: dataModel.baseModels ?? [],
222+
connectedDsMajorVersion: Number(majorVersion) ?? 1,
223+
connectedDsMinorVersion: Number(minorVersion) ?? 0,
224+
updateType: updateType ?? "",
225+
isTrainingNeeded: !areArraysEqual(initialData.baseModels as string[], dataModel.baseModels as string[])
226+
};
227+
};
199228

200229
const deleteDataModelMutation = useMutation({
201230
mutationFn: deleteDataModel,
@@ -288,6 +317,7 @@ const ConfigureDataModel: FC = () => {
288317
}
289318
handleChange={handleDataModelAttributesChange}
290319
type="configure"
320+
datasetVersions={datasetVersions}
291321
/>
292322
)}
293323
</div>

GUI/src/pages/DataModels/CreateDataModel.tsx

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import {
1212
DataModel,
1313
ErrorsType,
1414
} from 'types/dataModels';
15-
import { da } from 'date-fns/locale';
1615
import { createDataModel, getProductionDataModel } from 'services/datamodels';
1716
import { dataModelsQueryKeys } from 'utils/queryKeys';
17+
import { getAllDatasetVersions } from 'services/datasets';
1818

1919
const CreateDataModel: FC = () => {
2020
const { t } = useTranslation();
@@ -34,7 +34,35 @@ const CreateDataModel: FC = () => {
3434
queryFn: () => getProductionDataModel(),
3535
});
3636

37+
const { data: datasetVersions } = useQuery({
38+
queryKey: dataModelsQueryKeys.DATA_MODEL_DEPLOYMENT_ENVIRONMENTS(),
39+
queryFn: () => getAllDatasetVersions(),
40+
});
41+
3742
const handleDataModelAttributesChange = (name: string, value: string) => {
43+
// Update version when dataset is changed
44+
if (name === 'datasetId' && value && datasetVersions) {
45+
const selectedDataset = datasetVersions.find(
46+
(dataset: any) => dataset.id.toString() === value
47+
);
48+
if (selectedDataset?.version) {
49+
setDataModel((prevDataModel) => ({
50+
...prevDataModel,
51+
[name]: value,
52+
version: selectedDataset.version,
53+
}));
54+
55+
// Clear datasetId error
56+
setErrors((prevErrors) => {
57+
const updatedErrors = { ...prevErrors };
58+
delete updatedErrors.datasetId;
59+
return updatedErrors;
60+
});
61+
return; // Early return to avoid the second setDataModel call
62+
}
63+
}
64+
65+
// Default case - just update the field
3866
setDataModel((prevFilters) => ({
3967
...prevFilters,
4068
[name]: value,
@@ -86,14 +114,18 @@ const CreateDataModel: FC = () => {
86114
});
87115

88116
const handleCreate = () => {
117+
// Parse version correctly - version format is "V1.0"
118+
const versionParts = dataModel?.version?.split('.');
119+
const majorVersion = versionParts?.[0]?.substring(1); // Remove 'V' prefix
120+
const minorVersion = versionParts?.[1];
89121

90122
const paylod = {
91123
modelName: dataModel.modelName ?? "",
92124
deploymentEnv: dataModel.deploymentEnvironment ?? "",
93125
baseModels: dataModel.baseModels ?? [],
94126
connectedDsId: Number(dataModel.datasetId) ?? 0,
95-
connectedDsMajorVersion: Number(dataModel?.version?.split('.')[0]?.[1]) ?? "",
96-
connectedDsMinorVersion: Number(dataModel?.version?.split('.')[1]) ?? "",
127+
connectedDsMajorVersion: Number(majorVersion) ?? 1,
128+
connectedDsMinorVersion: Number(minorVersion) ?? 0,
97129
}
98130

99131
if (prodDataModel && dataModel.deploymentEnvironment === "production") {
@@ -134,6 +166,7 @@ const CreateDataModel: FC = () => {
134166
dataModel={dataModel}
135167
handleChange={handleDataModelAttributesChange}
136168
type="create"
169+
datasetVersions={datasetVersions}
137170
/>
138171
</div>
139172
<div className="flex data-model-buttons">

0 commit comments

Comments
 (0)