@jini-ai/agent-plugins 0.6.17 → 0.6.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -1
- package/NOTICE +14 -0
- package/README.md +35 -14
- package/charts-echarts/plugin.json +39 -0
- package/charts-echarts/skills/charts-echarts/SKILL.md +110 -0
- package/charts-recharts/plugin.json +32 -0
- package/charts-recharts/skills/charts-recharts/SKILL.md +108 -0
- package/cloudflare/NOTES.md +16 -0
- package/cloudflare/form-destinations/cloudflare-d1.mjs +9 -0
- package/cloudflare/lib/api.mjs +96 -0
- package/cloudflare/lib/assets.mjs +65 -0
- package/cloudflare/lib/dns.mjs +32 -0
- package/cloudflare/lib/domain-inventory.mjs +61 -0
- package/cloudflare/lib/domain-status.mjs +48 -0
- package/cloudflare/lib/domains.mjs +95 -0
- package/cloudflare/lib/forms.mjs +254 -0
- package/cloudflare/lib/pages-upload.mjs +51 -0
- package/cloudflare/lib/target.mjs +165 -0
- package/cloudflare/lib/workers-upload.mjs +48 -0
- package/cloudflare/lib/zones.mjs +25 -0
- package/cloudflare/mcp.json +4 -0
- package/cloudflare/plugin.json +96 -0
- package/cloudflare/skills/cloudflare/SKILL.md +57 -0
- package/cloudflare/skills/cloudflare/references/domains.md +31 -0
- package/cloudflare/skills/cloudflare/references/pages.md +18 -0
- package/cloudflare/skills/cloudflare/references/permissions.md +29 -0
- package/cloudflare/skills/cloudflare/references/troubleshooting.md +20 -0
- package/cloudflare/skills/cloudflare/references/workers.md +42 -0
- package/cloudflare/targets/cloudflare-pages.mjs +12 -0
- package/cloudflare/targets/cloudflare-workers.mjs +17 -0
- package/cloudflare/tovu-consent.json +6 -0
- package/cloudflare/tovu-deploy-targets.json +630 -0
- package/cloudflare/tovu-form-destinations.json +12 -0
- package/cloudflare/worker/forms-receiver.mjs +249 -0
- package/composio/mcp.json +10 -0
- package/composio/plugin.json +68 -0
- package/composio/skills/composio/SKILL.md +85 -0
- package/dist/core/identity-namespace.d.ts +12 -0
- package/dist/core/identity-namespace.js +20 -0
- package/dist/folder-zip-node.js +29 -7
- package/dist/lifecycle/bundled-digests.js +4 -3
- package/dist/lifecycle/install.d.ts +7 -0
- package/dist/lifecycle/install.js +45 -3
- package/dist/lifecycle/manifest.d.ts +2 -2
- package/dist/lifecycle/manifest.js +5 -3
- package/dist/lifecycle/node.js +2 -0
- package/dist/lifecycle/persistent-state.js +1 -1
- package/dist/lifecycle/ports.d.ts +8 -0
- package/dist/lifecycle/seed-bundled.js +4 -1
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.js +3 -2
- package/fly/deploy-configs/fly.mjs +115 -0
- package/fly/deploy-ops/fly.mjs +102 -0
- package/fly/mcp.json +4 -0
- package/fly/plugin.json +81 -0
- package/fly/scripts/render-deploy-workflow.mjs +150 -0
- package/fly/skills/fly/SKILL.md +43 -0
- package/fly/skills/fly/references/fly-deploy.template.yml +117 -0
- package/fly/skills/fly/references/fly.template.toml +81 -0
- package/fly/tovu-credential-schemes.json +11 -0
- package/fly/tovu-deploy-configs.json +21 -0
- package/fly/tovu-deploy-ops.json +14 -0
- package/github/deploy-ops/github-actions.mjs +164 -0
- package/github/deployments/github.mjs +415 -0
- package/github/mcp.json +4 -0
- package/github/plugin.json +105 -0
- package/github/skills/github/SKILL.md +249 -0
- package/github/skills/github/references/actions.md +224 -0
- package/github/skills/github/references/auth-and-tokens.md +140 -0
- package/github/skills/github/references/repo-files.md +135 -0
- package/github/skills/github/references/site-backup.md +159 -0
- package/github/skills/github/references/source-control.md +123 -0
- package/github/source-control/backup-push.mjs +242 -0
- package/github/source-control/commit-site.mjs +459 -0
- package/github/source-control/github.mjs +93 -0
- package/github/source-control/write-files.mjs +468 -0
- package/github/tovu-deploy-ops.json +13 -0
- package/github/tovu-source-control.json +117 -0
- package/github-pages/NOTES.md +19 -0
- package/github-pages/mcp.json +4 -0
- package/github-pages/plugin.json +48 -0
- package/github-pages/skills/github-pages/SKILL.md +44 -0
- package/github-pages/targets/github-pages.mjs +543 -0
- package/github-pages/tovu-deploy-targets.json +327 -0
- package/google-login/exports/google-g.svg +1 -0
- package/google-login/exports/sign-in-button.css +68 -0
- package/google-login/exports/sign-in-button.html +4 -0
- package/google-login/mcp.json +4 -0
- package/google-login/plugin.json +59 -0
- package/google-login/skills/google-login/SKILL.md +96 -0
- package/google-login/tovu-login-providers.json +21 -0
- package/google-workspace/README.md +132 -0
- package/google-workspace/form-destinations/README.md +87 -0
- package/google-workspace/form-destinations/dedupe.mjs +43 -0
- package/google-workspace/form-destinations/delivery-result.mjs +69 -0
- package/google-workspace/form-destinations/mapping.mjs +152 -0
- package/google-workspace/form-destinations/sheets.mjs +202 -0
- package/google-workspace/lib/auth.mjs +81 -0
- package/google-workspace/lib/drive-files.mjs +54 -0
- package/google-workspace/lib/form-destination-settings.mjs +72 -0
- package/google-workspace/lib/http.mjs +168 -0
- package/google-workspace/lib/picker-flow.mjs +171 -0
- package/google-workspace/lib/picker-selection.mjs +107 -0
- package/google-workspace/lib/product-state.mjs +93 -0
- package/google-workspace/lib/request-policy.mjs +163 -0
- package/google-workspace/lib/sheets-a1.mjs +79 -0
- package/google-workspace/lib/sheets-admin-csv.mjs +82 -0
- package/google-workspace/lib/sheets-admin-request-kinds.mjs +183 -0
- package/google-workspace/lib/sheets-client.mjs +286 -0
- package/google-workspace/lib/surface-actions.mjs +107 -0
- package/google-workspace/mcp.json +4 -0
- package/google-workspace/plugin.json +77 -0
- package/google-workspace/products.json +12 -0
- package/google-workspace/skills/google-workspace/SKILL.md +82 -0
- package/google-workspace/skills/google-workspace/references/connection.md +102 -0
- package/google-workspace/skills/google-workspace/references/form-delivery.md +50 -0
- package/google-workspace/skills/google-workspace/references/sheets.md +149 -0
- package/google-workspace/skills/google-workspace/references/troubleshooting.md +31 -0
- package/google-workspace/tools/account-info.mjs +18 -0
- package/google-workspace/tools/sheets/README.md +54 -0
- package/google-workspace/tools/sheets/copy-tab.mjs +23 -0
- package/google-workspace/tools/sheets/copy.mjs +23 -0
- package/google-workspace/tools/sheets/create.mjs +35 -0
- package/google-workspace/tools/sheets/find-replace.mjs +38 -0
- package/google-workspace/tools/sheets/find.mjs +52 -0
- package/google-workspace/tools/sheets/get-by-data-filter.mjs +23 -0
- package/google-workspace/tools/sheets/get.mjs +22 -0
- package/google-workspace/tools/sheets/values-append.mjs +27 -0
- package/google-workspace/tools/sheets/values-batch-clear.mjs +20 -0
- package/google-workspace/tools/sheets/values-batch-get.mjs +20 -0
- package/google-workspace/tools/sheets/values-batch-update.mjs +29 -0
- package/google-workspace/tools/sheets/values-by-data-filter.mjs +62 -0
- package/google-workspace/tools/sheets/values-clear.mjs +20 -0
- package/google-workspace/tools/sheets/values-get.mjs +21 -0
- package/google-workspace/tools/sheets/values-update.mjs +26 -0
- package/google-workspace/tools/sheets-admin/README.md +45 -0
- package/google-workspace/tools/sheets-admin/basic-filter.mjs +32 -0
- package/google-workspace/tools/sheets-admin/batch-update.mjs +25 -0
- package/google-workspace/tools/sheets-admin/developer-metadata.mjs +28 -0
- package/google-workspace/tools/sheets-admin/export-csv.mjs +67 -0
- package/google-workspace/tools/sheets-admin/filter-views.mjs +38 -0
- package/google-workspace/tools/sheets-admin/format.mjs +70 -0
- package/google-workspace/tools/sheets-admin/named-ranges.mjs +42 -0
- package/google-workspace/tools/sheets-admin/open-existing.mjs +34 -0
- package/google-workspace/tools/sheets-admin/protected-ranges-get.mjs +18 -0
- package/google-workspace/tools/sheets-admin/sort.mjs +18 -0
- package/google-workspace/tools/sheets-admin/tab-modify.mjs +36 -0
- package/google-workspace/tovu-admin-surfaces.json +63 -0
- package/google-workspace/tovu-agent-tools.json +1178 -0
- package/google-workspace/tovu-connections.json +35 -0
- package/google-workspace/tovu-form-destinations.json +10 -0
- package/google-workspace/ui/README.md +73 -0
- package/google-workspace/ui/connection-panel.handler.mjs +167 -0
- package/google-workspace/ui/connection-panel.html +17 -0
- package/google-workspace/ui/connection-panel.mjs +189 -0
- package/google-workspace/ui/connection-view.mjs +120 -0
- package/google-workspace/ui/destination-panel.handler.mjs +106 -0
- package/google-workspace/ui/destination-panel.html +17 -0
- package/google-workspace/ui/destination-panel.mjs +150 -0
- package/google-workspace/ui/dom.mjs +140 -0
- package/google-workspace/ui/panel.css +170 -0
- package/google-workspace/ui/picker-flow.mjs +87 -0
- package/google-workspace/ui/picker-view.mjs +44 -0
- package/google-workspace/ui/picker.handler.mjs +56 -0
- package/google-workspace/ui/picker.html +17 -0
- package/google-workspace/ui/picker.mjs +88 -0
- package/google-workspace/ui/surface-client.mjs +227 -0
- package/higgsfield-media/mcp.json +9 -0
- package/higgsfield-media/plugin.json +109 -0
- package/higgsfield-media/skills/higgsfield-media/SKILL.md +325 -0
- package/higgsfield-media/skills/higgsfield-media/references/failure-modes.md +116 -0
- package/higgsfield-media/skills/higgsfield-media/references/models-and-plan-gates.md +142 -0
- package/jev/mcp.json +4 -0
- package/jev/plugin.json +44 -0
- package/jev/skills/jev/SKILL.md +308 -0
- package/jev/skills/jev/references/cookbooks.md +197 -0
- package/jev/skills/jev/references/jaggedness.md +135 -0
- package/jev/skills/jev/references/javascript-sdk.md +146 -0
- package/jev/skills/jev/references/patterns.md +123 -0
- package/jev/skills/jev/references/primitives-reference.md +187 -0
- package/langfuse/plugin.json +22 -0
- package/meilisearch/mcp.json +4 -0
- package/meilisearch/plugin.json +54 -0
- package/meilisearch/providers/meilisearch.mjs +651 -0
- package/meilisearch/skills/meilisearch/SKILL.md +43 -0
- package/meilisearch/tovu-search-providers.json +10 -0
- package/netlify/NOTES.md +13 -0
- package/netlify/mcp.json +4 -0
- package/netlify/plugin.json +47 -0
- package/netlify/skills/netlify/SKILL.md +39 -0
- package/netlify/targets/netlify.mjs +384 -0
- package/netlify/tovu-consent.json +6 -0
- package/netlify/tovu-deploy-targets.json +163 -0
- package/opentelemetry/mcp.json +4 -0
- package/opentelemetry/plugin.json +52 -0
- package/opentelemetry/skills/opentelemetry/SKILL.md +39 -0
- package/package.json +161 -6
- package/posthog/mcp.json +4 -0
- package/posthog/plugin.json +46 -0
- package/posthog/skills/posthog/SKILL.md +36 -0
- package/railway/deploy-configs/railway.mjs +135 -0
- package/railway/deploy-ops/railway.mjs +167 -0
- package/railway/mcp.json +4 -0
- package/railway/plugin.json +45 -0
- package/railway/skills/railway/SKILL.md +66 -0
- package/railway/tovu-deploy-configs.json +16 -0
- package/railway/tovu-deploy-ops.json +11 -0
- package/render/deploy-configs/render.mjs +141 -0
- package/render/deploy-ops/render.mjs +152 -0
- package/render/mcp.json +4 -0
- package/render/plugin.json +47 -0
- package/render/skills/render/SKILL.md +63 -0
- package/render/tovu-deploy-configs.json +16 -0
- package/render/tovu-deploy-ops.json +11 -0
- package/resend/NOTES.md +52 -0
- package/resend/adapters/resend.mjs +161 -0
- package/resend/lib/domains.mjs +137 -0
- package/resend/lib/errors.mjs +25 -0
- package/resend/lib/feedback.mjs +118 -0
- package/resend/mcp.json +13 -0
- package/resend/plugin.json +192 -0
- package/resend/skills/resend/SKILL.md +107 -0
- package/resend/tovu-mail-adapters.json +22 -0
- package/s3-compatible/NOTES.md +11 -0
- package/s3-compatible/mcp.json +4 -0
- package/s3-compatible/object-stores/s3-compatible.mjs +287 -0
- package/s3-compatible/plugin.json +56 -0
- package/s3-compatible/skills/s3-compatible/SKILL.md +39 -0
- package/s3-compatible/targets/s3-compatible.mjs +1054 -0
- package/s3-compatible/tovu-deploy-targets.json +432 -0
- package/s3-compatible/tovu-object-stores.json +29 -0
- package/sentry/mcp.json +4 -0
- package/sentry/plugin.json +49 -0
- package/sentry/skills/sentry/SKILL.md +34 -0
- package/shopify/mcp.json +4 -0
- package/shopify/plugin.json +22 -0
- package/shopify/skills/shopify/SKILL.md +103 -0
- package/shopify/skills/shopify/references/catalog-sync.md +74 -0
- package/shopify/skills/shopify/references/domains.md +26 -0
- package/shopify/skills/shopify/references/live-storefront.md +34 -0
- package/shopify/skills/shopify/references/storefront-snippets.md +21 -0
- package/site-compliance/mcp.json +4 -0
- package/site-compliance/plugin.json +34 -0
- package/site-compliance/skills/site-compliance/SKILL.md +220 -0
- package/site-compliance/skills/site-compliance/references/ccpa-cpra.md +115 -0
- package/site-compliance/skills/site-compliance/references/gdpr-eu-uk.md +143 -0
- package/site-compliance/skills/site-compliance/references/wcag-2-2.md +129 -0
- package/site-import/mcp.json +4 -0
- package/site-import/plugin.json +41 -0
- package/site-import/skills/site-import/SKILL.md +232 -0
- package/site-import/skills/site-import/references/content-mapping.md +166 -0
- package/site-import/skills/site-import/references/discovery-and-classification.md +117 -0
- package/site-import/skills/site-import/references/theme-extraction.md +34 -0
- package/slide-design/com.anthropic.claude-code/hooks/hooks.json +4 -0
- package/slide-design/mcp.json +4 -0
- package/slide-design/plugin.json +26 -0
- package/slide-design/skills/slide-design/SKILL.md +103 -0
- package/slide-design/skills/slide-design/references/charts-and-exhibits.md +100 -0
- package/slide-design/skills/slide-design/references/html-deck.md +175 -0
- package/slide-design/skills/slide-design/references/layout-and-style.md +131 -0
- package/slide-design/skills/slide-design/references/review.md +93 -0
- package/slide-design/skills/slide-design/references/storyline.md +118 -0
- package/stripe/plugin.json +22 -0
- package/supabase/mcp.json +26 -0
- package/supabase/plugin.json +78 -0
- package/supabase/skills/supabase/SKILL.md +169 -0
- package/supabase/skills/supabase/references/failure-modes.md +101 -0
- package/ui-ux-design/CHANGELOG.md +28 -0
- package/ui-ux-design/LICENSE +201 -0
- package/ui-ux-design/NOTICE +14 -0
- package/ui-ux-design/README.md +62 -0
- package/ui-ux-design/com.anthropic.claude-code/hooks/hooks.json +4 -0
- package/ui-ux-design/mcp.json +4 -0
- package/ui-ux-design/plugin.json +26 -0
- package/ui-ux-design/skills/frontend-accessibility/SKILL.md +60 -0
- package/ui-ux-design/skills/gstack-design/SKILL.md +53 -0
- package/ui-ux-design/skills/gstack-design/references/consultation.md +30 -0
- package/ui-ux-design/skills/gstack-design/references/html.md +29 -0
- package/ui-ux-design/skills/gstack-design/references/review.md +28 -0
- package/ui-ux-design/skills/gstack-design/references/shotgun.md +33 -0
- package/ui-ux-design/skills/gstack-design/references/upstream-notes.md +23 -0
- package/ui-ux-design/skills/interface-design/ORIGINAL.md +16 -0
- package/ui-ux-design/skills/interface-design/SKILL.md +41 -0
- package/ui-ux-design/skills/interface-design/references/commands/audit.md +40 -0
- package/ui-ux-design/skills/interface-design/references/commands/critique.md +21 -0
- package/ui-ux-design/skills/interface-design/references/commands/extract.md +34 -0
- package/ui-ux-design/skills/interface-design/references/commands/init.md +31 -0
- package/ui-ux-design/skills/interface-design/references/commands/status.md +22 -0
- package/ui-ux-design/skills/interface-design/references/examples/system-precision.md +29 -0
- package/ui-ux-design/skills/interface-design/references/examples/system-warmth.md +29 -0
- package/ui-ux-design/skills/interface-design/references/system-template.md +57 -0
- package/ui-ux-design/skills/shadcn-ui/README.md +244 -0
- package/ui-ux-design/skills/shadcn-ui/SKILL.md +333 -0
- package/ui-ux-design/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
- package/ui-ux-design/skills/shadcn-ui/examples/data-table.tsx +313 -0
- package/ui-ux-design/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
- package/ui-ux-design/skills/shadcn-ui/resources/component-catalog.md +481 -0
- package/ui-ux-design/skills/shadcn-ui/resources/customization-guide.md +516 -0
- package/ui-ux-design/skills/shadcn-ui/resources/migration-guide.md +463 -0
- package/ui-ux-design/skills/shadcn-ui/resources/setup-guide.md +412 -0
- package/ui-ux-design/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
- package/ui-ux-design/skills/ui-ux-design/SKILL.md +171 -0
- package/ui-ux-design/skills/ui-ux-design/references/brand-and-voice.md +78 -0
- package/ui-ux-design/skills/ui-ux-design/references/chrome-mobile-test-matrix.md +137 -0
- package/ui-ux-design/skills/ui-ux-design/references/components-and-states.md +112 -0
- package/ui-ux-design/skills/ui-ux-design/references/delight-and-motion.md +54 -0
- package/ui-ux-design/skills/ui-ux-design/references/foundations.md +145 -0
- package/ui-ux-design/skills/ui-ux-design/references/inclusive-ai-imagery.md +57 -0
- package/ui-ux-design/skills/ui-ux-design/references/kole-jain-uiux-concepts.md +104 -0
- package/ui-ux-design/skills/ui-ux-design/references/kuinetic-reference.md +184 -0
- package/ui-ux-design/skills/ui-ux-design/references/openai-frontend-skill.md +139 -0
- package/ui-ux-design/skills/ui-ux-design/references/premium-ui.md +55 -0
- package/ui-ux-design/skills/ui-ux-design/references/research-and-validation.md +88 -0
- package/ui-ux-design/skills/ui-ux-design/references/sam-crawford-premium-websites.md +103 -0
- package/ui-ux-design/skills/ui-ux-design/references/self-made-web-designer-core-skills.md +119 -0
- package/ui-ux-design/skills/ui-ux-design/references/ui-animation.md +173 -0
- package/ui-ux-design/skills/ui-ux-design/references/ui-loop.md +234 -0
- package/ui-ux-design/skills/ui-ux-design/references/visual-storytelling.md +54 -0
- package/ui-ux-design/skills/vercel-web-design-guidelines/SKILL.md +39 -0
- package/ui-ux-design/skills/web-compliance/SKILL.md +134 -0
- package/ui-ux-design/skills/web-compliance/references/audit-evidence.md +59 -0
- package/vercel/NOTES.md +23 -0
- package/vercel/mcp.json +4 -0
- package/vercel/object-stores/vercel-blob.mjs +147 -0
- package/vercel/plugin.json +47 -0
- package/vercel/skills/vercel/SKILL.md +48 -0
- package/vercel/targets/vercel.mjs +586 -0
- package/vercel/tovu-consent.json +6 -0
- package/vercel/tovu-deploy-targets.json +219 -0
- package/vercel/tovu-object-stores.json +10 -0
- package/wordpress/NOTES.md +33 -0
- package/wordpress/plugin.json +30 -0
- package/wordpress/skills/wordpress/SKILL.md +43 -0
- package/wordpress/skills/wordpress/references/free-site-redirect.md +46 -0
- package/wordpress/skills/wordpress/references/subdomain.md +66 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jev
|
|
3
|
+
description: Design and write code that calls Jev, TypeSafe's System One model — a fast, non-generative model that turns state plus a typed Choice/Score/Noul question into a typed answer with a calibrated probability distribution. Use this for classification, routing, scoring, ranking, extraction-by-selection, and confidence-gated automation; not for generating prose. Covers the three primitives' exact request/response shapes, confidence, the documented patterns, known jev-1.13 limitations, and the HTTP API / JavaScript SDK. This plugin declares no MCP server — nothing here lets the assistant call Jev directly in chat.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Jev (TypeSafe System One)
|
|
7
|
+
|
|
8
|
+
## The one thing to say before anything else
|
|
9
|
+
|
|
10
|
+
**This plugin has no MCP server.** `mcp.json` declares `"mcpServers": {}` on purpose. Jev has no
|
|
11
|
+
official MCP server, and TypeSafe's docs index lists no MCP integration. There
|
|
12
|
+
is no `mcp__jev__*` tool, and enabling this plugin does not let the assistant call the Jev API
|
|
13
|
+
during a chat turn. What this skill is for: **helping design and write code** — a host product feature, a
|
|
14
|
+
script, a separate service — that calls Jev itself, over plain HTTP or the JavaScript SDK. If an
|
|
15
|
+
operator asks "can you check with Jev right now," the honest answer is no, not yet; what you can do
|
|
16
|
+
is write the code that will.
|
|
17
|
+
|
|
18
|
+
**The API key goes in `TYPESAFE_API_KEY`, never in chat.** That's the env var TypeSafe's SDKs read
|
|
19
|
+
by default. The JS SDK also accepts an explicit `new TypeSafeClient({ apiKey })`, and that value takes
|
|
20
|
+
precedence over the env var, so a key loaded from a secret store works too. Whoever sets up the
|
|
21
|
+
integration puts the key in the environment or a secret store, the same way any other API credential
|
|
22
|
+
belongs in this codebase. Never ask for it in chat, never paste one into code you write, and never
|
|
23
|
+
echo one back if a user pastes it anyway. Tell them to treat it as compromised and rotate it at
|
|
24
|
+
TypeSafe's dashboard (`console.typesafe.ai/keys`).
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## What Jev is
|
|
29
|
+
|
|
30
|
+
Jev is TypeSafe's flagship model and the first "System One" model: instead of generating text, it
|
|
31
|
+
takes a **state** (the content to reason about — a string, JSON object, or array of text) and one or
|
|
32
|
+
more typed **questions**, and returns a typed **answer** per question with a calibrated probability
|
|
33
|
+
distribution. All questions in one request are evaluated in parallel, independently, against the
|
|
34
|
+
same state — asking more questions barely changes response time. It is served at one HTTP endpoint,
|
|
35
|
+
`POST https://api.typesafe.ai/v1/systemone`, and there are official Python and JavaScript SDKs.
|
|
36
|
+
Jev currently accepts **text input only** — no images, audio, or video — and its primary training
|
|
37
|
+
language is English; other languages (including CJK scripts) are accepted but currently less
|
|
38
|
+
accurate.
|
|
39
|
+
|
|
40
|
+
## When Jev fits
|
|
41
|
+
|
|
42
|
+
Jev is for judgments with a **bounded, structured answer space** over content you hand it directly:
|
|
43
|
+
|
|
44
|
+
- **Classification / routing** — which team, which intent, which handler should this go to (Choice).
|
|
45
|
+
- **Scoring / rubrics** — how severe, how frustrated, how relevant, on a rubric you define (Score).
|
|
46
|
+
- **Yes/no gating** — is this urgent, does this need a human, does this contain X (Noul).
|
|
47
|
+
- **Ranking / re-ranking** — score each candidate independently, sort by the returned probability.
|
|
48
|
+
- **Extraction by selection** — find candidates with code (regex, retrieval), have Jev pick which one
|
|
49
|
+
answers the question, then copy that value verbatim — never have it generate the value.
|
|
50
|
+
- **Confidence-gated automation** — act automatically above a threshold, ask for confirmation in the
|
|
51
|
+
middle, and route to a human below it; see [Confidence](#confidence) below.
|
|
52
|
+
- **A cheap feature layer in front of classical ML** — turn free text into structured Score/Noul
|
|
53
|
+
columns for a downstream model, rather than hand-writing feature extraction.
|
|
54
|
+
|
|
55
|
+
## When Jev does not fit
|
|
56
|
+
|
|
57
|
+
- **Generating prose, summaries, or free text.** Jev is not trained to generate text. "You can force
|
|
58
|
+
it to by chaining choices, [but] this will not work well and will be very slow" (jaggedness #9).
|
|
59
|
+
Use a generative LLM for that half of the workflow, and Jev for the structured judgments around it.
|
|
60
|
+
- **Exact arithmetic, counting, or date/time math.** "Jev is not a calculator." It does not count
|
|
61
|
+
reliably (characters, occurrences, list length), performs worse on numeric/hex/RGB/binary
|
|
62
|
+
representations than semantic ones, and reads dates as text, not as ordered quantities. Do the math
|
|
63
|
+
in code; ask Jev only for the judgment calls code cannot make (see
|
|
64
|
+
[references/jaggedness.md](references/jaggedness.md), items 2–3).
|
|
65
|
+
- **Deep multi-hop or "property of a property" reasoning.** Instructions with double negatives or
|
|
66
|
+
several hops of indirection are answered less reliably. Decompose into direct, atomic questions and
|
|
67
|
+
combine them in code instead (jaggedness #4).
|
|
68
|
+
- **Anything needing images, audio, or video.** Text only, today.
|
|
69
|
+
- **A decision where getting fooled by adversarial input is unacceptable, without hardening it
|
|
70
|
+
first.** "State is data, and jev-1.13 does not treat it as hostile by default" — content written to
|
|
71
|
+
steer the model can move the answer. Be explicit in criteria and test before trusting it at scale
|
|
72
|
+
(jaggedness #6).
|
|
73
|
+
- **Non-English content where accuracy is critical**, without testing first — accuracy is currently
|
|
74
|
+
lower outside English.
|
|
75
|
+
|
|
76
|
+
When in doubt, read [references/jaggedness.md](references/jaggedness.md) before designing a new
|
|
77
|
+
question — it is the single most load-bearing reference here for "will this actually work well."
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## The three primitives
|
|
82
|
+
|
|
83
|
+
Every question has an **id** (your key — never sent to the model; write the full question in
|
|
84
|
+
`instructions` even if the id looks self-explanatory), a **`type`**, `instructions`, and `criteria`.
|
|
85
|
+
Full field-by-field reference, including the "structured `instructions`/`criteria`" mechanism (every
|
|
86
|
+
one of these fields accepts a string, object, array, or `null`, not just plain text) is in
|
|
87
|
+
[references/primitives-reference.md](references/primitives-reference.md).
|
|
88
|
+
|
|
89
|
+
| Type | Answers | Request `criteria` | Answer fields |
|
|
90
|
+
|---|---|---|---|
|
|
91
|
+
| **Choice** | Which of these options? | Required map: option name → description (`string\|object\|array\|null`). Max **255** options. | `choice` (winning option), `probabilities` (map, sums to 1), `confidence` |
|
|
92
|
+
| **Score** | Where on this rubric? | Required ordered array of level descriptions, low → high. Min 2, max **10** levels. | `score` (probability-weighted mean of level index — can land between levels), `legend`, `probabilities`, `confidence` |
|
|
93
|
+
| **Noul** | Is this true? | Optional `{true, false}` clarification. | `noul` only — probability the answer is yes, 0 to 1. **No `confidence` field.** |
|
|
94
|
+
|
|
95
|
+
One combined example (request and response both real, quoted from the docs — a Choice, a Score, and
|
|
96
|
+
a Noul batched into one call):
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
// POST https://api.typesafe.ai/v1/systemone
|
|
100
|
+
// Authorization: Bearer <TYPESAFE_API_KEY>
|
|
101
|
+
// Content-Type: application/json
|
|
102
|
+
{
|
|
103
|
+
"state": "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
|
|
104
|
+
"model": "jev-latest",
|
|
105
|
+
"questions": {
|
|
106
|
+
"department": {
|
|
107
|
+
"type": "choice",
|
|
108
|
+
"instructions": "Which team should handle this",
|
|
109
|
+
"criteria": { "billing": "Payment or subscription issues", "technical": "Bugs or integration problems", "sales": "Pricing or account questions" }
|
|
110
|
+
},
|
|
111
|
+
"frustration": {
|
|
112
|
+
"type": "score",
|
|
113
|
+
"instructions": "How frustrated the customer appears",
|
|
114
|
+
"criteria": ["Calm, just stating facts", "Frustrated but civil", "Very angry, strong language"]
|
|
115
|
+
},
|
|
116
|
+
"is_urgent": { "type": "noul", "instructions": "The message conveys urgency or time-sensitivity" }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
// response
|
|
123
|
+
{
|
|
124
|
+
"model": "jev-1.13.0",
|
|
125
|
+
"answers": {
|
|
126
|
+
"department": { "type": "choice", "choice": "technical", "confidence": 0.78, "probabilities": { "technical": 0.85, "sales": 0.0, "billing": 0.15 } },
|
|
127
|
+
"frustration": { "type": "score", "score": 1.0, "confidence": 1.0, "legend": { "0": "Calm, just stating facts", "1": "Frustrated but civil", "2": "Very angry, strong language" }, "probabilities": { "0": 0.0, "1": 1.0, "2": 0.0 } },
|
|
128
|
+
"is_urgent": { "type": "noul", "noul": 1.0 }
|
|
129
|
+
},
|
|
130
|
+
"usage": { "input_tokens": 392, "output_tokens": 65 }
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Note the request sent `model: "jev-latest"` (an alias) and the response reports the concrete
|
|
135
|
+
resolved version, `"jev-1.13.0"`. See [Cost, latency, and limits](#cost-latency-and-limits).
|
|
136
|
+
|
|
137
|
+
**Batch, don't chain.** Put every question a workflow might need — including ones that only matter
|
|
138
|
+
for some inputs — into one request (the "speculative fan-out" pattern below); evaluating them is
|
|
139
|
+
parallel, so extra questions cost little latency and only the tokens for the extra text. Only split
|
|
140
|
+
into two sequential requests when code genuinely cannot build the second request until it has the
|
|
141
|
+
first answer (see [references/patterns.md](references/patterns.md)).
|
|
142
|
+
|
|
143
|
+
## Confidence
|
|
144
|
+
|
|
145
|
+
`confidence` (0 to 1) is on every Choice and Score answer, derived from the shape of `probabilities`
|
|
146
|
+
— **Noul has no `confidence`**, since a yes/no distribution is already fully described by the single
|
|
147
|
+
`noul` value. TypeSafe does not publish the exact formula ("a convenient measure that fits most
|
|
148
|
+
use-cases... you are never locked into our definition" — use `probabilities` directly for a custom
|
|
149
|
+
statistic). Use it as a second axis alongside the answer itself, in three bands:
|
|
150
|
+
|
|
151
|
+
- **High** → act automatically.
|
|
152
|
+
- **Medium** → proceed with caution — confirm, flag, or gather more information.
|
|
153
|
+
- **Low** → do not act — route to a human, ask a clarifying question, or fall back.
|
|
154
|
+
|
|
155
|
+
There is no universal threshold; the docs' own worked examples use different cutoffs per action
|
|
156
|
+
based on the cost of being wrong (a low-stakes balance check acts at 0.5+, a high-stakes transfer
|
|
157
|
+
approval waits for >0.9). Start conservative, test against your own data, and put the threshold
|
|
158
|
+
constants in one place in your code so they're easy to review — see
|
|
159
|
+
[references/patterns.md](references/patterns.md) for the confidence-gated-routing pattern with a
|
|
160
|
+
worked example.
|
|
161
|
+
|
|
162
|
+
If you only need the single best option, read the Choice answer's `choice` field, which is already
|
|
163
|
+
the highest-probability option. Don't compare it against a fixed threshold. A threshold decides
|
|
164
|
+
*whether to act*, not which option wins. For your own statistic, use `probabilities`.
|
|
165
|
+
|
|
166
|
+
## Patterns
|
|
167
|
+
|
|
168
|
+
Four named patterns, each with a worked example, are documented in
|
|
169
|
+
[references/patterns.md](references/patterns.md):
|
|
170
|
+
|
|
171
|
+
| Pattern | What it does | Why |
|
|
172
|
+
|---|---|---|
|
|
173
|
+
| **Speculative fan-out** | Send every question a workflow might need in one call; let code decide what's relevant after. | Parallel evaluation makes extra questions nearly free. |
|
|
174
|
+
| **Confidence-gated routing** | Use `confidence` as a second axis, with a different floor per action based on its stakes. | Reliability, safety. |
|
|
175
|
+
| **Composite scoring** | Split one complex judgment into several independent Score questions, normalize, combine with code-owned weights. | Auditability — you can see exactly how the final number was built, and reuse the same raw scores with different weights for different downstream decisions. |
|
|
176
|
+
| **Intent routing** | Use Jev as a cheap up-front classifier that sends each request to deterministic code, a specialist LLM, or a human. | Cost, speed — most requests never need an expensive model call. |
|
|
177
|
+
|
|
178
|
+
## Known limitations (jev-1.13 jaggedness)
|
|
179
|
+
|
|
180
|
+
TypeSafe publishes a dated list of known failure modes for the current model version, each with a
|
|
181
|
+
"do this instead." Full detail, including worked examples, is in
|
|
182
|
+
[references/jaggedness.md](references/jaggedness.md); the headline ones, worth internalizing before
|
|
183
|
+
writing any question:
|
|
184
|
+
|
|
185
|
+
1. **Literal reading** — answers the question you wrote, not the one you meant. Be exact; put
|
|
186
|
+
boundary cases in `criteria`.
|
|
187
|
+
2. **Not a calculator** — counting, numeric/hex/RGB comparisons, and interpolating an exact number
|
|
188
|
+
from a Score are all unreliable. Do math in code.
|
|
189
|
+
3. **Dates are read as text**, not ordered quantities — extract the parts with a bounded Choice, do
|
|
190
|
+
date arithmetic in code.
|
|
191
|
+
4. **Indirection costs accuracy** — double negatives and multi-hop "property of a property" questions
|
|
192
|
+
degrade. Ask directly.
|
|
193
|
+
5. **Large, mostly-irrelevant state hurts accuracy** — "Jev suffers from context rot" when `state`
|
|
194
|
+
carries content the question doesn't need. (This is a different claim from "more questions don't
|
|
195
|
+
cost accuracy," which is about batching questions, not about bloating shared state — both are true,
|
|
196
|
+
they are not in tension.) Filter in code before sending, or use a Noul as a relevance pre-filter.
|
|
197
|
+
6. **State is not treated as adversarial by default** — content written to steer the model can move
|
|
198
|
+
the answer. Be explicit in criteria; test before trusting it at scale.
|
|
199
|
+
7. **Contradictory instructions and criteria degrade the answer** — keep them aligned.
|
|
200
|
+
8. **No guaranteed structural invariants** — a Noul and an equivalent Choice can disagree; a Noul and
|
|
201
|
+
its logical negation are not guaranteed to sum to 1. Don't assume arithmetic identities across
|
|
202
|
+
separate questions, and don't reuse a confidence threshold tuned on one question type for another.
|
|
203
|
+
9. **Not built to generate text** — use Choice over a bounded option set instead of forcing free-text
|
|
204
|
+
generation.
|
|
205
|
+
|
|
206
|
+
## Cost, latency, and limits
|
|
207
|
+
|
|
208
|
+
Everything here is stated by TypeSafe's docs directly, not estimated (see
|
|
209
|
+
[references/primitives-reference.md](references/primitives-reference.md) for the full Models-page
|
|
210
|
+
table):
|
|
211
|
+
|
|
212
|
+
- **Current model:** `jev-1.13.0`. Aliases: `jev-latest` (most recent *stable* release — the SDK
|
|
213
|
+
default) and `jev-preview` (most recent release, stable or not; currently identical to
|
|
214
|
+
`jev-latest`). The response's `model` field always reports the resolved versioned id — pin that id
|
|
215
|
+
instead of an alias once you've tuned confidence thresholds against it, since an alias can move
|
|
216
|
+
answers out from under you when TypeSafe ships a new release.
|
|
217
|
+
- **Pricing:** $42 per billion input tokens ($0.042 / million). **Output tokens are free**. `usage`
|
|
218
|
+
still reports `output_tokens`, but only input tokens are billed.
|
|
219
|
+
- **Latency:** the only figure TypeSafe states directly is "most queries complete in about 100 ms."
|
|
220
|
+
TypeSafe's own cookbooks measured 111–114 ms for a multi-question batched call, consistent with
|
|
221
|
+
that figure.
|
|
222
|
+
- **Context limits:** 64k tokens per request (`state` + every question combined); 32k tokens for
|
|
223
|
+
`state` plus the single longest question.
|
|
224
|
+
- **Rate limits:** 250,000 tokens/second, 1,200 requests/minute — TypeSafe states these are adjusting
|
|
225
|
+
dynamically as demand grows and may change without notice; a `429` means back off and retry with
|
|
226
|
+
exponential backoff (SDKs do this by default).
|
|
227
|
+
- **Errors:** `401` bad/missing key, `422` invalid request body, `429` rate-limited, `529`
|
|
228
|
+
TypeSafe-side overload.
|
|
229
|
+
|
|
230
|
+
## Calling Jev: HTTP or the JavaScript SDK
|
|
231
|
+
|
|
232
|
+
**HTTP**, directly:
|
|
233
|
+
|
|
234
|
+
```http
|
|
235
|
+
POST https://api.typesafe.ai/v1/systemone
|
|
236
|
+
Authorization: Bearer <TYPESAFE_API_KEY>
|
|
237
|
+
Content-Type: application/json
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Body: `{ "state": ..., "model": "jev-latest", "questions": { "<id>": { "type": ..., "instructions": ..., "criteria": ... } } }`.
|
|
241
|
+
Response: `{ "model": ..., "answers": { "<id>": {...} }, "usage": { "input_tokens": ..., "output_tokens": ... } }`.
|
|
242
|
+
Full field reference and the error table are in
|
|
243
|
+
[references/primitives-reference.md](references/primitives-reference.md).
|
|
244
|
+
|
|
245
|
+
**JavaScript SDK** (`@typesafe-ai/sdk`, requires Node 20+):
|
|
246
|
+
|
|
247
|
+
```sh
|
|
248
|
+
npm install @typesafe-ai/sdk
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
import { choice, score, noul, TypeSafeClient } from "@typesafe-ai/sdk";
|
|
253
|
+
|
|
254
|
+
const client = new TypeSafeClient(); // reads TYPESAFE_API_KEY from the environment
|
|
255
|
+
|
|
256
|
+
const response = await client.systemOne({
|
|
257
|
+
state: { document: "I was charged twice. Please fix this ASAP." },
|
|
258
|
+
questions: {
|
|
259
|
+
category: choice("What is this ticket about?", { billing: null, technical: null, other: null }),
|
|
260
|
+
frustration: score("How frustrated the customer appears", [
|
|
261
|
+
"Calm, just stating facts",
|
|
262
|
+
"Frustrated but civil",
|
|
263
|
+
"Very angry, strong language",
|
|
264
|
+
]),
|
|
265
|
+
billing: noul("Is this about billing?"),
|
|
266
|
+
},
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
console.log(response.answers.category.choice, response.answers.frustration.score, response.answers.billing.noul);
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
The helpers are documented on the SDK reference pages as `choice(instructions, criteria)`,
|
|
273
|
+
`score(instructions, criteria)` (an ordered array, at least two levels) and
|
|
274
|
+
`noul(instructions?, criteria?)` (optional `{ true, false }`). `model` is optional on `systemOne()`.
|
|
275
|
+
It falls back to the client's default model, which is `jev-latest` unless configured. Retries are
|
|
276
|
+
on by default. Config options, retry defaults, error classes, and the one browser-safety flag are in
|
|
277
|
+
[references/javascript-sdk.md](references/javascript-sdk.md). Check it before you invent an option
|
|
278
|
+
name.
|
|
279
|
+
|
|
280
|
+
## Cookbooks
|
|
281
|
+
|
|
282
|
+
TypeSafe publishes worked, benchmarked cookbooks for common shapes — self-consistency, re-ranking,
|
|
283
|
+
semantic search, structure recovery, function calling, skill suggestion, entity alignment, RAG
|
|
284
|
+
passage classification, citation verification, LLM guardrails, extraction cascades, date extraction,
|
|
285
|
+
value extraction, hierarchical classification, feature discovery, and confidence-based classification.
|
|
286
|
+
Short digests of all 18, with their measured numbers and the one generalizable lesson from each, are
|
|
287
|
+
in [references/cookbooks.md](references/cookbooks.md) — read the relevant one before designing a
|
|
288
|
+
workflow that looks similar; it often shows a better decomposition than a first-pass design would.
|
|
289
|
+
|
|
290
|
+
## References
|
|
291
|
+
|
|
292
|
+
- [references/primitives-reference.md](references/primitives-reference.md) — full field-by-field
|
|
293
|
+
reference for Choice/Score/Noul/structured questions, the HTTP API, and the Models/pricing/limits
|
|
294
|
+
table.
|
|
295
|
+
- [references/patterns.md](references/patterns.md) — the four named patterns with worked examples.
|
|
296
|
+
- [references/jaggedness.md](references/jaggedness.md) — all 9 known jev-1.13 failure modes with
|
|
297
|
+
mitigations. Read this before designing a new question.
|
|
298
|
+
- [references/javascript-sdk.md](references/javascript-sdk.md): JS SDK client config and env vars,
|
|
299
|
+
question helpers, retry defaults, and error classes, each checked against the SDK reference pages.
|
|
300
|
+
- [references/cookbooks.md](references/cookbooks.md) — digests of all 18 published cookbooks.
|
|
301
|
+
- TypeSafe's own docs are the live source of truth and move faster than this skill:
|
|
302
|
+
[docs.typesafe.ai](https://docs.typesafe.ai) (append `.md` to any page path for raw Markdown;
|
|
303
|
+
index at [docs.typesafe.ai/llms.txt](https://docs.typesafe.ai/llms.txt)). Some structure in this
|
|
304
|
+
skill (the doc-index walking convention, the task table under "find the useful shape") was informed
|
|
305
|
+
by TypeSafe's own MIT-licensed agent skill,
|
|
306
|
+
[github.com/typesafe-ai/skills](https://github.com/typesafe-ai/skills) — read live docs over this
|
|
307
|
+
file when the two disagree; TypeSafe ships new model versions and jaggedness notes faster than a
|
|
308
|
+
bundled plugin can track them.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Cookbook digests
|
|
2
|
+
|
|
3
|
+
Short digests of all 18 cookbooks TypeSafe publishes at `docs.typesafe.ai/cookbooks/*` (crawled
|
|
4
|
+
2026-09-21). Every cookbook's own code uses the Python SDK (`client.system_one(...)`,
|
|
5
|
+
`Choice`/`Score`/`Noul` classes) — the call shape differs cosmetically from the JavaScript SDK's
|
|
6
|
+
`client.systemOne(...)` / lowercase `choice(...)` helper (see `javascript-sdk.md`), but the
|
|
7
|
+
primitives, request/response shapes, and lessons are identical across languages. Read the full page
|
|
8
|
+
for a shape close to what you're building — these are worth more than a first-pass design from
|
|
9
|
+
scratch.
|
|
10
|
+
|
|
11
|
+
## Self-consistency: nouls
|
|
12
|
+
|
|
13
|
+
`cookbooks/consistency_noul_cookbook.md` — Runs a 14-question Noul rubric over one insurance claim,
|
|
14
|
+
15 times each, across non-reasoning LLMs, reasoning LLMs, and Jev. Jev's mean per-question
|
|
15
|
+
probability std dev (0.0102) beats every LLM condition; a 14-question Jev call runs ~111ms /
|
|
16
|
+
$0.000043, vs. the cheapest LLM condition at 1113ms / $0.000950 (10x slower, 22x costlier) up to a
|
|
17
|
+
reasoning-model condition at 13886ms / $0.034275 (125x slower, 805x costlier). **Lesson:** repeated
|
|
18
|
+
calls still wobble even for Jev — pair a raw probability with an "uncertain band" (e.g. 0.30–0.70)
|
|
19
|
+
that routes borderline cases to human review, rather than trusting one call's label outright.
|
|
20
|
+
|
|
21
|
+
## Self-consistency: choices
|
|
22
|
+
|
|
23
|
+
`cookbooks/consistency_choice_cookbook.md` — Same test, an 8-question moderation Choice rubric, 15
|
|
24
|
+
repeats. Jev's plurality-label agreement (90.8%) is lower than some LLM conditions (87.5–100%) on
|
|
25
|
+
raw repeats, but gating on `confidence ≥ 0.6` raises Jev's agreement to 99.2% with 74.2%
|
|
26
|
+
auto-labeled. Cost/speed: ~114ms / $0.000046 per call vs. 826ms–12978ms / $0.000936–$0.041255 for LLM
|
|
27
|
+
conditions. **Lesson:** confidence-gating turns Jev's imperfect self-consistency into a reliable
|
|
28
|
+
automated majority, at a fraction of LLM cost/latency.
|
|
29
|
+
|
|
30
|
+
## Parallel questions
|
|
31
|
+
|
|
32
|
+
`cookbooks/parallel_questions.md` — Batches a 13-question regulatory briefing (8 Noul + 2 Choice + 3
|
|
33
|
+
Score) over the ~54k-character GDPR Wikipedia article, one request vs. 13 separate requests, 5
|
|
34
|
+
repeats. Batching: **12.2x cheaper, 10.0x faster** ($0.000497/0.27s vs. $0.006090/2.71s), with
|
|
35
|
+
near-identical answers across repeats regardless of batching. **Lesson:** batching multiple
|
|
36
|
+
independent questions about the same state collapses the document-resend cost — the larger the
|
|
37
|
+
shared state relative to the questions, the closer the saving is to a full Nx.
|
|
38
|
+
|
|
39
|
+
## Re-ranking
|
|
40
|
+
|
|
41
|
+
`cookbooks/rerank_typesafe.md` — Two-stage legal search: BM25 builds a 30-candidate shortlist per
|
|
42
|
+
query (3,565 CLERC passages, 40 queries), then one Jev Noul question per (query, candidate) pair
|
|
43
|
+
re-ranks by the returned probability. Top-1 accuracy 5%→18%, top-5 15%→35%, top-10 38%→62%.
|
|
44
|
+
**Lesson:** cheap retrieval is good at shortlisting, bad at picking the single best match; a per-pair
|
|
45
|
+
Noul re-ranker meaningfully improves precision at the top of the list. The cookbook asks one
|
|
46
|
+
question per pair for clarity. It says a real application would ask several questions about the
|
|
47
|
+
same pair in one call.
|
|
48
|
+
|
|
49
|
+
## Line-by-line search
|
|
50
|
+
|
|
51
|
+
`cookbooks/semantic_find.md` — Tags every line of GitHub's ToS with an id, then one request asks a
|
|
52
|
+
Choice question ranking all 218 line ids by relevance plus a Noul checking whether the document
|
|
53
|
+
actually contains an answer at all. A ranking-only approach can look confident (top-ranked line at
|
|
54
|
+
0.86 relevance) even when the real answer isn't in the document (`exists` probability only 0.14).
|
|
55
|
+
**Lesson:** pair a ranking Choice with a separate existence-check Noul so you can distinguish "found
|
|
56
|
+
it," "not in the document," and "partially answered," instead of returning the top rank uncritically.
|
|
57
|
+
|
|
58
|
+
## Structure recovery
|
|
59
|
+
|
|
60
|
+
`cookbooks/autoformat.md` — Reconstructs lost Markdown structure from hard-wrapped plain text in two
|
|
61
|
+
sequential requests: Pass 1 asks one Noul per adjacent line pair ("did this break split a
|
|
62
|
+
sentence?"); Pass 2 asks one Choice per merged block (heading/list/code/callout/paragraph) plus
|
|
63
|
+
companion questions read only when relevant. The model never generates text — every output character
|
|
64
|
+
still traces to the input. Example: 2 round trips, 10,211 tokens, 0.8s, $0.0015. **Lesson:** keep
|
|
65
|
+
anything code can already determine (blank lines, explicit markers) out of the model call entirely —
|
|
66
|
+
send only the judgment calls code genuinely can't make, and let code do all the rendering.
|
|
67
|
+
|
|
68
|
+
## Function calling
|
|
69
|
+
|
|
70
|
+
`cookbooks/function_calling.md` — Maps natural-language trading requests to ten typed Python
|
|
71
|
+
functions: each closed-set/`Literal` argument becomes a Choice question, one request answers every
|
|
72
|
+
argument for the call, and a confidence-aware `Dispatcher` returns the function name plus arguments.
|
|
73
|
+
Example: `rolling_correlation(symbol='AMD', benchmark='NVDA')` at confidence 0.82 overall, with
|
|
74
|
+
per-argument probabilities (0.87, 0.78) and omitted arguments falling back to function defaults
|
|
75
|
+
(p=0.96/0.99). **Lesson:** a compound call's confidence should be the *minimum* across its parts
|
|
76
|
+
(the weakest judgment), not a product — a product understates confidence as argument count grows.
|
|
77
|
+
An explicit "was this stated?" question lets an argument fall back to its default instead of being
|
|
78
|
+
forced into a confident-sounding guess.
|
|
79
|
+
|
|
80
|
+
## Skill suggestion
|
|
81
|
+
|
|
82
|
+
`cookbooks/skill_suggestion.md` — Picks at most one skill per agent turn from a 182-skill roster in
|
|
83
|
+
two sequential requests: request 1 ranks all 182 skills cheaply and decides whether the turn needs
|
|
84
|
+
one at all; request 2 re-reads only the top 3 in full and can reject all of them. Across 488 turns:
|
|
85
|
+
agent alone with the roster — 16.8% wrong-skill loads, 9.8% loads-when-nothing-fits; agent +
|
|
86
|
+
suggestion — 7.3% / 4.0% (more than half reduction); agent handed the right answer directly — 2.5% /
|
|
87
|
+
1.2% (the floor isn't zero even with a perfect hint). **Lesson:** for large rosters, don't truncate
|
|
88
|
+
descriptions into the prompt — cheap rank-all-candidates, then read-and-verify only the top few, with
|
|
89
|
+
the ability to reject all of them.
|
|
90
|
+
|
|
91
|
+
## Knowledge graph entity alignment
|
|
92
|
+
|
|
93
|
+
`cookbooks/entity_alignment.md` — Decides which of 450 candidate pairs across two beer-catalogue
|
|
94
|
+
sources describe the same product, using one Score question with exactly 3 ordered levels (different
|
|
95
|
+
/ related-but-maybe-not-same / same → merge), plus 3 riding Noul questions telling a curator which
|
|
96
|
+
field two records disagree on. Of 450 pairs: 40 (8.9%) auto-merged, 50 (11.1%) queued for a curator,
|
|
97
|
+
360 (80.0%) left unlinked. **Lesson:** use Score (not a Noul threshold or Choice) when outcome levels
|
|
98
|
+
are genuinely ordered and each needs its own criteria — it avoids inventing an arbitrary probability
|
|
99
|
+
cutoff, since the levels map directly onto the outcomes.
|
|
100
|
+
|
|
101
|
+
## Classifying RAG passages
|
|
102
|
+
|
|
103
|
+
`cookbooks/classifying_rag_passages.md` — Inserts a classification stage between retrieval and
|
|
104
|
+
generation: for each retrieved passage, one request carries 4 Noul questions (relevant? states
|
|
105
|
+
usable evidence? contradicts the query's premise? tries to instruct the model?), and ordinary
|
|
106
|
+
threshold code decides accept / flag-conflict / drop. Catches a planted prompt-injection passage and
|
|
107
|
+
flags queries with false premises against real evidence. **Lesson:** keep the accept/flag/drop policy
|
|
108
|
+
as explicit code-level thresholds over structured probabilities. The jaggedness page links this
|
|
109
|
+
cookbook as the worked example for #5 (irrelevant state). It also shows one way to screen out
|
|
110
|
+
prompt injection (#6), though the jaggedness page doesn't cite it for that.
|
|
111
|
+
|
|
112
|
+
## Double-checking citations
|
|
113
|
+
|
|
114
|
+
`cookbooks/citation_check.md` — Verifies an LLM's cited quotes: a plain string match first checks
|
|
115
|
+
whether the quote exists verbatim in the source (free, catches fabrication outright), then a Choice
|
|
116
|
+
question classifies how the quote's context relates to the claim (supports / contradicts /
|
|
117
|
+
says-nothing), gated at `confidence ≥ 0.8` before accepting the verdict without human review.
|
|
118
|
+
8 citations tested: 4 accurate ones verified at confidence ≥0.93; all 4 planted failures caught.
|
|
119
|
+
**Lesson:** don't send every check to the model — a free code-level pre-filter (string match) should
|
|
120
|
+
catch what it can before spending a model call on the judgment it actually requires.
|
|
121
|
+
|
|
122
|
+
## Guardrails for LLMs
|
|
123
|
+
|
|
124
|
+
`cookbooks/llm_guardrails.md` — Screens inbound and outbound LLM messages with one request per
|
|
125
|
+
message: a battery of Noul questions gives P(hazard) per named hazard (jailbreak, policy-breaking
|
|
126
|
+
reply, harm/crime, medical dosage, self-harm), plus one Score question rating how much harm
|
|
127
|
+
complying would do; app code thresholds the results into pass/review/block/route. **Lesson:** put
|
|
128
|
+
safety policy in externally-readable, editable code-level thresholds over structured probabilities,
|
|
129
|
+
not buried in a system prompt or a second general-purpose "judge" LLM call — and run the same guard
|
|
130
|
+
on both input and output, since a safe-looking prompt can still produce an unsafe reply.
|
|
131
|
+
|
|
132
|
+
## SDE cascade
|
|
133
|
+
|
|
134
|
+
`cookbooks/sde_cascade.md` — A 2-stage structured-data-extraction cascade: extract with a cheap
|
|
135
|
+
small model in plain-text mode, verify each extracted field with a per-field Jev Noul question
|
|
136
|
+
("is this value absent from the source?", framed so `true` = escalate), escalate only flagged items
|
|
137
|
+
to an expensive reasoning model. Stage pricing: cheap extractor $0.75/$4.50 per 1M tokens (in/out);
|
|
138
|
+
reasoning escalation $5.00/$30.00 (~7x); Jev verifier $0.042/$0.00. The swept-threshold cascade's
|
|
139
|
+
Pareto frontier beats every single model tested on quality-per-dollar. **Lesson:** a good verifier
|
|
140
|
+
question must be narrow and grounded (one checkable yes/no per field against the source), framed so
|
|
141
|
+
the *escalate* case is `true`, and aggregated per-field with `max` (any single flag escalates) rather
|
|
142
|
+
than averaged — averaging silences one confident red flag among many quiet fields.
|
|
143
|
+
|
|
144
|
+
## Date extraction
|
|
145
|
+
|
|
146
|
+
`cookbooks/date_extraction_cookbook.md` — Extracts absolute and relative dates by asking Choice
|
|
147
|
+
questions about which date parts (month/day/year/weekday, date kind) the text actually states, then
|
|
148
|
+
resolving those parts to a real date entirely in code. Example: 6 questions across 4 documents — 5
|
|
149
|
+
auto-accepted (confidence 0.91–0.97), 1 sent to review at confidence 0.46 (correctly flagged as
|
|
150
|
+
incomplete rather than the model inventing a date). Review threshold used: confidence < 0.60.
|
|
151
|
+
**Lesson:** let code do all date arithmetic; the model only reads what the text literally names —
|
|
152
|
+
this directly implements jaggedness #3's mitigation.
|
|
153
|
+
|
|
154
|
+
## Pre-parsed value extraction
|
|
155
|
+
|
|
156
|
+
`cookbooks/pre_parsed_value_extraction_cookbook.md` — A regex finds candidate spans (emails, phone
|
|
157
|
+
numbers, dollar amounts); Jev's Choice then picks which candidate answers a specific question, and
|
|
158
|
+
code copies that span verbatim and normalizes it — the returned value is always literally one of the
|
|
159
|
+
regex's own matches, never invented. Two stated hard limits: Choice allows at most 255 options (past
|
|
160
|
+
that, narrow in two stages); and result quality depends on having a good candidate-finder (regex,
|
|
161
|
+
NER, or another cheap proposer) — names in particular have no simple regex. **Lesson:** when a value
|
|
162
|
+
must come verbatim from the source with zero risk of alteration, never let the model output free
|
|
163
|
+
text — have code enumerate exhaustive candidates and let Choice only ever select among them.
|
|
164
|
+
|
|
165
|
+
## Hierarchical classification
|
|
166
|
+
|
|
167
|
+
`cookbooks/hierarchical_classification.md` — Classifies documents down deep taxonomies (patents,
|
|
168
|
+
product categories, biomedical subjects, a codebase file tree) by walking node-to-node with Choice
|
|
169
|
+
questions, comparing greedy search (always take the top child) against beam search (keep top-K
|
|
170
|
+
paths, score by length-normalized geometric-mean edge probability, explored via parallel requests).
|
|
171
|
+
Beam search (K=3) matched 4/4 expected leaves across 4 hierarchies; greedy matched 2/4 (an early
|
|
172
|
+
wrong turn couldn't be recovered). **Lesson:** for deep/branching taxonomies, prefer beam search over
|
|
173
|
+
greedy — parallel requests make exploring several candidate paths cheap, and it recovers from an
|
|
174
|
+
ambiguous early decision that greedy can't undo. This directly implements the "walking a taxonomy"
|
|
175
|
+
technique in `primitives-reference.md`.
|
|
176
|
+
|
|
177
|
+
## Autoresearch feature discovery
|
|
178
|
+
|
|
179
|
+
`cookbooks/autoresearch_feature_discovery.md` — An LLM proposes candidate numeric features (as
|
|
180
|
+
natural-language questions) for a gradient-boosting model predicting a wine score from tasting notes;
|
|
181
|
+
each round, Jev answers all proposed questions for every row (intensity → Score, presence → Noul),
|
|
182
|
+
k-fold CV judges whether to keep/revise/drop each question. Over 5 rounds (1,200 dev / 800 held-out
|
|
183
|
+
rows), held-out RMSE improved 0.097 points; ended with 38 kept questions. **Lesson:** Jev questions
|
|
184
|
+
can serve as an LLM-designed, numerically-scored feature layer in front of an ordinary ML model — the
|
|
185
|
+
LLM proposes what to ask, Jev answers it cheaply and consistently at scale, and a held-out set that
|
|
186
|
+
the loop never reads is what actually validates whether new questions help.
|
|
187
|
+
|
|
188
|
+
## Classification using confidence
|
|
189
|
+
|
|
190
|
+
`cookbooks/classification_using_confidence.md` — Classifies SEC filings into 1 of 75 industry groups
|
|
191
|
+
with a single Choice question, then uses that answer's own `confidence` to decide whether to report
|
|
192
|
+
the specific group or fall back to its broader parent division. Across 60 filings, a confidence cutoff
|
|
193
|
+
of 0.9 splits them roughly in half: the confident half is correct 90% of the time at the specific
|
|
194
|
+
level, the unsure half only 40% — but reporting the unsure half at the broader division level raises
|
|
195
|
+
it to 70% correct. **Lesson:** a Choice answer's own confidence is a free built-in signal for
|
|
196
|
+
"trust the specific label, or hedge" — when labels form a hierarchy, hedging to the parent category is
|
|
197
|
+
a nearly-free way to trade specificity for reliability exactly where it's needed.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# jev-1.13 jaggedness — known limitations
|
|
2
|
+
|
|
3
|
+
Source: `docs.typesafe.ai/model-jaggedness/jev-1.13.md`, TypeSafe's own dated list ("Last reviewed
|
|
4
|
+
2026-09-17" at crawl time, 2026-09-21) of known failure modes for the current model version, each
|
|
5
|
+
with a stated mitigation. TypeSafe expects some of these to be fixed in later versions — check the
|
|
6
|
+
live page before assuming a mitigation is still required for whichever `jev-*` version you're
|
|
7
|
+
actually calling.
|
|
8
|
+
|
|
9
|
+
This is the single most load-bearing reference for "will this question actually work well" — read
|
|
10
|
+
it before designing a new question, not after it misbehaves in production.
|
|
11
|
+
|
|
12
|
+
## 1. Literal reading
|
|
13
|
+
|
|
14
|
+
Jev "answers the question you wrote, not the one you meant." Scoping words, negations, and implied
|
|
15
|
+
conditions are read at face value, not interpreted the way a person reading between the lines would.
|
|
16
|
+
|
|
17
|
+
**Do instead:** state the exact condition you mean; be specific rather than relying on implication;
|
|
18
|
+
put boundary cases directly into `criteria`; if a question unavoidably needs interpretation, split it
|
|
19
|
+
into two literal sub-questions and combine the results in code rather than trusting one question to
|
|
20
|
+
carry the nuance.
|
|
21
|
+
|
|
22
|
+
## 2. Math and numbers
|
|
23
|
+
|
|
24
|
+
**"Jev is not a calculator. We strongly recommend implementing any mathematical logic in code."**
|
|
25
|
+
|
|
26
|
+
- **Counting** does not work reliably — characters in a word, occurrences of a term, items in a long
|
|
27
|
+
list. Error grows with the size of the thing being counted. **Do instead:** count in code. For a
|
|
28
|
+
*filtered* count (count items matching some semantic condition), ask one Noul per candidate item
|
|
29
|
+
and sum the true/false results in code, rather than asking Jev to count directly.
|
|
30
|
+
- **Numeric representations** (hex, RGB, binary, low-level/assembly forms) perform worse than
|
|
31
|
+
semantic or high-level representations of the same information — Jev "cannot reliably judge
|
|
32
|
+
whether two [RGB/hex] values are near each other." **Do instead:** convert to semantic form or
|
|
33
|
+
named buckets in code before asking.
|
|
34
|
+
- **Using `score` for exact magnitude:** don't use a Score answer's probability-weighted `score` (or
|
|
35
|
+
the underlying `probabilities`) to compute the *exact* numeric value between two levels of a
|
|
36
|
+
criterion — score can be thresholded or compared, but treating `1.43` as a precise interpolated
|
|
37
|
+
measurement is not supported.
|
|
38
|
+
|
|
39
|
+
## 3. Date and time comparison
|
|
40
|
+
|
|
41
|
+
Jev "reads dates as text, not as ordered quantities." Ordering, distance, and window-membership
|
|
42
|
+
judgments over dates are unreliable, and get worse with mixed formats, relative references ("next
|
|
43
|
+
Thursday"), and domain-specific boundaries.
|
|
44
|
+
|
|
45
|
+
**Do instead:** extract date *components* as a bounded Choice (e.g. one of 12 months, one of 31
|
|
46
|
+
days, a bounded year range) — including an explicit "not stated" option for text that doesn't
|
|
47
|
+
actually name a date — then do all ordering, duration, and offset/weekday arithmetic in code. See
|
|
48
|
+
`references/cookbooks.md`'s "Date extraction" entry for a full worked example, including a case where
|
|
49
|
+
this approach correctly flagged a date the source text never actually stated, instead of the model
|
|
50
|
+
inventing one.
|
|
51
|
+
|
|
52
|
+
## 4. Indirection
|
|
53
|
+
|
|
54
|
+
"Instructions carrying double negatives or complex indirection are answered less reliably. A
|
|
55
|
+
question about a property of a property, or something that requires multiple hops of reasoning,
|
|
56
|
+
costs accuracy."
|
|
57
|
+
|
|
58
|
+
**Do instead:** write instructions directly; name the relevant part of `state` explicitly rather
|
|
59
|
+
than making the model infer which part you mean.
|
|
60
|
+
|
|
61
|
+
## 5. Large state full of irrelevant detail
|
|
62
|
+
|
|
63
|
+
"Accuracy falls as the state grows with content unrelated to the decision." Jev has a bounded
|
|
64
|
+
context window (see `primitives-reference.md`'s Models table for the exact 64k/32k token limits) —
|
|
65
|
+
but the accuracy cost of irrelevant content in `state` is a separate, independent problem from the
|
|
66
|
+
token limit itself.
|
|
67
|
+
|
|
68
|
+
**Do instead:** filter in code first and send only the fields a given question actually needs. When
|
|
69
|
+
code-side filtering isn't feasible (e.g. you don't know in advance which chunk of a document is
|
|
70
|
+
relevant), use a Noul question as a relevance pre-filter before the real question — see
|
|
71
|
+
`references/cookbooks.md`'s "Classifying RAG passages" entry.
|
|
72
|
+
|
|
73
|
+
**Note on an apparent tension:** the introduction docs say that batching *more questions* into one
|
|
74
|
+
request "does not create context-rot" — that claim is true and is about parallel, independent
|
|
75
|
+
question evaluation. This jaggedness item is a different claim: irrelevant material *in the shared
|
|
76
|
+
`state`* does cost accuracy. Both are true at once; don't conflate "add more questions" (safe) with
|
|
77
|
+
"pad the state with content the question doesn't need" (costly).
|
|
78
|
+
|
|
79
|
+
## 6. Adversarial content
|
|
80
|
+
|
|
81
|
+
"State is data, and jev-1.13 does not treat it as hostile by default." Content written to
|
|
82
|
+
adversarially steer the model (prompt injection embedded in retrieved or user-supplied text) can
|
|
83
|
+
move the answer. TypeSafe states it expects to improve this in future versions.
|
|
84
|
+
|
|
85
|
+
**Do instead:** be explicit in `criteria` about what would and wouldn't count; test thoroughly with
|
|
86
|
+
adversarial inputs before deploying a question over untrusted content to many users. See
|
|
87
|
+
`references/cookbooks.md`'s "Classifying RAG passages" entry for a worked example that specifically
|
|
88
|
+
screens for and drops a planted prompt-injection passage using a dedicated Noul question.
|
|
89
|
+
|
|
90
|
+
## 7. Contradictory instructions and criteria
|
|
91
|
+
|
|
92
|
+
A mismatch between `instructions` and `criteria` (e.g., a Noul where the `criteria.true` description
|
|
93
|
+
actually describes what most people would call "no") degrades performance.
|
|
94
|
+
|
|
95
|
+
**Do instead:** treat `criteria` as an extension of the instruction, not a separate spec — keep both
|
|
96
|
+
aligned in clear, plain language, and re-read a structured question as a whole rather than writing
|
|
97
|
+
`instructions` and `criteria` independently.
|
|
98
|
+
|
|
99
|
+
## 8. No guaranteed structural invariants
|
|
100
|
+
|
|
101
|
+
Jev is "extremely consistent [for] semantically similar inputs" but does **not** guarantee the kind
|
|
102
|
+
of structural invariants a person might assume hold:
|
|
103
|
+
|
|
104
|
+
- The same underlying question asked as a Noul vs. an equivalent yes/no Choice can disagree
|
|
105
|
+
materially — a documented example gives `noul: 0.22` for one framing and `{choice: "no",
|
|
106
|
+
probabilities: {yes: 0.01, no: 0.99}, confidence: 0.97}` for the logically equivalent Choice
|
|
107
|
+
framing of the same input. Neither is simply derivable from the other.
|
|
108
|
+
- A Noul and its logical negation are not guaranteed to sum to 1 — a documented example has
|
|
109
|
+
`refund: 0.72` and `not_refund: 0.47` for the same message (sum 1.19, not 1.0). There are several reasons `P(noul)` and `1 - P(not noul)` may diverge; don't rely on the
|
|
110
|
+
identity holding.
|
|
111
|
+
|
|
112
|
+
**Do instead:** don't rely on structural/arithmetic invariance between separate questions. Don't
|
|
113
|
+
carry a confidence threshold tuned on one question (or question type) over to a different one without
|
|
114
|
+
separately validating it.
|
|
115
|
+
|
|
116
|
+
## 9. Generation
|
|
117
|
+
|
|
118
|
+
"[Jev is] not trained to generate text. While you can force it to by chaining choices, this will not
|
|
119
|
+
work well and will be very slow."
|
|
120
|
+
|
|
121
|
+
**Do instead:** when the answer space is genuinely bounded, use Choice over the explicit option set
|
|
122
|
+
rather than trying to make Jev produce the value as free text. When free text generation is actually
|
|
123
|
+
required, use a generative model for that part of the workflow — Jev is not a substitute for one.
|
|
124
|
+
|
|
125
|
+
## Closing checklist (from the docs' own "avoid" callout)
|
|
126
|
+
|
|
127
|
+
Avoid:
|
|
128
|
+
|
|
129
|
+
- Asking Jev something code can compute exactly (counting, dates, arithmetic).
|
|
130
|
+
- Hiding several separate judgments inside one question — decompose instead.
|
|
131
|
+
- "System Two" tasks — anything needing several layers of indirect reasoning.
|
|
132
|
+
- Giving a question more `state` context than it actually needs — "Jev suffers from context rot,"
|
|
133
|
+
specifically with respect to unrelated material in the shared state (see item 5 above).
|
|
134
|
+
|
|
135
|
+
Community feedback channel TypeSafe links from this page: Discord, `discord.com/invite/WUujKYBp8s`.
|