LLM Compatibility Layer

0 likes

nr_llm_compat / beta

Routes the LLM provider calls of third-party AI extensions through nr-llm at runtime, so its provider management, budgets and telemetry apply without modifying them.

This version supports TYPO3

13 LTS 14 LTS

Older versions also support TYPO3

13 LTS 14 LTS

Get started

Download 0.4.0

Details

Author
Netresearch DTT GmbH
Company
Netresearch DTT GmbH
Last update
08. Oct 2026
First upload
19. Aug 2026
Downloads
1,411
Category
Miscellaneous
Dependencies
  • PHP (>=8.2.0 <=8.99.99)
  • nr_llm (>=0.35.0 <=0.40.99)
  • TYPO3 (>=13.4.0 <=14.99.99)

Last upload comment

Changed:

• The approval card of create_news_draft is in the language of the backend user the agent run acts as (English or German), in the order what, where, new state, consequences, with editor words instead of field names, and with the folder UID and the table name only in a last "Technical details" line, as nr-llm does for its own tools (nr-llm ADR-213). The date line names the configured time zone (22.09.2026, 10:00 (Europe/Berlin)). Refusal lines and the tool result stay English. A news draft approval pending with the old lines is shown once more with the new ones when it is approved, and has to be approved again (#53, #54).
• The German description of the news editor action says „verborgen“ instead of „versteckt“ (#53).
• netresearch/nr-llm is accepted at ^0.35 || ^0.36 || ^0.37 || ^0.38 || ^0.39 || ^0.40 (ext_emconf.php: 0.35.0-0.40.99). On a 0.x version ^0.39 does not admit 0.40.0. nr-llm 0.40 changes no class or method this extension calls or implements; the floor stays at 0.35.

Security:

• composer.json accepts three enshrined/svg-sanitize advisories (GHSA-9rjx-3jch-6vjf, GHSA-m9xh-6747-9r6f, GHSA-v383-3rw5-q8rf) in config.policy.advisories.ignore-id. They are fixed only in 1.0.0, and typo3/cms-core 13.4 and 14.3 require ~0.22, so the fix belongs to TYPO3 core; the reason on each ignore says to remove it once core allows the fix.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases


Downloads by month

Installation

  1. Download ZIP file
  2. Log into your TYPO3 backend
  3. Go to Extension Manager module
  4. Press the upload button on the top bar
  5. Select the ZIP file and upload it. If you want to overwrite an existing extension installation, activate the checkbox.
  1. Go to your folder where the root composer.json file is located
  2. Type: composer require netresearch/nr-llm-compat to get the latest version that runs on your TYPO3 version.
  1. Download T3X file
  2. Log into your TYPO3 backend
  3. Go to Extension Manager module
  4. Press the upload button on the top bar
  5. Select the T3X file and upload it. If you want to overwrite an existing extension installation, activate the checkbox.

Other extensions by this user (20)


Version history

Filter for TYPO3 versions

0.4.0 beta Latest
October 08, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.99.99)
Changed:

• The approval card of create_news_draft is in the language of the backend user the agent run acts as (English or German), in the order what, where, new state, consequences, with editor words instead of field names, and with the folder UID and the table name only in a last "Technical details" line, as nr-llm does for its own tools (nr-llm ADR-213). The date line names the configured time zone (22.09.2026, 10:00 (Europe/Berlin)). Refusal lines and the tool result stay English. A news draft approval pending with the old lines is shown once more with the new ones when it is approved, and has to be approved again (#53, #54).
• The German description of the news editor action says „verborgen“ instead of „versteckt“ (#53).
• netresearch/nr-llm is accepted at ^0.35 || ^0.36 || ^0.37 || ^0.38 || ^0.39 || ^0.40 (ext_emconf.php: 0.35.0-0.40.99). On a 0.x version ^0.39 does not admit 0.40.0. nr-llm 0.40 changes no class or method this extension calls or implements; the floor stays at 0.35.

Security:

• composer.json accepts three enshrined/svg-sanitize advisories (GHSA-9rjx-3jch-6vjf, GHSA-m9xh-6747-9r6f, GHSA-v383-3rw5-q8rf) in config.policy.advisories.ignore-id. They are fixed only in 1.0.0, and typo3/cms-core 13.4 and 14.3 require ~0.22, so the fix belongs to TYPO3 core; the reason on each ignore says to remove it once core allows the fix.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.3.0 beta
October 08, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.99.99)
Added:

• create_news_draft takes an optional description argument (plain text, at most 320 characters) and stores it in the news record's description column, which EXT:news prints as <meta name="description"> and og:description. The approval card shows it as meta description, and the draft is deleted again when the DataHandler dropped it for a missing field grant, like the other exclude fields (#48).

Changed:

• The extension is called "LLM Compatibility Layer" in ext_emconf.php, in the title part of the composer.json description (which TER and TYPO3 v14 read) and in the README (#49).
• Release archives and the Composer dist archive no longer contain development, CI and agent files (.github/, Build/, Tests/, AGENTS.md, CLAUDE.md, editor and tool configuration) (#46).
• netresearch/nr-llm is accepted at ^0.35 || ^0.36 || ^0.37 || ^0.38 || ^0.39 (ext_emconf.php: 0.35.0-0.39.99). On a 0.x version ^0.38 does not admit 0.39.0, so this extension kept an installation from moving to nr-llm 0.39. The breaking changes of nr-llm 0.39 (structured completion results, the optional routing parameter on the configuration calls, decimal model prices, the removed LLM judge) touch no class or method this extension calls or implements; the floor stays at 0.35.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.2.3 beta
September 27, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.99.99)
Fixed:

• The alt-text bridge returns no alt text for an empty image (0 bytes) and makes no model call. It used to send the bare prefix data:image/jpeg;base64,, the provider refused it with "Invalid base64 image_url.", and the error failed the file operation that triggered the alt-text listener. An extension that created a file empty and wrote its bytes afterwards hit this on every image it stored.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.2.2 beta
September 27, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.99.99)
Changed:

• netresearch/nr-llm is accepted at ^0.35 || ^0.36 || ^0.37 || ^0.38 (ext_emconf.php: 0.35.0-0.38.99). On a 0.x version ^0.37 does not admit 0.38.0, so this extension kept an installation from moving to nr-llm 0.38. nr-llm 0.38 only adds an interface and changes nothing the news tool calls; the floor stays at 0.35.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.2.1 beta
September 24, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.99.99)
Changed:

• netresearch/nr-llm is accepted at ^0.35 || ^0.36 || ^0.37 (ext_emconf.php: 0.35.0-0.37.99). On a 0.x version ^0.36 does not admit 0.37.0, so this extension kept an installation from moving to nr-llm 0.37. nr-llm 0.37 changes nothing the news tool calls; the floor stays at 0.35.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.2.0 beta
September 23, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.99.99)
Added:

• Integration: georgringer/news (^12.0 || ^13.0 || ^14.0) — the first tool-provision integration (ADR-002). EXT:news makes no LLM calls; what it lacks is an nr-llm writer for its records, and nr-llm's position is that an extension brings its own writer or a bridge extension does so on its behalf. When enabled, the compiler pass registers create_news_draft under nr-llm's nr_llm.tool tag: one hidden news article per call in a storage folder, through the DataHandler as the acting backend user, live workspace and default language only, type fixed to article, the URL segment left to the DataHandler's slug generator, categories, media, tags and related records left to an editor. The date is required exactly when the installed EXT:news requires it (dateTimeNotRequired, read at call time); an ISO 8601 date-time or a UNIX timestamp is accepted and handed to the DataHandler as an integer timestamp, the one shape TYPO3 13.4 and 14.3 store unchanged. A read-back deletes the record again when the DataHandler dropped an exclude field the approver was shown — hidden is an exclude field with default 0 in the news TCA, so a missing field grant would otherwise publish the draft; only pid, type and the exclude fields are compared, a text by presence, because bodytext is stored through the RTE parser in a different byte form. A record the DataHandler inserted and then logged an error against (a processDatamap_afterDatabaseOperations hook runs after the insert) is deleted again before the refusal is reported, so a retry does not leave a duplicate. Disabled by default in nr-llm's Tools module like every writer; declares NON_IDEMPOTENT_WRITE, so the approval pause applies. The supported range brackets the TCA shape the tool writes against, diffed at 12.0.0, 12.3.2, 13.0.0, 13.0.2, 14.0.0, 14.0.3 and 14.1.1. The tool carries its own copy of the few private me

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.1.5 beta
September 17, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.99.99)
Changed:

• netresearch/nr-llm is accepted at ^0.34 || ^0.35. nr-llm 0.35.0 is released and on a 0.x ^0.34 does not admit it, so this extension pinned every installation it is part of to nr-llm 0.34 — the constraint is declared in composer.json and in ext_emconf.php, and both now carry the wider range. Source compatibility was measured rather than assumed: of nr-llm 0.35's three breaking changes, ToolResult::withWriteTarget() affects only extensions that register tools, ConversationService::startSession() is not called here, and the ModelResolution added to chatForConfiguration()/chatWithConfiguration() is nullable and last, so existing call sites are unchanged. The one consumer the 0.35 notes did break, netresearch/nr-repurpose, is fixed and released separately.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.1.4 beta
September 03, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.3.99)
Changed:

• Requires netresearch/nr-llm ^0.34. The floor rises because 0.34.0 is where the demo instance and every sibling extension are going, and staying on ^0.33 would keep an installation from taking both. 0.34.0's one breaking change is the backend module move (nr-llm ADR-183): the modules left Administration for a shared AI section and the container URL /module/nrllm is gone. Nothing here registers a module under that container or links to that URL, so nothing else changes.
• ext_emconf.php is raised with it, and its upper bound is now 0.34.99 rather than 0.99.99 — the two install paths had disagreed about everything above 0.34.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.1.3 beta
August 21, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.3.99)
Changed:

• Requires netresearch/nr-llm ^0.33. The floor rises because 0.33.0 removes a regression 0.32.0 introduced: vision() and embed() handed the provider registry the tx_nrllm_provider row's identifier where it is keyed by the adapter's own name, so a call that names no provider — which is what this extension makes — failed with "Provider … not found" on an installation that has a perfectly good default configuration. 0.32.0 did not fix the failure it was written for, it renamed it.
• ext_emconf.php declares the same dependency and is raised with it, so the two cannot disagree about which versions this extension accepts.

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.1.2 beta
August 21, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.3.99)
Changed:

• Requires netresearch/nr-llm ^0.32. The floor rises because 0.32.0 fixes two things this layer depends on: vision() and embed() now fall back to the default configuration when the caller pins no provider — without it a bridge that names no provider threw instead of using a perfectly good default — and the caller source survives every options rebuild, so the withCallerSource() annotation each bridge writes reaches nr-llm's per-extension usage and cost breakdown instead of being dropped on the way to the middleware
• composer.json declares the extension version again; extra.typo3/cms.version had been left at 0.1.0 through the 0.1.1 release

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.1.1 beta
August 20, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.3.99)
Changed:

• Requires netresearch/nr-llm ^0.31; the ext_emconf.php constraint said 0.29.0-0.99.99 while composer.json required ^0.30 — the two now say the same thing

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download
0.1.0 beta
August 19, 2026
TYPO3: 13 LTS 14 LTS (>=13.4.0 <=14.3.99)
Added:

• Caller-source attribution: every bridge annotates its nr-llm calls with withCallerSource(<extension key>, <operation>) (nr-llm ADR-177), so telemetry rows name the originating integration; requires netresearch/nr-llm ^0.30

• TYPO3 14.3 support: the extension constraint widens to ^13.4 || ^14.3 and the CI matrix runs both. The one TYPO3-13-only third-party package, passionweb/ai-seo-helper, is removed from the ^14.3 cells — its integration reports NOT INSTALLED there (exactly as on a real v14 site), its tests self-skip, and static analysis switches to a config that excludes its files

• Integration: eliashaeussler/typo3-solver (^3.3) — the solver's official provider setting is pointed at a bridge implementing its SolutionProvider; the extension's request shaping (max tokens, temperature, number of completions — one nr-llm completion per alternative, capped at 10) and its exception-code ignore list keep working, listModels() is honestly empty (model routing belongs to nr-llm). Unblocks #8: the package cannot join the main require-dev resolution (its openai-php/client ^0.18+ floor conflicts with ai-filemetadata's ^0.10 pin), so a dedicated environment under Tests/SolverEnvironment/ installs the unmodified package (path-repository copy of this extension) and runs the integration's own PHPStan/unit/functional suites — wired into CI via composer ci:test:repo

• Integration: in2code/texter (^3.0) — the first provider-configuration integration: no third-party internals are touched; the runtime configuration points texter's official llmRepositoryClass hook at a bridge implementing its RepositoryInterface, which the compiler pass registers as a public service. The configured prompt prefix (via the original extendPrompt()) and the per-page conversation history keep working; history entries are mapped onto nr-llm chat messages so foll

For details see https://github.com/netresearch/t3x-nr-llm-compat/releases
Download

Get started

Download 0.4.0

Details

Author
Netresearch DTT GmbH
Company
Netresearch DTT GmbH
Last update
08. Oct 2026
First upload
19. Aug 2026
Downloads
1,411
Category
Miscellaneous
Dependencies
  • PHP (>=8.2.0 <=8.99.99)
  • nr_llm (>=0.35.0 <=0.40.99)
  • TYPO3 (>=13.4.0 <=14.99.99)