Skip to content

Commit 47d98f5

Browse files
authored
Integrations for MVP (#65)
* Refs #22755 Requirement and submodules for MVP, and user_input improve data Signed-off-by: Javier Gil Aviles <[email protected]> * Refs #22755: Add all user_inpurt values to send_user_input and update submodules. Signed-off-by: Javier Gil Aviles <[email protected]> * Refs #22755: Add backend sens result all nodes in specific task_id & delate .vscode Signed-off-by: Javier Gil Aviles <[email protected]> * Refs #22755: Change wp1 reference for new methods and request data Signed-off-by: Javier Gil Aviles <[email protected]> * Refs #22755: Update wp2 to correct issue with token Signed-off-by: Javier Gil Aviles <[email protected]> * Refs #22755: Increase timeout of submodule test Signed-off-by: Javier Gil Aviles <[email protected]> * Refs #22755: Fix malloc() issue on Orchestrator.cpp & improve mlgoal decision from llm Signed-off-by: Javier Gil Aviles <[email protected]> * Refs #22755: Update reference of submodules Signed-off-by: Javier Gil Aviles <[email protected]> --------- Signed-off-by: Javier Gil Aviles <[email protected]>
1 parent 74efe79 commit 47d98f5

File tree

8 files changed

+61
-12
lines changed

8 files changed

+61
-12
lines changed

.github/workflows/test.yml

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ jobs:
9292
- name: Compile and run tests
9393
uses: eProsima/eProsima-CI/multiplatform/colcon_build_test@v0
9494
with:
95+
ctest_args: '--timeout 300'
9596
packages_names: sustainml_cpp sustainml_py sustainml_modules
9697
cmake_args: -DCMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }}
9798
colcon_meta_file: ${{ github.workspace }}/src/sustainml_lib/.github/workflows/configurations/${{ runner.os }}/colcon.meta

sustainml_cpp/src/cpp/orchestrator/OrchestratorNode.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,6 @@ types::ResponseType OrchestratorNode::configuration_request(
504504
return res_.node_id() == req.node_id() && res_.transaction_id() == req.transaction_id();
505505
});
506506
types::ResponseType res = res_;
507-
res_ = types::ResponseType();
508507
return res;
509508
}
510509

sustainml_modules/sustainml_modules/sustainml-wp5/backend_node.py

+19
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,25 @@ def results_args():
9595
task_id = sustainml_swig.set_task_id(json_task.get('problem_id', 0), json_task.get('iteration_id', 0))
9696
else:
9797
task_id = None
98+
99+
# Case of returning all nodes results. 9 = ALL
100+
if node_id == 9:
101+
app_req = orchestrator.get_results(utils.node_id.APP_REQUIREMENTS.value, task_id)
102+
metadata = orchestrator.get_results(utils.node_id.ML_MODEL_METADATA.value, task_id)
103+
constraints = orchestrator.get_results(utils.node_id.HW_CONSTRAINTS.value, task_id)
104+
model = orchestrator.get_results(utils.node_id.ML_MODEL_PROVIDER.value, task_id)
105+
hardware = orchestrator.get_results(utils.node_id.HW_PROVIDER.value, task_id)
106+
carbontracker = orchestrator.get_results(utils.node_id.CARBONTRACKER.value, task_id)
107+
task_json = {'problem_id': task_id.problem_id(), 'iteration_id': task_id.iteration_id()}
108+
json = {utils.string_node(utils.node_id.APP_REQUIREMENTS.value): app_req,
109+
utils.string_node(utils.node_id.ML_MODEL_METADATA.value): metadata,
110+
utils.string_node(utils.node_id.HW_CONSTRAINTS.value): constraints,
111+
utils.string_node(utils.node_id.ML_MODEL_PROVIDER.value): model,
112+
utils.string_node(utils.node_id.HW_PROVIDER.value): hardware,
113+
utils.string_node(utils.node_id.CARBONTRACKER.value): carbontracker,
114+
'task_id': task_json}
115+
return jsonify(json), 200
116+
98117
return jsonify({utils.string_node(node_id): orchestrator.get_results(node_id, task_id)}), 200
99118

100119
# Flask server shutdown route

sustainml_modules/sustainml_modules/sustainml-wp5/orchestrator_node/orchestrator_node.py

+27-7
Original file line numberDiff line numberDiff line change
@@ -274,21 +274,41 @@ def send_user_input(self, json_data):
274274
user_input.modality(json_data.get('modality'))
275275
if (json_data.get('problem_short_description') is not None):
276276
user_input.problem_short_description(json_data.get('problem_short_description'))
277+
if (json_data.get('problem_definition') is not None):
278+
user_input.problem_definition(json_data.get('problem_definition'))
279+
if (json_data.get('inputs') is not None):
280+
user_input.inputs(json_data.get('inputs'))
281+
if (json_data.get('outputs') is not None):
282+
user_input.outputs(json_data.get('outputs'))
283+
if (json_data.get('minimum_samples') is not None):
284+
user_input.minimum_samples(json_data.get('minimum_samples'))
285+
if (json_data.get('maximum_samples') is not None):
286+
user_input.maximum_samples(json_data.get('maximum_samples'))
287+
if (json_data.get('optimize_carbon_footprint_manual') is not None):
288+
user_input.optimize_carbon_footprint_manual(json_data.get('optimize_carbon_footprint_manual'))
289+
if (json_data.get('optimize_carbon_footprint_auto') is not None):
290+
user_input.optimize_carbon_footprint_auto(json_data.get('optimize_carbon_footprint_auto'))
291+
if (json_data.get('desired_carbon_footprint') is not None):
292+
user_input.desired_carbon_footprint(json_data.get('desired_carbon_footprint'))
293+
if (json_data.get('geo_location_continent') is not None):
294+
user_input.geo_location_continent(json_data.get('geo_location_continent'))
295+
if (json_data.get('geo_location_region') is not None):
296+
user_input.geo_location_region(json_data.get('geo_location_region'))
297+
277298
#user_input.evaluation_metrics(evaluation_metrics)
278299
#user_input.model(model)
279300
# TODO add missing fields
280301

281302
# Prepare extra data
282-
hw_req = utils.default_hw_requirement
283-
mem_footprint = utils.default_mem_footprint
284-
if (json_data.get('hardware_required') is not None):
285-
hw_req = json_data.get('hardware_required')
286-
if (json_data.get('max_memory_footprint') is not None):
287-
mem_footprint = json_data.get('max_memory_footprint')
303+
extra = json_data.get('extra_data', {})
304+
hw_req = extra.get('hardware_required', utils.default_hw_requirement)
305+
mem_footprint = extra.get('max_memory_footprint', utils.default_mem_footprint)
306+
goal = extra.get('goal')
288307

289308
# Add extra data to user user_input
290309
extra_data = {'hardware_required': hw_req,
291-
'max_memory_footprint': mem_footprint}
310+
'max_memory_footprint': mem_footprint,
311+
'goal': goal}
292312
json_obj = utils.json_dict(extra_data)
293313
data_array = np.frombuffer(json_obj.encode(), dtype=np.uint8)
294314
user_input.extra_data(sustainml_swig.uint8_t_vector(data_array.tolist()))

sustainml_modules/test/communication/chained_nodes_validator.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ def run(args):
326326
sleep(1)
327327

328328
try:
329-
outs, errs = listener_proc.communicate(timeout=60)
329+
outs, errs = listener_proc.communicate(timeout=350)
330330
except subprocess.TimeoutExpired:
331331
print('Subscriber process timed out, terminating...')
332332
listener_proc.kill()
@@ -341,6 +341,16 @@ def run(args):
341341
[pub_proc.kill() for pub_proc in pub_procs]
342342
listener_proc.kill()
343343
[node_proc.kill() for node_proc in node_procs]
344+
345+
listener_returncode = listener_proc.returncode
346+
pub_returncodes = [pub_proc.returncode for pub_proc in pub_procs]
347+
348+
if listener_returncode != 0:
349+
sys.exit(1)
350+
for idx, code in enumerate(pub_returncodes):
351+
if code != 0:
352+
sys.exit(1)
353+
344354
try:
345355
sys.exit(os.EX_OK)
346356
except AttributeError:

0 commit comments

Comments
 (0)