Classification
A customer complaint becomes a category from the list YOU defined. A label outside the list is rejected — the model cannot invent a new one.
Seven mechanisms wired into one layer. Each works on its own, and each is built so the model is never the source of truth.
The model never writes to the database directly — your schema stands between them.
Called from a trigger, a card button, a schedule or a bot.
A customer complaint becomes a category from the list YOU defined. A label outside the list is rejected — the model cannot invent a new one.
Text or a photo becomes an object with the fields you declared. Types are coerced, extras dropped, the schema is yours.
A new skill is a row in settings, not a function in code. Wording changes without a release, with a “try it” panel and a token counter.
“Provider not configured”, “quota spent”, “this model has no vision” — three distinct reasons, not one vague “AI unavailable”.
Every call records tokens under the provider that actually answered. A monthly cap stops spending in a way you can read.
ollama, Anthropic, DeepSeek, OpenAI — with a per-call override: a cheap model to classify, an expensive one to read documents.
The shortest path from a photo to a record.
The bot takes a photo, extracts line items and totals, and creates the record through the same path as manual entry: validation, workflow, audit.
The bot knows who is writing and acts under THAT person's permissions — it never sees more than they do.
Recognition can take two minutes; a bot has fifteen seconds. A queue accepts the job and runs it on the full budget.
The bot shows a card with what it read and waits for a button. Nothing reaches the database silently.
A record becomes a sentence — and starts being found.
A card rule assembles a readable description from fields and relations. That is what search sees, not the raw table.
Words and meaning together: a lexical index and vectors fused into one result list. Without an embedding provider it matches words — and says so.
“Ask AI” answers with links to your own records. Permissions apply BEFORE the prompt is built, so a citation cannot leak what you may not see.
“Has this happened before?” — from the document's rarest terms and its own vector, with no call to a model at all.
The same content as an open help site on your domain, with private spaces behind a share link.
Summaries, tags, “see also” and article drafts — the model proposes, a human accepts item by item.
The knowledge base answers “what”. This answers “how much”.
The model writes no database queries. It fills in a config the system validates against YOUR schema, and the existing report engines do the counting.
“Sum of «Amount» in «Operations» for 01.07–31.07” — built from the very config that ran, so the two cannot diverge.
If the model hesitates between two entities it asks with buttons and executes NOTHING.
Rows, entity and fields. A hidden field is never summed, and a refusal does not enumerate someone else's schema.
Statements about two records — and what follows from them.
“Caused”, “duplicates”, “supersedes”. The predicate registry is yours: name, reading in both directions, allowed types.
Transitive chains of causes, duplicate clusters, “advances with no report” — as datalog rules, not another table.
What the AI suspects is filed as a proposal and, until a human confirms it, exists neither for inference nor for search.
Not “generate code” but “do it in the system” — under your permissions.
Entities, fields, reports, dashboards, bots, the knowledge base, the site, document templates — anything done by mouse can be done by dialogue.
The agent acts as its token's actor. A hidden feature does not exist for it: the tool simply is not in the list.
The model is never the source of truth. It either turns text into structure the system then validates, or answers with facts it did not retrieve itself.
The consequences show everywhere: an invented field fails validation, a label outside the list is rejected, a citation cannot point at a record you cannot see, and a link proposed by AI waits for confirmation.
And conversely — where a model is not needed, there is none. Similar records, rare-term ranking, language normalisation and datalog all run without a single provider call.
ollama (local, offline), Anthropic, DeepSeek and OpenAI. Provider and model can be overridden per call — the rest of the system does not notice.
Yes — a local ollama gives both generation and embeddings, so data never leaves your server. Meaning-based search works the same way in that mode.
Output is checked against a set: a label outside the list, a field outside the schema or a non-existent entity are rejected before execution. The model never writes to the database directly.
The smart part switches on separately from the rest — and off just as easily.
Questions, feedback or need a hand — gloud@gloud.com.ua