One AI interface, whichever engine a node has keys for
24-07-2026
AI/AI is a facade with auto-detection: an app calls one interface and the node decides which engine answers, based on which credentials it holds.
Every AI feature written before this named its provider in the code. That is fine until the same app runs in three places. A customer node with a Gemini key and no OpenAI key should not be running code that imports OpenAI, and a feature should not need a rewrite to move between them. So the provider became configuration, and configuration became "which keys are in data/creds.ini".
The facade covers what applications actually ask for: chat completion, streaming, embeddings, transcription and vision, with OpenAI, Claude, Gemini, DeepSeek and Grok behind it. Each engine resource is optional, marked with ? in the requirements, so an app ships only the ones it wants and a missing key means an unavailable engine rather than an error.
Above it sits AI/answer, which is smaller and used more. It takes a question and a list of allowed answers and gives back one of them, which is the shape a surprising number of product features actually need: is this lead serious, vague or spam.
Phlo Presentation was the app that forced the split. Its director and its vision captioning were hard-wired to one provider, and it is now the clearest demonstration of the alternative: the same editor offers whichever models the machine it runs on can reach. Speech synthesis stays in that app, since a voice catalogue is a product decision rather than a runtime one.
Engine 1.0.1. See the AI chapter.