Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions frontend/components/config_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -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])

Expand Down Expand Up @@ -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,
Expand All @@ -69,15 +69,16 @@ 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

if selected_config:
# 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.")
Expand All @@ -99,7 +100,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:
Expand Down
49 changes: 29 additions & 20 deletions frontend/components/save_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
9 changes: 7 additions & 2 deletions frontend/pages/orchestration/launch_bot_v2/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}

Expand Down Expand Up @@ -204,7 +204,12 @@ 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")
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")
Expand Down