How to Use Jev for Product Q&A Scoring (Quality at Scale)

Updated Applies to Jev 1.13

TL;DR: You cannot read every answer merchants write under your product questions, but you can grade a sample of them every day. One Jev scoring call per dimension — relevance to the question, consistency with the product page, tone — gives you structured scores with confidence and rationale. Thresholds turn scores into actions: coach, keep, or remove. Pipeline and settings below.

Scoring dimensions

Pick few dimensions and define each as its own question:

{"answer":8,"scale":[1,10],"confidence":0.86,"rationale":"Directly answers the warranty length question with a specific number."}

One scoring call per dimension keeps each question unambiguous and lets you act per dimension: a relevance failure means a bad answer, while a consistency failure might mean the product page itself needs fixing.

QA pipeline

Answers written under product Q&A
   |
   v
Daily sampler (e.g. every Nth answer per category)
   |
   v
Jev scoring call per dimension (1-10)
   |
   v
Combine scores per answer
   |
   +--> any dimension < 4 --> flag for removal or merchant rework
   |
   +--> all dimensions >= 4 and < 7 --> published, tracked in trend
   |
   +--> all dimensions >= 7 --> counts toward seller quality metrics
   |
   v
Weekly report: score trends per merchant / category

Sampling bounds cost; the trend report is where coaching targets come from.

Minimal implementation

import os, json, requests

URL = "https://openrouter.ai/api/v1/chat/completions"
# Confirm the exact model slug on the OpenRouter model page.
MODEL = "typesafe/jev-1.13"
DIMENSIONS = {
    "relevance": "Does this answer the customer's question?",
    "consistency": "Is it consistent with the product page specs below?",
    "tone": "Is it respectful and free of spam or promotion?",
}

def score(dimension: str, question: str, answer: str, page: str) -> dict:
    resp = requests.post(
        URL,
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={"model": MODEL, "temperature": 0, "messages": [
            {"role": "system", "content": f"{DIMENSIONS[dimension]} Score 1-10."},
            {"role": "user", "content":
             f"Question: {question}\nAnswer: {answer}\nPage: {page[:2500]}"}]},
        timeout=30,
    )
    resp.raise_for_status()
    # example fixture:
    # {"answer":8,"scale":[1,10],"confidence":0.86,"rationale":"..."}
    return json.loads(resp.json()["choices"][0]["message"]["content"])

def qa_answer(item: dict, low=4, high=7):
    dims = [score(d, item["q"], item["a"], item["page"]) for d in DIMENSIONS]
    worst = min(d["answer"] for d in dims)
    if worst < low:
        return "flag-rework", dims
    if worst < high:
        return "publish-track", dims
    return "quality-credit", dims

Threshold suggestions

SettingRecommendationWhy
Dimensions3 per answerFew enough to stay unambiguous and cheap
Scale[1, 10] per dimensionRoom to separate “acceptable” from “good”
Rework triggerany dimension < 4A failing dimension is a failing answer
Quality bandall >= 7Feeds seller quality metrics
Samplingevery Nth answer per category, N tuned to volumeBounds daily cost; trends do not need full coverage
Low confidenceKeep the answer, mark the score for human spot-checkAn unsure grade is data, not a verdict

Scoring is one of Jev’s three primitives, and the cost-and-latency guide shows why sampled cheap calls beat reading everything manually. The product FAQ answer scoring case study includes measured score trends across categories.

Applies to Jev 1.13.

FAQ

Frequently asked questions

What dimensions should a product Q&A answer be scored on?

Keep it to three or four job-relevant dimensions, for example: does it answer the question, is it factually consistent with the product page, and is it written respectfully. Each dimension is one scoring call on a fixed scale.

Do I need to score every single answer?

No. A sampled pipeline scores a daily slice of answers, auto-flags the worst performers for merchant coaching or removal, and tracks the trend — full coverage is only needed for compliance-critical categories.

How do I turn scores into action?

Set action bands: low scores trigger rework requests to the merchant, mid scores stay published but tracked, high scores count toward seller quality metrics. Always store the rationale with the score.

Keep reading