import gradio as gr from src.services.serviceLLM.calculation import calculate_impact_llm from src.dto.InputData import InputData def handle_launch( mode, project_duration, duration_slider, model_details, parameters_count, framework, quantization, stages, inference_users, inference_requests, inference_tokens, finetuning_data_size, finetuning_epochs_number, finetuning_batch_size, finetuning_peft, infra_type, infra_cpu_cores, infra_gpu_count, infra_gpu_memory, infra_memory, infra_pue_datacenter, infra_pue_machine, location): """ Lance le calcul d'impact environnemental à partir des paramètres fournis et affiche les résultats sur l'interface. """ input_parameters = InputData(mode, duration_slider, model_details, parameters_count, framework, quantization, stages, inference_users, inference_requests, inference_tokens, finetuning_data_size, finetuning_epochs_number, finetuning_batch_size, finetuning_peft, infra_type, infra_cpu_cores, infra_gpu_count, infra_gpu_memory, infra_memory, infra_pue_datacenter, infra_pue_machine, location) result, _ = calculate_impact_llm(input_parameters) best_config = result.more_frugal_conf.split(",") return (gr.Tabs(selected=1), gr.update(visible=True), gr.update(value="## 📊 Results for " + str(duration_slider) + " years"), result.energy_consumption, result.carbon_footprint, result.abiotic_resource_usage, result.water_usage, gr.update(value=result.eq_energy_consumption.split("|")[1], label=result.eq_energy_consumption.split("|")[0]), gr.update(value=result.eq_carbon_footprint.split("|")[1], label=result.eq_carbon_footprint.split("|")[0]), gr.update(value=result.eq_abiotic_resources.split("|")[1], label=result.eq_abiotic_resources.split("|")[0]), gr.update(value=result.eq_water_usage.split("|")[1], label=result.eq_water_usage.split("|")[0]), result.carbon_footprint_chart, result.abiotic_resource_chart, result.water_usage_chart, gr.update(value="Compare with the most frugal configuration: the model " + best_config[0] + " with " + best_config[1] + " framework"), result.percentage_reduction, gr.update(value=min(project_duration, duration_slider), maximum=project_duration) )