def create_card_orm(
negotiation_card: NegotiationCardModel,
session: Session,
) -> DBNegotiationCard:
"""Creates the DB object from the corresponding internal model."""
# Create intermedidate objects.
if negotiation_card.model.development_compute_resources:
model_dev_resources_orm = DBModelResourcesDescriptor(
cpu=negotiation_card.model.development_compute_resources.cpu,
gpu=negotiation_card.model.development_compute_resources.gpu,
gpu_memory=negotiation_card.model.development_compute_resources.gpu_memory,
main_memory=negotiation_card.model.development_compute_resources.main_memory,
storage=negotiation_card.model.development_compute_resources.storage,
)
else:
model_dev_resources_orm = None
model_prod_resources_orm = DBModelResourcesDescriptor(
cpu=negotiation_card.model.production_compute_resources.cpu,
gpu=negotiation_card.model.production_compute_resources.gpu,
gpu_memory=negotiation_card.model.production_compute_resources.gpu_memory,
main_memory=negotiation_card.model.production_compute_resources.main_memory,
storage=negotiation_card.model.production_compute_resources.storage,
)
# Create the actual object.
negotiation_card_orm = DBNegotiationCard(
sys_goals=[],
sys_problem_type=negotiation_card.system.problem_type,
sys_task=negotiation_card.system.task,
sys_usage_context=negotiation_card.system.usage_context,
sys_risks=[],
model_dev_resources=model_dev_resources_orm,
model_prod_resources=model_prod_resources_orm,
model_prod_deployment_platform=negotiation_card.model.deployment_platform,
model_prod_capability_deployment_mechanism=negotiation_card.model.capability_deployment_mechanism,
model_prod_model_source=negotiation_card.model.model_source,
model_prod_inputs=[],
model_prod_outputs=[],
data_descriptors=[],
system_requirements=[],
)
# Create list of risks.
for risk in negotiation_card.system.risks:
risk_orm = DBGeneralRisk(description=risk)
negotiation_card_orm.sys_risks.append(risk_orm)
# Create list of system goal objects.
for goal in negotiation_card.system.goals:
goal_orm = _build_goal_orm(goal)
negotiation_card_orm.sys_goals.append(goal_orm)
# Create list of data descriptor objects.
for data_descriptor in negotiation_card.data:
data_orm = _build_data_descriptor_orm(data_descriptor, session)
negotiation_card_orm.data_descriptors.append(data_orm)
# Create list of model input objects.
for input in negotiation_card.model.input_specification:
input_orm = _build_io_descriptor_orm(input)
negotiation_card_orm.model_prod_inputs.append(input_orm)
# Create list of model output objects.
for output in negotiation_card.model.output_specification:
output_orm = _build_io_descriptor_orm(output)
negotiation_card_orm.model_prod_outputs.append(output_orm)
# Create list of QAS objects.
for qas in negotiation_card.system_requirements:
qas_orm = DBQAS(
identifier=qas.identifier,
quality=qas.quality,
stimulus=qas.stimulus,
source=qas.source,
environment=qas.environment,
response=qas.response,
measure=qas.measure,
)
negotiation_card_orm.system_requirements.append(qas_orm)
return negotiation_card_orm