Calling an LLM onchain is the easy part.
The unsexy part is what happens after:
empty bytes, a model error, a timeout, a callback that reverts.
@ritualnet just posted the 6 habits that keep async jobs from dying in production.
eth_call ≠ result.
hasError first.
parse like the model will lie.
ttl in
@ritualnet blocks (~350ms), not ETH math.
keep the callback dumb.
mock the failure path, then ship one live tx.
This is what “AI-native L1” actually looks like. Not vibes. Plumbing.
Six builder best practices for async results on Ritual 🧵
Your contract can call AI models and other services asynchronously. These habits help your dApp handle every outcome smoothly: a result, an error, or no answer in time. Each one comes from the public Ritual skills.