The rails native way to do this is to track state in a db row and queuing “next step” jobs as the data changes. This can get verbose especially for smaller pass/fail workflows. However, I find this works better (not worse imo) in more complex workflows as the state is tracked, queryable, can be surfaced in UIs, and resumed “manually” in the event of an outage.
import { Workflow } from "@workglow/task-graph"; const workflow = new Workflow(); workflow .DownloadModel({ model: ["onnx:Xenova/LaMini-Flan-T5-783M:q8", "Universal Sentence Encoder"], }) .TextEmbedding({ text: "The quick brown fox jumps over the lazy dog.", }); await workflow.run();
It automatically caches results of steps if you say `new Workflow({outputCache});`
PS: the example above uses a local onnx model (it switches on model name) which is a good candidate for caching, but can be anything.
You can play around writing this way if you open the console at the web example [2] which has fun console formatters not enough people know about or use in DevTools. You can write code in the console and the example rewrites it as a json format in the web page (and visa-versa).
Or just use the free web app with local user account and local models to play around with. [3]
[1] https://github.com/workglow-dev/workglow
Props for extracting it and offering it up as a library. I'll be interested to compare it to the implementations I've seen, and see what you've added that I've not seen before.
I'm working on DSPy.rb [1] and this could pair nicely for multi-step reasoning chains.
Curious - any plans for async gem support?
moh_quz•5d ago
How does stepped_actions handle the state between steps? Does it persist to the DB after every single action to handle crash recovery, or is it more optimistic?
Good luck with the launch
klevo•5d ago
nzoschke•25m ago
https://github.com/dbos-inc/dbos-transact-golang
I have River on my list to try someday too
https://riverqueue.com/pro