Seems Python, plus judgment. is runs in code, seems asks Jev.

Seems is a superset of Python. A condition can be plain English, and TypeSafe Jev answers it with a probability. The answer is yes, no or unsure, and unsure is a real branch of if. Every Python library keeps working.

if order.total > 500 and ticket.text asks for a refund:
    send_to_manager(ticket)
unsure:
    send_to_human(ticket)

1. One rule

Exactreview.stars >= 4

Python operators run in code: >, ==, in, len(...).

Judgmentreview.text seems happy

A judgment verb sends a question to Jev and gets a probability back.

if review.stars >= 4 and review.text seems happy:
    thank(review)

Everything else is Python 3.13. Every Python program is already a valid Seems program, so classes, exceptions, async, pytest and every pip library work from day one. The translator turns the few new constructs into plain Python and keeps every line on its own line number.

2. Judgment verbs

Describing verbs: value VERB english

seems sounds looks mentions discusses describes expresses suggests asks requests

ticket.text asks for a refund
item.title seems like clickbait
log_line suggests a memory leak
rows[0]["body"].strip() seems rude
(first + second) seems too long
text seems "rude and dismissive"
text mentions f"the product {name}"
flags = [t.text asks for a refund for t in tickets]

The question Jev gets is mechanical. X asks for a refund becomes "Does this ask for a refund?" with the value of X as the state. No model reads your source code.

Relating verbs: value VERB value

contradicts supports answers means matches

reply contradicts policy
reply answers ticket.question
a means b                                  # equality by meaning. == stays exact
reply contradicts "all sales are final"    # English goes in quotes

Jev gets both values as named state and a question such as "Does reply contradict policy?"

A judgment is a value

It can live in a variable, a list or a property, and it is only sent to Jev when the program needs its answer.

UseResult
if j: bool(j) not jTrue or False. Raises Unsure when Jev is not sure enough.
j.pThe probability of yes, from 0 to 1. Never raises.
j.verdict()"yes", "no" or "unsure". Never raises.
j.yes j.no j.unsure j.surePlain booleans. Never raise.
a & b a | b ~aCombine judgments without forcing an answer.

3. Unsure

noprobability at or below 0.25
unsureanything in between
yesprobability at or above 0.75

The default certainty level is 0.75. It is a policy choice, and you can change it.

if text asks for a refund:
    pay_out()
else:
    close()
unsure:
    ask_a_person()
try:
    if text asks for a refund:
        pay_out()
except Unsure as err:
    log.info("not sure: p = %.2f", err.judgment.p)

with seems.certainty(0.95):          # a higher bar inside the block
    if text seems like a cancellation:
        close_account()

4. kind, scale, judgment

The three Jev primitives are three declarations. Each one is a block with a question and its entries.

kind team: "Which team should handle this support ticket?"
    billing:   "payments, charges, invoices, refunds"
    technical: "bugs, errors, outages, integrations"
    other:     "none of the other teams fit"

scale anger: "How angry is the customer?"
    calm:    "polite or neutral, no complaint"
    annoyed: "complains, but stays civil"
    furious: "insults, threats, or shouting in capitals"

judgment urgent: "Does this ticket need an answer within one hour?"
    yes: "an outage, lost money, or a legal deadline"
    no:  "a general question or feedback"
BlockJev primitiveCall itYou get
kindChoiceteam(text)a pick: .name, .top, .p("billing"), .probabilities, .confidence, .sure, .is_one_of(a, b)
scaleScoreanger(text)a rating: .level, .score, .normalized, .probabilities, .confidence, float(r)
judgmentNoul with criteriaurgent(text) or text seems urgenta judgment
owner = team(ticket.text)
mood = anger(ticket.text)

if owner == team.billing and mood >= anger.annoyed:
    escalate(ticket)
elif ticket.text seems urgent:            # one word after the verb can name a judgment
    page_on_call(ticket)
unsure:
    review(ticket)

match team(ticket.text):
    case team.billing:
        billing_queue.put(ticket)
    case team.technical:
        bug_tracker.open(ticket)

5. Speed

One round trip to Jev takes most of a second. The language keeps round trips few, without extra code.

owner, mood, refund = team(text), anger(text), text asks for a refund   # nothing sent yet
if refund:                                                              # one request, three questions
    ...

A plain for loop asks round after round. For independent items use either form:

results = seems.each(tickets, route)             # rounds run side by side, results in order
flags = [t.text seems angry for t in tickets]    # or: build the judgments first, read them later

Answers are cached by model, state and question. Set SEEMS_CACHE=/path/file.sqlite to keep them between runs. --no-cache or seems.configure(cache=False) asks again.

6. Tools

python -m seems run program.seems [args]      # --stats, --trace FILE, --no-cache, --sure 0.9
python -m seems translate program.seems       # print the Python. --standalone adds the import line
python -m seems check program.seems           # syntax only
import seems
seems.install()                   # after this, `import desk` finds desk.seems next to .py files
with seems.trace() as events:     # every request and judgment, as dictionaries
    route(ticket)
print(seems.stats())              # totals: judgments, requests, tokens, cost

7. Keep in code

The TypeSafe docs list what Jev is weak at. Seems does not hide that.

8. Run it

Everything runs in a container. Nothing is installed on your machine. You need Docker (or Podman) and a TypeSafe API key in .env.

git clone https://github.com/kavehmz/seems-lang.git
cd seems-lang
cp .env.example .env            # put your TYPESAFE_API_KEY in it
docker compose up --build -d    # then open http://localhost:3004
docker compose run --rm app pytest

The playground shows every judgment with its probability, the exact question Jev got, and what it cost. The support desk page is a small Flask and SQLite service written in Seems.

The Seems playground: a support triage program on the left, every Jev judgment with its probability on the right