# Jev

> Run Jev by typesafe online or via API. $0.042/M input, output free, no setup.

**URL:** https://inference.sh/apps/typesafe/jev
**Last updated:** 2026-10-15

---

TypeSafe's System One model. Send text and images with typed questions (choice, score, noul); get calibrated, structured answers your code can act on directly.

- app: `typesafe/jev`
- maker: [typesafe](https://inference.sh/apps/typesafe.md)
- category: [decision](https://inference.sh/apps/category/decision.md)
- tasks: [classification](https://inference.sh/apps/tag/classification.md), [routing](https://inference.sh/apps/tag/routing.md), [moderation](https://inference.sh/apps/tag/moderation.md), [vision](https://inference.sh/apps/tag/vision.md)
- price: $0.042/M input, output free
- runs via: api, javascript and python sdk, belt cli, mcp

## jev API Guide

### About
typesafe's system one model. send text and images with typed questions (choice, score, noul); get calibrated, structured answers your code can act on directly.

### Get an API Key
Create one in [settings → api keys](https://app.inference.sh/settings/keys). The examples read it from `INFERENCE_API_KEY`.

```bash
export INFERENCE_API_KEY="inf_your_key"
```

### 1. Calling the API

#### Install the Client

```bash
pip install inferencesh
```

#### Run and Get Result
Submit a request and wait for the final result.

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])

## version @60sdc5x7 pinned
result = client.run({
        "app": "typesafe/jev@60sdc5x7",
        "input": {
            "state": "Our API started returning 500 errors 20 minutes ago and we can't process any customer orders.",
            "choices": [
                {
                    "id": "choices_1",
                    "instructions": "instructions",
                    "options": [
                        {
                            "name": "options_1"
                        },
                        {
                            "name": "options_2"
                        }
                    ]
                }
            ],
            "scores": [
                {
                    "id": "scores_1",
                    "instructions": "instructions",
                    "levels": [
                        "levels_1",
                        "levels_2"
                    ]
                }
            ],
            "nouls": [
                {
                    "id": "nouls_1",
                    "instructions": "instructions"
                }
            ]
        }
    })

print(result["output"])
```

#### Stream Live Updates
Get real-time progress updates as the task runs.

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])

## version @60sdc5x7 pinned
## stream=True yields updates as they arrive
for update in client.run({
        "app": "typesafe/jev@60sdc5x7",
        "input": {
            "state": "Our API started returning 500 errors 20 minutes ago and we can't process any customer orders.",
            "choices": [
                {
                    "id": "choices_1",
                    "instructions": "instructions",
                    "options": [
                        {
                            "name": "options_1"
                        },
                        {
                            "name": "options_2"
                        }
                    ]
                }
            ],
            "scores": [
                {
                    "id": "scores_1",
                    "instructions": "instructions",
                    "levels": [
                        "levels_1",
                        "levels_2"
                    ]
                }
            ],
            "nouls": [
                {
                    "id": "nouls_1",
                    "instructions": "instructions"
                }
            ]
        }
    }, stream=True):
    if update.get("progress"):
        print(f"progress: {update['progress']}%")
    if update.get("output"):
        print(f"output: {update['output']}")
```

#### Run in the Background
Start the task and get its id back right away, then check on it with `GET /tasks/{id}`. It is done when `status` is 10 (completed), 11 (failed) or 12 (cancelled).

```python
import os
from inferencesh import inference, TaskStatus

client = inference(api_key=os.environ["INFERENCE_API_KEY"])

## returns as soon as the task is created
task = client.run({
        "app": "typesafe/jev@60sdc5x7",
        "input": {
            "state": "Our API started returning 500 errors 20 minutes ago and we can't process any customer orders.",
            "choices": [
                {
                    "id": "choices_1",
                    "instructions": "instructions",
                    "options": [
                        {
                            "name": "options_1"
                        },
                        {
                            "name": "options_2"
                        }
                    ]
                }
            ],
            "scores": [
                {
                    "id": "scores_1",
                    "instructions": "instructions",
                    "levels": [
                        "levels_1",
                        "levels_2"
                    ]
                }
            ],
            "nouls": [
                {
                    "id": "nouls_1",
                    "instructions": "instructions"
                }
            ]
        }
    }, wait=False)

## later: read its current state
state = client.tasks.get(task["id"]).data
if state["status"] == TaskStatus.COMPLETED:
    print(state["output"])
```

### 2. Files

#### Automatic Upload

```python
## local file paths are automatically uploaded
result = client.run({
    "app": "typesafe/jev@60sdc5x7",
    "input": {
        "image": "/path/to/local/image.png",  # detected & uploaded
        "audio": "https://example.com/audio.mp3",  # url passed through
    }
})
```

#### Manual Upload

```python
## upload and get a hosted URL
file = client.files.upload("/path/to/file.png")
print(file.uri)  # https://cloud.inference.sh/...
```

### 3. Schema

#### Input
- **model** (string): Model name or alias: `jev-latest`, `jev-preview`, or a pinned version such as `jev-1.13.0`. Pin a version if you tuned thresholds against it.
- **state** (any): The content to evaluate: a string, or a JSON object / array of related context (messages, records, a policy). Every question sees the same state. May be empty when `images` carries the content. Send only what the questions need; unrelated detail costs accuracy.
- **choices** (array): Choice questions: pick one option from a set.
- **scores** (array): Score questions: place the state on ordered levels.
- **nouls** (array): Noul questions: probability that the answer is yes.
- **images** (array): Up to 8 images (PNG or JPEG, or any format Pillow reads) the questions are about. Sent as `{"images": [...], "text": state}`, so questions can name `images[0]`. Downsized to 1568 px on the long side; one under 280 x 280 is padded. Preview feature upstream: formats and accuracy may change.

#### Output
- **choices** (object): Choice answers by question id.
- **input_tokens** (integer): Input tokens (billed).
- **model** (string): The versioned model that answered, e.g. `jev-1.13.0`.
- **nouls** (object): Noul answers by question id.
- **output_tokens** (integer): Output tokens (free upstream).
- **scores** (object): Score answers by question id.

## other decision apps

- [Decision 3.0 d3 27B](https://inference.sh/apps/vllm-sr/d3.md): GPU time, billed per second
- [Decision 3.0 d3-flash 9B](https://inference.sh/apps/vllm-sr/d3-flash.md): GPU time, billed per second
- [Decision 3.0 d3-mini 4B](https://inference.sh/apps/vllm-sr/d3-mini.md): GPU time, billed per second
- [Decision 3.0 d3-nano 2B](https://inference.sh/apps/vllm-sr/d3-nano.md): GPU time, billed per second
- [Decision 3.0 d3-lite 0.8B](https://inference.sh/apps/vllm-sr/d3-lite.md): GPU time, billed per second

## faq

### how much does Jev cost?

$0.042/M input, output free. you pay per run from your inference shell credits. no subscription is required.

### how do I run Jev via api?

call typesafe/jev with the javascript or python sdk, the rest api, or `belt app run typesafe/jev` from a terminal. the api reference on this page lists every input.

### who makes Jev?

Jev is made by typesafe and runs on inference shell. every typesafe app is listed at https://inference.sh/apps/typesafe.

### can my agent use Jev?

yes. agents call it as a tool through the inference shell mcp server (https://api.inference.sh/mcp), the belt cli or the sdk, and pay per run like you do.

### what are the alternatives to Jev?

other decision apps on inference shell include Decision 3.0 d3 27B, Decision 3.0 d3-flash 9B, Decision 3.0 d3-mini 4B, Decision 3.0 d3-nano 2B. they run through the same api, so switching is a one-line change.
