lumnik. / scenarios All scenarios · Français

Question 40,000 items in French and see the SQL

Goal Let a user question the catalogue in their own words, without learning the columns or writing SQL.

Two CSV exports, one entity, an app reduced to chat. The question becomes a read-only query.

manifests/10-products.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: pwa-chat-products  connector_type: csv-file  scopes: [pwa-chat]spec:  transport:    kind: local    path: /tmp/lumnik-scenario/pwa_chat/m_product.csv  parser:    has_header: true  after_process: none  mapping:    dataset:      - require-headers:          columns: [m_product_id, m_product_category_id, name, description, isactive]    cell:      - clean:          columns: [name, description]          strip: true          remove-control-chars: true          normalize-unicode: NFC      - strip-invisible: { columns: [name] }      - replace-smart-quotes: { columns: [description] }
manifests/15-product-categories.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: pwa-chat-product-categories  connector_type: csv-file  scopes: [pwa-chat]spec:  transport:    kind: local    path: /tmp/lumnik-scenario/pwa_chat/m_product_category.csv  parser:    has_header: true  after_process: none  mapping:    dataset:      - require-headers:          columns: [m_product_category_id, name, description, isactive]    cell:      - clean:          columns: [name, description]          strip: true          remove-control-chars: true          normalize-unicode: NFC      - strip-invisible: { columns: [name] }      - replace-smart-quotes: { columns: [name, description] }      - decode-html-entities: { columns: [name, description] }
manifests/20-product.yaml
kind: Entityname: PwaChatProductlabel: Article du cataloguedescription: "Articles du catalogue, enrichis avec leur catégorie. Une ligne représente un article."match: [product_id]scopes: [pwa-chat]columns:  product_id:    label: "Identifiant de l'article"  category_id:    label: "Identifiant de la catégorie"  category_name:    label: "Catégorie"  category_description:    label: "Description de la catégorie"  reference:    label: "Référence de l'article"  description:    label: "Description de l'article"  active:    label: "Article actif (Y pour oui, N pour non)"sources:  - table: t_pwa_chat_products    map:      m_product_id: product_id      m_product_category_id: category_id      name: reference      description: description      isactive: activejoins:  - table: t_pwa_chat_product_categories    from: category_id    to: m_product_category_id    map:      name: category_name      description: category_description
manifests/30-pwa-chat-app.yaml
apiVersion: apps.lumnik.io/v1kind: Appmetadata:  name: pwa-chatspec:  title: Assistant catalogue  scope: pwa-chat  icon: generic  theme:    accentColor: "#4fd1a5"    backgroundColor: "#f4f1ea"  tabs: [chat]  default: false
$ lm ask --scope pwa-chat --lang fr "Combien d'articles appartiennent à la catégorie Pompes ?"
Il y a 7407 articles qui appartiennent à la catégorie Pompes.
  data as of: 2026-11-03T20:54:10.032192Z (last completed run)

  COUNT
  7407
  1 row returned

  SQL: SELECT COUNT(*) 
FROM "connector"."v_pwachatproduct" 
WHERE "category_name" = 'Pompes'
LIMIT 500

Limits

  • Analytic queries over the entity; no semantic search in free text.
  • Depends on a reachable model; the replay fails without it.
  • Synthetic data.
  • The data and the PWA are French: the screenshots show the app as a French user sees it.

Catalogue · questions

40,000 items, and one simple question.

How many pumps do we have?

Without knowing the columns or writing SQL.

Synthetic catalogue

The problem

The answer is in the database, out of reach.

  • Categories sit in another file.
  • A query needs someone who knows.
  • An answer without SQL cannot be checked.

Nothing is changed

Two CSV exports, as they are.

  • An entity joins the category.
  • An app shows chat only.
  • No application to build.

What had to be written

tabs: [chat]

An app reduced to chat.

A 100-line scenario, four declaration files.

The answer

7,407 items.

SELECT COUNT(*) FROM "connector"."v_pwachatproduct"
WHERE "category_name" = 'Pompes'

Real answer, replay of 3 November 2026.

Checkable

The SQL sits under the answer.

  • A read-only query.
  • On the entity's view.
  • The runner fails if no SQL runs.

The limit

Queries, not semantic search.

  • Chat counts and filters the entity.
  • It does not read free text for meaning.
  • It needs a reachable model.

Try it

The scenario replays end to end.

CSV, entity, app, question: every step is published with its output.

This scenario needs lumnik Pro.

See the editions →