Where in Odoo is that? ODXBrain knows.
ODXBrain tells an AI which Odoo model holds the data for a question. A plain-language question goes in, three ranked Odoo model names come out — and it runs entirely on your own hardware.
question
“which invoice is not paid yet”
Odoo models, ranked
- 1account.move
- 2account.payment
- 3account.payment.term
“wie viel haben wir gerade auf Lager?” → stock.quant, …
The problem
The map of Odoo your AI doesn’t have.
Odoo stores its data in more than 2,000 models with names like account.move, stock.quant and mrp.production. Before an assistant can answer “what do customers still owe us?”, it has to know that invoices live in account.move. People learn that over years. A small language model running on local hardware usually doesn’t know it at all.
The whole schema in the prompt?
Tens of thousands of tokens — more than a small local model can afford.
A field list baked into the AI?
Wrong for most real instances. Studio and custom modules add fields, installed apps decide which models exist, localisations add country-specific fields, access rights differ per user, and versions rename things — stock.location.route became stock.routein 16.0. There is no single “Odoo schema” to teach a model.
How it works with ODXProxy
Split the stable part from the variable part.
What varies between Odoo instances is the fields. What barely varies is which model holds which kind of business data — invoices have lived in account.move since 13.0. So the work is split: your application (or the local LLM agent it runs) asks ODXBrain which model, then asks ODXProxy what it looks like here and runs the query.
Your application
optionally with an on-premises LLM agent
1 · which model?
ODXBrain
offline · no credentials · no data
2 · fields_get · 3 · search_read
ODXProxy
one safe JSON-RPC seam
Odoo
the engine & gatekeeper
ODXBrain never talks to Odoo. ODXProxy is the only component that does.
question: "is there any incoming shipment today?"
1. ODXBrain POST /v1/resolve { query, odoo_version, edition }
→ stock.picking, … which model to look in
2. ODXProxy fields_get stock.picking
→ picking_type_code, scheduled_date, state, partner_id, …
what that model looks like here
3. ODXProxy search_read stock.picking [incoming, scheduled today]
→ the actual shipments| ODXBrain — which model? | ODXProxy fields_get — what does it look like here? | |
|---|---|---|
| Knowledge | Stable: which business concept lives where | Variable: this instance's actual fields |
| Source | A public corpus, built once, audited in the open | The live Odoo instance, at the moment of the question |
| Returns | Three ranked Odoo model names | Every field with type, label, relations, selection values |
| Custom / Studio fields | No — and it doesn't need them | Yes |
| User access rights | Not applicable — it holds no customer data | Yes, runs as the calling Odoo user |
Built for air-gapped deployments
Question in, Odoo model out. Nothing leaves the building.
No outbound network code
ODXBrain contains an HTTP server and no HTTP client at all. The code to reach the internet isn't in the binary, and every build's test suite proves it again. There is no cloud fallback, by design.
Private by construction
It never sees Odoo credentials or customer data. A question goes in, Odoo model names come out. It refuses Odoo credentials even if you send them.
CPU-only, modest hardware
The release build needs no GPU. On a two-core CPU a question resolves in under 40 ms.
Small and self-contained
A single Linux binary (plus its CPU backend libraries) and a local embedding model, bge-m3 (MIT licence, about 1.2 GB). The core index itself is 164 KB.
Multilingual
Measured in eight languages.
Your team doesn’t ask in English only, so neither does the test set. Accuracy is measured separately per language, and changes are judged by the weakest language — not by English.
- English
- German
- Greek
- Spanish
- French
- Polish
- Russian
- Chinese
Version-aware
Knows Odoo 14.0 through 19.0.
Tell it the instance’s version and edition (Community or Enterprise) and it resolves renamed models to the name that instance uses, leaves out models the instance can’t have — and says why a model was left out and what replaced it. Don’t know the version? It filters nothing rather than guessing.
Of the 41 core models, 37 are identical in every version from 14.0 to 19.0; the other four change in ways that are recorded exactly.
Open corpus
Read exactly why a model is found.
The corpus ODXBrain answers from — hand-written model descriptions and audited version facts — is public on GitHub (CC0 data, 0BSD scripts). Anyone can audit the facts against Odoo’s own source, improve the wording in their language, or request coverage for an app with a “model coverage” issue.
The corpus is open; the ODXBrain engine is proprietary.
terrakernel/odxbrain-corpus →41 core models across the whole ERP cycle
Accounting, sales, purchasing, inventory, manufacturing and point of sale — plus contacts, products, companies, currencies, users and units of measure.
- account.account
- account.asset
- account.bank.statement
- account.bank.statement.line
- account.full.reconcile
- account.journal
- account.move
- account.move.line
- account.partial.reconcile
- account.payment
- account.payment.term
- mrp.bom
- mrp.bom.line
- mrp.production
- pos.config
- pos.order
- pos.order.line
- pos.session
- product.category
- product.product
- product.tag
- product.template
- purchase.order
- purchase.order.line
- res.company
- res.currency
- res.currency.rate
- res.partner
- res.users
- sale.order
- sale.order.line
- stock.location
- stock.move
- stock.move.line
- stock.picking
- stock.picking.type
- stock.quant
- stock.route
- stock.valuation.layer
- stock.warehouse
- uom.uom
Numbers
Three short names instead of a schema dump.
Built for ~3B-parameter local models with small context windows: responses add extra fields only when they matter, so the common case costs almost no tokens.
Over 92%
of business questions have the right Odoo model in the top three
At least 85%
top-three accuracy in every language we measure
41 / 41
pasted Odoo model names found in the top three — paste account.move and it finds it, every time
Under 40 ms
per question on a two-core CPU, no GPU
Measured on engine 0.1.0 against an internal 200-question multilingual test set.
Roadmap
Not built yet — what comes next.
ODXBrain is early, like ODXProxy 0.1.0: the engine resolves questions today, but it isn’t integrated with ODXProxy or deployed anywhere yet. Everything below is roadmap, not a feature.
Roadmap
Extension packs
Coverage per Odoo app beyond the core — helpdesk, project, field service and more, one pack per app.
Roadmap
Custom-model layer
Your own custom modules and Studio models, kept on your own deployment, per instance.
Roadmap
Odoo 20.0 audit
Version facts for the next Odoo release, in the same audited format as 14.0–19.0.
Roadmap
A stable /v1 API
The API is declared stable and frozen once ODXProxy integration lands.
FAQ
- Does ODXBrain see my Odoo data?
- No. It never connects to Odoo and never accepts Odoo credentials. It holds no customer data and doesn't index, learn from or sync your instance. ODXProxy is the only component that talks to Odoo.
- Does it need an internet connection?
- Never. It has no outbound network code, so it works on air-gapped Odoo deployments whose data can't go anywhere.
- Does it know my custom fields?
- It doesn't need to. ODXBrain only names the Odoo model; ODXProxy's fields_get then returns the live fields of that model on your instance, custom and Studio fields included. Custom models are on the roadmap.
- Is it a chatbot or an LLM?
- No. It contains no generative model. It uses a small embedding model and an exact search over the core Odoo models, and it returns model names — not records, fields, SQL or answers. Your AI does the rest.
- Why three answers instead of one?
- It's a design choice. The misses are near misses — account.payment instead of account.move — so a short ranked list lets the calling AI pick the right model far more reliably than ODXBrain could by guessing a single winner.
- Which Odoo versions does it know?
- 14.0 through 19.0, Community and Enterprise. If you don't pass a version or edition, it filters nothing rather than guessing.
- Do I need a GPU?
- No. The release build is CPU-only and runs on Linux.
- What will it cost?
- Nothing extra. ODXBrain is being built as part of ODXProxy, not as a separate product.
- Is ODXBrain open source?
- The corpus it answers from is open — CC0 data and 0BSD scripts on GitHub. The engine itself is proprietary.
Building an Odoo assistant on local hardware?
ODXBrain is in development as part of ODXProxy. Tell us about your deployment, or start with the proxy today.