@nqbao/pi-json-schema
v0.1.1
Published
Pi extension for validating and writing structured JSON output against a JSON Schema.
Downloads
403
Readme
@nqbao/pi-json-schema
@nqbao/pi-json-schema is a Pi extension that enforces structured JSON output against a caller-provided JSON Schema.
It registers a json_output tool, validates the final payload with ajv, and writes the validated JSON to a file. If the tool is not called, it can optionally attempt one fallback extraction pass from the last assistant message.
Install
Install the extension through Pi:
pi install npm:@nqbao/pi-json-schemaUsage
After installation, the extension is available automatically:
pi -p "Extract company name and revenue from: Acme Corp reported 5 million dollars in revenue last quarter" \
--json-schema '{"type":"object","properties":{"company":{"type":"string"},"revenue":{"type":"number"}},"required":["company","revenue"]}' \
--json-output /tmp/result.jsonExpected output file:
{
"company": "Acme Corp",
"revenue": 5000000
}Flags
--json-schema: JSON Schema string that the final output must satisfy.--json-output: file path where validated JSON will be written.--json-fallback: fallback behavior whenjson_outputwas not called.
Fallback modes:
best-effort: try one follow-up extraction pass with the configured model. This is the default.force: same asbest-effort, but forces the follow-up model call to choosejson_output.none: do not attempt fallback; fail if the final assistant message does not contain valid JSON.
Behavior
- If
--json-outputis not set, the extension stays inactive. - If
--json-outputis set,--json-schemais required. - The agent is expected to call
json_outputas its last action. - If the tool was not called, the extension first checks whether the last assistant message already contains valid JSON.
- If there is no assistant message at all, the extension does nothing during shutdown and leaves the upstream run failure unchanged.
Local Development
When working in this repo directly, load the extension from the local file instead of the installed package name:
pi -p "Extract company name and revenue from: Acme Corp reported 5 million dollars in revenue last quarter" \
--extension ./index.ts \
--json-schema '{"type":"object","properties":{"company":{"type":"string"},"revenue":{"type":"number"}},"required":["company","revenue"]}' \
--json-output /tmp/result.jsonInstall dependencies:
npm installRun the existing end-to-end test harness:
bash test/run.shTest prerequisites:
pimust be installed and available onPATH.- model/API credentials must already be configured for Pi.
jqmust be installed.
