{"_id":"@ai-translate/provider-core","_rev":"6-7b46693f0994cc44035f98be31913f22","name":"@ai-translate/provider-core","dist-tags":{"latest":"0.3.3"},"versions":{"0.1.0":{"name":"@ai-translate/provider-core","version":"0.1.0","keywords":["i18n","l10n","internationalization","localization","translation","ai","llm","structured-output"],"author":{"name":"Thiago Peres"},"license":"MIT","_id":"@ai-translate/provider-core@0.1.0","maintainers":[{"name":"tperes","email":"hi@peres.pro"}],"homepage":"https://github.com/thiagoperes/ai-translate#packages","bugs":{"url":"https://github.com/thiagoperes/ai-translate/issues"},"dist":{"shasum":"cf1dcfb6aee14b8e2b7a36708d4ce3cd1d827e2c","tarball":"https://registry.npmjs.org/@ai-translate/provider-core/-/provider-core-0.1.0.tgz","fileCount":7,"integrity":"sha512-jSZDu8/ajy/UmVU7vruvtSVne4J0DMiwO0Mkqgb1DBQ/9ZmET/YGLEB9plxxgpLjOqWkVkHtgXNWJeX39BK07A==","signatures":[{"sig":"MEUCIQCX7yiFi0hACHO63/YlEuweRjUAQjXAvbGY1tFwsVdkQAIgDUNgsqtwEms37gy/KdkcRo99WM3XcXdRrZE2Rldg9lY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-translate%2fprovider-core@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":359038},"main":"./dist/index.mjs","type":"module","_from":"file:ai-translate-provider-core-0.1.0.tgz","types":"./dist/index.d.mts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"lint":"oxlint -c ../../.oxlintrc.json --type-aware --deny-warnings src test vitest.config.ts tsdown.config.ts","test":"vitest run --config vitest.config.ts","build":"tsdown","coverage":"vitest run --config vitest.config.ts --coverage","test:pack":"publint . && attw --pack . --profile esm-only","typecheck":"tsc -p tsconfig.json --noEmit","coverage:strict":"vitest run --config vitest.config.ts --coverage --coverage.include=src/index.ts --coverage.thresholds.lines=95 --coverage.thresholds.functions=95 --coverage.thresholds.branches=85 --coverage.thresholds.statements=95"},"_npmUser":{"name":"tperes","email":"hi@peres.pro"},"_resolved":"/tmp/4f93ed41a2c631f3ecb6c7d27f66b993/ai-translate-provider-core-0.1.0.tgz","_integrity":"sha512-jSZDu8/ajy/UmVU7vruvtSVne4J0DMiwO0Mkqgb1DBQ/9ZmET/YGLEB9plxxgpLjOqWkVkHtgXNWJeX39BK07A==","repository":{"url":"git+https://github.com/thiagoperes/ai-translate.git","type":"git","directory":"packages/ai-translate-provider-core"},"_npmVersion":"11.12.1","description":"Vendor-neutral translation and semantic-audit engine for ai-translate: prompting, batching, structured output, validation and repair over a pluggable model transport.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"zod":"4.4.3","@ai-translate/core":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/provider-core_0.1.0_1787177670363_0.799427715271037","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ai-translate/provider-core","version":"0.2.0","keywords":["i18n","l10n","internationalization","localization","translation","ai","llm","structured-output"],"author":{"name":"Thiago Peres"},"license":"MIT","_id":"@ai-translate/provider-core@0.2.0","maintainers":[{"name":"tperes","email":"hi@peres.pro"}],"homepage":"https://github.com/thiagoperes/ai-translate#packages","bugs":{"url":"https://github.com/thiagoperes/ai-translate/issues"},"dist":{"shasum":"0df269bab943a18767b9acaa3a54d59555d8231c","tarball":"https://registry.npmjs.org/@ai-translate/provider-core/-/provider-core-0.2.0.tgz","fileCount":7,"integrity":"sha512-AhwApL0UlF+U5wstcCrVgWdNNsaF0ISkPHv8a/96KnbWW7YPFj/IriC18ACyviDxzZbQpXT7TmR1Kd0tp2y8CA==","signatures":[{"sig":"MEUCIGs7xJ5QgK9VFyS4f68tu6w4S3S5dpo1gc2U8Ita/WeCAiEAz4pZktLJXuoOpnlJAJ/suzhFx/6yrWefPvRaXSLM2pE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":360381},"main":"./dist/index.mjs","type":"module","_from":"file:ai-translate-provider-core-0.2.0.tgz","types":"./dist/index.d.mts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"lint":"oxlint -c ../../.oxlintrc.json --type-aware --deny-warnings src test vitest.config.ts tsdown.config.ts","test":"vitest run --config vitest.config.ts","build":"tsdown","coverage":"vitest run --config vitest.config.ts --coverage","test:pack":"publint . && attw --pack . --profile esm-only","typecheck":"tsc -p tsconfig.json --noEmit","coverage:strict":"vitest run --config vitest.config.ts --coverage --coverage.include=src/index.ts --coverage.thresholds.lines=95 --coverage.thresholds.functions=95 --coverage.thresholds.branches=85 --coverage.thresholds.statements=95"},"_npmUser":{"name":"tperes","email":"hi@peres.pro"},"_resolved":"/private/var/folders/0t/cw43w8gd5n583bgt4dcw1_cr0000gn/T/da3b0d8ca1c69d094b923518178005f0/ai-translate-provider-core-0.2.0.tgz","_integrity":"sha512-AhwApL0UlF+U5wstcCrVgWdNNsaF0ISkPHv8a/96KnbWW7YPFj/IriC18ACyviDxzZbQpXT7TmR1Kd0tp2y8CA==","repository":{"url":"git+https://github.com/thiagoperes/ai-translate.git","type":"git","directory":"packages/ai-translate-provider-core"},"_npmVersion":"11.6.2","description":"Vendor-neutral translation and semantic-audit engine for ai-translate: prompting, batching, structured output, validation and repair over a pluggable model transport.","directories":{},"sideEffects":false,"_nodeVersion":"24.13.0","dependencies":{"zod":"4.4.3","@ai-translate/core":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/provider-core_0.2.0_1787221938470_0.8143667387306979","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ai-translate/provider-core","version":"0.3.0","keywords":["i18n","l10n","internationalization","localization","translation","ai","llm","structured-output"],"author":{"name":"Thiago Peres"},"license":"MIT","_id":"@ai-translate/provider-core@0.3.0","maintainers":[{"name":"tperes","email":"hi@peres.pro"}],"homepage":"https://github.com/thiagoperes/ai-translate#packages","bugs":{"url":"https://github.com/thiagoperes/ai-translate/issues"},"dist":{"shasum":"3c90ea6f8a10c8819b346fc0f8fa770a5d9515b7","tarball":"https://registry.npmjs.org/@ai-translate/provider-core/-/provider-core-0.3.0.tgz","fileCount":7,"integrity":"sha512-/V5FuqTjSgZj7pTjdaxyvRVPS01V7cs8vy8RTxX5qHwlXNtn15RqzmhI2N3Sm6EY6g0lN3G/HgIo+kAQoWM2ag==","signatures":[{"sig":"MEYCIQDAybNaqAjDYEHbvYBxDHRkc+354JaHYuBbNMO+Pw2c6wIhAKKsvZUi5CZCFksY+BuTj3NaTQPzsi+7Aerim+fe7le4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398729},"main":"./dist/index.mjs","type":"module","_from":"file:ai-translate-provider-core-0.3.0.tgz","types":"./dist/index.d.mts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"lint":"oxlint -c ../../.oxlintrc.json --type-aware --deny-warnings src test vitest.config.ts tsdown.config.ts","test":"vitest run --config vitest.config.ts","build":"tsdown","coverage":"vitest run --config vitest.config.ts --coverage","test:pack":"publint . && attw --pack . --profile esm-only","typecheck":"tsc -p tsconfig.json --noEmit","coverage:strict":"vitest run --config vitest.config.ts --coverage --coverage.include=src/index.ts --coverage.thresholds.lines=95 --coverage.thresholds.functions=95 --coverage.thresholds.branches=85 --coverage.thresholds.statements=95"},"_npmUser":{"name":"tperes","email":"hi@peres.pro"},"_resolved":"/private/var/folders/0t/cw43w8gd5n583bgt4dcw1_cr0000gn/T/ffdf15971f97f23f3533a00da46f4105/ai-translate-provider-core-0.3.0.tgz","_integrity":"sha512-/V5FuqTjSgZj7pTjdaxyvRVPS01V7cs8vy8RTxX5qHwlXNtn15RqzmhI2N3Sm6EY6g0lN3G/HgIo+kAQoWM2ag==","repository":{"url":"git+https://github.com/thiagoperes/ai-translate.git","type":"git","directory":"packages/ai-translate-provider-core"},"_npmVersion":"11.19.0","description":"Vendor-neutral translation and semantic-audit engine for ai-translate: prompting, batching, structured output, validation and repair over a pluggable model transport.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"zod":"4.4.3","@ai-translate/core":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/provider-core_0.3.0_1788612641128_0.8750920303134615","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@ai-translate/provider-core","version":"0.3.1","keywords":["i18n","l10n","internationalization","localization","translation","ai","llm","structured-output"],"author":{"name":"Thiago Peres"},"license":"MIT","_id":"@ai-translate/provider-core@0.3.1","maintainers":[{"name":"tperes","email":"hi@peres.pro"}],"homepage":"https://github.com/thiagoperes/ai-translate#packages","bugs":{"url":"https://github.com/thiagoperes/ai-translate/issues"},"dist":{"shasum":"f3bc22c19fda897faf27687f520dc6de92a342f5","tarball":"https://registry.npmjs.org/@ai-translate/provider-core/-/provider-core-0.3.1.tgz","fileCount":7,"integrity":"sha512-pBdzzY6ywNaHvuWzm2skdf1oUoKGjloPBrHvfTJKxe0Eqxw+fGNSb3hkGqPPcHMnxrMan+kUhI4mEcbvtx364w==","signatures":[{"sig":"MEYCIQDML/iygOyi89de3+r3BIp9AIjfR3sAQTBWPMyaPzfJ8AIhAM9TirwQcsvx+CCANQwyCH3mvCA2+hEnhYMVmNy93+sq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDtKz/mNWGcLgfox5H9+0ZGfSbcK7vG7mO+kwgqGCvWqQIgAVjOIvfPCZVQjKSjAEFGVs4b6SK8651Qu5JV39lLx3U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-translate%2fprovider-core@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":398120},"main":"./dist/index.mjs","type":"module","_from":"file:ai-translate-provider-core-0.3.1.tgz","types":"./dist/index.d.mts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"lint":"oxlint -c ../../.oxlintrc.json --type-aware --deny-warnings src test vitest.config.ts tsdown.config.ts","test":"vitest run --config vitest.config.ts","build":"tsdown","coverage":"vitest run --config vitest.config.ts --coverage","test:pack":"publint . && attw --pack . --profile esm-only","typecheck":"tsc -p tsconfig.json --noEmit","coverage:strict":"vitest run --config vitest.config.ts --coverage --coverage.include=src/index.ts --coverage.thresholds.lines=95 --coverage.thresholds.functions=95 --coverage.thresholds.branches=85 --coverage.thresholds.statements=95"},"_npmUser":{"name":"tperes","email":"hi@peres.pro"},"_resolved":"/tmp/72b94de85f1499160b1e2342fd2acdcd/ai-translate-provider-core-0.3.1.tgz","_integrity":"sha512-pBdzzY6ywNaHvuWzm2skdf1oUoKGjloPBrHvfTJKxe0Eqxw+fGNSb3hkGqPPcHMnxrMan+kUhI4mEcbvtx364w==","repository":{"url":"git+https://github.com/thiagoperes/ai-translate.git","type":"git","directory":"packages/ai-translate-provider-core"},"_npmVersion":"11.19.0","description":"Vendor-neutral translation and semantic-audit engine for ai-translate: prompting, batching, structured output, validation and repair over a pluggable model transport.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"zod":"4.6.5","@ai-translate/core":"0.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/provider-core_0.3.1_1789730611720_0.21243219019771575","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@ai-translate/provider-core","version":"0.3.2","keywords":["i18n","l10n","internationalization","localization","translation","ai","llm","structured-output"],"author":{"name":"Thiago Peres"},"license":"MIT","_id":"@ai-translate/provider-core@0.3.2","maintainers":[{"name":"tperes","email":"hi@peres.pro"}],"homepage":"https://github.com/thiagoperes/ai-translate#packages","bugs":{"url":"https://github.com/thiagoperes/ai-translate/issues"},"dist":{"shasum":"edb54204dcd9ad8d9e45b36b9efc5c6e8a25528e","tarball":"https://registry.npmjs.org/@ai-translate/provider-core/-/provider-core-0.3.2.tgz","fileCount":7,"integrity":"sha512-nCGkHsnpwJi/47oS5aTJdUaAWQgIlpPfu5amHm8bAPdkxZ2Dw4gT9YZDcr9xfYGc5M/2If6jNCQZt+ULf7Bo5Q==","signatures":[{"sig":"MEYCIQCGKeA2vPRz+E5gyQFEV3ndOy9AcSBAbJ9LNY1kjvXYwAIhAK2dJKJUuMu4N87wiNT8xLCzpzyI60WbcEMHODR1AQxK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC9e/n5Z4zFCw4r82hT3H2EgjfuCGmigEv4u4zqzAUxVwIhAPQMs63bNMNW5dP08PH6idBrFlCBFCwrFGroWunodZtC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-translate%2fprovider-core@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":398120},"main":"./dist/index.mjs","type":"module","_from":"file:ai-translate-provider-core-0.3.2.tgz","types":"./dist/index.d.mts","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"lint":"oxlint -c ../../.oxlintrc.json --type-aware --deny-warnings src test vitest.config.ts tsdown.config.ts","test":"vitest run --config vitest.config.ts","build":"tsdown","coverage":"vitest run --config vitest.config.ts --coverage","test:pack":"publint . && attw --pack . --profile esm-only","typecheck":"tsc -p tsconfig.json --noEmit","coverage:strict":"vitest run --config vitest.config.ts --coverage --coverage.include=src/index.ts --coverage.thresholds.lines=95 --coverage.thresholds.functions=95 --coverage.thresholds.branches=85 --coverage.thresholds.statements=95"},"_npmUser":{"name":"tperes","email":"hi@peres.pro"},"_resolved":"/tmp/c14b1e1eec30c87a77f3e45c845b000d/ai-translate-provider-core-0.3.2.tgz","_integrity":"sha512-nCGkHsnpwJi/47oS5aTJdUaAWQgIlpPfu5amHm8bAPdkxZ2Dw4gT9YZDcr9xfYGc5M/2If6jNCQZt+ULf7Bo5Q==","repository":{"url":"git+https://github.com/thiagoperes/ai-translate.git","type":"git","directory":"packages/ai-translate-provider-core"},"_npmVersion":"11.19.0","description":"Vendor-neutral translation and semantic-audit engine for ai-translate: prompting, batching, structured output, validation and repair over a pluggable model transport.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"zod":"4.6.5","@ai-translate/core":"0.3.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/provider-core_0.3.2_1789731064625_0.7370208447981026","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"_id":"@ai-translate/provider-core@0.3.3","bugs":{"url":"https://github.com/thiagoperes/ai-translate/issues"},"dist":{"shasum":"1456fe05a46a835c76c37616ed6ae831462dcbd8","tarball":"https://registry.npmjs.org/@ai-translate/provider-core/-/provider-core-0.3.3.tgz","fileCount":7,"integrity":"sha512-0CgONrBC1UtxUD43IiG1UlBOPgSbCvz5Ax47NPSlbNpYvcns/ucLqwK5I5qDb2WhCThQwV1dLGR2nyYhlgaRCw==","signatures":[{"sig":"MEQCIBzmz7e6RtChD7Gwp2oVR4cYGyZc8G36IPbEpgpQ2DOPAiBIZjVC5OcihUO3L9RoDw9lcz+meXK40fEwY60pWBezgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCYVn0qCLMtaRl/CBu5q4ZkFuYCi0K7joGYk1NwTCzmhwIgesIn3EyhoiRtB6CUA1/psRQxU/HTotrnCt+EdakoTes="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-translate%2fprovider-core@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":398996},"main":"./dist/index.mjs","name":"@ai-translate/provider-core","type":"module","_from":"file:ai-translate-provider-core-0.3.3.tgz","types":"./dist/index.d.mts","author":{"name":"Thiago Peres"},"engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"license":"MIT","scripts":{"lint":"oxlint -c ../../.oxlintrc.json --type-aware --deny-warnings src test vitest.config.ts tsdown.config.ts","test":"vitest run --config vitest.config.ts","build":"tsdown","coverage":"vitest run --config vitest.config.ts --coverage","test:pack":"publint . && attw --pack . --profile esm-only","typecheck":"tsc -p tsconfig.json --noEmit","coverage:strict":"vitest run --config vitest.config.ts --coverage --coverage.include=src/index.ts --coverage.thresholds.lines=95 --coverage.thresholds.functions=95 --coverage.thresholds.branches=85 --coverage.thresholds.statements=95"},"version":"0.3.3","_npmUser":{"name":"tperes","email":"hi@peres.pro"},"homepage":"https://github.com/thiagoperes/ai-translate#packages","keywords":["i18n","l10n","internationalization","localization","translation","ai","llm","structured-output"],"_resolved":"/tmp/6afc137870b078b30ff89b7ac341c137/ai-translate-provider-core-0.3.3.tgz","_integrity":"sha512-0CgONrBC1UtxUD43IiG1UlBOPgSbCvz5Ax47NPSlbNpYvcns/ucLqwK5I5qDb2WhCThQwV1dLGR2nyYhlgaRCw==","repository":{"url":"git+https://github.com/thiagoperes/ai-translate.git","type":"git","directory":"packages/ai-translate-provider-core"},"_npmVersion":"11.19.0","description":"Vendor-neutral translation and semantic-audit engine for ai-translate: prompting, batching, structured output, validation and repair over a pluggable model transport.","directories":{},"maintainers":[{"name":"tperes","email":"hi@peres.pro"}],"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"zod":"4.6.5","@ai-translate/core":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@ai-translate/message-formats":"0.3.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/provider-core_0.3.3_1789906695263_0.43010683925785975"}}},"time":{"created":"2026-08-19T22:14:30.123Z","modified":"2026-09-20T12:18:15.706Z","0.1.0":"2026-08-19T22:14:30.527Z","0.2.0":"2026-08-20T10:32:18.644Z","0.3.0":"2026-09-05T12:50:41.255Z","0.3.1":"2026-09-18T11:23:31.804Z","0.3.2":"2026-09-18T11:31:04.727Z","0.3.3":"2026-09-20T12:18:15.362Z"},"bugs":{"url":"https://github.com/thiagoperes/ai-translate/issues"},"author":{"name":"Thiago Peres"},"license":"MIT","homepage":"https://github.com/thiagoperes/ai-translate#packages","keywords":["i18n","l10n","internationalization","localization","translation","ai","llm","structured-output"],"repository":{"url":"git+https://github.com/thiagoperes/ai-translate.git","type":"git","directory":"packages/ai-translate-provider-core"},"description":"Vendor-neutral translation and semantic-audit engine for ai-translate: prompting, batching, structured output, validation and repair over a pluggable model transport.","maintainers":[{"name":"tperes","email":"hi@peres.pro"}],"readme":"# @ai-translate/provider-core\n\nThe vendor-neutral generation engine behind [ai-translate](https://github.com/thiagoperes/ai-translate)'s translation and semantic-audit providers.\n\nMost projects never import this package directly. Install [`@ai-translate/provider-openai`](../ai-translate-provider-openai) to talk to OpenAI, or [`@ai-translate/provider-ai-sdk`](../ai-translate-provider-ai-sdk) to talk to anything the AI SDK reaches. Both are thin transports over what lives here.\n\n## What it owns\n\nEverything that decides what a model is asked and how its reply is judged:\n\n- System prompt assembly, including project context, glossary, content roles, and self-check plans.\n- Batching by count and character budget, with splitting and salvage on failure.\n- Key aliasing, so a catalog key never leaks into the prompt as a translatable string.\n- A strict per-batch response schema: exact keys, protected slots, length caps, and digit-free prose.\n- Response decoding, deterministic re-validation, and the repair loop that retries a failed candidate rather than shipping it.\n- The output contract revision: a digest of every output-affecting decision, which is what makes an accepted translation stay accepted only while the contract that produced it holds.\n\nTransport, batching concurrency, and retry timing are deliberately excluded from that digest, so tuning throughput never invalidates a translation.\n\n## Adding a vendor\n\nImplement one interface:\n\n```ts\nimport type { StructuredCompletionTransport } from \"@ai-translate/provider-core\";\n\nconst transport: StructuredCompletionTransport = {\n  async complete(request) {\n    // request.messages, request.modelId, request.schema, request.schemaName,\n    // request.signal, and the optional maxCompletionTokens / temperature /\n    // reasoningEffort / promptCacheKey hints.\n    // Return the decoded object, or undefined when nothing parseable came back.\n  },\n  label: \"Acme\", // how the vendor should read in error messages\n};\n```\n\nThen wrap it:\n\n```ts\nimport {\n  createStructuredSemanticAuditProvider,\n  createStructuredTranslationProvider,\n} from \"@ai-translate/provider-core\";\n\nconst provider = createStructuredTranslationProvider({ model: \"acme-large\", transport });\nconst audit = createStructuredSemanticAuditProvider({ transport });\n```\n\nReturning `undefined` from `complete` is not a failure: the engine reads an absent payload as a retryable batch and repairs it, which is the right outcome for a model that produced nothing parseable. Throw only for genuine transport errors.\n","readmeFilename":"README.md"}