Skip to content

Commit b22ffb4

Browse files
Add function to parse function call strings and extract name and arguments in agent utils
1 parent 8e9ff18 commit b22ffb4

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

src/agentlab/agents/agent_utils.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,51 @@ def zoom_webpage(page: Page, zoom_factor: float = 1.5):
195195

196196
page.evaluate(f"document.documentElement.style.zoom='{zoom_factor*100}%'")
197197
return page
198+
199+
200+
def parse_func_call_string(call_str: str) -> Tuple[Optional[str], Optional[Tuple[list, dict]]]:
201+
"""
202+
Parse a function call string and extract the function name and arguments.
203+
204+
Args:
205+
call_str (str): A string like "mouse_click(100, 200)" or "mouse_drag_and_drop(x=10, y=20)"
206+
207+
Returns:
208+
Tuple (func_name, (args, kwargs)), or (None, None) if parsing fails
209+
"""
210+
import ast
211+
212+
try:
213+
tree = ast.parse(call_str.strip(), mode="eval")
214+
if not isinstance(tree.body, ast.Call):
215+
return None, None
216+
217+
call_node = tree.body
218+
219+
# Function name
220+
if isinstance(call_node.func, ast.Name):
221+
func_name = call_node.func.id
222+
else:
223+
return None, None
224+
225+
# Positional arguments
226+
args = []
227+
for arg in call_node.args:
228+
try:
229+
args.append(ast.literal_eval(arg))
230+
except (ValueError, TypeError):
231+
return None, None
232+
233+
# Keyword arguments
234+
kwargs = {}
235+
for kw in call_node.keywords:
236+
try:
237+
kwargs[kw.arg] = ast.literal_eval(kw.value)
238+
except (ValueError, TypeError):
239+
return None, None
240+
241+
return func_name, (args, kwargs)
242+
243+
except (SyntaxError, ValueError, TypeError):
244+
return None, None
245+

0 commit comments

Comments
 (0)