jevascript
esc

    Type to search · ↑↓ to move · ↵ to open

    Get started

    Reference

    FAQ

    Short answers to the questions that come up first.

    Is this an LLM SDK?#

    No. There is no completion, chat, streaming or prompt template. The runtime asks a decision model to score propositions and returns probabilities as booleans, numbers and choices. If you need generated text, use a text model alongside it; the RAG gate scenario shows the two working together.

    Does it generate any text?#

    No. The Jev provider declares generatesText: false. Nothing the model returns is parsed from prose, which is also why there is no instruction channel to hijack. See Not a security boundary.

    What is a decision model?#

    A model trained to answer "is this proposition true of this text?" with a calibrated probability, rather than to continue text. It is smaller, faster and cheaper than a generative model for that task, and it returns a distribution instead of a sentence.

    Does it work in languages other than English?#

    Yes. The state can be in any language the model reads. The one English-specific piece is the default frame that turns score("urgency") into "This has high urgency."; replace it with scoreFrame in Configuration, or write full propositions with asProposition: true.

    Are results deterministic?#

    No. Providers are not deterministic, and the same input can land on either side of a threshold on two calls. Three tools address that: allowUnknown so the middle is not forced, caching so a re-evaluated record returns the same answer, and minConfidence so unstable answers are measured rather than trusted.

    How much does a call cost?#

    A request is priced on input tokens; there is no output text. The state travels once per request, so batching is the main lever: seven questions in one request cost close to one. Every evaluation reports usage.inputTokens through observability so you can measure your own workload. Pricing itself is set by the provider, not by this package.

    How fast is it?#

    A batched request on a short ticket returned in well under a second in the recorded measurements. Latency scales with state size, not with the number of questions.

    Can I use OpenAI, Anthropic or a local model?#

    Not out of the box. The provider interface is public and small, so you can write a provider that wraps any model able to return probabilities. An OpenAI-compatible provider is on the roadmap. Expect a text model to be worse calibrated than a purpose-built decision model.

    Can I run it in the browser?#

    No. The API key must stay on the server. Put a route handler or server action in front of it. See Frameworks.

    Does it support CommonJS?#

    The package is ESM only. From CommonJS, use await import("jevascript"). See Installation.

    Which Node versions?#

    Node 22.6 or newer, because the package relies on AbortSignal.any and has no polyfills. Bun and Deno work.

    Is it safe to use for authentication, moderation or fraud decisions on its own?#

    No. It is a review and risk layer. Authorisation, limits and exact validation stay deterministic, and a deterministic gate should sit in front of any consequence. The moderation and fraud review scenarios show the pattern.

    How stable is the API?#

    The package is 0.x. The public API may change between minor versions before 1.0; each change is listed in the changelog. Pin a minor version.

    Where does the name come from?#

    "Jev" is the decision model behind the first provider. jevascript is the TypeScript runtime around it. The public API never names the vendor, so a different provider needs no changes at your call sites.

    Where do I report a problem?#

    GitHub issues. Include the question, a minimal state, and the detailed: true result if the problem is an answer rather than an error.