llmx
Utilities for working with LLM outputs.
Currently this crate focuses on turning "fuzzy" JSON-like text (common in LLM responses) into
real serde_json::Value.
Features
- Fuzzy JSON parsing: Handle markdown code fences, single-quoted strings, unquoted keys, Python literals (
True/False/None), trailing commas - Partial JSON parsing: Auto-complete incomplete JSON structures (useful for streaming)
- Streaming parser: Accumulate chunks and parse at any point
Rust Usage
use parse_fuzzy_json;
let v = parse_fuzzy_json.unwrap;
assert_eq!;
assert!;
Streaming JSON Parsing
use StreamingJsonParser;
let mut parser = new;
// Simulate streaming input
parser.push;
let v = parser.parse_partial.unwrap;
assert!;
parser.push;
let v = parser.parse_partial.unwrap;
assert_eq!;
assert_eq!;
TypeScript/JavaScript Usage (WebAssembly)
Install via npm:
API
parseFuzzyJson(input: string): any
Parse fuzzy JSON-like text into a JavaScript value. Handles:
- Markdown code fences (
```json ... ```) - Single-quoted strings
- Unquoted object keys
- Python literals (
True/False/None) - Trailing commas
import { parseFuzzyJson } from "llmx";
const value = parseFuzzyJson("```json\n{'a': True, b: None}\n```");
console.log(value); // { a: true, b: null }
parsePartialJson(input: string): any
Parse partial/incomplete JSON, automatically completing unclosed structures. Useful for streaming LLM outputs.
import { parsePartialJson } from "llmx";
const value = parsePartialJson('{"name": "Alice", "age":');
console.log(value); // { name: "Alice", age: null }
parsePartialJsonWithStatus(input: string): { value: any; isComplete: boolean }
Parse partial JSON and return both the value and completion status.
import { parsePartialJsonWithStatus } from "llmx";
const result = parsePartialJsonWithStatus('{"name": "Alice"}');
console.log(result.value); // { name: "Alice" }
console.log(result.isComplete); // true
const partial = parsePartialJsonWithStatus('{"name": "Ali');
console.log(partial.value); // { name: "Ali" }
console.log(partial.isComplete); // false
StreamingJsonParser class
Streaming JSON parser for incremental LLM output parsing.
import { StreamingJsonParser } from "llmx";
const parser = new StreamingJsonParser();
// Simulate streaming input
parser.push('{"name":');
console.log(parser.parsePartial()); // { name: null }
parser.push('"Alice","age":30}');
console.log(parser.parsePartial()); // { name: "Alice", age: 30 }
// Check completion status
const { value, isComplete } = parser.parsePartialWithStatus();
console.log(isComplete); // true
// Access buffer contents
console.log(parser.buffer()); // '{"name":"Alice","age":30}'
// Clear for reuse
parser.clear();
Methods
| Method | Description |
|---|---|
new StreamingJsonParser() |
Create a new parser instance |
push(chunk: string) |
Append a chunk of data to the buffer |
buffer(): string |
Get the current buffer contents |
clear() |
Clear the parser buffer |
parsePartial(): any |
Parse buffer with auto-completion |
parsePartialWithStatus(): { value: any; isComplete: boolean } |
Parse with completion status |
parseComplete(): any |
Parse as complete JSON (no auto-completion, throws if incomplete) |