Spaces:
Build error
Build error
| import re | |
| def extract_mentions(message: str, triggerChar: str = '@'): | |
| # Escape triggerChar in case it's a regex special character | |
| triggerChar = re.escape(triggerChar) | |
| pattern = rf'<{triggerChar}([A-Z]):([^|>]+)' | |
| matches = re.findall(pattern, message) | |
| return [{'id_type': id_type, 'id': id_value} for id_type, id_value in matches] | |
| def replace_mentions(message: str, triggerChar: str = '@', use_label: bool = True): | |
| """ | |
| Replace mentions in the message with either their label (after the pipe `|`) | |
| or their id if no label exists. | |
| Example: | |
| "<@M:gpt-4.1|GPT-4>" -> "GPT-4" (if use_label=True) | |
| "<@M:gpt-4.1|GPT-4>" -> "gpt-4.1" (if use_label=False) | |
| """ | |
| # Escape triggerChar | |
| triggerChar = re.escape(triggerChar) | |
| def replacer(match): | |
| id_type, id_value, label = match.groups() | |
| return label if use_label and label else id_value | |
| # Regex captures: idType, id, optional label | |
| pattern = rf'<{triggerChar}([A-Z]):([^|>]+)(?:\|([^>]+))?>' | |
| return re.sub(pattern, replacer, message) | |