From 09e9053cbbb9101297e81991eeb03b3c03c6c2d1 Mon Sep 17 00:00:00 2001 From: "Yao, Qing" Date: Wed, 24 Sep 2025 16:10:35 +0800 Subject: [PATCH 1/8] One click fix: Dynamically load defaults by executing set_env.sh Signed-off-by: Yao, Qing --- one_click_deploy/core/config.py | 12 ------- one_click_deploy/core/deployer.py | 14 +++++++- one_click_deploy/core/utils.py | 59 ++++++++++++++++++++++--------- 3 files changed, 55 insertions(+), 30 deletions(-) diff --git a/one_click_deploy/core/config.py b/one_click_deploy/core/config.py index 0c3002f3c9..1ad58d4ae8 100644 --- a/one_click_deploy/core/config.py +++ b/one_click_deploy/core/config.py @@ -100,21 +100,18 @@ "name": "llm_model", "prompt": "LLM Model ID", "type": str, - "default": "meta-llama/Meta-Llama-3-8B-Instruct", "help": "e.g., meta-llama/Meta-Llama-3-8B-Instruct", }, { "name": "embed_model", "prompt": "Embedding Model ID", "type": str, - "default": "BAAI/bge-base-en-v1.5", "help": "e.g., BAAI/bge-base-en-v1.5", }, { "name": "rerank_model", "prompt": "Reranking Model ID", "type": str, - "default": "BAAI/bge-reranker-base", "help": "e.g., BAAI/bge-reranker-base", }, { @@ -122,7 +119,6 @@ "prompt": "Data Mount Directory (for Docker)", "type": str, "modes": ["docker"], - "default": "./data", }, ], }, @@ -193,7 +189,6 @@ "name": "llm_model", "prompt": "LLM Model ID (for Code Translation)", "type": str, - "default": "mistralai/Mistral-7B-Instruct-v0.3", "help": "e.g., mistralai/Mistral-7B-Instruct-v0.3", }, ], @@ -264,7 +259,6 @@ "name": "llm_model", "prompt": "LLM Model ID (for DocSum)", "type": str, - "default": "meta-llama/Meta-Llama-3-8B-Instruct", "help": "e.g., meta-llama/Meta-Llama-3-8B-Instruct", }, ], @@ -333,7 +327,6 @@ "name": "llm_model", "prompt": "LLM Model ID (for Code Generation)", "type": str, - "default": "Qwen/Qwen2.5-Coder-7B-Instruct", "help": "e.g., Qwen/Qwen2.5-Coder-7B-Instruct", }, ], @@ -409,7 +402,6 @@ "name": "llm_model", "prompt": "LLM Model ID (for Audio Q&A)", "type": str, - "default": "meta-llama/Meta-Llama-3-8B-Instruct", "help": "e.g., meta-llama/Meta-Llama-3-8B-Instruct", }, ], @@ -486,7 +478,6 @@ "name": "lvm_model", "prompt": "LVM Model ID (for Visual Q&A)", "type": str, - "default": "llava-hf/llava-v1.6-mistral-7b-hf", "help": "e.g., llava-hf/llava-v1.6-mistral-7b-hf", }, ], @@ -568,7 +559,6 @@ "name": "llm_model", "prompt": "LLM Model ID", "type": str, - "default": "meta-llama/Meta-Llama-3-8B-Instruct", "help": "e.g., meta-llama/Meta-Llama-3-8B-Instruct", }, ], @@ -659,14 +649,12 @@ "name": "llm_model", "prompt": "LLM Model ID (for Gaudi)", "type": str, - "default": "meta-llama/Meta-Llama-3-8B-Instruct", "help": "e.g., meta-llama/Meta-Llama-3-8B-Instruct", }, { "name": "num_shards", "prompt": "Number of Gaudi HPU cards (shards)", "type": int, - "default": 4, "help": "e.g., 1, 2, 4. Controls tensor parallel size.", }, ], diff --git a/one_click_deploy/core/deployer.py b/one_click_deploy/core/deployer.py index 3aaa79ce01..9076bb3328 100644 --- a/one_click_deploy/core/deployer.py +++ b/one_click_deploy/core/deployer.py @@ -345,17 +345,29 @@ def _interactive_setup_for_deploy(self): interactive_params = self._get_device_specific_or_common_config(["interactive_params"]) or [] + docker_param_map = self._get_device_specific_or_common_config(["docker_compose", "params_to_set_env"]) or {} + source_env_script = self._get_docker_set_env_script() + for param in interactive_params: if "modes" in param and self.args.deploy_mode not in param["modes"]: setattr(self.args, param["name"], None) continue + default_value = param.get("default") + + env_var_name = docker_param_map.get(param["name"]) + if env_var_name and source_env_script: + dynamic_default = get_var_from_shell_script(source_env_script, env_var_name) + if dynamic_default: + log_message("DEBUG", + f"Found default for '{param['name']}' from script '{source_env_script.name}': {dynamic_default}") + default_value = dynamic_default + prompt_text = param["prompt"] help_text = param.get("help") if help_text: prompt_text = f"{prompt_text} ({help_text})" - default_value = param.get("default") is_required = param.get("required", False) user_input = click.prompt(prompt_text, default=default_value, type=param.get("type", str)) diff --git a/one_click_deploy/core/utils.py b/one_click_deploy/core/utils.py index eb3880bade..4f97b279b5 100644 --- a/one_click_deploy/core/utils.py +++ b/one_click_deploy/core/utils.py @@ -377,28 +377,53 @@ def stop_all_kubectl_port_forwards(): def get_var_from_shell_script(script_path: pathlib.Path, var_name: str) -> str | None: + """ + Gets the value of an environment variable by executing a shell script. + + This method is robust as it handles scripts with functions, sourcing other files, + and conditional logic. It executes the script in a non-interactive mode. + + Args: + script_path: The absolute path to the shell script. + var_name: The name of the environment variable to retrieve. + + Returns: + The value of the variable as a string, or None if not found or on error. + """ if not script_path or not script_path.exists(): log_message("DEBUG", f"Source script for variable extraction not found: {script_path}") return None - assignment_pattern = re.compile(rf"^\s*(?:export\s+)?{re.escape(var_name)}\s*=\s*(.*)") - self_ref_pattern = re.compile(r"^\s*(\$\{?" + re.escape(var_name) + r"\}?\,?)") + + + command_string = f'NON_INTERACTIVE=true; source "{script_path.resolve()}"; echo "${var_name}"' + try: - lines = script_path.read_text().splitlines() - for line in reversed(lines): - match = assignment_pattern.match(line) - if match: - value = match.group(1).strip() - value = value.split("#", 1)[0].strip() - if (value.startswith('"') and value.endswith('"')) or (value.startswith("'") and value.endswith("'")): - value = value[1:-1] - value = self_ref_pattern.sub("", value).strip() - value = value.lstrip(",") - log_message("DEBUG", f"Extracted and cleaned value for '{var_name}': {value}") - return value - log_message("DEBUG", f"Variable '{var_name}' not found in {script_path}.") - return None + result = run_command( + ["bash", "-c", command_string], + cwd=script_path.parent, + capture_output=True, + check=False, + display_cmd=False, + ) + + if result.returncode != 0: + log_message( + "WARN", + f"Execution of '{script_path.name}' failed when trying to get var '{var_name}'. Stderr: {result.stderr.strip()}", + ) + return None + + value = result.stdout.strip() + + if value: + log_message("DEBUG", f"Extracted value for '{var_name}' from '{script_path.name}': {value}") + return value + else: + log_message("DEBUG", f"Variable '{var_name}' was not set or is empty in '{script_path.name}'.") + return None + except Exception as e: - log_message("WARN", f"Failed to parse variable '{var_name}' from {script_path}: {e}") + log_message("WARN", f"An unexpected error occurred while executing {script_path.name} to get var '{var_name}': {e}") return None From 8987fc2e11915cd9365246194bfdf9fbf650271a Mon Sep 17 00:00:00 2001 From: "Yao, Qing" Date: Wed, 24 Sep 2025 16:23:13 +0800 Subject: [PATCH 2/8] One click fix: Add --quiet-pull for docker compose up to reduce unnecessary logs Signed-off-by: Yao, Qing --- one_click_deploy/core/deployer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/one_click_deploy/core/deployer.py b/one_click_deploy/core/deployer.py index 9076bb3328..31d03141b8 100644 --- a/one_click_deploy/core/deployer.py +++ b/one_click_deploy/core/deployer.py @@ -901,7 +901,7 @@ def deploy(self): log_message("ERROR", f"Local environment script '{local_env_file}' not found. Cannot deploy.") return False - compose_up_cmd = " ".join(compose_base_cmd + ["up", "-d", "--remove-orphans"]) + compose_up_cmd = " ".join(compose_base_cmd + ["up", "-d", "--remove-orphans", "--quiet-pull"]) if self.example_name == "ChatQnA" and self.args.device == "gaudi": compose_up_cmd = "source .env&&" + compose_up_cmd compose_dir = self._get_docker_compose_files()[0].parent From 8bce9b8e9f894007e504a9f980d6c6ac77e46ae2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 24 Sep 2025 08:30:16 +0000 Subject: [PATCH 3/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- one_click_deploy/core/deployer.py | 6 ++++-- one_click_deploy/core/utils.py | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/one_click_deploy/core/deployer.py b/one_click_deploy/core/deployer.py index 31d03141b8..98bc3e2e11 100644 --- a/one_click_deploy/core/deployer.py +++ b/one_click_deploy/core/deployer.py @@ -359,8 +359,10 @@ def _interactive_setup_for_deploy(self): if env_var_name and source_env_script: dynamic_default = get_var_from_shell_script(source_env_script, env_var_name) if dynamic_default: - log_message("DEBUG", - f"Found default for '{param['name']}' from script '{source_env_script.name}': {dynamic_default}") + log_message( + "DEBUG", + f"Found default for '{param['name']}' from script '{source_env_script.name}': {dynamic_default}", + ) default_value = dynamic_default prompt_text = param["prompt"] diff --git a/one_click_deploy/core/utils.py b/one_click_deploy/core/utils.py index 4f97b279b5..6c23aacede 100644 --- a/one_click_deploy/core/utils.py +++ b/one_click_deploy/core/utils.py @@ -377,8 +377,7 @@ def stop_all_kubectl_port_forwards(): def get_var_from_shell_script(script_path: pathlib.Path, var_name: str) -> str | None: - """ - Gets the value of an environment variable by executing a shell script. + """Gets the value of an environment variable by executing a shell script. This method is robust as it handles scripts with functions, sourcing other files, and conditional logic. It executes the script in a non-interactive mode. @@ -394,7 +393,6 @@ def get_var_from_shell_script(script_path: pathlib.Path, var_name: str) -> str | log_message("DEBUG", f"Source script for variable extraction not found: {script_path}") return None - command_string = f'NON_INTERACTIVE=true; source "{script_path.resolve()}"; echo "${var_name}"' try: @@ -423,7 +421,9 @@ def get_var_from_shell_script(script_path: pathlib.Path, var_name: str) -> str | return None except Exception as e: - log_message("WARN", f"An unexpected error occurred while executing {script_path.name} to get var '{var_name}': {e}") + log_message( + "WARN", f"An unexpected error occurred while executing {script_path.name} to get var '{var_name}': {e}" + ) return None From eec2a98b2db11a5ce7d9e00dda96d4a28fb3ba49 Mon Sep 17 00:00:00 2001 From: "Yao, Qing" Date: Wed, 24 Sep 2025 16:37:06 +0800 Subject: [PATCH 4/8] One click fix: small fix for user's input is "" Signed-off-by: Yao, Qing --- one_click_deploy/core/deployer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/one_click_deploy/core/deployer.py b/one_click_deploy/core/deployer.py index 31d03141b8..973e87b286 100644 --- a/one_click_deploy/core/deployer.py +++ b/one_click_deploy/core/deployer.py @@ -802,7 +802,7 @@ def _configure_docker(self): updates = { env_var: getattr(self.args, arg_name) for arg_name, env_var in params_to_env_map.items() - if hasattr(self.args, arg_name) and getattr(self.args, arg_name) is not None + if hasattr(self.args, arg_name) and getattr(self.args, arg_name) } user_proxies = {p.strip() for p in self.args.no_proxy.split(",") if p.strip()} @@ -846,7 +846,7 @@ def _configure_kubernetes(self): for name, path_or_paths in params_to_values.items(): if hasattr(self.args, name): value = getattr(self.args, name) - if value is None: + if not value: continue if isinstance(path_or_paths, list) and len(path_or_paths) > 0 and isinstance(path_or_paths[0], list): From 1d79aa652740ab886d5edfe20cc24fc69f2fc87c Mon Sep 17 00:00:00 2001 From: "Yao, Qing" Date: Wed, 24 Sep 2025 18:39:36 +0800 Subject: [PATCH 5/8] One click fix: small fix for chatqna special case Signed-off-by: Yao, Qing --- one_click_deploy/core/config.py | 1 + one_click_deploy/core/deployer.py | 17 +++++++++++------ one_click_deploy/core/utils.py | 7 +++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/one_click_deploy/core/config.py b/one_click_deploy/core/config.py index 1ad58d4ae8..a7f41f4028 100644 --- a/one_click_deploy/core/config.py +++ b/one_click_deploy/core/config.py @@ -118,6 +118,7 @@ "name": "mount_dir", "prompt": "Data Mount Directory (for Docker)", "type": str, + "default": "./data", "modes": ["docker"], }, ], diff --git a/one_click_deploy/core/deployer.py b/one_click_deploy/core/deployer.py index f4ae12a975..0adb1f172c 100644 --- a/one_click_deploy/core/deployer.py +++ b/one_click_deploy/core/deployer.py @@ -353,8 +353,9 @@ def _interactive_setup_for_deploy(self): setattr(self.args, param["name"], None) continue - default_value = param.get("default") + static_default = param.get("default") + dynamic_default = None env_var_name = docker_param_map.get(param["name"]) if env_var_name and source_env_script: dynamic_default = get_var_from_shell_script(source_env_script, env_var_name) @@ -363,22 +364,26 @@ def _interactive_setup_for_deploy(self): "DEBUG", f"Found default for '{param['name']}' from script '{source_env_script.name}': {dynamic_default}", ) - default_value = dynamic_default + final_default = dynamic_default if dynamic_default is not None else static_default prompt_text = param["prompt"] help_text = param.get("help") if help_text: prompt_text = f"{prompt_text} ({help_text})" - is_required = param.get("required", False) - user_input = click.prompt(prompt_text, default=default_value, type=param.get("type", str)) + user_input = click.prompt(prompt_text, default=final_default , type=param.get("type", str)) + + value_to_set = user_input if user_input else final_default + + is_required = param.get("required", False) - while is_required and (not user_input or user_input == default_value): + while is_required and not value_to_set: log_message("WARN", f"A valid '{param['prompt']}' is required. Please provide a real value.") user_input = click.prompt(prompt_text, type=param.get("type", str), default=None) + value_to_set = user_input if user_input else None - setattr(self.args, param["name"], user_input) + setattr(self.args, param["name"], value_to_set) self.args.do_check_env = click.confirm("Run environment check?", default=False, show_default=True) diff --git a/one_click_deploy/core/utils.py b/one_click_deploy/core/utils.py index 6c23aacede..75466b27b1 100644 --- a/one_click_deploy/core/utils.py +++ b/one_click_deploy/core/utils.py @@ -393,8 +393,11 @@ def get_var_from_shell_script(script_path: pathlib.Path, var_name: str) -> str | log_message("DEBUG", f"Source script for variable extraction not found: {script_path}") return None - command_string = f'NON_INTERACTIVE=true; source "{script_path.resolve()}"; echo "${var_name}"' - + command_string = ( + f'NON_INTERACTIVE=true; ' + f'source "{script_path.resolve()}" > /dev/null; ' + f'echo "${var_name}"' + ) try: result = run_command( ["bash", "-c", command_string], From 4cfb0cec9bdbe274425bd718034f375607e64167 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 24 Sep 2025 10:41:57 +0000 Subject: [PATCH 6/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- one_click_deploy/core/deployer.py | 5 ++--- one_click_deploy/core/utils.py | 6 +----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/one_click_deploy/core/deployer.py b/one_click_deploy/core/deployer.py index 0adb1f172c..caabcecf39 100644 --- a/one_click_deploy/core/deployer.py +++ b/one_click_deploy/core/deployer.py @@ -371,14 +371,13 @@ def _interactive_setup_for_deploy(self): if help_text: prompt_text = f"{prompt_text} ({help_text})" - - user_input = click.prompt(prompt_text, default=final_default , type=param.get("type", str)) + user_input = click.prompt(prompt_text, default=final_default, type=param.get("type", str)) value_to_set = user_input if user_input else final_default is_required = param.get("required", False) - while is_required and not value_to_set: + while is_required and not value_to_set: log_message("WARN", f"A valid '{param['prompt']}' is required. Please provide a real value.") user_input = click.prompt(prompt_text, type=param.get("type", str), default=None) value_to_set = user_input if user_input else None diff --git a/one_click_deploy/core/utils.py b/one_click_deploy/core/utils.py index 75466b27b1..74deacbf54 100644 --- a/one_click_deploy/core/utils.py +++ b/one_click_deploy/core/utils.py @@ -393,11 +393,7 @@ def get_var_from_shell_script(script_path: pathlib.Path, var_name: str) -> str | log_message("DEBUG", f"Source script for variable extraction not found: {script_path}") return None - command_string = ( - f'NON_INTERACTIVE=true; ' - f'source "{script_path.resolve()}" > /dev/null; ' - f'echo "${var_name}"' - ) + command_string = f"NON_INTERACTIVE=true; " f'source "{script_path.resolve()}" > /dev/null; ' f'echo "${var_name}"' try: result = run_command( ["bash", "-c", command_string], From 4fd32bb66d8f7e31c16e8a514e989969f4911e73 Mon Sep 17 00:00:00 2001 From: ZePan110 Date: Thu, 25 Sep 2025 10:50:46 +0800 Subject: [PATCH 7/8] Update workflow Signed-off-by: ZePan110 --- .github/workflows/_run-one-click.yml | 33 ++++++++++++++++------------ 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/.github/workflows/_run-one-click.yml b/.github/workflows/_run-one-click.yml index 149790a5e8..803d714190 100644 --- a/.github/workflows/_run-one-click.yml +++ b/.github/workflows/_run-one-click.yml @@ -123,20 +123,25 @@ jobs: id: get-default-params if: ${{ inputs.deploy_method == 'k8s' }} run: | - cd ${{ github.workspace }} - example=$(echo "${{ inputs.example }}" | cut -d'-' -f1) - PARAMS_JSON=$(python3 .github/workflows/scripts/get-params.py $example) - echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.llm_model')" >> $GITHUB_ENV - if [ "$example" = "ChatQnA" ]; then - echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.llm_model')" >> $GITHUB_ENV - echo "Embedding_model=$(echo "$PARAMS_JSON" | jq -r '.embed_model')" >> $GITHUB_ENV - echo "Reranking_model=$(echo "$PARAMS_JSON" | jq -r '.rerank_model')" >> $GITHUB_ENV - echo "Mount_dir=$(echo "$PARAMS_JSON" | jq -r '.mount_dir')" >> $GITHUB_ENV - elif [ "$example" = "VisualQnA" ]; then - echo "LVM_model=$(echo "$PARAMS_JSON" | jq -r '.lvm_model')" >> $GITHUB_ENV - elif [ "$example" = "AgentQnA" ]; then - echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.gaudi.llm_model')" >> $GITHUB_ENV - fi + echo "LLM_model=" >> $GITHUB_ENV + echo "Embedding_model=" >> $GITHUB_ENV + echo "Reranking_model=" >> $GITHUB_ENV + echo "Mount_dir=" >> $GITHUB_ENV + echo "LVM_model=" >> $GITHUB_ENV +# cd ${{ github.workspace }} +# example=$(echo "${{ inputs.example }}" | cut -d'-' -f1) +# PARAMS_JSON=$(python3 .github/workflows/scripts/get-params.py $example) + # echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.llm_model')" >> $GITHUB_ENV + # if [ "$example" = "ChatQnA" ]; then + # echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.llm_model')" >> $GITHUB_ENV + # echo "Embedding_model=$(echo "$PARAMS_JSON" | jq -r '.embed_model')" >> $GITHUB_ENV + # echo "Reranking_model=$(echo "$PARAMS_JSON" | jq -r '.rerank_model')" >> $GITHUB_ENV + # echo "Mount_dir=$(echo "$PARAMS_JSON" | jq -r '.mount_dir')" >> $GITHUB_ENV + # elif [ "$example" = "VisualQnA" ]; then + # echo "LVM_model=$(echo "$PARAMS_JSON" | jq -r '.lvm_model')" >> $GITHUB_ENV + # elif [ "$example" = "AgentQnA" ]; then + # echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.gaudi.llm_model')" >> $GITHUB_ENV + # fi - name: deploy and test shell: bash From 190352e253992360be68bd9c560d94c56f58d1ee Mon Sep 17 00:00:00 2001 From: ZePan110 Date: Thu, 25 Sep 2025 10:54:32 +0800 Subject: [PATCH 8/8] Remove deprecated script. Signed-off-by: ZePan110 --- .github/workflows/_run-one-click.yml | 14 --------- .github/workflows/scripts/get-params.py | 41 ------------------------- 2 files changed, 55 deletions(-) delete mode 100644 .github/workflows/scripts/get-params.py diff --git a/.github/workflows/_run-one-click.yml b/.github/workflows/_run-one-click.yml index 803d714190..af77dc5f39 100644 --- a/.github/workflows/_run-one-click.yml +++ b/.github/workflows/_run-one-click.yml @@ -128,20 +128,6 @@ jobs: echo "Reranking_model=" >> $GITHUB_ENV echo "Mount_dir=" >> $GITHUB_ENV echo "LVM_model=" >> $GITHUB_ENV -# cd ${{ github.workspace }} -# example=$(echo "${{ inputs.example }}" | cut -d'-' -f1) -# PARAMS_JSON=$(python3 .github/workflows/scripts/get-params.py $example) - # echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.llm_model')" >> $GITHUB_ENV - # if [ "$example" = "ChatQnA" ]; then - # echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.llm_model')" >> $GITHUB_ENV - # echo "Embedding_model=$(echo "$PARAMS_JSON" | jq -r '.embed_model')" >> $GITHUB_ENV - # echo "Reranking_model=$(echo "$PARAMS_JSON" | jq -r '.rerank_model')" >> $GITHUB_ENV - # echo "Mount_dir=$(echo "$PARAMS_JSON" | jq -r '.mount_dir')" >> $GITHUB_ENV - # elif [ "$example" = "VisualQnA" ]; then - # echo "LVM_model=$(echo "$PARAMS_JSON" | jq -r '.lvm_model')" >> $GITHUB_ENV - # elif [ "$example" = "AgentQnA" ]; then - # echo "LLM_model=$(echo "$PARAMS_JSON" | jq -r '.gaudi.llm_model')" >> $GITHUB_ENV - # fi - name: deploy and test shell: bash diff --git a/.github/workflows/scripts/get-params.py b/.github/workflows/scripts/get-params.py deleted file mode 100644 index d597facaa9..0000000000 --- a/.github/workflows/scripts/get-params.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (C) 2025 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -import json -import os -import sys - -sys.path.append(os.path.join(os.path.dirname(__file__), "../../../one_click_deploy/core/")) -from config import EXAMPLE_CONFIGS - - -def get_example_defaults(example_name): - if example_name not in EXAMPLE_CONFIGS: - print(f"error: example '{example_name}' not found in EXAMPLE_CONFIGS") - sys.exit(1) - - example_config = EXAMPLE_CONFIGS[example_name] - params = example_config.get("interactive_params", {}) - - if isinstance(params, list): - return {param["name"]: param["default"] for param in params} - elif isinstance(params, dict): - return { - device: {param["name"]: param["default"] for param in device_params} - for device, device_params in params.items() - } - else: - return {"error": "Invalid params format in EXAMPLE_CONFIGS for example: " + example_name} - - -def main(): - example_name = sys.argv[1] - - defaults = get_example_defaults(example_name) - - print(json.dumps(defaults, indent=2, ensure_ascii=False)) - - -if __name__ == "__main__": - main()