Skip to content

Commit

Permalink
stratify use input temporal context in output (#6572)
Browse files Browse the repository at this point in the history
Co-authored-by: Cole Blanchard <[email protected]>
  • Loading branch information
blanchco and Cole Blanchard authored Feb 12, 2025
1 parent 58b8625 commit e176831
Show file tree
Hide file tree
Showing 10 changed files with 103 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,8 @@ function updateCodeState(code: string = codeText.value, hasCodeRun: boolean = tr
const createOutput = async (modelToSave: Model) => {
// If it's the original model, use that otherwise create a new one
const modelData = isReadyToCreateDefaultOutput.value ? modelToSave : await createModel(modelToSave);
const modelConfigId = props.node.inputs.find((d) => d.type === 'modelConfigId')?.value?.[0];
const modelData = isReadyToCreateDefaultOutput.value ? modelToSave : await createModel(modelToSave, modelConfigId);
if (!modelData) return;
const modelLabel = isReadyToCreateDefaultOutput.value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,8 @@ const handleModelPreview = async (data: any) => {
amrResponse.header.name = newName;
// Create output
const modelData = await createModelFromOld(amr.value, amrResponse);
const modelConfigId = props.node.inputs.find((i) => i.type === 'modelConfigId')?.value?.[0];
const modelData = await createModelFromOld(amr.value, amrResponse, modelConfigId);
if (!modelData) return;
outputAmr.value = modelData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ watch(
model.name += ` (${modelConfiguration.name})`;
model.header.name = model.name as string;
const res = await createModel(model);
const res = await createModel(model, modelConfiguration.id);
if (res) {
baseModelId = res.id as string;
}
Expand Down
38 changes: 31 additions & 7 deletions packages/client/hmi-client/src/services/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,44 @@ import { Artifact, EventType } from '@/types/Types';
import { AMRSchemaNames, CalendarDateType } from '@/types/common';
import { fileToJson } from '@/utils/file';
import { Ref } from 'vue';
import { AxiosRequestConfig } from 'axios';
import { DateOptions } from './charts';

export async function createModel(model: Model): Promise<Model | null> {
export async function createModel(
model: Model,
modelConfigurationId?: ModelConfiguration['id']
): Promise<Model | null> {
delete model.id;
const response = await API.post(`/models`, model);
const params: AxiosRequestConfig['params'] = {};
if (modelConfigurationId) {
params['model-configuration-id'] = modelConfigurationId;
}
const response = await API.post(`/models`, model, {
params
});
return response?.data ?? null;
}

export async function createModelFromOld(oldModel: Model, newModel: Model): Promise<Model | null> {
export async function createModelFromOld(
oldModel: Model,
newModel: Model,
modelConfigurationId?: ModelConfiguration['id']
): Promise<Model | null> {
delete newModel.id;
const response = await API.post(`/models/new-from-old`, {
newModel,
oldModel
});
const params: AxiosRequestConfig['params'] = {};
if (modelConfigurationId) {
params['model-configuration-id'] = modelConfigurationId;
}
const response = await API.post(
`/models/new-from-old`,
{
newModel,
oldModel
},
{
params
}
);
return response?.data ?? null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import software.uncharted.terarium.hmiserver.security.Roles;
import software.uncharted.terarium.hmiserver.service.CurrentUserService;
import software.uncharted.terarium.hmiserver.service.data.ModelConfigurationService;
import software.uncharted.terarium.hmiserver.service.data.ModelConfigurationService.ModelConfigurationUpdate;
import software.uncharted.terarium.hmiserver.service.data.ModelService;
import software.uncharted.terarium.hmiserver.service.data.ProjectService;
import software.uncharted.terarium.hmiserver.utils.Messages;
Expand Down Expand Up @@ -374,10 +375,13 @@ public ResponseEntity<ModelConfiguration> createFromConfiguredModel(
) {
final Permission permission = projectService.checkPermissionCanRead(currentUserService.get().getId(), projectId);

final ModelConfigurationUpdate options = new ModelConfigurationUpdate();
options.setName(name);
options.setDescription(description);

final ModelConfiguration modelConfiguration = ModelConfigurationService.modelConfigurationFromAMR(
configuredModel,
name,
description
options
);

try {
Expand Down Expand Up @@ -419,10 +423,13 @@ public ResponseEntity<ModelConfiguration> updateFromConfiguredModel(
) {
final Permission permission = projectService.checkPermissionCanRead(currentUserService.get().getId(), projectId);

final ModelConfigurationUpdate options = new ModelConfigurationUpdate();
options.setName(name);
options.setDescription(description);

final ModelConfiguration modelConfiguration = ModelConfigurationService.modelConfigurationFromAMR(
configuredModel,
name,
description
options
);

modelConfiguration.setId(id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
import software.uncharted.terarium.hmiserver.service.data.DatasetService;
import software.uncharted.terarium.hmiserver.service.data.DocumentAssetService;
import software.uncharted.terarium.hmiserver.service.data.ModelConfigurationService;
import software.uncharted.terarium.hmiserver.service.data.ModelConfigurationService.ModelConfigurationUpdate;
import software.uncharted.terarium.hmiserver.service.data.ModelService;
import software.uncharted.terarium.hmiserver.service.data.ProjectAssetService;
import software.uncharted.terarium.hmiserver.service.data.ProjectService;
Expand Down Expand Up @@ -428,7 +429,8 @@ ResponseEntity<ResponseDeleted> deleteModel(
)
ResponseEntity<Model> createModel(
@RequestBody final Model model,
@RequestParam(name = "project-id", required = false) final UUID projectId
@RequestParam(name = "project-id", required = false) final UUID projectId,
@RequestParam(name = "model-configuration-id", required = false) final UUID modelConfigId
) {
final Schema.Permission permission = projectService.checkPermissionCanWrite(
currentUserService.get().getId(),
Expand All @@ -439,14 +441,24 @@ ResponseEntity<Model> createModel(
// Set the model name from the AMR header name.
// TerariumAsset have a name field, but it's not used for the model name outside
// the front-end.

ModelConfiguration oldModelConfiguration = null;
if (modelConfigId != null) {
oldModelConfiguration = modelConfigurationService.getAsset(modelConfigId, permission).get();
}

final ModelConfigurationUpdate options = new ModelConfigurationUpdate();
if (oldModelConfiguration != null) {
options.setTemporalContext(oldModelConfiguration.getTemporalContext());
}

model.setName(model.getHeader().getName());
final Model created = modelService.createAsset(model, projectId, permission);

// create default configuration
final ModelConfiguration modelConfiguration = ModelConfigurationService.modelConfigurationFromAMR(
created,
null,
null
options
);
modelConfigurationService.createAsset(modelConfiguration, projectId, permission);

Expand Down Expand Up @@ -494,7 +506,8 @@ public static class CreateModelFromOldRequest {
)
ResponseEntity<Model> createModelFromOld(
@RequestBody final CreateModelFromOldRequest req,
@RequestParam(name = "project-id", required = false) final UUID projectId
@RequestParam(name = "project-id", required = false) final UUID projectId,
@RequestParam(name = "model-configuration-id", required = false) final UUID modelConfigId
) {
final Schema.Permission permission = projectService.checkPermissionCanWrite(
currentUserService.get().getId(),
Expand All @@ -510,11 +523,20 @@ ResponseEntity<Model> createModelFromOld(
req.newModel.setName(req.newModel.getHeader().getName());
final Model created = modelService.createAsset(req.newModel, projectId, permission);

ModelConfiguration oldModelConfiguration = null;
if (modelConfigId != null) {
oldModelConfiguration = modelConfigurationService.getAsset(modelConfigId, permission).get();
}

final ModelConfigurationUpdate options = new ModelConfigurationUpdate();
if (oldModelConfiguration != null) {
options.setTemporalContext(oldModelConfiguration.getTemporalContext());
}

// create default configuration
final ModelConfiguration modelConfiguration = ModelConfigurationService.modelConfigurationFromAMR(
created,
null,
null
options
);
modelConfigurationService.createAsset(modelConfiguration, projectId, permission);

Expand Down Expand Up @@ -649,11 +671,10 @@ static ResponseEntity<ModelConfiguration> modelConfigurationFromAmr(
@RequestParam(name = "project-id", required = false) final UUID projectId
) {
try {
final ModelConfiguration modelConfiguration = ModelConfigurationService.modelConfigurationFromAMR(
model,
model.getName(),
model.getDescription()
);
final ModelConfigurationUpdate options = new ModelConfigurationUpdate();
options.setName(model.getName());
options.setName(model.getDescription());
final ModelConfiguration modelConfiguration = ModelConfigurationService.modelConfigurationFromAMR(model, options);
return ResponseEntity.ok(modelConfiguration);
} catch (final Exception e) {
final String error = "Unable to get model configurations";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import software.uncharted.terarium.hmiserver.service.CurrentUserService;
import software.uncharted.terarium.hmiserver.service.data.ArtifactService;
import software.uncharted.terarium.hmiserver.service.data.ModelConfigurationService;
import software.uncharted.terarium.hmiserver.service.data.ModelConfigurationService.ModelConfigurationUpdate;
import software.uncharted.terarium.hmiserver.service.data.ModelService;
import software.uncharted.terarium.hmiserver.service.data.ProjectService;
import software.uncharted.terarium.hmiserver.service.tasks.AMRToMMTResponseHandler;
Expand Down Expand Up @@ -455,8 +456,7 @@ public ResponseEntity<Model> convertAndCreateModel(@RequestBody final ModelConve
// create a default configuration
final ModelConfiguration modelConfiguration = ModelConfigurationService.modelConfigurationFromAMR(
model,
null,
null
new ModelConfigurationUpdate()
);
modelConfigurationService.createAsset(modelConfiguration, conversionRequest.projectId, permission);
} catch (final IOException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import io.micrometer.observation.annotation.Observed;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.ArrayList;
Expand All @@ -11,6 +12,7 @@
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import lombok.Data;
import org.springframework.stereotype.Service;
import software.uncharted.terarium.hmiserver.configuration.Config;
import software.uncharted.terarium.hmiserver.models.dataservice.model.Model;
Expand Down Expand Up @@ -92,18 +94,30 @@ public List<ModelConfiguration> createAssets(
return super.createAssets(assets, projectId, hasWritePermission);
}

@Data
public static class ModelConfigurationUpdate {

private String name;
private String description;
private Timestamp temporalContext;
}

public static ModelConfiguration modelConfigurationFromAMR(
final Model model,
final String name,
final String description
final ModelConfigurationUpdate options
) {
final String name = options.getName();
final String description = options.getDescription();
final Timestamp temporalContext = options.getTemporalContext();

final ModelConfiguration modelConfiguration = new ModelConfiguration();
modelConfiguration.setName(name != null ? name : "Default configuration");
modelConfiguration.setDescription(description != null ? description : "This is a default configuration.");
modelConfiguration.setModelId(model.getId());
modelConfiguration.setParameterSemanticList(createParameterSemanticList(model));
modelConfiguration.setInitialSemanticList(createInitialSemanticList(model));
modelConfiguration.setObservableSemanticList(createObservableSemanticList(model));
modelConfiguration.setTemporalContext(temporalContext);
return modelConfiguration;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import software.uncharted.terarium.hmiserver.models.dataservice.simulation.Simulation;
import software.uncharted.terarium.hmiserver.models.task.TaskResponse;
import software.uncharted.terarium.hmiserver.service.data.ModelConfigurationService;
import software.uncharted.terarium.hmiserver.service.data.ModelConfigurationService.ModelConfigurationUpdate;
import software.uncharted.terarium.hmiserver.service.data.SimulationService;

@Component
Expand Down Expand Up @@ -123,10 +124,13 @@ public TaskResponse onSuccess(final TaskResponse resp) {
// Only use contracted model to create model configuration, no need to save it
final Model contractedModel = objectMapper.convertValue(contractedModelObject, Model.class);

final ModelConfigurationUpdate options = new ModelConfigurationUpdate();
options.setName(props.newModelConfigName);
options.setDescription(contractedModel.getDescription());

final ModelConfiguration contractedModelConfiguration = ModelConfigurationService.modelConfigurationFromAMR(
contractedModel,
props.newModelConfigName,
contractedModel.getDescription()
options
);
contractedModelConfiguration.setTemporary(true);
contractedModelConfiguration.setModelId(props.modelId); // Config should be linked to the original model
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ public void testItCanCreateModel() throws Exception {
.setDescription("test-description")
.setSchemaName("petrinet")
);

mockMvc
.perform(
MockMvcRequestBuilders.post("/models")
Expand Down

0 comments on commit e176831

Please sign in to comment.