AI eCommerce — Product Suggester (Optional / Accessory / Alternative)
by Erpoxa https://erpoxa.com/$ 39.00
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Sales (sale_management)
• eCommerce (website_sale) • Discuss (mail) • Invoicing (account) • Website (website) |
| Community Apps Dependencies | Show |
| Lines of code | 1272 |
| Technical Name |
ai_ecom_product_suggester |
| License | OPL-1 |
| Website | https://erpoxa.com/ |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Sales (sale_management)
• eCommerce (website_sale) • Discuss (mail) • Invoicing (account) • Website (website) |
| Community Apps Dependencies | Show |
| Lines of code | 1272 |
| Technical Name |
ai_ecom_product_suggester |
| License | OPL-1 |
| Website | https://erpoxa.com/ |
AI Product Suggester
Stop filling Optional / Accessory / Alternative products by hand on every product form. Three different AI strategies generate them for you — and you approve before anything goes live.
Test this module instantly
You can explore all features using the demo account. No setup required.
3 strategies, 1 click
Each relationship type gets the algorithm it deserves — not "AI for everything".
Staged for review
Suggestions land in a pending table with a score + written reason. You tick what to apply.
Bulk & cron
Run on 1 product, 100 products, or let the nightly cron handle new products automatically.
Auditable
Every applied suggestion records source (embedding / co-purchase / LLM), score, who applied it, when.
Different problems, different algorithms
Most "AI suggester" modules ask GPT for everything and call it done. That wastes tokens, ignores your real sales data, and produces generic answers. This module routes each suggestion type to the technique that fits.
Alternative Products
Reuses the catalog embeddings from ai_ecom_smart_search. Cosine-similarity ranks every other published product against this one. Same-category siblings get a small score boost.
Best for: "Customers viewing X might also like Y" — competitor products, design variants, things from the same shelf.
Requires: embeddings indexed (cron does this automatically).
Accessory Products
Scans confirmed sale.order history. Counts which products appear in the same cart as this one. Ranks by co-occurrence.
Cold-start: if a product has <5 historical orders, falls back to LLM inference with the catalog so brand-new products still get accessories on day 1.
Best for: things customers always buy together — cables for a monitor, charger for a phone, batteries for a remote.
Optional Products
Sends the product brief + a sample of your live catalog (with real product IDs) to gpt-4o-mini. Asks it to pick complementary items only from those IDs — never invents products.
Best for: upsells that need reasoning — warranty, gift wrap, premium installation, longer cables, larger size, …
Returns: JSON only, validated against your real product IDs.
| ALTERNATIVE | Sennheiser Studio Monitors · Audio-Technica Reference Headphones · Beyerdynamic Open-Back | embedding cosine 0.83 – 0.91 |
| ACCESSORY | Replacement ear cushions · Coiled 3m audio cable · Carrying case | co-purchased in 47 orders |
| OPTIONAL | 2-year extended warranty · Premium gift wrap · Bluetooth USB dongle | LLM with catalog filter |
The whole module in 30 seconds
Every feature captured against the real saas_kit_demo catalog: the three strategies, the two top-menu entry points, the per-product flow, and the three different ways suggestions surface on the storefront.
Each step below the demo is shown in detail with its own annotated screenshot.
Two ways to use Product Suggester from anywhere
Beyond the per-product stat-button, the suite installs a Product Suggester entry in the AI eCommerce top menu. Click it and a small dropdown appears with two items — one for bulk generation, one for review.
Open Suggester
Opens the same wizard you get from the product form's stat-button, but with no product preselected. You pick the products in the wizard itself, choose which kinds to generate (Optional / Accessory / Alternative), then hit Generate.
Best for:
- Bulk-generating for a hand-picked set of products without going through the list view
- Re-running just one kind (e.g. only Optional) across several products at once
- Quickly trying the suggester on a new product before deciding whether to keep results
All Suggestions
Opens the list of every suggestion ever generated across every product. Default group-by source product, filters for Pending / Applied / Rejected. Columns: Source product · Kind · Suggested product · Source (algorithm) · Score · Reason · State.
Best for:
- Triaging the queue after a nightly cron run or bulk generation
- Bulk Accept/Reject — select many rows, click Action
- Auditing what was applied and by whom (the State column shows Applied + who/when)
- Filtering by Source = "AI inference" / "Embedding similarity" / "Co-purchase" to see how each strategy performed
Other top-menu items (Smart Product Search, Request Log, Settings) come from the other AI eCommerce modules — Product Suggester only adds the two above.
Open Suggester — how to actually use it
BULK · NO PRESELECTIONClick Product Suggester → Open Suggester. The wizard opens with the Products field empty and an autocomplete picker waiting for input.
- Click the Products field — Odoo's standard tag-picker focuses
- Type a few letters (product name, SKU prefix, or category) — the autocomplete shows up to 8 matches with their SKU codes; click "Search more…" to open a full search dialog if you need a larger list
- Click each match to add it as a chip — repeat for as many products as you want in one run
- Optional: untick any of the three kind cards (Optional / Accessory / Alternative) if you only want one or two strategies
- Hit Generate — runs all chosen strategies on every chip in parallel, then jumps to the Preview step
From stat-button to live cross-sell on /shop
Captured on a real product (a seeded "1080p 128GB DSLR Camera"). Same flow works for any product.
Open the product → click AI Suggestions
BEFOREOpen any product from Sales → Products or Website → eCommerce → Products. Two stat-buttons sit at the top of the form:
- AI Suggestions — opens the wizard so you pick exactly what to generate & review
- Generate Now — one-shot: runs all three strategies with default settings, then you review later from the Suggestions list
Wizard: pick which kinds to generate, click Generate
Three cards = three strategies. Tick which ones you want for this product, then hit Generate. Typical run takes 8–20 seconds (LLM round-trip dominates). When it returns, the wizard switches to a results view with the suggestions grouped under each kind, every row showing a score and a written reason.
Tick the suggestions you want → Apply selected. The wizard writes them into the matching M2M fields on the product in one transaction.
Track every suggestion in one dashboard
Top menu: AI eCommerce → Product Suggester → Suggestions. Every generated row, filterable by kind, source, state, and product. Group by source product to see the full set for any item. Score column lets you triage by quality. Multi-select & bulk-Accept/Reject.
Validate: open Sales tab, see the M2M fields populated
AFTERBack on the product form → click the Sales tab. The "Upsell & Cross-Sell" section now holds the three lists you applied. This is the standard product.template data — Smart Suggester didn't invent any field, it just filled in the ones Odoo already uses for cross-sell on /shop.
- Optional Products — offered when the customer adds this item to cart (Odoo's "configurator" prompt)
- Accessory Products — shown in the cart page once this item is added
- Alternative Products — shown on the product detail page itself, below the description
Live result — three different placements on the storefront
PUBLISHEDEach of the three M2M fields you filled in step 4 surfaces in a different place on website_sale. This is Odoo's built-in behavior — Smart Suggester didn't add any new theme blocks, it just populated the standard fields that Odoo's storefront already renders.
/shop/product/<id>
Where it shows: Below the product description on the detail page, as a horizontal carousel labelled "Alternative Products — These other products might interest you". Stays visible while the customer is reading the description; no click required.
How it works: Smart Suggester filled the standard product_template.alternative_product_ids field. Odoo's product detail view renders any non-empty M2M as a carousel. Best for: showing competing options when the customer might want to switch.
Where it shows: A "Configure" modal pops up on top of the product page the moment the customer hits Add to cart. Their main product sits at the top; below it, an "Options" list shows every product you marked as optional, each with its own price and one-click Add to Cart button.
How it works: Smart Suggester filled product_template.optional_product_ids. As soon as Odoo's cart endpoint sees this field is non-empty, it routes the add-to-cart through its configurator dialog instead of the silent cart add. Best for: high-margin upsells the customer is most likely to consider while they're already in buying mode (warranty, gift wrap, accessories that match the configuration).
/shop/cart
Where it shows: A "Suggested accessories" block on the cart page, directly under the customer's order line. Every accessory product appears with its own thumbnail, price and Add to Cart button — adding one to the cart triggers another re-render that may surface additional accessories.
How it works: Smart Suggester filled product_template.accessory_product_ids. Odoo's /shop/cart template aggregates accessories across every line in the cart and renders them as a list. Best for: functional pairings ("don't forget your cables / batteries / case") — the customer is one click from converting.
Same flow for the next product: open → AI Suggestions → tick → Apply → Sales tab → /shop. Multiply across the catalog with the bulk action or the nightly cron — Smart Suggester populates the M2M fields, Odoo's storefront renders them.
One product or your entire catalog
🔂 Single product
Stat-button on the product form. Best when you've just edited a product and want fresh suggestions reflecting the new copy.
📋 Bulk action
Multi-select in the products list → Action → Generate AI Suggestions. Runs for every selected product, returns to the suggestions list when done.
🕒 Nightly cron
Picks up products with no relationships yet and runs all three strategies. Posts a digest activity to your inbox listing what's ready to review.
Settings that actually matter
| Setting | Default | What it does |
|---|---|---|
| Enable nightly cron | On | Auto-runs the suggester for products with no existing relationships. Turn off if you only want manual runs. |
| Max suggestions per kind | 10 | Cap on how many rows each strategy returns per product. Keeps the wizard scannable. |
| Replace pending on rerun | On | Re-generating drops untouched pending rows from the previous run, so the list doesn't grow stale. |
| Min co-purchase frequency | 2 | Products must appear together in at least this many confirmed orders to be suggested as an accessory. |
| Cold-start LLM fallback threshold | 5 orders | If a product has fewer historical orders than this, accessory suggestions come from the LLM instead of co-purchase mining. |
| Min embedding similarity | 0.65 | Lower bound on cosine similarity for an alternative to be suggested. Raise to be stricter, lower to surface more. |
All in Settings → AI eCommerce → Product Suggester.
10-minute testing flow
- Confirm prerequisites. AI eCommerce → Base has an OpenAI key. Smart Search has at least one re-indexed product. (If you've installed and reindexed earlier modules, you're already here.)
- Pick a product with rich text. A description, category and tags help all three strategies. Sample products in the seeded test catalog (e.g. "Sony Wireless Studio Monitor Headphones") work well.
- Open the product form → click "AI Suggestions" in the stat-button row. The wizard runs all three strategies. Expect ~10–25 seconds for a cold run (LLM round-trip dominates).
- Inspect each kind. Alternative rows should be in the same category. Accessory rows should be functional pairings (cables, cases, replacements). Optional rows should make merchandising sense (warranties, gifts, premium add-ons).
- Tick a few, hit Apply. Then open Sales → Configuration → product.template for the same product → the M2M fields alternative_product_ids / accessory_product_ids / optional_product_ids now hold your picks.
- Hit /shop on this product. The "You might also like" / "Suggested products" / "Goes well with" sections (provided by website_sale) now reflect your applied suggestions.
- Try the bulk path. Products list → tick 5–10 → Actions → Generate AI Suggestions. Wait for the toast, then jump to AI eCommerce → Suggestions to see the queue.
- Toggle the cron. Settings → Product Suggester → flip Enable nightly cron. Verify the cron exists in Settings → Technical → Scheduled Actions (developer mode).
If something looks off
Why is "Alternative" empty?
Your product probably doesn't have an embedding row yet. The wizard auto-embeds it on first run, but if smart_search's cron is still draining, you may see no results. Re-run after a minute, or click "Reindex all products" in Smart Search settings.
Why are Accessory suggestions clearly LLM-generated, not from real orders?
This product has fewer than Cold-start LLM fallback threshold (default 5) confirmed orders containing it. Real co-purchase data isn't available, so the module falls back to LLM inference. As real orders accumulate, accessory suggestions automatically switch to mined data.
The Optional suggestions include products from unrelated categories.
The LLM gets a sample of the catalog and picks complements. If your catalog mixes very different verticals, results may drift. Mitigations: write more specific product descriptions; raise the temperature in Settings → AI eCommerce; or reject the off-topic suggestion once — it won't be re-proposed.
How do I clear all pending suggestions?
AI eCommerce → Suggestions → filter by State = Pending → select all → Action → Reject. Or in a shell: env['ai.product.suggestion'].search([('state','=','pending')]).unlink()
Plays well with the rest of Odoo
Bigger baskets, on autopilot
Three strategies, one click, full review. Install, click AI Suggestions on any product, and watch cross-sell lift basket size without you filling another M2M field by hand.
Built & supported by Erpoxa
An Odoo consultancy focused on scalable AI-powered modules and bespoke integrations. We answer fast and ship clean code.
Website
All apps, docs & portfolio
erpoxa.comOdoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module