system-one: typed decisions from Jev, Cloudflare AI Gateway and Laya, Promise or Effect
TypeScript library where one set of question definitions serves a zero-dependency Promise client and an Effect service. Never invents a probability it was not given.
# system-one
Typed decisions from System-1 models — TypeSafe **Jev** (directly or via **Cloudflare AI Gateway**) and **Laya** — with a Promise client and an **Effect** service sharing one set of question definitions.
You send **state** and **typed questions**; you get **typed answers with probabilities**; your code decides. The library never invents a probability, threshold, selected level, or model version it was not given.
```
pnpm add system-one # Promise API, zero runtime deps
pnpm add effect @effect/platform # only for system-one/effect
```
Node ≥ 22.18, ESM only.
## Define questions
```ts
import { Question, defineQuestions } from "system-one";
const triage = defineQuestions({
urgent: Question.boolean({
instructions: "Does this need urgent attention?",
criteria: { true: "Time-sensitive harm or an ongoing outage", false: "Routine request" },
}),
department: Question.choice({
instructions: "Which department should handle this?",
options: {
billing: "Payments, refunds, invoices",
technical: "Bugs, outages",
sales: "Pricing",
},
}),
frustration: Question.ordinal({
instructions: "How frustrated is the customer?",
levels: ["Calm", "Frustrated", "Very angry"],
}),
});
```
Literal keys are preserved: `answers.department.value` is `"billing" | "technical" | "sales"`.
## Promise API
```ts
import { createClient } from "system-one";
import { jev } from "system-one/adapters/typesafe";
const client = createClient({
model: jev({ apiKey: process.env.TYPESAFE_API_KEY!, model: "jev-1.13.0" }),
});
const result = await client.evaluate(
{ state: { message: "My payouts have failed for three days!" }, questions: triage },
{ signal, timeoutMs: 10_000 }, // optional
);
result.answers.departme