Jesse.Weightless inference.
solidSF's deterministic Bayesian reasoning engine
One base URL. Your key.
Sign in on your account page for 60 free exchanges, create a key, and send a chat completion. Anything that speaks the OpenAI API works unchanged.
curl https://jesse.my/api/v1/chat/completions \
-H "Authorization: Bearer $JESSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jesse-prod",
"messages": [{"role": "user", "content": "What is 17 * 23?"}]
}'
from openai import OpenAI
client = OpenAI(base_url="https://jesse.my/api/v1", api_key=JESSE_API_KEY)
reply = client.chat.completions.create(
model="jesse-prod",
messages=[{"role": "user", "content": "What is 17 * 23?"}],
)
print(reply.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://jesse.my/api/v1", apiKey: process.env.JESSE_API_KEY });
const reply = await client.chat.completions.create({
model: "jesse-prod",
messages: [{ role: "user", content: "What is 17 * 23?" }],
});
console.log(reply.choices[0].message.content);
Try Jesse
Worked out, checked, or quoted.
Jesse is not a language model. Each request goes to the solver that can answer it: exact arithmetic, a unit table, a program Jesse runs against tests, a reference page. Every reply says which solver answered and whether the answer was checked. When no solver can answer, Jesse says so and explains why instead of guessing.
Exact arithmetic at any size, fractions, percentages, equations, unit conversions, word problems. Work shown.
What is 2 to the power of 100?
State the whole problem in one message. Add checks is … to name a second value from the same givens that lets you check the answer.
Compute 17 * 23 + 5. checks is the product before addition.
Ask with a command and something to check against, such as an example or an Input/Output sample. You only get code that passed its tests.
Write a Python function that reverses a string.
From Jesse's own references first, then a web search. The source is always cited. Start with Look up … to force a web search, or Fact-check: … to get a verdict weighed across sources.
State a fact and Jesse keeps it for your key. Upload documents and Jesse answers from them, quoting the line.
Convert tables between CSV, TSV, JSON, HTML and Markdown. Solve logic puzzles. Analyse a Go position or a Balatro hand.
Jesse can't yet write stories or essays, give opinions, work conditional probability, or act on your behalf. How to ask Jesse lists 100+ phrasings that are checked against the live service with every release.
Every answer comes with a receipt
The response is a standard chat completion plus a jesse object that says how the answer was produced. Check it in code: for example, trust verified: true answers and show the others with their source.
{
"id": "chatcmpl-jesse-…",
"object": "chat.completion",
"model": "jesse-prod",
"choices": [{ "index": 0, "finish_reason": "stop",
"message": { "role": "assistant", "content": "17 * 23 = 391." } }],
"usage": { "prompt_tokens": 12, "completion_tokens": 4, "total_tokens": 16 },
"jesse": {
"solver": "compute",
"verified": true,
"checked": "computed",
"tried": ["compute:answered"]
}
}| Field | Meaning |
|---|---|
solver | The skill that answered: compute, reasoning, code_spec, lexicon, web_search, table_reformat, … help means nothing could answer, and the reply explains why. |
verified | true when Jesse computed the answer or ran and tested it. false when it is quoted from a source. |
checked | How it was checked: computed, spec_checks, lexicon_lead, web_search, or null. |
tried | The solvers consulted, in order, and what each one did. |
caveat | Assumptions Jesse made while reading your request, when there were any. |
notice | Service status during the open beta, also sent as the X-Jesse-Notice header. shown: true means it was also put at the top of the reply, which happens on your first request of the day and after 30 minutes idle. |
One engine, three behaviours.
Every model runs the same solvers. They differ in what they remember. GET /api/v1/models lists them.
The default. Remembers facts you state and prose corrections you send with your key, and they stay with that key. Code corrections are kept for review only: coding answers come only from Jesse's checked programs.
The fixed baseline. Nothing you send changes it, so the same request returns the same answer. Use it for tests and comparisons.
The lab. Reasoning features on trial before they reach jesse-prod. It has no key memory, and every answer is recorded so it can be replayed exactly.
GET /api/v1/memory shows what Jesse remembers for your key; DELETE erases it. Upload documents of up to 10,000,000 characters each (200 per key) and ask about them in later requests.
Open beta: be careful with confidential or export-controlled material. Your data is partitioned by API key and is never used for other customers' answers.
The numbers.
Storage limited, for nowVersion ca05bcc3cd6f. Knowledge, grammar, research beliefs, web pages, Go and Wikipedia.
The pristine model plus 50 priors one customer's agent has learned.
Characters per request and per document, about 2.5M tokens.
Milliseconds, averaged over the last 1,000 chat messages, measured on the server.
- MemoryIn progressGoal: 50 billion characters. Now: 500 MB of documents per account, searched on every request.
- ContextIn progressGoal: no limit. Now: 10M characters per request; past that, your stored documents are searched.
Modalities
- LanguageLiveChat and the API.
- VisionIn progressNow: PDF pages and drawings in the vision lab. Coming soon: images in chat.
- Audio (duplex)In progressNow: two-way room audio with speech recognition on our servers. Coming soon: Jesse's own voice, made on the server.
- Voice (duplex)LiveTalk with Jesse, alone or with other people and up to four Jesses. Jesse's voice comes from your browser.
- RoboticsLive, simulatedBodies, arms and drones that learn to move.
- GamingLiveGo and other games.
- FormalizationIn progressNow: research claims are checked in Lean 4 before they are published. Coming soon: formal proofs in chat.
- Panel of ExpertsComing soonNot built yet.
One plan.
- TRYSign in with Google or GitHub for 60 free exchanges, shared by the chat and your API keys. No card needed.
- KEYSTwo API keys per account. Need more? Each key pack adds 2 keys for $10 / month, as many packs as you like, from your account page. Every key gets the full rate limit below.
- RATEPer key: 5 requests per second on average, in bursts of up to 4. No daily or monthly cap.
- SIZE10,000,000 characters per request. Past 100,000 characters Jesse reads the beginning and end in full and searches the whole text for the sections relevant to the question; the reply says so.
- MODELS
jesse-prod,jesse-pristineandjesse-next. - BILLINGChange your card, download invoices or cancel from the Stripe portal on your account page. Requests refused for their input are never billed.
Endpoints.
Base URL https://jesse.my/api/v1. Send your key as Authorization: Bearer jesse_live_… (or x-api-key). Never put it in a URL.
Chat
| Method | Path | Purpose |
|---|---|---|
| POST | /chat/completions | OpenAI-compatible. Accepts model, messages (a system message sets the output format, for example "Reply as JSON with answer and confidence"), stream, tools, tool_choice, response_format. Answers are deterministic, so temperature has no effect. |
| GET | /models | The models and their rate limits. |
| GET | /usage | Your plan, key limit and packs, free exchanges left, and request counts: today, the last 7 and 30 days, per day, and per key. |
Memory and feedback
| Method | Path | Purpose |
|---|---|---|
| POST | /feedback | Mark an answer right or wrong: {"completion_id", "rating": "positive" | "negative", "correction"}. The response says what happened to it (applied_to, effect). On jesse-prod, a prose correction is remembered for your key. |
| GET | /memory | Facts Jesse remembers for your key ("my project uses Postgres", "remember that …"), plus your documents. |
| DELETE | /memory | Erase everything Jesse remembers for your key. |
| GET | /agent | What your key's agent has learned on top of the pristine priors. |
| POST | /agent/reset | Back to the latest pristine copy. Add {"documents": true} to remove your documents too. |
Documents
| Method | Path | Purpose |
|---|---|---|
| POST | /documents | Store {"name", "text"}. Completions on your key search it automatically. |
| POST | /documents/upload?title=… | Store a raw text body as a document. |
| GET | /documents, /documents/{id} | List your documents, or read one. |
| DELETE | /documents/{id} | Remove a document. |
| POST | /documents/query | Search your documents directly: {"query", "k": 5}. |
Web
| Method | Path | Purpose |
|---|---|---|
| POST | /web_search | {"query", "max_results"}: the same search Jesse runs, returned as results with sources. |
| POST | /research | {"claim", "urls": [up to 4]}: Jesse gathers evidence for and against the claim and returns a research report with a verdict. |
| GET | /beliefs | Jesse's belief ledger: claims and how evidence has moved them. |
Streaming
With "stream": true the reply arrives as OpenAI server-sent events: chat.completion.chunk objects, then data: [DONE]. The OpenAI SDKs handle this with stream=True.
Errors
Errors use the OpenAI shape: {"error": {"message", "type", "param", "code"}}. The message always says what to do next.
| Status | code | What to do |
|---|---|---|
| 400 | invalid_json, invalid_request | Fix the body. The message names the problem. Not billed. |
| 400 | model_not_found | Use jesse, jesse-prod, jesse-pristine or jesse-next. |
| 401 | missing_api_key, invalid_api_key | Send Authorization: Bearer jesse_live_…. Keys are on your account page. |
| 402 | free_prompts_used | Your 60 free exchanges are used. Subscribe to keep going. |
| 403 | key_revoked, subscription_inactive | Create a new key, or renew on your account page. |
| 405 | method_not_allowed | Check the method in the tables above. |
| 429 | rate_limit_exceeded | Wait for the time in Retry-After. Every response carries x-ratelimit-* headers. |
If something fails inside Jesse, you still get a 200 with a reply that says so, never a bare 500. Check jesse.solver in code rather than relying on the status alone.