INNER CODE UNIT · Python
ThinkRepeatError
usepr/eva · eva.py:489
class ThinkRepeatError(Exception):
pass
# 判断后缀是否是超过阈值的连续重复子串,适用于检测think内容的重复输出,避免模型陷入循环
class RepeatSuffixChecker:
def __init__(self, min_unit_len: int, base: int = 91138233, mod: int = 10**9 + 7):
self.min_unit_len = min_unit_len
self.base = base
self.mod = mod
self.prefix_hash = [0]
self.pow_base = [1]
def _get_hash(self, l: int, r: int) -> int:
return (self.prefix_hash[r] - self.prefix_hash[l] * self.pow_base[r - l]) % self.mod
def add_char(self, ch: str) -> bool:
self.pow_base.append((self.pow_base[-1] * self.base) % self.mod)
new_hash = (self.prefix_hash[-1] * self.base + ord(ch)) % self.mod