From 64bad2d080feeec1332165ac7acdd942c29fd8bd Mon Sep 17 00:00:00 2001 From: cardosofede Date: Tue, 15 Jul 2025 19:47:35 +0300 Subject: [PATCH 1/3] (feat) replace id by config name --- frontend/components/config_loader.py | 8 ++++---- frontend/pages/orchestration/launch_bot_v2/app.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/components/config_loader.py b/frontend/components/config_loader.py index 2121bcdd..bfff67fc 100644 --- a/frontend/components/config_loader.py +++ b/frontend/components/config_loader.py @@ -27,7 +27,7 @@ def get_default_config_loader(controller_name: str): # Handle both old and new config format existing_configs = [] for config in all_configs: - config_name = config.get("config_name", config.get("id", "")) + config_name = config.get("id") if config_name: existing_configs.append(config_name.split("_")[0]) @@ -59,7 +59,7 @@ def get_default_config_loader(controller_name: str): configs.append(config) if len(configs) > 0: - config_names = [config.get("config_name", config.get("id", "Unknown")) for config in configs] + config_names = [config.get("id") for config in configs] selected_config_name = st.selectbox( "Select a config", config_names, @@ -69,7 +69,7 @@ def get_default_config_loader(controller_name: str): # Find the selected config selected_config = None for config in configs: - if config.get("config_name", config.get("id", "")) == selected_config_name: + if config.get("id") == selected_config_name: selected_config = config break @@ -99,7 +99,7 @@ def get_controller_config(controller_name: str) -> dict: try: all_configs = backend_api_client.controllers.list_controller_configs() for config in all_configs: - config_name = config.get("config_name", config.get("id", "")) + config_name = config.get("id") if config_name: existing_configs.append(config_name.split("_")[0]) except Exception: diff --git a/frontend/pages/orchestration/launch_bot_v2/app.py b/frontend/pages/orchestration/launch_bot_v2/app.py index dd15d3dd..af17cdc1 100644 --- a/frontend/pages/orchestration/launch_bot_v2/app.py +++ b/frontend/pages/orchestration/launch_bot_v2/app.py @@ -204,7 +204,7 @@ def delete_selected_configs(selected_controllers): continue # Handle both old and new config format - config_name = config.get("config_name", config.get("id", "Unknown")) + config_name = config.get("id") config_data = config.get("config", config) # New format has config nested connector_name = config_data.get("connector_name", "Unknown") From 8726c8b8f9a00ce9f3ad715d374d577eaf88961b Mon Sep 17 00:00:00 2001 From: cardosofede Date: Tue, 15 Jul 2025 22:45:41 +0300 Subject: [PATCH 2/3] (feat) minor changes to launch --- frontend/pages/orchestration/launch_bot_v2/app.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/pages/orchestration/launch_bot_v2/app.py b/frontend/pages/orchestration/launch_bot_v2/app.py index af17cdc1..286fce37 100644 --- a/frontend/pages/orchestration/launch_bot_v2/app.py +++ b/frontend/pages/orchestration/launch_bot_v2/app.py @@ -58,7 +58,7 @@ def launch_new_bot(bot_name, image_name, credentials, selected_controllers, max_ deploy_config = { "instance_name": full_bot_name, "credentials_profile": credentials, - "controllers_config": [config.replace(".yml", "") for config in selected_controllers], + "controllers_config": selected_controllers, "image": image_name, } @@ -205,6 +205,11 @@ def delete_selected_configs(selected_controllers): # Handle both old and new config format config_name = config.get("id") + if not config_name: + # Skip configs without an ID + st.warning(f"Config missing 'id' field: {config}") + continue + config_data = config.get("config", config) # New format has config nested connector_name = config_data.get("connector_name", "Unknown") From 676819c66ffc1d6a0dd6637ec8f34fae453560ea Mon Sep 17 00:00:00 2001 From: cardosofede Date: Tue, 15 Jul 2025 22:45:57 +0300 Subject: [PATCH 3/3] (feat) improve save and config loader --- frontend/components/config_loader.py | 3 +- frontend/components/save_config.py | 49 ++++++++++++++++------------ 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/frontend/components/config_loader.py b/frontend/components/config_loader.py index bfff67fc..9ff4425a 100644 --- a/frontend/components/config_loader.py +++ b/frontend/components/config_loader.py @@ -77,7 +77,8 @@ def get_default_config_loader(controller_name: str): # Use deep copy to prevent shared references config_data = selected_config.get("config", selected_config) st.session_state[config_key] = copy.deepcopy(config_data) - st.session_state[config_key]["id"] = selected_config_name.split("_")[0] + # Keep the original config ID + st.session_state[config_key]["id"] = selected_config_name st.session_state[config_key]["controller_name"] = controller_name else: st.warning("No existing configs found for this controller.") diff --git a/frontend/components/save_config.py b/frontend/components/save_config.py index 08cc37ff..7c226d2e 100644 --- a/frontend/components/save_config.py +++ b/frontend/components/save_config.py @@ -14,30 +14,39 @@ def render_save_config(config_base_default: str, config_data: dict): st.error(f"Failed to fetch controller configs: {e}") return - # Handle both old and new config format - config_bases = set() - for config in all_configs: - config_name = config.get("id") - if config_name: - config_bases.add(config_name.split("_")[0]) - config_base = config_base_default.split("_")[0] - if config_base in config_bases: - config_tags = [] + # Check if we're editing an existing config + existing_config_id = config_data.get("id", "") + is_existing_config = bool(existing_config_id and any(config.get("id") == existing_config_id for config in all_configs)) + + if is_existing_config: + # For existing configs, preserve the original ID + config_base = existing_config_id.split("_")[0] if "_" in existing_config_id else existing_config_id + config_tag = existing_config_id.split("_")[-1] if "_" in existing_config_id else "0.1" + else: + # For new configs, generate a new version + config_bases = set() for config in all_configs: config_name = config.get("id") - if config_name and config_base in config_name: - try: - config_tags.append(float(config_name.split("_")[-1])) - except (ValueError, IndexError): - continue - if config_tags: - config_tag = max(config_tags) - version, tag = str(config_tag).split(".") - config_tag = f"{version}.{int(tag) + 1}" + if config_name: + config_bases.add(config_name.split("_")[0]) + config_base = config_base_default.split("_")[0] + if config_base in config_bases: + config_tags = [] + for config in all_configs: + config_name = config.get("id") + if config_name and config_base in config_name: + try: + config_tags.append(float(config_name.split("_")[-1])) + except (ValueError, IndexError): + continue + if config_tags: + config_tag = max(config_tags) + version, tag = str(config_tag).split(".") + config_tag = f"{version}.{int(tag) + 1}" + else: + config_tag = "0.1" else: config_tag = "0.1" - else: - config_tag = "0.1" c1, c2, c3 = st.columns([1, 1, 0.5]) with c1: config_base = st.text_input("Config Base", value=config_base)