Seula GitHub

A filter box that reads
plain English.

A 182 KB model that runs in the browser. No API calls.

Open the live demo

overdueStatus = overdue and balance over 1kBalance > 1000 , top 5First 5 by balanceSort: Balance ↓

InvoiceClient↓ BalanceDays lateStatus
INV-1048Northstar Studio240018overdue
INV-1051Fieldwork Co175012overdue
2 of 8 rows 0.79 ms 0.99

What it reads

The whole model

The model's 186,586 bytes drawn as pixels
weights.bin 186,586 B
  • 182 KB184k parameters
  • 0.39 msper parse, 28 ms at 50,000 rows
  • 0network calls
  • Apache-2.0code and weights

When it is unsure

northwind or lateInvoice contains northwind?

8 of 8 rows 0.00
  • 83%scored 0.8 or higherScored 0.8 or higher
  • 98.2%of those rightOf those right
  • 92.8%right on 870 test queriesRight on 870 test queries

Use it

import { load } from "seula";

const seula = await load();
const invoices = seula.table(rows);

const result = invoices.parse(
  "overdue and balance over 1k, top 5 by balance"
);
invoices.apply(result); // the 2 rows that pass
import { load } from "seula";

const seula = await load();
const invoices = seula.table(rows);

const result = invoices.parse(
  "overdue and balance over 1k, " +
  "top 5 by balance"
);
// the 2 rows that pass
invoices.apply(result);
result
{
  conditions: [
    { column: "status", type: "text", op: "=", value: "overdue" },
    { column: "balance", type: "number", op: ">", value: 1000 }
  ],
  sort: { column: "balance", dir: "desc" },
  limit: 5,
  confidence: 0.99
}
{
  conditions: [
    { column: "status",
      type: "text", op: "=",
      value: "overdue" },
    { column: "balance",
      type: "number", op: ">",
      value: 1000 }
  ],
  sort: { column: "balance",
          dir: "desc" },
  limit: 5,
  confidence: 0.99
}

What it does not do