import re def extract_parameters(variables_list, user_input): extracted_params = [] for pattern in variables_list: regex = re.sub(r"(\w+):\{(.+?)\}", r"(?P<\1>.+?)", pattern) match = re.match(regex, user_input) if match: extracted_params = [{"key": k, "value": v} for k, v in match.groupdict().items()] break if not extracted_params: city_pattern = r"(\bAnkara\b|\bİstanbul\b|\bİzmir\b)" cities = re.findall(city_pattern, user_input) if len(cities) >= 2: extracted_params = [ {"key": "from_location", "value": cities[0]}, {"key": "to_location", "value": cities[1]} ] return extracted_params def resolve_placeholders(text: str, session: dict, variables: dict) -> str: def replacer(match): full = match.group(1) try: if full.startswith("variables."): key = full.split(".", 1)[1] return str(variables.get(key, f"{{{full}}}")) elif full.startswith("session."): key = full.split(".", 1)[1] return str(session.get("variables", {}).get(key, f"{{{full}}}")) elif full.startswith("auth_tokens."): parts = full.split(".") if len(parts) == 3: intent, token_type = parts[1], parts[2] return str(session.get("auth_tokens", {}).get(intent, {}).get(token_type, f"{{{full}}}")) else: return f"{{{full}}}" else: return f"{{{full}}}" except Exception: return f"{{{full}}}" return re.sub(r"\{([^{}]+)\}", replacer, text) def validate_variable_formats(variables, variable_format_map, data_formats): errors = {} for var_name, format_name in variable_format_map.items(): value = variables.get(var_name) if value is None: continue format_def = data_formats.get(format_name) if not format_def: continue if "valid_options" in format_def: if value not in format_def["valid_options"]: errors[var_name] = format_def.get("error_message", f"{var_name} değeri geçersiz.") elif "pattern" in format_def: if not re.fullmatch(format_def["pattern"], value): errors[var_name] = format_def.get("error_message", f"{var_name} formatı geçersiz.") return len(errors) == 0, errors