mivia

mivia-small-json / v1.0

mivia-small-json, measured.

Dump any text (a stack trace, a bug report in German, a banking request in Persian, a whole log file) plus an output schema, and get strictly valid JSON back: values predicted, complete, never truncated. CPU-native, under 2 GB of RAM, milliseconds per call, and the API never stores your traffic.

~650 mb artifactsint8 onnxcpu onlyzero retentionrest + mcp
99.71%
held-out routed-and-valid
100%
LogHub 32k-line routing & validity
93.5%
real-world informal-chat routing
99.71 vs 97.14
head-to-head vs a hosted LLM router
< 12 ms
p95 full path on CPU
9 languages
on-prem or hosted · zero marginal cost

the engineany text in, strictly valid json out

01 / what it is

mivia-small-json is a compact structuring engine: give it any text and any output schema and it returns a strictly valid record, never a refusal, never invalid JSON.

input
any text, any language, multi-line dumps
output
strictly valid record + routing metadata, or a typed clarification
deepest
coding workflows: issues, commits, logs, diffs, diagnostics, tool calls
runtime
int8 onnx · cpu only · sha256-verified at load · no data egress

12 + N

built-in schema classes

11 workflow classes plus the general text class

unlimited user-registered schemas, selected without tuning

9

languages served and evaluated end to end

en, de, fr, es, pl, pt, it, nl, ja

100%

strict JSON validity on every measured surface

the output contract, not a benchmark result

02 / architecture

A decision pipeline of small, specialized models.

Each model is trained for one job; the stack composes them. Pick a stage to see what runs inside it.

Multilingual encoder router

serves /v1/route

Fine-tuned mMiniLM-L12-H384 encoder (XLM-R vocabulary), exported to int8 ONNX.

Ten developer-workflow classes plus a general text class: chat, invoices, news, and recipes in any language come back as first-class text records, never forced into a workflow schema, never turned away.

03 / capabilities

What it can do.

Structure anything

One call classifies text into issue commit log_event pull_request tool_call tool_clarification diagnostic diff review_comment agent_step text. Every input gets a structured record with confidence; general text is a first-class outcome, not a failure.

99.71%routed + valid, 350 held-out
Guard tool calls

Three honest outcomes: CALL (fully specified), CLARIFY (structured ask-back with the missing parameters), ABSTAIN (not a tool match). A call with missing parameters can never execute.

95.4%underspecified, no guessed call
Predict across domains

Assigns values over arbitrary label sets with no tuning on your side; zero-shot hits 81.0% where chance is 1.3%, and a few-shot onboarding pass (~16 labeled examples per schema, CPU-minutes) measures 92.98% exact on unseen domains.

81.0%zero-shot, 77 intents
Work multilingually

English, German, French, Spanish, Polish, Portuguese, Italian, Dutch and Japanese; German incident tickets route at 98.7%.

9languages evaluated end to end
Grade severity

Ordinal severity on a fixed INFO→CRITICAL scale with calibrated confidence. Ten production vocabularies (PagerDuty SEV, Atlassian/Jira P-levels, Bugzilla, GitHub labels, syslog, OpenTelemetry, Log4j, CVSS, ITIL) crosswalk onto the canonical tiers, so a grade renders in your customer's own terms.

84.2%within-one, 600 real tickets
Extract fields

IDs, levels, components, titles, bodies, diff file paths, tool arguments: extracted and schema-validated, with a repair pass for near-JSON input. Your enum wording - any language, declared alias tables - coerces to your canonical values.

99.99%component extraction, LogHub
Parse whole dumps

Paste a mixed stream (logs + traceback + diff + prose); get ordered, individually classified, valid JSON records back in a single pass.

32,000lines, 100% routed and valid
Deploy anywhere

REST API and MCP server in one non-root container; sha256-verified artifacts, bearer auth, deterministic inference.

~650 MBof artifacts, cpu only
04 / outcomes

One record type per input, every time.

Strictly validated fields per outcome; general text is a first-class record, not a failure. Pick an outcome to see its shape.

tool_call

Action dispatch, LLM syntax normalization.

catches agent tool invocations, function calls

nameargumentsresult

serves /v1/models/mivia-small-json/extract

record shapeillustrative
{
  "type": "tool_call",
  "name": "calculate_sum",
  "arguments": "{\"num1\":15,\"num2\":30}",
  "result": "…"
}
05 / benchmarks

Measured, then published.

All numbers are measured on frozen, never-trained-on evaluation sets on CPU, and independently re-verified. Every number names its set; nothing on this page was measured on training data.

Accuracy parity with a hosted LLM router at ~60x the speed and zero marginal cost.

Head-to-head: mivia-small-json vs a hosted LLM router

AccuracyFormat errorsLatencyCost
mivia-small-json (CPU, local)99.71%0~3.3 ms p95 (full path)$0
Hosted LLM router (network)97.14%0716 ms p50$0.0081 / 350 rows ($0.042 per 1M input tokens)

Same 350 test prompts on both sides, no tuning on either side. The hosted model is far larger and holds broader world knowledge; on workflow structuring a ~650 MB artifact matches or beats it at ~60x the speed, zero marginal cost, and the data never leaves your box.

06 / use cases

Where it earns its keep.

Eight production patterns, each with a real input and the real output from the shipped artifact, plus the measured surface that backs it.

88.0%public BFCL function-calling set, 161 of 183; the rest abstain

Dispatch tool calls - or ask back, never guess

Every request against your tool catalogue gets a verdict: CALL executes, CLARIFY names the missing parameters as a structured question, ABSTAIN hands the row to the conversational LLM. An underspecified call can never execute.

guard(request, catalogue)
in   "calculate the sum of 15 and 30"
out  {"type": "tool_call", "name": "calculate_sum",
      "arguments": "{\"num1\":15,\"num2\":30}"}

in   "calculate the sum"
out  {"type": "tool_clarification", "tool": "calculate_sum",
      "missing_parameters": ["num1", "num2"],
      "clarification_prompt": "Please provide num1, num2 to use calculate_sum."}

in   "explain quantum entanglement in physics"
out  {"type": "no_tool_call", "reason": "no matching tool"}
07 / honesty guarantees

Built-in honesty guarantees.

A structuring API that guesses is worse than one that asks. The output contract makes honesty mechanical: these are properties of the release, pinned by the test suite, not aspirations.

No fabricated timestamps

If a log line carries no timestamp, the record has none: ts is optional and absent, never invented from the wall clock.

in"GET /health 200 in 4ms"
never"ts": "2025-01-01T…"
alwaysts absent

No padded identifiers

Commit SHAs are the digits the source carried. Nothing is zero-extended into an identifier that only looks authoritative.

in"commit abc12"
never"sha": "abc1200…0"
always"sha": "abc12"

CLARIFY instead of guesses

An underspecified tool request returns a structured clarifying question naming the missing parameters. “Delete the database” can never execute with empty arguments; a deterministic veto sits in front of the decision.

in"delete the database"
nevercall delete({})
alwaysclarify: "which database?"

4xx over wrong-200s

Malformed or pathological input gets an honest 4xx at every serving surface. A crash-shaped payload never becomes a fake success.

inbinary garbage
never200 { … }
always422

Complete, never truncated

Nothing you send is ever cut: every record carries the complete content, bounded only by the request size limit. A too-short identifier is dropped, never padded into one that looks authoritative.

in"ERROR gateway timeout: retries exhausted\n at Gateway.call(Gateway.java:88)"
never"message": "ERROR gateway timeout: retries exhausted"
alwaysevery line, in full

An explicit no-decision

When the selector cannot separate the candidates, it returns a typed no-decision under conformal confidence gating instead of a coin-flip answer - the caller routes the row to rules or a human.

in4 near-identical candidates
neverchoice picked at 26% confidence
alwaysstatus: no-decision

The in / never / always rows sketch the shipped contract; they are illustrative, not a request trace.

08 / interfaces

Interfaces.

post /v1/models/mivia-small-json/extractmcp · mivia_small_json_extract

any text in, a structured record out

// a german incident ticket, answered locally in milliseconds
{
  "text": "Hinweise auf Schwierigkeiten bei der Datenregistrierung"
}
→ { "records": [ { "result": { "type": "issue",
                         "title": "Hinweise auf Schwierigkeiten bei der Datenregistrierung" },
                    "meta": { "valid": true, "routed_by": "model" } } ] }
// any text is a first-class outcome: same surface, same json contract
{
  "text": "Danke, dass du mir letzte Woche geholfen hast!"
}
→ { "result": { "type": "text" },
     "meta": { "valid": true, "routed_by": "model" } }
// what goes in, what comes out
in    text
out   structured records + routing meta

bearer auth · streamable-HTTP MCP at /mcp · single docker image

09 / footprint

Footprint & guarantees.

runtime

version
v1.0
shipped chain
mm12-realworld-r1-s42
hardware
cpu only · no gpu · no network calls
memory
< 2 gb · models load once
pipeline latency (route + extract)
~3.3 ms p95
pipeline latency
< 12 ms p95
dump latency
~11k chars in 25–87 ms
size on disk
~650 mb artifacts · one image

contract

output
valid json or typed clarification
artifacts
int8 · sha256-verified · no pickle
failure mode
honest 4xx, never a wrong 200
guesses
clarify instead, never silent

ops & data

deployment
single non-root container
surfaces
rest + mcp + health
auth
bearer token + host allow-list + per-key metering (opt-in)
disk writes
none by default; opt-in metering stores counters only, never request content
request logs
none

One key. Every mivia api.

sign in