Coverage for open_webui/utils/channels.py: 23%

13 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 05:07 +0000

1import re 

2 

3 

4def extract_mentions(message: str, triggerChar: str = '@'): 

5 # Escape triggerChar in case it's a regex special character 

6 triggerChar = re.escape(triggerChar) 

7 pattern = rf'<{triggerChar}([A-Z]):([^|>]+)' 

8 

9 matches = re.findall(pattern, message) 

10 return [{'id_type': id_type, 'id': id_value} for id_type, id_value in matches] 

11 

12 

13def replace_mentions(message: str, triggerChar: str = '@', use_label: bool = True): 

14 """ 

15 Replace mentions in the message with either their label (after the pipe `|`) 

16 or their id if no label exists. 

17 

18 Example: 

19 "<@M:gpt-4.1|GPT-4>" -> "GPT-4" (if use_label=True) 

20 "<@M:gpt-4.1|GPT-4>" -> "gpt-4.1" (if use_label=False) 

21 """ 

22 # Escape triggerChar 

23 triggerChar = re.escape(triggerChar) 

24 

25 def replacer(match): 

26 id_type, id_value, label = match.groups() 

27 return label if use_label and label else id_value 

28 

29 # Regex captures: idType, id, optional label 

30 pattern = rf'<{triggerChar}([A-Z]):([^|>]+)(?:\|([^>]+))?>' 

31 return re.sub(pattern, replacer, message)