from logitbias_parser import parse from logitbias import OpAnd, eval, EscapeToZero def json2logitbias(obj): res = [] for k, v in obj.items(): parsed_k = parse(k) if isinstance(v, dict): exprs = json2logitbias(v) res.extend((OpAnd(parsed_k, expr[0]), expr[1]) for expr in exprs) elif isinstance(v, (int, float)): res.append((parsed_k, v)) return res def logitbias_eval(expr, env): try: res = eval(expr[0], env) except (EscapeToZero, IndexError): return 0 return expr[1] if res else 0 def logitbias_eval_all(exprs, env): return sum(logitbias_eval(expr, env) for expr in exprs)