TurboJev 0.34.0

dotnet add package TurboJev --version 0.34.0
                    
NuGet\Install-Package TurboJev -Version 0.34.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TurboJev" Version="0.34.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TurboJev" Version="0.34.0" />
                    
Directory.Packages.props
<PackageReference Include="TurboJev" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TurboJev --version 0.34.0
                    
#r "nuget: TurboJev, 0.34.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TurboJev@0.34.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TurboJev&version=0.34.0
                    
Install as a Cake Addin
#tool nuget:?package=TurboJev&version=0.34.0
                    
Install as a Cake Tool

<h1 align="center">TurboJev</h1>

<p align="center"> <strong>Typed decisions and structured generation with local open-weight models.</strong> </p>

<p align="center"> Turn context and questions into decisions, probabilities and structured data.<br> Built in Rust, with Python, JavaScript, TypeScript, C#, C and browser bindings,<br> plus source integrations for Android and Swift. </p>

<p align="center"> Native packages for <strong>Windows · Linux · macOS</strong><br> Windows / Linux: x86 · x64 · ARM64 · macOS: Intel · Apple Silicon<br> Portable Rust core · Browser WebAssembly · CPU and supported GPU runtimes </p>

<p align="center"> <a href="https://pypi.org/project/turbojev/"><img alt="Python package on PyPI" src="https://img.shields.io/badge/PYTHON-PyPI-30363d?style=for-the-badge&labelColor=161b22" height="28"></a> <a href="https://www.npmjs.com/package/@turbojev/node"><img alt="JavaScript and TypeScript packages on npm" src="https://img.shields.io/badge/JS%20%2F%20TS-npm-30363d?style=for-the-badge&labelColor=161b22" height="28"></a> <a href="https://www.nuget.org/packages/TurboJev"><img alt=".NET package on NuGet" src="https://img.shields.io/badge/.NET-NuGet-30363d?style=for-the-badge&labelColor=161b22" height="28"></a> <a href="https://crates.io/crates/turbojev"><img alt="Rust package on crates.io" src="https://img.shields.io/badge/RUST-crates.io-30363d?style=for-the-badge&labelColor=161b22" height="28"></a> </p>

<p align="center"> <a href="https://www.npmjs.com/package/@turbojev/web"><img alt="Browser and WebAssembly packages" src="https://img.shields.io/badge/BROWSER-WASM-30363d?style=for-the-badge&labelColor=161b22" height="28"></a> <a href="https://github.com/DestroyerDarkNess/TurboJev.Demos"><img alt="Runnable demos using published packages" src="https://img.shields.io/badge/DEMOS-multiple%20languages-30363d?style=for-the-badge&labelColor=161b22" height="28"></a> <a href="evals/README.md"><img alt="Reproducible evaluation tools" src="https://img.shields.io/badge/EVALUATIONS-reproducible-30363d?style=for-the-badge&labelColor=161b22" height="28"></a> <a href="LICENSE"><img alt="License: Apache 2.0" src="https://img.shields.io/badge/LICENSE-Apache--2.0-30363d?style=for-the-badge&labelColor=161b22" height="28"></a> </p>

<p align="center"> <a href="#quick-start"><strong>Quick start</strong></a> · <a href=".agents/skills/turbojev/SKILL.md"><strong>SDK guide</strong></a> · <a href="docs/COOKBOOK.md"><strong>Cookbook</strong></a> · <a href="samples/README.md"><strong>Samples</strong></a> · <a href="https://github.com/DestroyerDarkNess/TurboJev.Demos"><strong>Demos</strong></a> </p>


TurboJev turns context and questions into typed answers. Use it to route support tickets, assess urgency, extract invoice fields, or build workflows where one answer determines the next question. It runs compatible models locally through llama.cpp or a browser runtime, with no mandatory hosted service or telemetry.

Bindings share the Rust engine's validation, schemas and response contracts. Choose your language and runtime while keeping the same decision semantics.

Capability Use it for
Typed decisions Select an allowed answer, assess a boolean condition or score ordered criteria.
Structured generation Extract text, numbers, nullable values, objects and bounded arrays.
Workflows Run dependent questions and include fields only when their conditions hold.
Probability controls Inspect distributions, sample answers and configure option-order averaging.
Multimodal input Evaluate images, audio and timestamped video frames with a compatible runtime and model.

Install

Language Registry Install
Python PyPI python -m pip install --upgrade turbojev
Node.js / TypeScript npm npm install @turbojev/node
C# / .NET NuGet dotnet add package TurboJev
Rust crates.io cargo add turbojev
Browser npm / CDN npm install @turbojev/web @turbojev/wasm @turbojev/runtime-llamacpp-wasm

Native packages include the model runtime and its library dependencies:

Platform Architectures Requirement
Windows x86, x64, ARM64 Matching process architecture
Linux x86, x64, ARM64 glibc 2.28+; Alpine/musl needs a source build
macOS x64, ARM64 macOS 11+; Intel or Apple Silicon

Python and npm select the native package for the running interpreter. NuGet contains all eight runtime directories. Browser WebAssembly is architecture independent. Android and iOS integrations are available as source.

The Rust core does not load models on its own. Add turbojev-runtime-llamacpp with its ffi feature and provide the matching native shim for GGUF inference. C links the C ABI library; Android and Swift need native libraries built for their targets. The self-contained SDK guide includes installation and examples for every binding, including browser CDN use.

The NuGet package includes .NET Standard 2.0, .NET Framework 4.8 and .NET 8 assemblies, supporting .NET Core 3.1, .NET 5–7 and newer .NET versions. See .NET compatibility for installation and validation details. See the binding compatibility matrix for runtime requirements, architecture coverage and the status of mobile/Apple bindings.

Release verification is recorded in the 0.34.0 registry report. That release is verified on npm, PyPI and crates.io. NuGet 0.34.0 is still pending; do not assume dotnet add package TurboJev installs that version yet.

Quick start

Download a compatible text GGUF to model.gguf, then ask a bounded question:

from turbojev import TurboJev

with TurboJev.load("model.gguf", device="cpu") as client:
    response = client.generate(
        context="My package arrived broken. Please send a replacement.",
        questions={
            "team": {
                "type": "string",
                "instructions": "Which team should handle this request?",
                "choices": [
                    {"value": "shipping", "description": "Delivery damage or replacement"},
                    {"value": "billing", "description": "Payments, charges or refunds"},
                    {"value": "technical", "description": "Software bugs or outages"},
                ],
                "return_probabilities": True,
                "permutations": 1,
            },
            "urgent": {
                "type": "boolean",
                "instructions": "Does this require a reply within the hour?",
            },
        },
    )

print(response["result"]["team"]["value"])
print(response["result"]["team"]["distribution"])
print(response["result"]["urgent"])
print(response["usage"])

Finite fields score permitted answers. Open text and numeric fields generate bounded values. The SDK validates output types; the model remains responsible for the answer's meaning. Invalid or unsupported outputs raise errors.

Output types

Output Field definition Returned value
Text {"type": "string"} String
Integer {"type": "integer"} Integer
Number {"type": "number"} Number
Boolean {"type": "boolean"} Boolean
Nullable value {"type": ["string", "null"]} Value or actual null
Enum {"type": "string", "enum": ["meal", "travel"]} One permitted value
Described choice {"type": "string", "choices": [{"value": "billing", "description": "Payments"}, ...]} One permitted value
Ordered score {"type": "number", "levels": [{"label": "low"}, {"label": "high"}]} Probability-weighted zero-based index
Object {"type": "object", "properties": {...}} Object
Array {"type": "array", "items": {...}, "maxItems": 10} Bounded array

Numeric enums are unordered choices. Ordered levels preserve the original scale and can return fractional scores. Schemas support nested objects and top-level arrays of scalars or objects; arrays inside objects and nested arrays are not supported. This is a defined JSON Schema subset.

Use questions for a field map or schema for an object schema, never both. See typed fields for the complete contract.

Dependencies and conditional fields

Declare depends_on when a field needs previous answers. Use when to omit a field unless its condition holds:

with TurboJev.load("model.gguf") as client:
    response = client.generate(
        context="Payments are failing after this morning's deployment.",
        questions={
            "category": {
                "type": "string",
                "enum": ["incident", "billing", "feature_request"],
                "instructions": "What kind of request is this?",
            },
            "severity": {
                "type": "string",
                "enum": ["low", "medium", "high"],
                "instructions": "Assess the incident severity.",
                "when": {"category": "incident"},
            },
            "page_on_call": {
                "type": "boolean",
                "instructions": "Should the on-call engineer be paged?",
                "depends_on": ["severity"],
            },
        },
    )

print(response["result"])
print(response["skipped"])

Conditions support equality, membership, numeric comparisons and confidence bounds. Skipped fields are absent from result and listed in skipped; they are distinct from an actual null answer. Dependencies are validated for unknown fields and cycles. Fields currently execute serially in dependency order.

Probabilities and option ordering

return_probabilities adds the selected value, its probability, a confidence statistic and the full typed distribution. These are conditional scores over the supplied answers, not automatically calibrated confidence.

permutations controls extra model evaluations for unordered fields:

  • 1: one pass in the supplied order.
  • "auto": canonical balanced layouts; K passes for even K, 2K for odd K.
  • A positive integer: that many distinct sampled layouts, capped by the number available.
  • "all": every layout, subject to a 720-evaluation limit.

Small unordered probability fields default to automatic averaging. Large enums and ordinal levels default to one pass. Averaging costs real inference time and does not guarantee a correct answer. Ordered scores keep their scale order.

from turbojev import Dice

with TurboJev.load("model.gguf") as client:
    response = client.generate(
        context="A single roll of a fair six-sided die.",
        questions={"roll": Dice(permutations=1).to_schema()},
        temperature=1,
        seed=42,
    )

print(response["result"]["roll"])

Positive temperature enables sampling; the default selects the most likely answer. Dice uses the model's distribution and does not force fairness. See order robustness and calibration.

Thinking

Thinking is off by default. Native text GGUF inference can generate reasoning before a field's answer using thinking=True, thinking_budget, or thinking_effort (none, low, medium, high). Set thinking="auto" to let the model select effort as an additional decision. Fields can override the request policy.

Reasoning adds tokens and latency. It requires a compatible model and enough context; unfinished reasoning raises an error. Built-in browser runtimes and native multimodal reasoning currently report unsupported mode errors. Actual reasoning and selected effort appear in thinking and thinking_effort.

Images, audio and video

Use a compatible multimodal model and its matching projector. For GGUF image extraction:

from pathlib import Path

with TurboJev.load(
    "vision.gguf",
    mmproj="mmproj.gguf",
    device="cpu",
    n_ctx=8192,
) as client:
    response = client.generate(
        context="Read the attached receipt.",
        images=[Path("receipt.png")],
        questions={
            "merchant": {"type": "string", "instructions": "Extract the merchant name."},
            "total": {"type": "number", "instructions": "Extract the printed total."},
        },
    )

print(response["result"])

Python accepts image paths, bytes, base64/data URIs and PIL-like images. Other bindings use the same base64 JSON contract; browser helpers encode Files/Blobs. Audio uses an audio-capable checkpoint and projector. Video evidence is an ordered sequence of timestamped image frames, decoded by the application. TurboJev does not require external ffmpeg/ffprobe executables.

The current OCR demos use Qwen3.5-2B with its vision projector. Text demos use QJev3.5-0.8B v19c Q8_0; that decision-trained checkpoint is not the OCR model or a general extraction/reasoning recommendation. See multimodal input and measured validation.

Direct typed decisions

evaluate provides the original Jev-style choice, noul and ordered score contracts over one state:

with TurboJev.load("model.gguf") as client:
    response = client.evaluate({
        "state": "Everything is down and our client demo starts at noon.",
        "questions": {
            "team": {
                "type": "choice",
                "instructions": "Which team should handle it?",
                "criteria": {
                    "outage": "Service unavailable",
                    "billing": "Charges and refunds",
                    "feature": "Requests and how-to",
                },
            },
            "urgent": {
                "type": "noul",
                "instructions": "Does this require a reply within the hour?",
            },
            "tone": {
                "type": "score",
                "instructions": "How upset is the customer?",
                "criteria": ["calm", "annoyed", "furious"],
            },
        },
    })

print(response["answers"])

Direct scoring generates no answer tokens unless reasoning is enabled. Its load-time orderRobustness policy is separate from generate.permutations; none is the single-pass default. Compatibility profiles translate supported TypeSafe-style and AI SDK wire formats without substituting their models.

Models and execution

Native GGUF inference uses the bundled llama.cpp runtime. A text checkpoint must have an architecture, tokenizer and prompt template supported by that build. Loading a GGUF does not reproduce a specialized model's custom head, scorer or training prompt automatically.

CPU is the default. Explicit GPU selection reports an error if the requested backend/device is unavailable. Windows x64 includes Vulkan and macOS includes Metal. Windows x86/ARM64 and Linux packages use CPU inference. Browser applications can choose GGUF through llama.cpp/WASM or supported ONNX through Transformers.js, with explicit WebGPU selection where supported.

Keep models loaded for repeated requests. Prefix reuse and other optimizations depend on runtime capabilities and numerical qualification; structured generation does not promise parallel field execution. Timeouts and cancellation are cooperative between model operations. Failed generation retains known usage.

Documentation and examples

  • Complete SDK skill: installation, APIs, configuration and examples for every language, all in one file.
  • Cookbook: routing, extraction, dependencies and continuation.
  • Samples: applications built from this repository.
  • Standalone demos: applications using published packages and CDN assets.
  • Decision design: prompts, option descriptions and honest model-controlled decisions.
  • Architecture: portable Rust core, runtimes and bindings.
  • Evaluations: reproducible task sets and real-model runs.
  • Testing: contracts, fixtures and validation limits.

Published assets and actual inference are different checks. See the native release matrix for build commands, package contents and execution evidence. Cross-compilation is not a hardware execution test, and a package release does not establish accuracy for every model.

License

Apache License 2.0.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 is compatible.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.34.0 110 10/24/2026
0.33.1 102 10/11/2026
0.33.0 110 10/10/2026
0.31.0 149 10/7/2026
0.30.1 121 10/5/2026
0.29.2 121 10/4/2026
0.29.1 129 9/26/2026
0.29.0 118 9/26/2026
0.28.6 115 9/25/2026
0.28.5 105 9/25/2026
0.28.4 119 9/25/2026
0.28.3 110 9/25/2026
0.28.2 124 9/23/2026