lumnik. / scenarios All scenarios · Français

Ask refuses a margin with no cost and a best supplier with no criterion

Goal Let a purchasing director question their orders in their own words, without being handed a figure the data does not hold.

A purchasing director asks questions of a year of supplier orders. Three questions get their figure, with the SQL that produced it.

purchase_orders.csv
po_number,supplier_id,supplier_name,category,order_date,status,amount_eur
PO-2025-0001,SUP-006,Fournisseur F,visserie,2025-06-30,received,12328.52
PO-2025-0002,SUP-002,Fournisseur B,emballage,2025-01-25,received,17452.35
PO-2025-0003,SUP-002,Fournisseur B,emballage,2025-05-01,received,241.35
PO-2025-0004,SUP-002,Fournisseur B,emballage,2025-01-31,received,4350.22
PO-2025-0005,SUP-003,Fournisseur C,transport,2025-11-24,cancelled,14903.09
PO-2025-0006,SUP-001,Fournisseur A,visserie,2025-04-10,received,16044.38
PO-2025-0007,SUP-005,Fournisseur E,emballage,2025-03-01,cancelled,4720.45
PO-2025-0008,SUP-004,Fournisseur D,maintenance,2025-01-03,ordered,12530.45
PO-2025-0009,SUP-003,Fournisseur C,transport,2025-03-14,received,12444.82
PO-2025-0010,SUP-004,Fournisseur D,maintenance,2025-01-30,received,1472.23
PO-2025-0011,SUP-002,Fournisseur B,emballage,2025-08-23,ordered,1548.55
PO-2025-0012,SUP-005,Fournisseur E,emballage,2025-04-25,received,10939.14
PO-2025-0013,SUP-003,Fournisseur C,transport,2025-02-18,received,17843.19
PO-2025-0014,SUP-004,Fournisseur D,maintenance,2025-11-12,received,16114.73
PO-2025-0015,SUP-001,Fournisseur A,visserie,2025-08-07,ordered,9761.13
PO-2025-0016,SUP-002,Fournisseur B,emballage,2025-07-17,received,11251.27
PO-2025-0017,SUP-001,Fournisseur A,visserie,2025-02-06,ordered,7957.67
PO-2025-0018,SUP-003,Fournisseur C,transport,2025-09-16,ordered,4198.67
PO-2025-0019,SUP-001,Fournisseur A,visserie,2025-02-08,received,8351.96

… 221 more lines

$ lm ask --scope purchasing-c --lang fr "Combien de commandes ont été annulées ?"
26 commandes ont été annulées.
  data as of: 2026-11-03T18:40:55.729849Z (last completed run)

  COUNT
  26
  1 row returned

  SQL: SELECT COUNT(*) FROM "connector"."v_purchase_order_c" WHERE "status" = 'cancelled'
LIMIT 500

$ lm ask --scope purchasing-c --lang fr "Quel est le montant total commandé au fournisseur SUP-003, hors commandes annulées ?"
Le montant total commandé au fournisseur SUP-003, hors commandes annulées, est de 316021.03 euros.
  data as of: 2026-11-03T18:40:55.729849Z (last completed run)

  TOTAL_AMOUNT_EUR
  316021.03
  1 row returned

  SQL: SELECT SUM(amount_eur) AS total_amount_eur
FROM "connector"."v_purchase_order_c"
WHERE supplier_id = 'SUP-003' AND status != 'cancelled'
LIMIT 500

$ lm ask --scope purchasing-c --lang fr "Quelles commandes du fournisseur SUP-003 dépassent 15 000 euros ?"
Il y a 7 commandes du fournisseur SUP-003 qui dépassent 15 000 euros. Les numéros de commande sont : PO-2025-0013, PO-2025-0022, PO-2025-0061, PO-2025-0071, PO-2025-0078, PO-2025-0155 et PO-2025-0192.
  data as of: 2026-11-03T18:40:55.729849Z (last completed run)

  PO_NUMBER
  PO-2025-0013
  PO-2025-0022
  PO-2025-0061
  PO-2025-0071
  PO-2025-0078
  PO-2025-0155
  PO-2025-0192
  7 rows returned

  SQL: SELECT "po_number"
FROM "connector"."v_purchase_order_c"
WHERE "supplier_id" = 'SUP-003' AND "amount_eur" > 15000
LIMIT 500
$ lm ask --scope purchasing-c --lang fr "Quelle est notre marge sur les achats de 2025 ?"
Je ne peux pas répondre à partir des données disponibles pour ce périmètre — la question ne correspond pas au schéma déclaré.

$ lm ask --scope purchasing-c --lang fr "Quel est notre meilleur fournisseur ?"
Je ne peux pas répondre à partir des données disponibles pour ce périmètre — la question ne correspond pas au schéma déclaré.

$ lm ask --scope purchasing-c --lang fr "Quel fournisseur livre le plus en retard ?"
Je ne peux pas répondre à partir des données disponibles pour ce périmètre — la question ne correspond pas au schéma déclaré.
$ lm ask --scope purchasing-c --lang fr "Quelles commandes du fournisseur SUP-009 ont été reçues ?"
La requête n'a renvoyé aucune ligne. Il peut n'y en avoir réellement aucune, ou la requête n'a pas saisi votre question — vérifiez le SQL avant d'affirmer qu'il n'y en a pas.
  data as of: 2026-11-03T18:40:55.729849Z (last completed run)

  no rows returned

  SQL: SELECT "po_number", "order_date", "amount_eur"
FROM "connector"."v_purchase_order_c"
WHERE "supplier_id" = 'SUP-009' AND "status" = 'received'
LIMIT 500

Limits

  • The refusals come from the model configured on the hub (qwen2.5-coder:7b here). Another model may translate a question this one refuses; its figures then go through the same checks.
  • A date restated in the answer is recognised by its year only: "since 15 March" withholds the sentence, not the rows.
  • Synthetic orders; one entity, one scope.

Purchasing · questions

A purchasing director asks questions.

In their own words, on a year of orders.

Some have no answer in this data.

Synthetic orders

The problem

An invented figure gets repeated in meetings.

  • No cost price: no margin.
  • "Best" has no criterion.
  • No delivery date: no delay.

What answers

Three questions, three figures, the SQL beside them.

  • 26 cancelled orders.
  • €316,021.03 ordered from SUP-003.
  • SUP-003's orders above €15,000.

What had to be written

description: "… the hub holds no cost price,
  no selling price and no supplier rating."

The entity says what each column means.

A 56-line scenario, two declaration files.

What is refused

No query, and it says so.

lm ask
Je ne peux pas répondre à partir des données disponibles pour ce périmètre — la question ne correspond pas au schéma déclaré.

Real answer, replay of 3 November 2026.

Empty is not no

SUP-009: no rows.

  • The query returns nothing.
  • Ask does not conclude there is no order.
  • It asks to check the SQL.

The limit

The refusals depend on the model.

  • Here qwen2.5-coder:7b, local.
  • Another model may translate a refused question.
  • Its figures then pass the same checks.

Try it

The scenario replays end to end.

CSV, entity, seven questions: every answer is published with its SQL.

This scenario needs lumnik Pro.

See the editions →