Skip to content

Commit

Permalink
[BUG]: download model-configurations is broken #6407
Browse files Browse the repository at this point in the history
Adding a new option to download a configured model in addition to the zipped archive
  • Loading branch information
dvince2 committed Feb 11, 2025
1 parent 5581ad5 commit 759aa81
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@
:empty-input-count="missingInputCount(configuration)"
@click="onSelectConfiguration(configuration)"
@delete="fetchConfigurations(model.id)"
@download="downloadModelArchive(configuration)"
@downloadArchive="downloadZippedModelAndConfig(configuration)"
@downloadModel="downloadModel(configuration)"
@use="onSelectConfiguration(configuration)"
/>
</li>
Expand Down Expand Up @@ -263,7 +264,8 @@ import {
setInitialSource,
setParameterDistributions,
setParameterSource,
updateModelConfiguration
updateModelConfiguration,
getAsConfiguredModel
} from '@/services/model-configurations';
import { useToastService } from '@/services/toast';
import type { Initial, Model, ModelConfiguration, TaskResponse } from '@/types/Types';
Expand Down Expand Up @@ -566,7 +568,7 @@ const configuredMmt = ref(makeConfiguredMMT(mmt.value, knobs.value.transientMode
const calendarSettings = ref<CalendarSettings | null>(null);
const downloadModelArchive = async (configuration: ModelConfiguration = knobs.value.transientModelConfig) => {
const downloadZippedModelAndConfig = async (configuration: ModelConfiguration = knobs.value.transientModelConfig) => {
const archive = await getArchive(configuration);
if (archive) {
const a = document.createElement('a');
Expand All @@ -577,6 +579,21 @@ const downloadModelArchive = async (configuration: ModelConfiguration = knobs.va
}
};
const downloadModel = async (configuration: ModelConfiguration = knobs.value.transientModelConfig) => {
if (!configuration.id) return;
const configuredModel = await getAsConfiguredModel(configuration.id);
if (configuredModel) {
const data = `text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(configuredModel, null, 2))}`;
const a = document.createElement('a');
a.href = `data:${data}`;
a.download = `${configuredModel.name ?? 'model'}.json`;
a.innerHTML = 'download JSON';
a.click();
a.remove();
}
};
const createConfiguration = async () => {
if (!model.value || isSaveDisabled.value) return;
const modelConfig = cloneDeep(knobs.value.transientModelConfig);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { ref } from 'vue';
import { useConfirm } from 'primevue/useconfirm';
import { deleteModelConfiguration } from '@/services/model-configurations';
const emit = defineEmits(['delete', 'use', 'download']);
const emit = defineEmits(['delete', 'use', 'downloadArchive', 'downloadModel']);
const props = defineProps<{
configuration: ModelConfiguration;
selected?: boolean;
Expand All @@ -46,10 +46,17 @@ const contextMenuItems = ref([
}
},
{
label: 'Download',
label: 'Download model configuration',
icon: 'pi pi-download',
command() {
emit('download');
emit('downloadArchive');
}
},
{
label: 'Download as Model',
icon: 'pi pi-download',
command() {
emit('downloadModel');
}
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export const getAsConfiguredModel = async (modelConfigurationId: string): Promis
};

export const getArchive = async (modelConfiguration: ModelConfiguration): Promise<any> => {
const response = await API.get(`model-configurations/download/${modelConfiguration.id}`, {
const response = await API.get(`model-configurations/download-archive/${modelConfiguration.id}`, {
responseType: 'arraybuffer'
});
const blob = new Blob([response?.data], { type: 'application/octet-stream' });
Expand Down
2 changes: 1 addition & 1 deletion packages/client/hmi-client/src/services/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export async function createModelAndModelConfig(file: File, progress?: Ref<numbe
const formData = new FormData();
formData.append('file', file);

const response = await API.post(`/model-configurations/import`, formData, {
const response = await API.post(`/model-configurations/import-archive`, formData, {
headers: {
'Content-Type': 'multipart/form-data'
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ public ResponseEntity<ModelConfiguration> getModelConfiguration(
}
}

@PostMapping(value = "/import", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@PostMapping(value = "/import-archive", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Secured(Roles.USER)
@Operation(summary = "Imports both a model and its configuration in a single go")
@ApiResponses(
Expand Down Expand Up @@ -180,9 +180,9 @@ public ResponseEntity<Model> importModelConfigAndModel(
}
}

@GetMapping("/download/{id}")
@GetMapping("/download-archive/{id}")
@Secured(Roles.USER)
@Operation(summary = "Imports both a model and its configuration in a single go")
@Operation(summary = "Downloads both a model and its configuration in a single go in a zipped archive")
@ApiResponses(
value = {
@ApiResponse(
Expand Down

0 comments on commit 759aa81

Please sign in to comment.