🐛 fix(base.py): fix logic for checking and fixing input variables in check_input_variables function
🔍 refactor(base.py): refactor build_error_message function to improve readability and error message generation
The check_input_variables function now correctly handles empty variables and variables that start with a number. It removes invalid characters from the variables and adds them to the wrong_variables set. The build_error_message function has been refactored to generate a more informative error message, including details about invalid characters, wrong variables, empty variables, and duplicate variables. This improves the clarity of error messages when validating input variables.
This commit is contained in:
parent
6be38af44e
commit
7951ccfc77
1 changed files with 48 additions and 10 deletions
|
|
@ -71,30 +71,68 @@ def validate_prompt(template: str):
|
|||
except Exception as exc:
|
||||
raise ValueError(str(exc)) from exc
|
||||
|
||||
# if len(input_variables) > 1:
|
||||
# # If there's more than one input variable
|
||||
|
||||
return input_variables
|
||||
|
||||
|
||||
def check_input_variables(input_variables: list):
|
||||
invalid_chars = []
|
||||
fixed_variables = []
|
||||
wrong_variables = set()
|
||||
empty_variables = []
|
||||
for variable in input_variables:
|
||||
new_var = variable
|
||||
|
||||
# if variable is empty, then we should add that to the wrong variables
|
||||
if not variable:
|
||||
empty_variables.append(variable)
|
||||
continue
|
||||
|
||||
# if variable starts with a number we should add that to the invalid chars
|
||||
# and wrong variables
|
||||
if variable[0].isdigit():
|
||||
invalid_chars.append(variable[0])
|
||||
new_var = new_var.replace(variable[0], "")
|
||||
wrong_variables.add(variable)
|
||||
|
||||
for char in INVALID_CHARACTERS:
|
||||
if char in variable:
|
||||
invalid_chars.append(char)
|
||||
new_var = new_var.replace(char, "")
|
||||
wrong_variables.add(variable)
|
||||
fixed_variables.append(new_var)
|
||||
if new_var != variable:
|
||||
input_variables.remove(variable)
|
||||
input_variables.append(new_var)
|
||||
# if new_var != variable and new_var not in input_variables:
|
||||
# input_variables.remove(variable)
|
||||
# input_variables.append(new_var)
|
||||
# If any of the input_variables is not in the fixed_variables, then it means that
|
||||
# there are invalid characters in the input_variables
|
||||
if any(var not in fixed_variables for var in input_variables):
|
||||
raise ValueError(
|
||||
f"Invalid input variables: {input_variables}. Please, use something like {fixed_variables} instead."
|
||||
)
|
||||
|
||||
if any(var not in fixed_variables for var in input_variables):
|
||||
error_message = build_error_message(
|
||||
input_variables,
|
||||
invalid_chars,
|
||||
wrong_variables,
|
||||
fixed_variables,
|
||||
empty_variables,
|
||||
)
|
||||
raise ValueError(error_message)
|
||||
return input_variables
|
||||
|
||||
|
||||
def build_error_message(
|
||||
input_variables, invalid_chars, wrong_variables, fixed_variables, empty_variables
|
||||
):
|
||||
input_variables_str = ", ".join([f"'{var}'" for var in input_variables])
|
||||
error_string = f"Invalid input variables: {input_variables_str}."
|
||||
|
||||
if wrong_variables and invalid_chars:
|
||||
", ".join([f"'{var}'" for var in wrong_variables])
|
||||
invalid_chars_str = ", ".join([f"'{char}'" for char in invalid_chars])
|
||||
error_string += (
|
||||
f" Please, remove the invalid characters: {invalid_chars_str}"
|
||||
" from the variables: {wrong_variables_str}."
|
||||
)
|
||||
elif empty_variables:
|
||||
error_string += f" There are {len(empty_variables)} empty variable{'s' if len(empty_variables) > 1 else ''}."
|
||||
elif len(set(fixed_variables)) != len(fixed_variables):
|
||||
error_string += " There are duplicate variables."
|
||||
return error_string
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue