devils-agent / baim /baseline.py
devildasdf's picture
Upload experimental BAIM code, research checkpoints and measured evaluations
795f737 verified
Raw
History Blame Contribute Delete
1.16 kB
"""Deterministic comparison baseline, explicitly not the proposed final agent."""
from dataclasses import asdict
import re
from .actions import Action,Decision,Kind
from .features import candidates,lexical
class LexicalRoleBaseline:
def predict(self,goal,state,ticket):
elements = [asdict(e) for e in state.elements]
indices = candidates(goal,elements)
if not indices:
return Decision(ticket,Action(Kind.ASK_USER,('No candidate.',)))
index = max(indices,key=lambda i:(lexical(goal,elements[i])[2],lexical(goal,elements[i])[0]))
element = state.elements[index]
if element.role in {'textbox','searchbox'}:
kind = Kind.TYPE
elif element.role in {'combobox','listbox'}:
kind = Kind.SELECT
else:
kind = Kind.CLICK
args = (element.ref,)
if kind in {Kind.TYPE,Kind.SELECT}:
values = re.findall(r'"([^"\n]*)"',goal)
if len(values)!=1:
return Decision(ticket,Action(Kind.ASK_USER,('No unambiguous literal.',)))
args += (values[0],)
return Decision(ticket,Action(kind,args))