# Smiley Keys: Jev picks the smiley for your message

Write a message and Jev, TypeSafe's AI, reads it and offers the five text smileys that fit best, like :) :/ -_- or ¯\_(ツ)_/¯. Tap one, or press its number, to add it.

Page: https://quirkyagents.com/wizard/projects/smiley-keys/play/ · Part of [Play with Jev](https://quirkyagents.com/wizard/play-with-jev/)

## Using the page

Press **Start**, then write a message the way you would in a chat. When you stop for a moment, five smileys appear above the box, best first. They change when your message changes. Tap a smiley to add it where the cursor is. On a keyboard, press **Tab**, then a number from 1 to 5 (the arrow keys move along the row, Escape goes back to the message). **Copy** copies the message. **Jev's time and cost** shows how long the last call took and what it cost, and the totals for your visit. Open **How Jev picked these** for the text Jev read and each smiley's numbers.

## How it decides

The smileys are text faces, each with a short meaning ("-_-: deadpan: exasperated, done with this, sarcastic about something tiresome"). Jev reads the meanings and the message together, so "Great, another Monday" gets -_- even though its words are happy.

A smiley already in the message ends a thought, so Jev reads only what comes after the last one Left in, the smiley you just added would be the strongest clue and pick itself again. Until a new word (two or more letters or digits) follows the last smiley, the page sends nothing, and it never sends the same text twice in a row. An API caller who sends a message ending in a smiley gets the whole message read without its smileys.

One request asks Jev two kinds of question about the message:

- **pick** (one Choice over every smiley): which one fits best. Its share of the vote is `pick`.
- **fits** (one Noul per smiley): would this smiley be a natural end to the message? Each smiley gets its own probability, `fit`.

The smileys with at least 2% of the vote come first, in vote order. The rest of the five are the best `fit`s. A smiley whose `fit` is 25% or less never comes first, whatever its vote.

## API

`POST https://quirkyagents.com/wizard/api/smileys` with `Content-Type: application/json`

```json
{ "text": "I got the job but it's in Ohio" }
```

`text` is 1–500 characters. A 200 response holds five smileys, best first, then `read` (the text Jev read), `ms` (how long Jev took), `tokens` (input tokens) and `cost` (US dollars: TypeSafe charges $42 per billion input tokens):

```json
{
  "smileys": [
    { "face": ":/", "means": "a crooked mouth: unsure, uneasy, mildly let down, mixed feelings", "pick": 0.83, "fit": 0.78 },
    { "face": "¯\\_(ツ)_/¯", "means": "a shrug: don't know, oh well, can't be helped", "pick": 0.12, "fit": 0.7 },
    { "face": ":(", "means": "a frown: sad, disappointed, sorry", "pick": 0.02, "fit": 0.62 },
    { "face": "-_-", "means": "deadpan: exasperated, done with this, sarcastic about something tiresome", "pick": 0.02, "fit": 0.56 },
    { "face": ":S", "means": "a wobbly mouth: worried, nervous, anxious", "pick": 0, "fit": 0.56 }
  ],
  "read": "I got the job but it's in Ohio",
  "ms": 312,
  "tokens": 2795,
  "cost": 0.00011739
}
```

Errors come back as `{ "error": "…" }`: 400 for an empty, too long or malformed request, 429 once the daily limit is used, 502 when the model call failed, 503 when the tool is switched off. It is a public demo on a paid key: please don't script it.
