holo3-1-35b-a3b) speaks the standard OpenAI tool-calling API, its most natural format, so it plugs into agent frameworks that already do.
Read Core concepts first: reasoning, coordinates, observations, and the trim_to_last_n_images helper used below.
Declare tools
Pass tool schemas viatools, and set tool_choice="required" so the model acts on every step. Do not put tool-format examples in the system prompt. The model renders the call in its own native format from tools alone, and a conflicting example degrades quality. The example ships two tools (click, answer) for illustration. Real agents register a wider toolbox following the same pattern.
Chat layout
Tool results go back astool-role messages keyed by tool_call_id:
A complete loop
The action comes back inmessage.tool_calls; each call carries a function.name, a JSON function.arguments string, and a unique id. There is no note field in this format: anything the model must carry across turns goes in the assistant content. Highlighted lines are the ones specific to function calling; everything else is the shared loop from Core concepts. Plug in your own screenshot() (browser, OS, emulator) and execute(name, args) dispatcher.
Format-specific pitfalls
Next steps
Element localization
Get click coordinates from a screenshot.
API reference
Endpoint, models, parameters, and limits.