Structured Outputs Test Report

Generated 2026-02-23 17:11 · afm v0.9.4 · Apple M-series · macOS 26

ALL TESTS PASSED
Total Tests
88
Passed
88
Failed
0
Skipped
0
Models
7
Total Time
239.2s

Test Results by Backend / Model

AFM 14/14 passed · 8.8s ALL PASS

StatusTest / PromptTimeDetail / Output
✓ PASS 1.1 Simple object (strict, non-streaming)
▶ Show request payload
0.8s { "capital": "Paris", "name": "France" }
✓ PASS 1.2 Simple object (strict, streaming)
▶ Show request payload
0.5s { "name": "Japan", "capital": "Tokyo" }
✓ PASS 1.3 Array of objects (strict, non-streaming)
▶ Show request payload
1.1s { "colors": [ { "hex": "#FF5733", "name": "FireBrick" }, { "name": "Aqua", "hex": "#00FFFF" }, { "name": "YellowGreen", "hex": "#FFD700" } ] }
✓ PASS 1.4 Array of objects (strict, streaming)
▶ Show request payload
0.9s { "colors": [ { "name": "FireBrick", "hex": "#FF5733" }, { "hex": "#00FF00", "name": "Aqua" } ] }
✓ PASS 1.5 Mixed types (strict, non-streaming)
▶ Show request payload
0.6s { "available": true, "year": 2010, "title": "Inception", "rating": 8.8 }
✓ PASS 1.6 Nested objects (strict, non-streaming)
▶ Show request payload
0.6s { "person": { "name": "Albert Einstein", "address": { "country": "Germany", "city": "Munich" } } }
✓ PASS 1.7 String enum (strict, non-streaming)
▶ Show request payload
0.4s { "confidence": 1, "sentiment": "positive" }
✓ PASS 1.8 Bounded array (strict, non-streaming)
▶ Show request payload
0.5s { "items": [ "Python", "JavaScript", "Java", "C++" ] }
✓ PASS 1.9 Optional properties (strict, non-streaming)
▶ Show request payload
0.3s { "name": "Alice" }
✓ PASS 1.10 Refs and defs (strict, non-streaming)
▶ Show request payload
0.6s { "students": [ { "name": "Alice", "grade": "A" }, { "name": "Bob", "grade": "B+" } ] }
✓ PASS 1.11 Non-strict json_schema (fallback to text)
▶ Show request payload
0.7s Got text response (81 chars)
✓ PASS 1.12 json_object mode (plain text expected)
▶ Show request payload
0.9s Got text response (139 chars)
✓ PASS 1.13 No response_format (plain text regression)
▶ Show request payload
0.3s Got text response (15 chars)
✓ PASS 1.14 Mixed types (strict, streaming)
▶ Show request payload
0.6s { "available": true, "year": 1999, "rating": 9, "title": "The Matrix" }
Section total 8.8s

MLX:Qwen3-30B-A3B-4bit 14/14 passed · 50.0s ALL PASS

StatusTest / PromptTimeDetail / Output
✓ PASS 2.1 Simple object (strict, non-streaming)
▶ Show request payload
1.5s { "name": "France", "capital": "Paris" }
✓ PASS 2.2 Simple object (strict, streaming)
▶ Show request payload
4.9s { "name": "Germany", "capital": "Berlin" }
✓ PASS 2.3 Array of objects (strict, non-streaming)
▶ Show request payload
3.8s { "colors": [ { "name": "Red", "hex": "#FF0000" }, { "name": "Blue", "hex": "
✓ PASS 2.4 Array of objects (strict, streaming)
▶ Show request payload
4.5s { "colors": [ { "name": "Black", "hex": "#000000" }, { "name": "White", "hex": "#FFFFFF" } ] }
✓ PASS 2.5 Mixed types (strict, non-streaming)
▶ Show request payload
3.8s { "title": "Inception", "year": 2010, "rating": 8.8, "available": true }
✓ PASS 2.6 Nested objects (strict, non-streaming)
▶ Show request payload
2.5s { "person": { "name": "Albert Einstein", "address": { "city": "Ulm", "country": "Germany" } } }
✓ PASS 2.7 String enum (strict, non-streaming)
▶ Show request payload
2.4s { "sentiment": "positive", "confidence": 0.9 }
✓ PASS 2.8 Bounded array (strict, non-streaming)
▶ Show request payload
2.0s { "items": [ "Python", "JavaScript", "Java", "C++" ] }
✓ PASS 2.9 Refs and defs (strict, non-streaming)
▶ Show request payload
3.2s { "students": [ { "name": "Alice Johnson", "grade": "A" }, { "name": "Bob Smith", "grade": "B" } ] }
✓ PASS 2.10 Non-strict json_schema
▶ Show request payload
5.1s { "colors": [ { "name": "Red", "hex": "#FF0000" }, { "name": "Blue", "hex": "#0000FF" } ] }
✓ PASS 2.11 json_object mode
▶ Show request payload
2.7s { "animals": [ { "name": "Buddy", "type": "Dog" }, { "name": "Whiskers", "type": "Cat" } ] }
✓ PASS 2.12 No response_format (plain text regression)
▶ Show request payload
1.6s Got text response (72 chars)
✓ PASS 2.13 Nested objects (strict, streaming)
▶ Show request payload
5.1s { "person": { "name": "Marie Curie", "address": { "city": "Warsaw", "country": "Poland" } } }
✓ PASS 2.14 Mixed types (strict, streaming)
▶ Show request payload
6.9s { "title": "The Matrix", "year": 1999, "rating": 8.7, "available": true }
Section total 50.0s

MLX:gpt-oss-20b-MXFP4-Q4 14/14 passed · 51.5s ALL PASS

StatusTest / PromptTimeDetail / Output
✓ PASS 2.1 Simple object (strict, non-streaming)
▶ Show request payload
1.5s { "name": "France", "capital": "Paris" }
✓ PASS 2.2 Simple object (strict, streaming)
▶ Show request payload
5.3s { "name": "Germany", "capital": "Berlin" }
✓ PASS 2.3 Array of objects (strict, non-streaming)
▶ Show request payload
4.8s { "colors": [ { "name": "Red", "hex": "#FF0000" }, { "name": "Blue", "hex": "#0000FF" }, { "name": "Green", "hex": "#008000" } ] }
✓ PASS 2.4 Array of objects (strict, streaming)
▶ Show request payload
3.8s { "colors": [ { "name": "Black", "hex": "#000000" }, { "name": "White", "hex": "#FFFFFF" } ] }
✓ PASS 2.5 Mixed types (strict, non-streaming)
▶ Show request payload
3.7s { "title": "Inception", "year": 2010, "rating": 8.8, "available": true }
✓ PASS 2.6 Nested objects (strict, non-streaming)
▶ Show request payload
3.2s { "person": { "name": "Albert Einstein", "address": { "city": "Ulm", "country": "Germany" } } }
✓ PASS 2.7 String enum (strict, non-streaming)
▶ Show request payload
2.6s { "sentiment": "positive", "confidence": 0.9 }
✓ PASS 2.8 Bounded array (strict, non-streaming)
▶ Show request payload
2.0s { "items": [ "Python", "JavaScript", "Java", "C++" ] }
✓ PASS 2.9 Refs and defs (strict, non-streaming)
▶ Show request payload
2.7s { "students": [ { "name": "Alice Johnson", "grade": "A" }, { "name": "Bob Smith", "grade": "B" } ] }
✓ PASS 2.10 Non-strict json_schema
▶ Show request payload
4.5s { "colors": [ { "name": "Red", "hex": "#FF0000" }, { "name": "Blue", "hex": "#0000FF" } ] }
✓ PASS 2.11 json_object mode
▶ Show request payload
2.6s { "animals": [ { "name": "Buddy", "type": "Dog" }, { "name": "Whiskers", "type": "Cat" } ] }
✓ PASS 2.12 No response_format (plain text regression)
▶ Show request payload
4.0s Got text response (170 chars)
✓ PASS 2.13 Nested objects (strict, streaming)
▶ Show request payload
4.1s { "person": { "name": "Marie Curie", "address": { "city": "Warsaw", "country": "Poland" } } }
✓ PASS 2.14 Mixed types (strict, streaming)
▶ Show request payload
6.7s { "title": "The Matrix", "year": 1999, "rating": 8.7, "available": true }
Section total 51.5s

MLX:gemma-3-4b-it-8bit 14/14 passed · 41.6s ALL PASS

StatusTest / PromptTimeDetail / Output
✓ PASS 2.1 Simple object (strict, non-streaming)
▶ Show request payload
1.4s { "name": "France", "capital": "Paris" }
✓ PASS 2.2 Simple object (strict, streaming)
▶ Show request payload
2.1s { "name": "Germany", "capital": "Berlin" }
✓ PASS 2.3 Array of objects (strict, non-streaming)
▶ Show request payload
4.1s { "colors": [ { "name": "Red", "hex": "#FF0000" }, { "name": "Blue", "hex": "#0000FF" }, { "name": "Green", "hex": "#008000" } ] }
✓ PASS 2.4 Array of objects (strict, streaming)
▶ Show request payload
3.0s { "colors": [ { "name": "Blue", "hex": "#0000FF" }, { "name": "Red", "hex": "#FF0000" } ] }
✓ PASS 2.5 Mixed types (strict, non-streaming)
▶ Show request payload
2.6s { "title": "Inception", "year": 2010, "rating": 8.8, "available": true }
✓ PASS 2.6 Nested objects (strict, non-streaming)
▶ Show request payload
2.1s { "person": { "name": "Albert Einstein", "address": { "city": "Ulm", "country": "Germany" } } }
✓ PASS 2.7 String enum (strict, non-streaming)
▶ Show request payload
2.8s { "sentiment": "positive", "confidence": 0.95 }
✓ PASS 2.8 Bounded array (strict, non-streaming)
▶ Show request payload
2.1s { "items": [ "Python", "JavaScript", "Java", "C++" ] }
✓ PASS 2.9 Refs and defs (strict, non-streaming)
▶ Show request payload
2.2s { "students": [ { "name": "Alice Johnson", "grade": "A" }, { "name": "Bob Smith", "grade": "B" } ] }
✓ PASS 2.10 Non-strict json_schema
▶ Show request payload
5.2s { "colors": [ { "name": "Red", "hex": "#FF0000" }, { "name": "Blue", "hex": "#0000FF" } ] }
✓ PASS 2.11 json_object mode
▶ Show request payload
3.0s { "animals": [ { "name": "Buddy", "type": "Dog" }, { "name": "Whiskers", "type": "Cat" } ] }
✓ PASS 2.12 No response_format (plain text regression)
▶ Show request payload
1.7s Got text response (151 chars)
✓ PASS 2.13 Nested objects (strict, streaming)
▶ Show request payload
5.2s { "person": { "name": "Marie Curie", "address": { "city": "Warsaw", "country": "Poland" } } }
✓ PASS 2.14 Mixed types (strict, streaming)
▶ Show request payload
4.1s { "title": "The Matrix", "year": 1999, "rating": 8.7, "available": true }
Section total 41.6s

MLX:Qwen3-Coder-Next-4bit 14/14 passed · 47.1s ALL PASS

StatusTest / PromptTimeDetail / Output
✓ PASS 2.1 Simple object (strict, non-streaming)
▶ Show request payload
1.6s { "name": "France", "capital": "Paris" }
✓ PASS 2.2 Simple object (strict, streaming)
▶ Show request payload
2.2s { "name": "Germany", "capital": "Berlin" }
✓ PASS 2.3 Array of objects (strict, non-streaming)
▶ Show request payload
4.2s { "colors": [ { "name": "Black", "hex": "#000000" }, { "name": "White", "hex": "#FFFFFF" }, { "name": "Red", "hex": "#FF0000" } ] }
✓ PASS 2.4 Array of objects (strict, streaming)
▶ Show request payload
3.8s { "colors": [ { "name": "Black", "hex": "#000000" }, { "name": "White", "hex": "#FFFFFF" } ] }
✓ PASS 2.5 Mixed types (strict, non-streaming)
▶ Show request payload
5.1s { "title": "Inception", "year": 2010, "rating": 8.8, "available": true }
✓ PASS 2.6 Nested objects (strict, non-streaming)
▶ Show request payload
2.8s { "person": { "name": "Albert Einstein", "address": { "city": "Ulm", "country": "Germany" } } }
✓ PASS 2.7 String enum (strict, non-streaming)
▶ Show request payload
2.5s { "sentiment": "positive", "confidence": 0.9 }
✓ PASS 2.8 Bounded array (strict, non-streaming)
▶ Show request payload
1.8s { "items": [ "JavaScript", "Python", "Java", "C++" ] }
✓ PASS 2.9 Refs and defs (strict, non-streaming)
▶ Show request payload
2.1s { "students": [ { "name": "Alice", "grade": "A" }, { "name": "Bob", "grade": "B" } ] }
✓ PASS 2.10 Non-strict json_schema
▶ Show request payload
7.1s { "colors": [ { "name": "red", "hex": "#FF0000" }, { "name": "blue", "hex": "#0000FF" } ] }
✓ PASS 2.11 json_object mode
▶ Show request payload
2.2s { "animals": [ { "name": "Buddy", "type": "Dog" }, { "name": "Whiskers", "type": "Cat" } ] }
✓ PASS 2.12 No response_format (plain text regression)
▶ Show request payload
1.6s Got text response (156 chars)
✓ PASS 2.13 Nested objects (strict, streaming)
▶ Show request payload
5.2s { "person": { "name": "Marie Curie", "address": { "city": "Warsaw", "country": "Poland" } } }
✓ PASS 2.14 Mixed types (strict, streaming)
▶ Show request payload
4.9s { "title": "The Matrix", "year": 1999, "rating": 8.7, "available": true }
Section total 47.1s

CLI:AFM 9/9 passed · 4.7s ALL PASS

StatusTest / PromptTimeDetail / Output
✓ PASS 3.1 --guided-json simple object
▶ Show request payload
1.1s { "capital": "Paris", "name": "France" }
✓ PASS 3.2 --guided-json array of objects
▶ Show request payload
1.0s { "colors": [ { "hex": "#FF5733", "name": "Hot Pink" }, { "name": "Deep Sky Blue", "hex": "#2196F3" } ] }
✓ PASS 3.3 --guided-json mixed types
▶ Show request payload
0.6s { "available": true, "title": "Inception", "rating": 8.8, "year": 2010 }
✓ PASS 3.4 --guided-json nested objects
▶ Show request payload
0.6s { "address": { "country": "Germany", "city": "Munich" }, "name": "Albert Einstein" }
✓ PASS 3.5 --guided-json string enum
▶ Show request payload
0.4s { "sentiment": "positive", "confidence": 100 }
✓ PASS 3.6 --guided-json refs and defs
▶ Show request payload
0.6s { "students": [ { "grade": "A", "name": "Alice" }, { "grade": "B+", "name": "Bob" } ] }
✓ PASS 3.7 Plain text (no --guided-json, regression)
▶ Show request payload
0.3s Got text response (1 chars)
✓ PASS 3.8 Invalid --guided-json (error)
▶ Show request payload
0.0s Exit code 1: Error: The operation couldn’t be completed. (ArgumentParser.ValidationError error 1.)
✓ PASS 3.9 --guided-json with array schema (error)
▶ Show request payload
0.1s Exit code 1: Error: The operation couldn’t be completed. (ArgumentParser.ValidationError error 1.)
Section total 4.7s

CLI:MLX:Qwen3-30B-A3B-4bit 9/9 passed · 35.5s ALL PASS

StatusTest / PromptTimeDetail / Output
✓ PASS 4.1 --guided-json simple object
▶ Show request payload
4.6s { "name": "France", "capital": "Paris" }
✓ PASS 4.2 --guided-json array of objects
▶ Show request payload
3.9s { "colors": [ { "name": "Red", "hex": "#FF0000" }, { "name": "Blue", "hex": "#0000FF" } ] }
✓ PASS 4.3 --guided-json mixed types
▶ Show request payload
5.7s { "title": "Inception", "year": 2010, "rating": 8.8, "available": true }
✓ PASS 4.4 --guided-json nested objects
▶ Show request payload
7.7s { "name": "Albert Einstein", "address": { "city": "Ulm", "country": "Germany" } }
✓ PASS 4.5 --guided-json string enum
▶ Show request payload
3.5s { "sentiment": "positive", "confidence": 0.95 }
✓ PASS 4.6 --guided-json refs and defs
▶ Show request payload
4.8s { "students": [ { "name": "Alice Johnson", "grade": "A" }, { "name": "Bob Smith", "grade": "B" } ] }
✓ PASS 4.7 Plain text (no --guided-json, regression)
▶ Show request payload
2.8s Got text response (1265 chars)
✓ PASS 4.8 Invalid --guided-json (error)
▶ Show request payload
1.3s Exit code 1: MLX model: mlx-community/Qwen3-30B-A3B-4bit Loading MLX model: mlx-community/Qwen3-30B-A3B-4bit [/
✓ PASS 4.9 --guided-json with array schema (error)
▶ Show request payload
1.2s Exit code 1: MLX model: mlx-community/Qwen3-30B-A3B-4bit Loading MLX model: mlx-community/Qwen3-30B-A3B-4bit [/
Section total 35.5s