atlasbot: gate metric keys by token overlap
This commit is contained in:
parent
692b059b52
commit
ed038ebb8d
@ -1431,6 +1431,8 @@ async def _select_metric_chunks(
|
||||
selected = _parse_key_list(raw, available_keys, max_keys)
|
||||
if candidate_keys:
|
||||
selected = _merge_metric_keys(selected, candidate_keys, max_keys)
|
||||
if selected and candidate_keys and not _metric_key_overlap(selected, token_set):
|
||||
selected = candidate_keys[:max_keys]
|
||||
if not selected and candidate_keys:
|
||||
selected = candidate_keys[:max_keys]
|
||||
if available_keys:
|
||||
@ -1582,6 +1584,17 @@ def _filter_metric_keys(keys: list[str], tokens: set[str]) -> list[str]:
|
||||
return [item[1] for item in ranked]
|
||||
|
||||
|
||||
def _metric_key_overlap(keys: list[str], tokens: set[str]) -> bool:
|
||||
if not keys or not tokens:
|
||||
return False
|
||||
lowered_tokens = {token.lower() for token in tokens if token and len(token) >= TOKEN_MIN_LEN}
|
||||
for key in keys:
|
||||
parts = [part for part in re.split(r"[_\\W]+", key.lower()) if part]
|
||||
if set(parts) & lowered_tokens:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def _lines_for_metric_keys(lines: list[str], keys: list[str], max_lines: int = 0) -> list[str]:
|
||||
if not lines or not keys:
|
||||
return []
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user