How to sort customer reviews into complaints, praise and questions with a local AI model A developer demonstrated a workflow in the osFoundry desktop app for classifying customer reviews into complaints, praise and questions using a local 7B language model. In a walkthrough with a 312-review pottery shop export, the model labeled 87 reviews as complaints, and quality stats confirmed three distinct label values with no empty answers. The approach sends each review individually with a strict output-format prompt, saving results to a new dataset without altering the original. A shop that has been selling for a while usually has a review export nobody has read to the end. The answer to "what should we fix first?" is in there, but finding it means reading every line and keeping a tally in your head. A language model can do the reading if you ask it a narrow question: for each review, is it a complaint, praise or a question? The steps below do that in the Datasets screen of the osFoundry https://osfoundry.io desktop app, with a model running on the same computer. The screenshots use an example export of 312 reviews from a small pottery shop, made up for this walkthrough. Most shop back ends can export reviews as a CSV file. One review per line, with a header row, is all this needs; the example has three columns, date , product and review . In the app, open Models, then Datasets, and click Upload in the top right. Pick the CSV file. Each line becomes a row of a new dataset named after the file, and a message confirms the row count: 312 rows in the example. The dataset is saved to the workspace's dataset library, which uses workspace credits, and is listed under My Datasets with Uploaded as its provider. Click it to open its panel on the right, which shows the number of rows and fields and the column names it found. In the dataset's panel, click Run Model. A small form opens under the buttons. Model is the list of models the app can reach. Choosing one that runs on this computer keeps the model calls on this computer, and labelling is a small enough task for a 7B model. Input field is the column that gets sent. Set it to review . The other columns travel along untouched into the result. The system prompt is your instruction. Be strict about the answer format, because whatever the model writes becomes the value in the new column: Label this customer review as complaint, praise or question. Output only the label. Each review is sent on its own, with this instruction placed before it, so a long angry review can't colour the one after it. Output field name is the name of the new column. The default is prediction ; label reads better later. Click Run Inference. A counter shows how many reviews are done out of the total, and Stop ends the run early if the first answers look wrong. When it finishes, the answers are saved as a new dataset named after the old one plus the column, reviews label here. The uploaded dataset is not changed, so a second run with a better prompt can sit next to the first. Open the new dataset and click Show Quality Stats. For each column it shows the share of empty values, how many distinct values there are, and the average length. The line to read is label . Three distinct values means every answer was one of the three words you gave. If it says five or six, the model sometimes wrote "Complaint." with a capital and a full stop, or a whole sentence, and those rows won't be counted with the others. Tightening the instruction and running again fixes it more reliably than cleaning up by hand. Zero percent empty also matters: an empty label is a review the model didn't answer. Click View in Data Sources and open reviews label from the list to see the labelled rows as a table. The table loads more rows as you scroll, so scroll to the end first; then type complaint in the search box above it and every matching row shows. In the example, 87 of the 312 reviews are complaints, and reading just those takes a few minutes instead of an afternoon. Most of them describe the same thing: arrived chipped, a crack down the side, a lid in pieces, one thin layer of paper, no bubble wrap. A smaller group is about slow delivery, and a few about the glaze colour not matching the photos. The mugs themselves are fine; the packing is the thing to change first. That last step is still yours. The model sorts the pile so the complaints are in one place; deciding which of them matter, and what to do about them, takes reading them. The dataset tools are described on the page about bringing your own datasets into osFoundry https://osfoundry.io/platform/your-datasets , and the desktop app is a free download from the osFoundry download page https://osfoundry.io/download .