Repository navigation
v2.3.0
BambooAI 2.3.0 — routines
An analysis can now be kept as a method and run again, without a model, on new data: a later window from Intervals.icu, the next race from Endura, another athlete behind a new API key, an updated file. Each run is compared with the run before it. Exploration and routine runs are kept apart: you explore with the analyst as before, and a routine is what you keep when you land on something worth repeating.
Routines
- Save as routine. The Save pill's menu now offers Save as favourite and Save as routine. Saving as a routine reads the finished chain once (one model call, the new
Promoterseat), names the few things that vary between runs as inputs — a date window, a race, a file, a number, a choice — and verifies the method by running it once on the original data, checked line by line against what the analysis printed. The routine stays linked to the analysis it came from. - Run. The Routines entry in the rail lists your routines. Run asks for the inputs only — nothing to edit, nothing to ask — loads the data the way the original analysis did (an Intervals.icu window, an Endura race, a file uploaded, loaded now or taken from the Dataset cache), tells you what differs from the original before anything runs, and runs the method deterministically. The model never runs the method; it writes a short note on what moved. A run costs cents.
- Runs, compared. Every result is shown next to the previous run's (or run 0's), with a mark between the two numbers it compares and a trend sparkline from the third run. A run that fails is kept as a run, named at the cell that failed, its results up to that point compared like any other.
- Versions. Continue the analysis behind a routine (its card opens the favourite), and Save as routine on a later chain of that thread offers the next version. Versions and runs are listed in the manager; the script downloads as a
.pywith anINPUTSblock. - Data that fits. A run adapts the data to the method, never the method to the data: the recorded file names open this run's files, a column this data lacks is added empty, a changed type is read back. A date input that only restates the period the data covers follows the data. A load already in the executor's cache is reused, cut to the window asked for; each Intervals.icu key's data is kept apart in the cache (executor image v52).
- Retired. The 1.x way of running a saved workflow again (Execute, a new analyst chain seeded with the script) is gone; the Routine button stands in its place. The Code tab's Edit and Execute are replaced by Copy and Download (.py), and the editor's CDN scripts leave the page.
The analysis
- Figures are drawn once, after the report, in a step of their own. Cells compute; the final figures are drawn when the report is written, so the Plots tab holds the figures the report cites and nothing redrawn along the way. The plain-language version cites them too.
- Follow-ups after the data changed. A follow-up asked after the loaded data changed (another window, a replaced file) starts in a fresh kernel on the data loaded now; the earlier chains stay in its context, marked as on other data. The same file uploaded again — a new session, a favourite reopened — is the same data, and the follow-up continues as before.
- The contract. A value read off the data — a date in it, a subject's identifier, a threshold — is kept in a named variable rather than typed as a literal, so a method holds when the data is loaded again. A
REPORTwith nothing under it is no longer taken as the report.
The web app
- Ask about a plot. The chat button on a plot sends the picture with your question. The analyst's model sees it when its
model_propertiesentry says"multimodal": "true"; otherwise the question goes alone and the pane says so. - The Plots tab shows a run's figures in the order they were drawn, and a Plotly figure fills its tab.
- The Answer tab reads at 92 characters per line (was 76).
Configuration
- A new seat,
Promoter, in every tier ofLLM_CONFIG_template.json; a configuration without one uses the analyst's seat. "multimodal": "true"on a model'smodel_propertiesentry lets Ask about a plot send the picture.
Hosted edition
- Stripe:
payment_method_typesremoved from the Checkout call, which Stripe API 2026-09-30 rejects (#63, thanks @brandonphelps1212);stripepinned to 16.x; the webhook credits an account only once the payment is in.
Upgrading
pip install -U bambooai
bambooai serve
The first start builds the new executor image (bambooai-executor:2.3.0-v52; a few minutes). Favourites, labels and memory are unchanged; routines are stored beside the favourites. If you keep your own copy of the configuration template, the shipped one has the Promoter seat to copy.
Full changelog: v2.2.2...v2.3.0