← All posts

4 min read GenViz Team extractsanalysisrelease

Give your rows the categories your database is missing

Use Jev in GenViz to categorize whole rows or selected records, review confidence scores, and keep the labelled table for your next question.

Your support tickets have messages, products, account types and dates. What they don’t have is the column you need for the next question: what kind of problem is each customer reporting?

“Card charged twice” and “refund still not received” belong together when you’re counting billing problems. Grouping by the message won’t tell you that. You need to read the rows and give them categories first.

In GenViz, you can describe those categories in the conversation. The assistant labels the rows and saves a new table you can use for the next question. The source stays as it was.

Give the decision enough context

Start with an extract, a saved table in your conversation. Name the categories and describe what belongs in each one: billing for payment or refund problems, shipping for delivery problems, and software for bugs or account access problems.

You can use a single message column, but the decision can also consider a whole row. A housing listing might need its price, area, bedrooms and furnishing status considered together. A product description might make more sense beside its department and intended use.

Tell the assistant which fields matter. It can use the full row or just the columns you choose. The category descriptions set the boundaries; additional instructions can clarify cases such as refunds for damaged deliveries.

Choose which rows to label

You can categorize one row, a specific selection, rows matching conditions, or the whole extract. Ask to label only unresolved tickets, for example, or start with a few records to check your category descriptions.

The saved result contains only the selected rows, in their original order, with all their original columns plus category and category_confidence. Choosing fewer fields for the decision does not remove the other fields from the resulting extract.

GenViz uses Jev, a decision model from

TypeSafe, to choose among your labels. An `other` category is added if you haven't supplied one. Within a run, identical inputs share a decision. Rows that cannot be decided remain unlabelled.

Read the result before the next question

The categorization card keeps three views together:

  • Counts shows category totals and their share of the source table, including rows that were not selected. It also flags scores below 0.6.
  • Labels keeps the category names and descriptions beside the result.
  • Details shows the source table, context columns, rows judged out of the source total, distinct inputs, decision calls and duration.

Confidence scores run from 0 to 1. Use them to choose where to start reviewing; a high score does not guarantee a correct label. Check empty categories too. Then ask which problems are most common, or how the mix differs by team.

Put categorization inside an analysis

The same step works inside a Python analysis. The assistant can filter a DataFrame first, categorize the remaining full rows, and save the result:

import genviz
import polars as pl

tickets = genviz.read()
selected = tickets.filter(pl.col("status") == "open")

labelled = genviz.categorize(
    selected,
    labels={
        "billing": "payment or refund problems",
        "shipping": "delivery problems",
        "software": "bugs or account access problems",
    },
)

genviz.write_table("open_tickets_by_category", labelled)

For a tickets extract with a status column, this program labels only open tickets. The helper returns a DataFrame, ready for further calculations or saving as a table.

Know what goes into the decision

The selected context, category descriptions and any instructions go to the decision model. Full-row context includes every field in those rows; choose fewer context columns when the rest aren’t needed. In Python, this happens through a dedicated channel; credentials stay outside the sandbox.

Runs allow up to 2,000 distinct inputs and 64 categories, including other. Blank inputs and inputs over the size limit remain unlabelled. Categorization requires your organisation’s own OpenRouter key with access to the decision model.